Webinaire en vedette : Dévoilement de Parasoft C/C++test CT pour l'excellence en matière de tests continus et de conformité | Voir le séminaire

Satisfaire aux exigences de sécurité de la norme CEI 62443 grâce à l'automatisation des tests

Portrait de Ricardo Camacho, directeur de la conformité de la sûreté et de la sécurité
2 janvier 2024
10 min lire

Examinez la norme CEI 62443 pour la mise en œuvre et la maintenance de systèmes d'automatisation et de contrôle industriels (IACS) sécurisés. Poursuivez votre lecture pour en savoir plus sur les pratiques clés et le rôle crucial que joue l'automatisation des tests logiciels.

Introduction à la CEI 62443

La norme CEI 62443 est une norme internationale qui définit les exigences et les processus de mise en œuvre et de maintien de systèmes sécurisés. l'automatisation industrielle et systèmes de contrôle (IACS). Ces normes définissent les meilleures pratiques en matière de sécurité et fournissent un moyen d'évaluer le niveau de sécurité.

La norme décrit un cycle de vie de développement sécurisé (SDL) qui couvre des aspects tels que le codage sécurisé, les tests, le déploiement, la maintenance et l'élimination. La clé est la définition d'une spécification des exigences de sécurité, qui identifie et hiérarchise les risques de sécurité ainsi que les stratégies d'atténuation à utiliser dans le produit ou l'application tout au long de son cycle de vie.

Un concept clé de la norme est l'utilisation de la modélisation des menaces pour identifier et analyser les menaces potentielles pesant sur un produit ou un système en fonction de son architecture, de ses composants, de ses interfaces, de ses flux de données et de ses fonctions. La modélisation des menaces permet d'évaluer l'impact et la probabilité de chaque menace et de les hiérarchiser en fonction de leur gravité. Il s’agit d’une activité continue puisque le paysage des menaces évolue au fil du temps, en particulier pour les produits IACS dont la durée de vie s’étend sur plusieurs décennies.

Tous les produits IACS ne nécessitent pas le même niveau de sécurité, qui définit la manière dont le système répond aux différentes classes d'attaques. Celles-ci vont de l'absence d'exigences et d'une utilisation abusive involontaire à des attaquants sophistiqués disposant de ressources illimitées. Les produits devraient être divisés en zones de sécurité si les niveaux de sécurité diffèrent entre les composants ou les sous-systèmes.

La CEI 62443 fournit également des conseils sur la manière de créer des dispositifs et des applications plus sécurisés, tels que l'utilisation de systèmes sécurisés dès la conception, la réduction de la surface d'attaque, la défense en profondeur, etc.

Pratiques clés de la CEI 62443

Voici une synthèse des pratiques clés identifiées par Série de normes ISA/IEC 62443.

Système de gestion de la cybersécurité

Un programme de sécurité robuste nécessite l'établissement et le maintien d'un programme de sécurité qui définit les rôles, les responsabilités, les politiques, les procédures et les ressources pour garantir la cybersécurité des produits et solutions IACS. Cette pratique englobe effectivement toutes les pratiques suivantes en tant que pratique clé globale.

Évaluations des risques de sécurité

L'évaluation des risques est un élément crucial du développement des systèmes SIGC, tant pour la sûreté que pour la sécurité. Il s’agit d’un processus continu qui implique :

  • Définir la portée et les limites du système considéré.
  • Identifier et analyser les menaces et les vulnérabilités.
  • Hiérarchiser les risques en fonction des conséquences potentielles.

Le risque est un facteur déterminant la probabilité qu'un événement se produise ainsi que les conséquences et l'impact de sa survenance. Les livrables de cette pratique comprennent :

  • Liste complète des actifs critiques
  • Identification des dépendances
  • Détermination des risques critiques pour le fonctionnement et la sécurité de ces procédés
  • Des réponses adaptées à ces risques

