S2OPC : OPC UA libre et sécurisé
Les bénéfices du logiciel libre pour du logiciel sûr
Suite au projet INGOPCS initié avec le support de l’ANSSI, Systerel a mis à profit son expérience dans le développement de systèmes critiques sûrs pour développer une pile OPC UA libre et sécurisée sous licence Apache 2.0 : Safe and Secure OPC (S2OPC).
Nous nous proposons dans cet article de rappeler ce qu’est OPC UA, de décrire le produit S2OPC, puis d’approfondir les bénéfices et les défis du logiciel libre pour un tel développement.
OPC UA¶
OPC UA est un standard international de communication définissant un protocole applicatif qui vise à traiter l’ensemble des communications d’un système industriel, depuis les senseurs et actionneurs jusqu’au cloud en passant par les automates, les SCADA/ICS et autres serveurs de l’usine.
Nous ne paraphraserons pas la page Wikipedia ou le site de la fondation OPC , mais deux aspects qui nous semblent primordiaux dans ce protocole sont :
- l’intéropérabilité
-
Le protocole est normalisé. Il est maintenu et développé par des groupes de travail sous l’égide de la fondation OPC, fondation qui accrédite des laboratoires réalisant des certifications de conformité à la norme
- la sécurité
-
Le protocole est conçu pour prendre en compte les contraintes de sécurité informatique. Le BSI, équivalent allemand de l’ANSSI a réalisé une analyse du protocole. Cette analyse confirme qu’OPC UA a été conçu en prenant en compte la sécurité et qu’il ne contient pas de faille de sécurité de conception.
S2OPC — Safe and Secure OPC¶
Pourquoi S2OPC ?¶
À la suite du projet de R&D INGOPCS, initié avec le support de l’ANSSI, Systerel a lancé le projet S2OPC dont les développements ont été réalisés par Systerel sur fonds propres.
Le constat de l’ANSSI était le suivant :
il y a un nombre croissant d’attaques sur des SCADA (voir par exemple StuxNet en 2010),
ces SCADA et ICS sont de plus en plus interconnectés voir même connectés à des réseaux externes tels qu’internet,
il n’existait pas ou peu de pile protocolaire sécurisée pour les SCADA sur le marché 1,
le besoin d’une pile OPC UA libre, sécurisée, moderne et développée en France ou en Europe devenait de plus en plus prégnant.
Objectifs du projet¶
Le projet a été lancé avec les quatre grands objectifs suivants :
- La certification avant tout
-
Une certification de sécurité ne peut pas s’improviser en fin de projet. Il faut que dès le début les choix de conception et d’organisation prennent en compte les contraintes de certification. Pour S2OPC trois types de certification sont envisagées :
la certification d’interopérabilité dans le cadre de la fondation OPC : le certificat devrait être obtenu en Q1 2020.
une ou plusieurs certification de sécurité délivrées par l’ANSSI : les travaux de certification ANSSI sont en cours.
une certification de sûreté au sens des normes EN-50128 ou similaires : S2OPC est déjà embarqué dans un équipement ferroviaire de niveau SSIL2.
- L’embarqué
-
Le besoin des industriels est clairement de pouvoir embarquer une pile sécurisée sur des petits équipements, peu gourmands en énergie.
S2OPC est de taille modeste (1MB ROM, 256KB RAM pour le serveur OPC UA et la fonctionnalité PubSub) et outre Linux et Windows, il a déjà été porté sous FreeRTOS, Zephyr, VxWorks,…
- Le passage à l’échelle
-
La pile est conçue pour pouvoir tourner sur des systèmes supervisant plusieurs usines et ils doivent être capables de traiter des centaines de milliers de variables et messages sans problèmes.
- Les performances
-
La performance est un souci permanent de l’équipe de conception et toutes les décisions prennent en compte ce facteur. S2OPC est toujours sorti en tête des tests de performance que l’on a réalisés.
Les performances temps réel ne sont pas en reste puisqu’on a pu réaliser des transmissions PubSub avec une périodicité de 100 µs entre deux cartes STM32 nucleo-144.
Certification¶
L’exigence de certification de sécurité porte deux contraintes sur le développement. La première est d’obtenir un très bon produit en regard des exigences de sécurité ou de sûreté de fonctionnement.
Et la deuxième, … la deuxième est d’être capable de fournir des preuves de la qualité du produit.
Les preuves attendues sont de différents registres. On pourra noter par exemple :
l’existence d’une organisation et d’un processus de développement (iso9001…),
l’existence de documentation (plans, spécification, conception, rapports de vérification…)
la mise en œuvre de banc de tests (unitaire, intégration, validation, fuzzing, penetration testing…)
la fourniture de traçabilité (qui, quand, quoi…),
…
Quoiqu’il en soit, ces contraintes doivent être prises en compte dès le début du projet : il est extrêmement difficile d’amener un produit existant à une certification.
Logiciel libre¶
Systerel est un utilisateur quotidien des logiciels libres, qu’il s’agisse de l’OS Linux utilisé pour une grande partie des postes de travail ou pour l’infrastructure du système d’information, des compilateurs GCC ou LLVM, des solutions de conteneurisation comme Docker ou de bien d’autres outils encore.
Outre S2OPC, nous contribuons en retour au monde du logiciel libre de différentes façons :
Nous sommes les développeurs principaux de la plateforme Rodin , un atelier de modélisation pour le langage B évènementiel.
Nous encourageons aussi nos ingénieurs à contribuer aux logiciels libres qu’ils utilisent que ce soit par des rapports de bugs, des patchs, de la documentation,…
Bénéfices du libre¶
À court terme¶
Merci à la communauté !
Grâce à elle nous avons pu mettre en place un certain nombre d’outils dans notre intégration continue afin d’assurer un bon niveau de qualité de notre code. Par exemple, le code est compilé avec GCC, Mingw, Visual Studio et LLVM.
Chacun de ces compilateurs signale des erreurs différentes et le fait de pouvoir en utiliser plusieurs permet d’en éliminer plus.
Par exemple, la cible test-check
définie dans le gitlab-ci.yaml
lance les
actions suivantes :
vérifier l’absence de fonctions et de include afin d’être conforme à un certain nombre de règles CERT,
lancer une compilation avec clang et des options de compilation choisies,
lancer une analyse statique avec clang tidy,
lancer une analyse statique avec clang analyzer,
vérifier que le code est bien formaté avec clang format,
vérifier que l’auteur est bien dans la liste des contributeurs,
vérifier que les fichiers affectés par les modifications contiennent bien la licence.
Mininet a été aussi utilisé pour monter un banc de test de performance, comme cela a été décrit dans un précédent article.
En sus des outils open source habituels, certains éditeurs proposent leurs services aux projets open source. C’est ainsi que nous utilisons Gitlab , Coverity, Appveyor, Visual Studio CE ou encore OSS Fuzz :
Gitlab gold |
Hébergement, CI, revue de code |
|
Coverity |
Analise statique de code |
|
Visual Studio CE |
Développement pour Windows |
|
Appveyor |
CI pour Windows |
|
OSS Fuzz |
Fuzzing |
Coverity est un analyseur statique performant. Voici par exemple le genre d’erreur qu’il remonte :
*** CID 350732: Resource leaks (RESOURCE_LEAK) /builds/systerel/S2OPC/csrc/services/b2c/address_space_bs.c: 419 in address_space_bs__read_AddressSpace_Value_value() 413 } 414 else 415 { 416 if (SOPC_LocalizedText_Id == value->BuiltInTypeId) 417 { 418 // Get preferred localized text(s) (single value, array or matrix) CID 350732: Resource leaks (RESOURCE_LEAK) Overwriting "value" in "value = util_variant__set_PreferredLocalizedText_from_LocalizedText_Variant(value, address_space_bs__p_locales)" leaks the storage that "value" points to. 419 value = 420 util_variant__set_PreferredLocalizedText_from_LocalizedText_Variant(value, address_space_bs__p_locales); 421 } 422 } 423 424 if (address_space_bs__index_range == NULL || address_space_bs__index_range->Length <= 0)
Bénéfices à long terme¶
Sur le long terme, le fait d’utiliser une licence libre permet d’augmenter la visibilité de S2OPC et son adoption dans la mesure ou un certain nombre de freins à l’utilisation sont levés :
pas de frais de licence,
pas de serveur de licence,
distribution simple (téléchargement sur gitlab)
Avoir plus de visibilité et d’utilisateurs est souhaitable pour les aspects économiques (vente de service, de certificats, de formation, de support,…) mais aussi pour la qualité du produit : plus d’utilisateurs signifie à long terme plus d’utilisation sur le terrain, plus de retour utilisateurs, plus de contributions (merge requests, rapports de bug, support financier,…).
Au final le pari sur le long terme est d’avoir plus d’opportunités commerciales.
Footnotes¶
- 1
-
La société Kaspersky a réalisé une analyse de sécurité d’une pile OCP-UA dans laquelle elle a trouvé 17 vulnérabilités zero-day : https://ics-cert.kaspersky.com/reports/2018/05/10/opc-ua-security-analysis/
Commentaires