S2OPC : OPC UA libre et sécurisé

Les bénéfices du logiciel libre pour du logiciel sûr

S2OPC logo

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 logo

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.

OPC UA est recommandé par plusieurs consortia de par le monde

OPC UA est recommandé par plusieurs consortia de part le monde

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 ?

ANSSI logo

À 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 :

Rodin logo

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

gitlab

Coverity

Analise statique de code

coverity

Visual Studio CE

Développement pour Windows

visualstudio

Appveyor

CI pour Windows

appveyor

OSS Fuzz

Fuzzing

google

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