Spécification des exigences de sécurité

Pour intégrer la sécurité dès le départ, il est nécessaire de définir les exigences de sécurité pour l'ensemble du cycle de vie du produit, depuis la conception, le développement, le support, l'exploitation, la maintenance et l'élimination. Cela comprend également la définition des niveaux de sécurité qui précisent le degré de protection requis pour chaque fonction ou composant d'un produit.

Sécurisé par conception

Un produit sécurisé doit être conçu pour être sécurisé dès le départ. Cela signifie appliquer des principes de conception de sécurité, tels que la défense en profondeur, tout au long du cycle de vie du développement du produit afin de réduire la surface d'attaque et d'empêcher tout accès non autorisé ou toute modification du produit ou de l'application. Cela comprend également la réalisation d’examens, de tests et de validations des normes de codage sécurisé pour garantir que le code répond aux exigences de sécurité.

Implémentation sécurisée

La conception sécurisée implique la mise en œuvre de normes de codage sécurisées dans toutes les phases du cycle de vie du développement du produit afin de garantir que le code répond aux exigences de sécurité. Cela comprend également la réalisation de tests de vérification et de validation pour vérifier que le code fonctionne comme prévu dans divers scénarios et conditions.

Vérification de sécurité et tests de validation

La sécurité doit être testée. Il est crucial d’effectuer des tests formels ou informels pour vérifier que les exigences de sécurité sont respectées. Cela inclut également la conduite d'activités de gestion des défauts pour identifier, signaler, suivre, résoudre et prévenir les défauts d'un produit ou d'une solution IACS.

Gestion des problèmes liés à la sécurité

Les problèmes de sécurité sont inévitables. Une bonne gestion est essentielle pour tout incident lié à la cybersécurité survenant pendant ou après le cycle de vie d'un produit. Cela inclut également la conduite d'activités de gestion des correctifs pour appliquer des mises à jour ou des correctifs au produit selon les besoins. De plus, la gestion des activités de fin de vie des produits doit garantir que les produits sont mis hors service en toute sécurité lorsqu’ils ne sont plus nécessaires.

Gestion des mises à jour de sécurité

La sécurité d'un produit ou d'une application est toujours en évolution. La gestion des mises à jour ou des correctifs des produits déployés est requise. Bien que les mises à jour des produits SIGC soient traditionnellement rares, cela doit changer. Les produits modernes et sécurisés nécessitent une gestion des correctifs pour garantir une conformité continue. De plus, la chaîne d'approvisionnement logicielle doit être surveillée pour détecter de nouvelles vulnérabilités, de sorte que les dépendances utilisées par votre produit doivent également être mises à jour et corrigées, par exemple les vulnérabilités OpenSSL ou Log4J.

Les éléments dans lesquels l’automatisation des tests joue le rôle le plus important sont la mise en œuvre sécurisée et les pratiques de vérification et de validation de sécurité. Par conséquent, cet article se concentrera sur ces pratiques clés.

CEI 62443 Pratique 4 : Mise en œuvre sécurisée

Dans la norme, les sections 8.3.1 et 8.4.1 soulignent spécifiquement la nécessité d'une analyse statique du code, de révisions de code et de la mise en œuvre de normes de codage sécurisées. Un autre aspect critique des exigences est la traçabilité des exigences de sécurité jusqu'à la mise en œuvre et les tests.

Examens de la mise en œuvre de la sécurité

Section 8.3.1 décrit les exigences relatives aux examens de sécurité sur la mise en œuvre du produit. Ceux-ci mentionnent spécifiquement la nécessité de normes de codage, d’analyse statique du code et de traçabilité.

Section 8.3.1:

Un processus doit être utilisé pour garantir que des examens de mise en œuvre sont effectués pour identifier, caractériser et suivre jusqu'à la clôture les problèmes liés à la sécurité associés à la mise en œuvre de la conception sécurisée, y compris…

b) identification des normes de codage sécurisées (voir 8.4) qui n'ont pas été respectées (par exemple, utilisation de fonctions interdites ou non-application du principe du moindre privilège) ;

c) Analyse de code statique (SCA) pour le code source afin de déterminer les erreurs de codage de sécurité telles que les dépassements de tampon, le déréférencement de pointeur nul, etc. en utilisant la norme de codage sécurisé pour le langage de programmation pris en charge. La SCA doit être effectuée à l’aide d’un outil s’il en existe un pour la langue utilisée. De plus, une analyse statique du code doit être effectuée sur toutes les modifications du code source, y compris le nouveau code source.

d) examen de la mise en œuvre et de sa traçabilité par rapport aux capacités de sécurité définies pour prendre en charge la conception de la sécurité…

Section 8.4.1 les spécificités des normes de codage de sécurité et la recommandation d'automatisation via des outils d'analyse statique :

Section 8.4.1:

Les processus de mise en œuvre doivent intégrer des normes de codage de sécurité qui sont périodiquement examinées et mises à jour et comprennent au minimum :

a) éviter les constructions de mise en œuvre potentiellement exploitables – les modèles de conception de mise en œuvre connus pour présenter des faiblesses en matière de sécurité ;

b) éviter les fonctions interdites et les constructions de codage/modèles de conception – fonctions logicielles et modèles de conception qui ne devraient pas être utilisés car ils présentent des faiblesses de sécurité connues ;

c) utilisation et paramètres automatisés des outils (par exemple, pour les outils d'analyse statique) ;

d) pratiques de codage sécurisées ;

e) validation de toutes les entrées qui dépassent les limites de confiance.

f) gestion des erreurs.

Le rôle des outils d'analyse statique dans les examens de mise en œuvre de la sécurité

Analyse statique les outils sont excellents pour détecter les erreurs, les bogues, les vulnérabilités ou d’autres problèmes susceptibles d’affecter la sécurité ou la fonctionnalité du logiciel. L'analyse statique peut également être utilisée pour vérifier la conformité du système à certaines normes ou exigences de codage.

Plus précisément, les outils d'analyse statique sont particulièrement utiles pour aider les développeurs à se conformer à la norme CEI 62433 en identifiant les failles de sécurité ou les faiblesses potentielles du code avant que les attaquants ne les exploitent. De plus, les outils d'analyse statique contribuent à assurer la conformité aux normes ou réglementations pertinentes qui exigent des pratiques de codage sécurisées, y compris les normes de codage sécurisées.

Erreurs de codage, faiblesses logicielles et vulnérabilités

Voici quelques-unes des capacités et des avantages de l'utilisation d'outils d'analyse statique avancés tels que le test Parasoft C/C++ pour sécuriser le logiciel IACS.

  • Amélioration de la qualité du code. Les outils d'analyse statique améliorent la qualité globale du code en identifiant les meilleures pratiques de codage et en garantissant le respect des normes. Ces outils identifient les zones de code inefficaces, difficiles à maintenir ou sujettes aux erreurs, qui conduisent souvent à des faiblesses pouvant être exploitées si elles sont exposées à des attaquants.
  • Identification précoce des vulnérabilités. Des outils tels que Parasoft C/C++test identifient les failles de sécurité avant qu'elles ne se propagent dans le cycle de vie du développement logiciel. La fourniture d'informations détaillées et d'informations de trace d'exécution de code facilite le processus de correction des vulnérabilités.
  • Accélérez la conformité. Un outil d'analyse statique associé à de solides capacités d'analyse et de reporting réduit le fardeau de la conformité aux normes et réglementations de sécurité dans les secteurs réglementés. Les enregistrements de conformité aux normes de codage sécurisé et de suppression précoce des vulnérabilités fournissent la preuve de la diligence raisonnable. De plus, cela facilite le processus de satisfaction des auditeurs et des autorités de régulation, réduisant ainsi les risques juridiques et financiers.
  • Échelle facile. Les outils avancés d’analyse statique sont conçus pour être évolutifs et adaptables à divers projets logiciels et tailles d’entreprise. Ils fonctionnent également là où le développeur travaille dans son environnement de développement, s'intégrant de manière transparente dans les IDE et les processus pour les petites applications et les systèmes d'entreprise à grande échelle. Les outils d'analyse statique doivent également fonctionner avec différents langages de programmation pour être applicables dans toute une organisation.
  • Aucun cas de test ni exécution. Les outils d’analyse statique, de par leur nature même, fonctionnent sur le code source et binaire. L’exécution ou même un système complet n’est pas requis. Cela rend les outils particulièrement bien adaptés aux évaluations de sécurité à un stade précoce, accélérant l’identification et la résolution des vulnérabilités.

Normes de codage sécurisé

Les outils d'analyse statique, également appelés outils de tests de sécurité des applications statiques (SAST), utilisent les détails et la structure du code pour garantir le respect des normes et directives de codage sécurisé. Les vérificateurs intégrés sont conçus pour détecter le code qui n'est pas conforme aux normes bien connues telles que le CERT SEI Normes C et C++. Ces directives empêchent les programmeurs C et C++ d'utiliser des constructions de langage connues pour créer des faiblesses logicielles conduisant à des vulnérabilités. Ils inculquent également de bonnes pratiques de programmation qui empêchent ces faiblesses de s'infiltrer dans la base de code si des contrôles de conformité réguliers sont effectués.

La norme CEI 62443 est explicite sur l'utilisation des outils d'analyse statique et les normes de codage sécurisées. En tant que tel, il est impératif que ces outils fonctionnent avec des processus, des environnements de développement et de construction/test établis.

CEI 62443 Pratique 5 : Tests de vérification et de validation de sécurité

La norme est également assez explicite sur les types et la rigueur des tests requis pour vérifier et valider la sécurité. Le meilleur moyen pratique de mettre en œuvre ces exigences consiste à automatiser les tests logiciels.

Voici les sections pertinentes de la CEI-62443.

Section 9.2.1 : Tests des exigences de sécurité

Un processus doit être utilisé pour vérifier que les fonctions de sécurité du produit répondent aux exigences de sécurité et que le produit gère correctement les scénarios d'erreur et les entrées non valides. Les types de tests doivent inclure :

a) tests fonctionnels des exigences de sécurité ;

b) tests de performances et d'évolutivité ; et

c) conditions aux limites/bords, contraintes et tests d'entrée malformés ou inattendus non spécifiquement ciblés sur la sécurité.

Section 9.4.1 : Tests de vulnérabilité

Un processus doit être utilisé pour effectuer des tests axés sur l'identification et la caractérisation des vulnérabilités potentielles en matière de sécurité dans le produit. Les tests de vulnérabilités connues doivent être basés, au minimum, sur le contenu récent d'une source publique établie et reconnue par l'industrie pour les vulnérabilités connues. Les tests doivent inclure :

a) cas d'abus ou tests d'entrée mal formés ou inattendus axés sur la découverte de problèmes de sécurité. Cela doit inclure des tests de cas d'abus manuels ou automatisés et des types spécialisés de tests de cas d'abus sur toutes les interfaces et protocoles externes pour lesquels des outils existent.

...

d) des tests de gestion dynamique des ressources d'exécution qui détectent les défauts non visibles lors de l'analyse de code statique, y compris, mais sans s'y limiter, les conditions de déni de service dues à l'échec de la libération des descripteurs d'exécution, aux fuites de mémoire et aux accès effectués à la mémoire partagée sans authentification. Ces tests doivent être appliqués si de tels outils sont disponibles.

Le rôle des outils d'automatisation des tests logiciels dans la vérification et la validation de la sécurité

Pour respecter les délais des produits et atteindre un niveau de sécurité acceptable, il est nécessaire d'automatiser autant que possible le processus de test. Les outils modernes d'automatisation des tests logiciels accélèrent ces processus en supprimant autant que possible les aspects manuels, en tirant parti de l'IA et de l'apprentissage automatique lorsque cela est possible, ainsi que des rapports et des analyses pour aider à concentrer les tests là où ils sont le plus nécessaires. Ce qui suit répond aux exigences pour verification ET VALIDATION de la norme et comment l'automatisation des tests aide dans chaque cas.

Tests fonctionnels de sécurité

L’un des avantages des tests fonctionnels automatisés est la possibilité d’exécuter des tests à toute heure du jour ou de la nuit, sans qu’il soit nécessaire d’impliquer continuellement une personne. Les tests automatisés s'exécutent également plus rapidement que les tests manuels. Ils suivent exactement le plan de test, évitant ainsi les erreurs humaines potentielles telles que l'utilisation de données de test incorrectes ou l'omission de parties du test. Un avantage supplémentaire est que les tests automatisés donnent à l'équipe d'assurance qualité plus de temps pour se concentrer sur les cas extrêmes urgents et rédiger des scénarios de test pour les nouveaux modules et systèmes logiciels.

Les tests fonctionnels ne font également aucune hypothèse sur la structure du système. Il teste uniquement ce qui compose le système et ce qui le fait fonctionner. En termes de sécurité, les tests fonctionnels garantissent que les développeurs ont satisfait à toutes les exigences de sécurité du produit.

Tests de performances et d'évolutivité

Les tests de performances évaluent le comportement d'une application dans des conditions spécifiques et analysent les résultats afin que vous puissiez identifier et résoudre les goulots d'étranglement ou les blocages qui empêchent le bon fonctionnement. Ceci est important pour la sécurité puisque les attaques peuvent tenter de bloquer le bon fonctionnement, par exemple par des attaques par déni de service.

Grâce à une stratégie de tests de charge et de performances, vos applications peuvent être mieux préparées à faire face à une demande inattendue. Les outils de test de charge et de performances garantissent que votre système gère les pics soudains de trafic et offre une expérience utilisateur supérieure. Ces tests créent des charges extrêmes pour détecter tout défaut et garantir que votre application peut supporter la chaleur. L'automatisation des tests facilite et accélère l'exécution en parallèle d'une combinaison d'étapes de tests de performances.

Conditions de limite/bord, saisie mal formée ou cas d'abus

Les conditions de test aux limites ou aux limites sont celles qui vont bien au-delà des conditions d'entrée ou environnementales habituelles auxquelles un produit IACS s'attendrait. Cependant, ces cas de test restent dans les limites théoriques des entrées du système. En termes de saisie utilisateur, les cas extrêmes sont ceux où les entrées sont très longues ou peuvent contenir des caractères spéciaux. C’est ainsi que sont effectuées les injections SQL sur les sites web par exemple. En termes de systèmes IACS, cela peut également inclure des entrées de capteurs extrêmes, des entrées de réseau et d'interface, ainsi qu'un accès utilisateur/IHM.

Outils d'automatisation des tests logiciels comme Parasoft C / C ++test peut être configuré pour utiliser des cas de test limites et extrêmes, également appelés cas d'abus, et même générer automatiquement des cas de test basés sur la connaissance interne des unités logicielles, par exemple. Ces tests peuvent également être ajoutés à une suite de tests de régression qui peut s’exécuter automatiquement et régulièrement.

Test de sécurité dynamique des applications

Les tests de sécurité dynamiques des applications (DAST) sont une autre forme de tests de sécurité comme l'analyse statique (SAST), mais ils fonctionnent pendant qu'une application du système est en cours d'exécution. Ces outils détectent les vulnérabilités d'exécution lors de l'exécution du code. Ils ont un haut degré de précision puisque les vulnérabilités détectées sont réelles, mais ils ne peuvent détecter les vulnérabilités que dans le code exécuté et dans les conditions présentes lors des tests. La norme CEI 62443 indique clairement que tous les types de tests de sécurité des applications doivent être effectués.

Traçabilité

Les exigences de sécurité des systèmes SIGC doivent être vérifiées et validées. Cela nécessite qu'il y ait une traçabilité entre l'exigence, l'implémentation (généralement le code source) et les tests qui la valident. Il est probablement impossible de maintenir ces liens manuellement. L’automatisation joue donc un rôle clé pour maintenir une traçabilité précise et à jour. Les enregistrements et la documentation de conformité peuvent également être automatisés si nécessaire.

Automatiser la traçabilité bidirectionnelle

Les outils de gestion du cycle de vie des applications incluent des fonctionnalités de gestion des exigences qui sont matures et tendent à constituer la plaque tournante de la traçabilité, qui inclut les exigences de sécurité et la modélisation des menaces. Les solutions de tests logiciels intégrées, comme celles fournies par Parasoft, complètent la vérification et la validation des exigences de sécurité grâce à l'automatisation. Fournir traçabilité bidirectionnelle automatisée Le scénario de test exécutable inclut le résultat de réussite ou d'échec et remonte jusqu'au code source qui implémente l'exigence.

Parasoft fournit une traçabilité bidirectionnelle depuis les éléments de travail jusqu'aux cas de test et aux résultats des tests, tous deux affichant des rapports de traçabilité avec PAO Parasoft ainsi que le rapport des résultats au système de gestion des exigences.

Parasoft s'intègre aux systèmes de gestion des exigences et de planification Agile leaders du marché tels que Intland Codebeamer, Polarion de Siemens, Atlassian Jira, CollabNet VersionOne et TeamForge. Les solutions d'automatisation des tests de Parasoft, C/C++test, Jtest, dotTEST, SOAtest et Selenic, prennent en charge l'association de tests avec des éléments de travail définis dans ces systèmes, comme les exigences, les histoires, les défauts et les définitions de cas de test. DTP, le tableau de bord central de reporting et d'analyse de Parasoft, gère la traçabilité.

Résumé

La CEI 62443 établit des lignes directrices et des processus pour garantir la sécurité des produits IACS, couvrant des aspects tels que le codage sécurisé, les tests, le déploiement, la maintenance et l'élimination. Les pratiques clés de la CEI 62443 comprennent l'établissement d'un système de gestion de la cybersécurité, la réalisation d'évaluations des risques de sécurité, la spécification des exigences de sécurité, l'adoption d'une approche sécurisée dès la conception, la mise en œuvre de normes de codage sécurisées et la conduite de mesures de sécurité. verification ET VALIDATION test.

L'automatisation des tests logiciels joue un rôle crucial dans ces pratiques clés, en particulier dans la mise en œuvre sécurisée ainsi que dans la vérification et la validation de la sécurité. L'analyse statique du code est cruciale pour prendre en charge les révisions de code et la conformité aux normes de codage sécurisées. De plus, l’analyse statique détecte les erreurs de codage, les vulnérabilités et les faiblesses dès le début du cycle de vie du développement.

En termes de vérification de sécurité et de tests de validation, les outils d'automatisation des tests logiciels sont essentiels pour rendre les tests réalisables dans les délais nécessaires à la commercialisation de produits IACS sécurisés. Y compris l’accélération des processus de test, la garantie du respect des normes de sécurité et la fourniture de preuves de diligence raisonnable. La traçabilité automatisée lors de la vérification et de la validation des exigences de sécurité est essentielle pour garantir le respect des exigences de sécurité. L'automatisation maintient également à jour la documentation de validation des exigences, contribuant ainsi à accélérer la conformité des produits IACS.

Analyse de code statique pour le développement embarqué

Article connexe + ressources