SCW アイコン
ヒーロー背景(区切りなし)
ブログ

MISRA C 2012 vs MISRA C2 - Comment effectuer un changement

Secure Code Warrior
2021年8月17日 発行
最終更新日: 2026年3月8日

Chez Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs intégrés et aux responsables de la sécurité de créer des systèmes embarqués sécurisés, nous exploitons le monde de la sécurité des systèmes embarqués. Dans cet article, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour créer des systèmes embarqués sécurisés.

Lorsque vous écrivez du code en C, il est très facile d'implémenter des choses qui semblent correctes, mais qui sont fondamentalement mauvaises. Votre code peut très bien se compiler et même fonctionner correctement pendant un certain temps. Mais le même code peut se bloquer ou présenter un comportement indéfini si la taille de votre saisie et/ou votre mémoire augmentent. Par exemple, un numéro d'entrée particulier provoquant le débordement d'un entier, ou une séquence particulière de caractères provoquant le dépassement des limites d'un tableau.

C'est là que la norme de codage MISRA C peut vous aider. Les règles, directives et bonnes pratiques définies par la norme permettent aux développeurs d'écrire du code C sûr et fiable pour le développement embarqué.

MISRA C 2012, la dernière version de la norme, ajoute de nouvelles règles, améliore les règles existantes et corrige certaines divergences. Si vous utilisez toujours une ancienne version, c'est le moment idéal pour changer.

Qu'est-ce que la norme de codage MISRA C ?

La norme MISRA C inclut des directives de sécurité, de portabilité et de fiabilité du code pour le langage de programmation C. Le premier ensemble de directives a été publié en 1998, qui était spécifique au langage C.

Cependant, depuis lors, le consortium MISRA développe également des normes de codage pour le C++. Chaque document MISRA C contient un ensemble de règles, des exemples non conformes et des sections détaillées sur les informations générales qui ont contribué à l'élaboration de ces règles.

Le C et le C++ sont les langages les plus utilisés pour développer des logiciels embarqués. L'une des principales raisons est qu'ils sont rapides, n'ayant qu'un ou deux niveaux d'abstraction par rapport au langage machine. Mais cela signifie également que l'écriture de code sécurisé, en particulier en C, est difficile et sujette à des erreurs. Par exemple, dans la plupart des langages de haut niveau tels que Java et C#, vous n'avez pas à vous soucier de choses triviales comme le ramasse-miettes ou la saisie dynamique.

Cependant, en C, il n'existe pas de méthode prédéfinie pour collecter les déchets, c'est-à-dire que si vous allouez une partie de la mémoire à une structure de données, vous devez la libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le C, contrairement aux autres langages, ne libérera pas de mémoire pour vous, ce qui entraînera une fuite de mémoire.

MISRA C 2004 (C2) contre MISRA C 2012 (C3) — Qu'est-ce qui a changé ?

MISRA C : 2012, également connu sous le nom de C3, est sorti pour la première fois en avril 2013. S'appuyant sur les travaux de milliers de personnes et d'organisations, C3 ajoute de nouvelles règles, améliore l'explication et le contexte de certaines règles existantes et comble certaines lacunes.

C3 prend en charge la version C99 du langage, tout en conservant les règles de l'ancienne ISO C90. Le principal domaine d'intérêt de C3 était de réduire les coûts habituels liés à l'application des règles, tout en rendant l'utilisation du langage C plus sûre dans les systèmes critiques. Il est donc prudent de passer à la nouvelle norme, si ce n'est pas déjà fait.

Dans l'ensemble, voici une liste des changements les plus importants :

  • Corrigez les problèmes détectés dans la version 2004.
  • Augmenter de manière significative le nombre de règles déterminables. Une règle est décidable, si un outil d'analyse peut vous aider à déterminer la conformité à celui-ci.
  • Les règles sont classées comme « obligatoires », « consultatives » ou « obligatoires ». Les règles obligatoires ne doivent jamais être enfreintes, quelles que soient les circonstances. Les règles obligatoires et consultatives peuvent être violées dans des scénarios particuliers, à condition que la violation soit justifiée.
  • Ajout de conseils concernant la façon d'appliquer des règles au code généré automatiquement. C'est très important car les mêmes règles que le code écrit par l'homme ne s'appliquent pas toujours à celui généré par un outil.
  • Supprimez les règles trop générales qui interdisaient un comportement raisonnable des utilisateurs. Par exemple, auparavant, il était recommandé de ne pas utiliser de macros du tout, car elles peuvent entraîner diverses difficultés et créer de la confusion (impossible de déboguer les macros, les macros n'ont pas d'espaces de noms, etc.). Cela a empêché l'utilisation de macros, même dans les situations où elles pouvaient constituer une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux utilisateurs de les utiliser avec prudence, le cas échéant. Consultez l'extrait suivant, tiré d'un document MISRA C, qui recommande d'utiliser une macro plutôt qu'une fonction.

Les règles MISRA C en action

Assez de discussion, il est maintenant temps de vous familiariser avec certaines règles de la MISRA C, avec des exemples illustrant leur application.

Utiliser des types compatibles comme arguments de pointeur vers memcpy, memmove et memcmp

Les fonctions standard de la bibliothèque memcpy, memmove, et memcmp effectuer un déplacement octet par octet ou une comparaison du nombre d'octets spécifié. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de fonction doivent être des pointeurs vers le même type. Un appel de fonction avec des types de pointeurs incompatibles peut indiquer une erreur.

Considérez l'image suivante, tirée du document de conformité officiel de la MISRA. La règle est obligatoire, décidable, et s'applique à la fois au C90 et au C99.

MISRA Cルール21.15のスクリーンショット

La description de la règle est suivie d'un exemple.

非準拠のソリューションのスクリーンショット。

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), il s'agit d'une solution non conforme.

Les fonctions de gestion des chaînes qui ne prennent pas de longueur en entrée ne doivent pas entraîner d'accès sortant

Les fonctions de gestion des chaînes <string.h>qui ne prennent pas la longueur en entrée ne devraient pas entraîner d'accès sortant. Les fonctions pertinentes sont les suivantes : strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr et strtok. La règle est obligatoire, ce qui signifie qu'il ne pourra jamais être violé, quelles que soient les circonstances. Il s'applique à la fois au C90 et au C99 et est indécidable.

MISRA Cルール21.17のスクリーンショット。

L'exemple correspondant est le suivant :

文字列処理機能の正しい例のスクリーンショット

Comme vous pouvez le constater, strcpy dans la fonction f1, copiera au-delà de la longueur de la chaîne, qui ne peut contenir que 5 caractères. Nous avons également une utilisation conforme et sûre de strcpy, où la chaîne ne sera copiée que si le contenu de « str » convient.

Valider les données reçues de l'extérieur

Dir 4.14 recommande de vérifier la validité des données reçues de sources « externes ». L'entrée externe peut être :

  • Lisez à partir d'un fichier.
  • Lisez à partir d'une variable d'environnement.
  • Toute entrée utilisateur.
  • Tout ce qui est reçu via un canal de communication. Par exemple via une connexion TCP ou une API HTTP, etc.

Cette directive s'inscrit dans le requis catégorie, et s'applique à la fois au C90 et au C99. La raison en est qu'un programme n'a aucun contrôle sur les données reçues de sources externes, ce qui signifie que ces données peuvent être invalides ou malveillantes. Par exemple, un programme attend d'un utilisateur qu'il saisisse un nombre, mais que l'utilisateur saisisse une chaîne de caractères. Avant de traiter l'entrée, le programme doit vérifier qu'il s'agit bien d'un nombre.

外部からの数値の妥当性を確認すること。

Comment passer à MISRA C 2012

Le passage à MISRA C 2012 nécessitera une mise à jour de votre document de directives de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (qui est le choix recommandé), vous devrez peut-être vous procurer une version plus récente de l'outil. Voici trois outils qui vérifient la conformité à la norme MISRA C 2012 :

  1. Contrôle de la conformité est un outil open source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
  2. PC-Lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. En plus de vérifier la conformité à MISRA C, il peut également aider à identifier les bogues et vulnérabilités potentiels.
  3. Code Sonar est un autre outil qui vérifie la conformité à la fois à MISRA C et à C++.

Il existe également quelques compilateurs qui peuvent tester la conformité à la MISRA. En cas de détection d'une violation de règle, des avertissements ou des exceptions sont déclenchés en conséquence. Par ex. Logiciel Green Hills fournit des compilateurs compatibles avec toutes les normes MISRA, pour les architectures 32 bits et 64 bits.

Utiliser Secure Code Warrior pour améliorer les compétences des développeurs dans MISRA C

Le produit phare de Secure Code Warrior, la plateforme d'apprentissage, propose de nombreux défis, cours et évaluations interactifs qui peuvent aider à former les développeurs à écrire du code C/C++ sécurisé. Le contenu de la plateforme est spécifique au framework et très engageant. Nos défis de codage C/C++:Embed se sont inspirés de MISRA C, AUTOSAR C++ (MISRA C++) et IEC.

Les développeurs peuvent se lancer dans des parcours d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques au C/C++ et, surtout, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès pour identifier leurs faiblesses et même participer à des compétitions de codage amicales avec leurs pairs. En savoir plus sur comment nous aidons les industries de l'automobile et des transports grâce à nos solutions.

Vous voulez découvrir dans quelle mesure nos défis sont interactifs et intégrés ? Essayez quelques défis liés à C/C++:Embed sur la plateforme d'apprentissage dès aujourd'hui !

リソースを表示する
リソースを表示する

Dans cet article, nous comparerons la norme MISRA C 2012 avec la norme C2 et vous guiderons tout au long du processus de passage à la nouvelle norme. Nous expliquerons pourquoi la conformité de MISRA est nécessaire pour construire des systèmes embarqués sécurisés.

さらに詳しく知りたいですか?

Secure Code Warrior fait du codage sécurisé une expérience positive et engageante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son parcours d'apprentissage préféré, afin que les développeurs doués pour la sécurité deviennent les super-héros du quotidien de notre monde connecté.

もっと詳しく

Secure Code Warrior ソフトウェア開発ライフサイクル全体を通じてコードのセキュリティを確保し、サイバーセキュリティを最優先事項とする文化を構築するために、組織をSecure Code Warrior 。アプリケーションセキュリティ担当者、開発者、情報セキュリティ責任者、その他セキュリティに関わるあらゆる方々のために、当社は組織が非セキュアなコードに関連するリスクを軽減するお手伝いをいたします。

デモを予約する
共有する:
リンクトインのブランドソーシャルx ロゴ
作者
Secure Code Warrior
2021年8月17日発行

Secure Code Warrior fait du codage sécurisé une expérience positive et engageante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son parcours d'apprentissage préféré, afin que les développeurs doués pour la sécurité deviennent les super-héros du quotidien de notre monde connecté.

Cet article a été rédigé par l'équipe d'experts du secteur de Secure Code Warrior, qui s'est engagée à donner aux développeurs les connaissances et les compétences nécessaires pour créer des logiciels sécurisés dès le départ. S'appuyant sur une expertise approfondie en matière de pratiques de codage sécurisé, de tendances du secteur et de connaissances du monde réel.

共有する:
リンクトインのブランドソーシャルx ロゴ

Chez Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs intégrés et aux responsables de la sécurité de créer des systèmes embarqués sécurisés, nous exploitons le monde de la sécurité des systèmes embarqués. Dans cet article, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour créer des systèmes embarqués sécurisés.

Lorsque vous écrivez du code en C, il est très facile d'implémenter des choses qui semblent correctes, mais qui sont fondamentalement mauvaises. Votre code peut très bien se compiler et même fonctionner correctement pendant un certain temps. Mais le même code peut se bloquer ou présenter un comportement indéfini si la taille de votre saisie et/ou votre mémoire augmentent. Par exemple, un numéro d'entrée particulier provoquant le débordement d'un entier, ou une séquence particulière de caractères provoquant le dépassement des limites d'un tableau.

C'est là que la norme de codage MISRA C peut vous aider. Les règles, directives et bonnes pratiques définies par la norme permettent aux développeurs d'écrire du code C sûr et fiable pour le développement embarqué.

MISRA C 2012, la dernière version de la norme, ajoute de nouvelles règles, améliore les règles existantes et corrige certaines divergences. Si vous utilisez toujours une ancienne version, c'est le moment idéal pour changer.

Qu'est-ce que la norme de codage MISRA C ?

La norme MISRA C inclut des directives de sécurité, de portabilité et de fiabilité du code pour le langage de programmation C. Le premier ensemble de directives a été publié en 1998, qui était spécifique au langage C.

Cependant, depuis lors, le consortium MISRA développe également des normes de codage pour le C++. Chaque document MISRA C contient un ensemble de règles, des exemples non conformes et des sections détaillées sur les informations générales qui ont contribué à l'élaboration de ces règles.

Le C et le C++ sont les langages les plus utilisés pour développer des logiciels embarqués. L'une des principales raisons est qu'ils sont rapides, n'ayant qu'un ou deux niveaux d'abstraction par rapport au langage machine. Mais cela signifie également que l'écriture de code sécurisé, en particulier en C, est difficile et sujette à des erreurs. Par exemple, dans la plupart des langages de haut niveau tels que Java et C#, vous n'avez pas à vous soucier de choses triviales comme le ramasse-miettes ou la saisie dynamique.

Cependant, en C, il n'existe pas de méthode prédéfinie pour collecter les déchets, c'est-à-dire que si vous allouez une partie de la mémoire à une structure de données, vous devez la libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le C, contrairement aux autres langages, ne libérera pas de mémoire pour vous, ce qui entraînera une fuite de mémoire.

MISRA C 2004 (C2) contre MISRA C 2012 (C3) — Qu'est-ce qui a changé ?

MISRA C : 2012, également connu sous le nom de C3, est sorti pour la première fois en avril 2013. S'appuyant sur les travaux de milliers de personnes et d'organisations, C3 ajoute de nouvelles règles, améliore l'explication et le contexte de certaines règles existantes et comble certaines lacunes.

C3 prend en charge la version C99 du langage, tout en conservant les règles de l'ancienne ISO C90. Le principal domaine d'intérêt de C3 était de réduire les coûts habituels liés à l'application des règles, tout en rendant l'utilisation du langage C plus sûre dans les systèmes critiques. Il est donc prudent de passer à la nouvelle norme, si ce n'est pas déjà fait.

Dans l'ensemble, voici une liste des changements les plus importants :

  • Corrigez les problèmes détectés dans la version 2004.
  • Augmenter de manière significative le nombre de règles déterminables. Une règle est décidable, si un outil d'analyse peut vous aider à déterminer la conformité à celui-ci.
  • Les règles sont classées comme « obligatoires », « consultatives » ou « obligatoires ». Les règles obligatoires ne doivent jamais être enfreintes, quelles que soient les circonstances. Les règles obligatoires et consultatives peuvent être violées dans des scénarios particuliers, à condition que la violation soit justifiée.
  • Ajout de conseils concernant la façon d'appliquer des règles au code généré automatiquement. C'est très important car les mêmes règles que le code écrit par l'homme ne s'appliquent pas toujours à celui généré par un outil.
  • Supprimez les règles trop générales qui interdisaient un comportement raisonnable des utilisateurs. Par exemple, auparavant, il était recommandé de ne pas utiliser de macros du tout, car elles peuvent entraîner diverses difficultés et créer de la confusion (impossible de déboguer les macros, les macros n'ont pas d'espaces de noms, etc.). Cela a empêché l'utilisation de macros, même dans les situations où elles pouvaient constituer une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux utilisateurs de les utiliser avec prudence, le cas échéant. Consultez l'extrait suivant, tiré d'un document MISRA C, qui recommande d'utiliser une macro plutôt qu'une fonction.

Les règles MISRA C en action

Assez de discussion, il est maintenant temps de vous familiariser avec certaines règles de la MISRA C, avec des exemples illustrant leur application.

Utiliser des types compatibles comme arguments de pointeur vers memcpy, memmove et memcmp

Les fonctions standard de la bibliothèque memcpy, memmove, et memcmp effectuer un déplacement octet par octet ou une comparaison du nombre d'octets spécifié. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de fonction doivent être des pointeurs vers le même type. Un appel de fonction avec des types de pointeurs incompatibles peut indiquer une erreur.

Considérez l'image suivante, tirée du document de conformité officiel de la MISRA. La règle est obligatoire, décidable, et s'applique à la fois au C90 et au C99.

MISRA Cルール21.15のスクリーンショット

La description de la règle est suivie d'un exemple.

非準拠のソリューションのスクリーンショット。

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), il s'agit d'une solution non conforme.

Les fonctions de gestion des chaînes qui ne prennent pas de longueur en entrée ne doivent pas entraîner d'accès sortant

Les fonctions de gestion des chaînes <string.h>qui ne prennent pas la longueur en entrée ne devraient pas entraîner d'accès sortant. Les fonctions pertinentes sont les suivantes : strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr et strtok. La règle est obligatoire, ce qui signifie qu'il ne pourra jamais être violé, quelles que soient les circonstances. Il s'applique à la fois au C90 et au C99 et est indécidable.

MISRA Cルール21.17のスクリーンショット。

L'exemple correspondant est le suivant :

文字列処理機能の正しい例のスクリーンショット

Comme vous pouvez le constater, strcpy dans la fonction f1, copiera au-delà de la longueur de la chaîne, qui ne peut contenir que 5 caractères. Nous avons également une utilisation conforme et sûre de strcpy, où la chaîne ne sera copiée que si le contenu de « str » convient.

Valider les données reçues de l'extérieur

Dir 4.14 recommande de vérifier la validité des données reçues de sources « externes ». L'entrée externe peut être :

  • Lisez à partir d'un fichier.
  • Lisez à partir d'une variable d'environnement.
  • Toute entrée utilisateur.
  • Tout ce qui est reçu via un canal de communication. Par exemple via une connexion TCP ou une API HTTP, etc.

Cette directive s'inscrit dans le requis catégorie, et s'applique à la fois au C90 et au C99. La raison en est qu'un programme n'a aucun contrôle sur les données reçues de sources externes, ce qui signifie que ces données peuvent être invalides ou malveillantes. Par exemple, un programme attend d'un utilisateur qu'il saisisse un nombre, mais que l'utilisateur saisisse une chaîne de caractères. Avant de traiter l'entrée, le programme doit vérifier qu'il s'agit bien d'un nombre.

外部からの数値の妥当性を確認すること。

Comment passer à MISRA C 2012

Le passage à MISRA C 2012 nécessitera une mise à jour de votre document de directives de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (qui est le choix recommandé), vous devrez peut-être vous procurer une version plus récente de l'outil. Voici trois outils qui vérifient la conformité à la norme MISRA C 2012 :

  1. Contrôle de la conformité est un outil open source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
  2. PC-Lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. En plus de vérifier la conformité à MISRA C, il peut également aider à identifier les bogues et vulnérabilités potentiels.
  3. Code Sonar est un autre outil qui vérifie la conformité à la fois à MISRA C et à C++.

Il existe également quelques compilateurs qui peuvent tester la conformité à la MISRA. En cas de détection d'une violation de règle, des avertissements ou des exceptions sont déclenchés en conséquence. Par ex. Logiciel Green Hills fournit des compilateurs compatibles avec toutes les normes MISRA, pour les architectures 32 bits et 64 bits.

Utiliser Secure Code Warrior pour améliorer les compétences des développeurs dans MISRA C

Le produit phare de Secure Code Warrior, la plateforme d'apprentissage, propose de nombreux défis, cours et évaluations interactifs qui peuvent aider à former les développeurs à écrire du code C/C++ sécurisé. Le contenu de la plateforme est spécifique au framework et très engageant. Nos défis de codage C/C++:Embed se sont inspirés de MISRA C, AUTOSAR C++ (MISRA C++) et IEC.

Les développeurs peuvent se lancer dans des parcours d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques au C/C++ et, surtout, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès pour identifier leurs faiblesses et même participer à des compétitions de codage amicales avec leurs pairs. En savoir plus sur comment nous aidons les industries de l'automobile et des transports grâce à nos solutions.

Vous voulez découvrir dans quelle mesure nos défis sont interactifs et intégrés ? Essayez quelques défis liés à C/C++:Embed sur la plateforme d'apprentissage dès aujourd'hui !

リソースを表示する
リソースを表示する

以下のフォームに記入してレポートをダウンロードしてください

当社製品および/またはセキュアコーディング関連の情報をお送りするにあたり、ご承諾を頂戴できれば幸いです。お客様の個人情報は常に細心の注意をもって取り扱い、マーケティング目的で他社に販売することは一切ございません。

提出する
SCW成功アイコン
SCWエラーアイコン
フォームを送信するには、Analyticsクッキーを有効にしてください。完了後は再度無効化しても構いません。

Chez Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs intégrés et aux responsables de la sécurité de créer des systèmes embarqués sécurisés, nous exploitons le monde de la sécurité des systèmes embarqués. Dans cet article, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour créer des systèmes embarqués sécurisés.

Lorsque vous écrivez du code en C, il est très facile d'implémenter des choses qui semblent correctes, mais qui sont fondamentalement mauvaises. Votre code peut très bien se compiler et même fonctionner correctement pendant un certain temps. Mais le même code peut se bloquer ou présenter un comportement indéfini si la taille de votre saisie et/ou votre mémoire augmentent. Par exemple, un numéro d'entrée particulier provoquant le débordement d'un entier, ou une séquence particulière de caractères provoquant le dépassement des limites d'un tableau.

C'est là que la norme de codage MISRA C peut vous aider. Les règles, directives et bonnes pratiques définies par la norme permettent aux développeurs d'écrire du code C sûr et fiable pour le développement embarqué.

MISRA C 2012, la dernière version de la norme, ajoute de nouvelles règles, améliore les règles existantes et corrige certaines divergences. Si vous utilisez toujours une ancienne version, c'est le moment idéal pour changer.

Qu'est-ce que la norme de codage MISRA C ?

La norme MISRA C inclut des directives de sécurité, de portabilité et de fiabilité du code pour le langage de programmation C. Le premier ensemble de directives a été publié en 1998, qui était spécifique au langage C.

Cependant, depuis lors, le consortium MISRA développe également des normes de codage pour le C++. Chaque document MISRA C contient un ensemble de règles, des exemples non conformes et des sections détaillées sur les informations générales qui ont contribué à l'élaboration de ces règles.

Le C et le C++ sont les langages les plus utilisés pour développer des logiciels embarqués. L'une des principales raisons est qu'ils sont rapides, n'ayant qu'un ou deux niveaux d'abstraction par rapport au langage machine. Mais cela signifie également que l'écriture de code sécurisé, en particulier en C, est difficile et sujette à des erreurs. Par exemple, dans la plupart des langages de haut niveau tels que Java et C#, vous n'avez pas à vous soucier de choses triviales comme le ramasse-miettes ou la saisie dynamique.

Cependant, en C, il n'existe pas de méthode prédéfinie pour collecter les déchets, c'est-à-dire que si vous allouez une partie de la mémoire à une structure de données, vous devez la libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le C, contrairement aux autres langages, ne libérera pas de mémoire pour vous, ce qui entraînera une fuite de mémoire.

MISRA C 2004 (C2) contre MISRA C 2012 (C3) — Qu'est-ce qui a changé ?

MISRA C : 2012, également connu sous le nom de C3, est sorti pour la première fois en avril 2013. S'appuyant sur les travaux de milliers de personnes et d'organisations, C3 ajoute de nouvelles règles, améliore l'explication et le contexte de certaines règles existantes et comble certaines lacunes.

C3 prend en charge la version C99 du langage, tout en conservant les règles de l'ancienne ISO C90. Le principal domaine d'intérêt de C3 était de réduire les coûts habituels liés à l'application des règles, tout en rendant l'utilisation du langage C plus sûre dans les systèmes critiques. Il est donc prudent de passer à la nouvelle norme, si ce n'est pas déjà fait.

Dans l'ensemble, voici une liste des changements les plus importants :

  • Corrigez les problèmes détectés dans la version 2004.
  • Augmenter de manière significative le nombre de règles déterminables. Une règle est décidable, si un outil d'analyse peut vous aider à déterminer la conformité à celui-ci.
  • Les règles sont classées comme « obligatoires », « consultatives » ou « obligatoires ». Les règles obligatoires ne doivent jamais être enfreintes, quelles que soient les circonstances. Les règles obligatoires et consultatives peuvent être violées dans des scénarios particuliers, à condition que la violation soit justifiée.
  • Ajout de conseils concernant la façon d'appliquer des règles au code généré automatiquement. C'est très important car les mêmes règles que le code écrit par l'homme ne s'appliquent pas toujours à celui généré par un outil.
  • Supprimez les règles trop générales qui interdisaient un comportement raisonnable des utilisateurs. Par exemple, auparavant, il était recommandé de ne pas utiliser de macros du tout, car elles peuvent entraîner diverses difficultés et créer de la confusion (impossible de déboguer les macros, les macros n'ont pas d'espaces de noms, etc.). Cela a empêché l'utilisation de macros, même dans les situations où elles pouvaient constituer une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux utilisateurs de les utiliser avec prudence, le cas échéant. Consultez l'extrait suivant, tiré d'un document MISRA C, qui recommande d'utiliser une macro plutôt qu'une fonction.

Les règles MISRA C en action

Assez de discussion, il est maintenant temps de vous familiariser avec certaines règles de la MISRA C, avec des exemples illustrant leur application.

Utiliser des types compatibles comme arguments de pointeur vers memcpy, memmove et memcmp

Les fonctions standard de la bibliothèque memcpy, memmove, et memcmp effectuer un déplacement octet par octet ou une comparaison du nombre d'octets spécifié. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de fonction doivent être des pointeurs vers le même type. Un appel de fonction avec des types de pointeurs incompatibles peut indiquer une erreur.

Considérez l'image suivante, tirée du document de conformité officiel de la MISRA. La règle est obligatoire, décidable, et s'applique à la fois au C90 et au C99.

MISRA Cルール21.15のスクリーンショット

La description de la règle est suivie d'un exemple.

非準拠のソリューションのスクリーンショット。

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), il s'agit d'une solution non conforme.

Les fonctions de gestion des chaînes qui ne prennent pas de longueur en entrée ne doivent pas entraîner d'accès sortant

Les fonctions de gestion des chaînes <string.h>qui ne prennent pas la longueur en entrée ne devraient pas entraîner d'accès sortant. Les fonctions pertinentes sont les suivantes : strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr et strtok. La règle est obligatoire, ce qui signifie qu'il ne pourra jamais être violé, quelles que soient les circonstances. Il s'applique à la fois au C90 et au C99 et est indécidable.

MISRA Cルール21.17のスクリーンショット。

L'exemple correspondant est le suivant :

文字列処理機能の正しい例のスクリーンショット

Comme vous pouvez le constater, strcpy dans la fonction f1, copiera au-delà de la longueur de la chaîne, qui ne peut contenir que 5 caractères. Nous avons également une utilisation conforme et sûre de strcpy, où la chaîne ne sera copiée que si le contenu de « str » convient.

Valider les données reçues de l'extérieur

Dir 4.14 recommande de vérifier la validité des données reçues de sources « externes ». L'entrée externe peut être :

  • Lisez à partir d'un fichier.
  • Lisez à partir d'une variable d'environnement.
  • Toute entrée utilisateur.
  • Tout ce qui est reçu via un canal de communication. Par exemple via une connexion TCP ou une API HTTP, etc.

Cette directive s'inscrit dans le requis catégorie, et s'applique à la fois au C90 et au C99. La raison en est qu'un programme n'a aucun contrôle sur les données reçues de sources externes, ce qui signifie que ces données peuvent être invalides ou malveillantes. Par exemple, un programme attend d'un utilisateur qu'il saisisse un nombre, mais que l'utilisateur saisisse une chaîne de caractères. Avant de traiter l'entrée, le programme doit vérifier qu'il s'agit bien d'un nombre.

外部からの数値の妥当性を確認すること。

Comment passer à MISRA C 2012

Le passage à MISRA C 2012 nécessitera une mise à jour de votre document de directives de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (qui est le choix recommandé), vous devrez peut-être vous procurer une version plus récente de l'outil. Voici trois outils qui vérifient la conformité à la norme MISRA C 2012 :

  1. Contrôle de la conformité est un outil open source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
  2. PC-Lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. En plus de vérifier la conformité à MISRA C, il peut également aider à identifier les bogues et vulnérabilités potentiels.
  3. Code Sonar est un autre outil qui vérifie la conformité à la fois à MISRA C et à C++.

Il existe également quelques compilateurs qui peuvent tester la conformité à la MISRA. En cas de détection d'une violation de règle, des avertissements ou des exceptions sont déclenchés en conséquence. Par ex. Logiciel Green Hills fournit des compilateurs compatibles avec toutes les normes MISRA, pour les architectures 32 bits et 64 bits.

Utiliser Secure Code Warrior pour améliorer les compétences des développeurs dans MISRA C

Le produit phare de Secure Code Warrior, la plateforme d'apprentissage, propose de nombreux défis, cours et évaluations interactifs qui peuvent aider à former les développeurs à écrire du code C/C++ sécurisé. Le contenu de la plateforme est spécifique au framework et très engageant. Nos défis de codage C/C++:Embed se sont inspirés de MISRA C, AUTOSAR C++ (MISRA C++) et IEC.

Les développeurs peuvent se lancer dans des parcours d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques au C/C++ et, surtout, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès pour identifier leurs faiblesses et même participer à des compétitions de codage amicales avec leurs pairs. En savoir plus sur comment nous aidons les industries de l'automobile et des transports grâce à nos solutions.

Vous voulez découvrir dans quelle mesure nos défis sont interactifs et intégrés ? Essayez quelques défis liés à C/C++:Embed sur la plateforme d'apprentissage dès aujourd'hui !

ウェビナーを表示する
始めましょう
もっと詳しく

以下のリンクをクリックして、このリソースのPDFをダウンロードしてください。

Secure Code Warrior ソフトウェア開発ライフサイクル全体を通じてコードのセキュリティを確保し、サイバーセキュリティを最優先事項とする文化を構築するために、組織をSecure Code Warrior 。アプリケーションセキュリティ担当者、開発者、情報セキュリティ責任者、その他セキュリティに関わるあらゆる方々のために、当社は組織が非セキュアなコードに関連するリスクを軽減するお手伝いをいたします。

レポートを表示するデモを予約する
PDFをダウンロード
リソースを表示する
共有する:
リンクトインのブランドソーシャルx ロゴ
さらに詳しく知りたいですか?

共有する:
リンクトインのブランドソーシャルx ロゴ
作者
Secure Code Warrior
2021年8月17日発行

Secure Code Warrior fait du codage sécurisé une expérience positive et engageante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son parcours d'apprentissage préféré, afin que les développeurs doués pour la sécurité deviennent les super-héros du quotidien de notre monde connecté.

Cet article a été rédigé par l'équipe d'experts du secteur de Secure Code Warrior, qui s'est engagée à donner aux développeurs les connaissances et les compétences nécessaires pour créer des logiciels sécurisés dès le départ. S'appuyant sur une expertise approfondie en matière de pratiques de codage sécurisé, de tendances du secteur et de connaissances du monde réel.

共有する:
リンクトインのブランドソーシャルx ロゴ

Chez Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs intégrés et aux responsables de la sécurité de créer des systèmes embarqués sécurisés, nous exploitons le monde de la sécurité des systèmes embarqués. Dans cet article, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour créer des systèmes embarqués sécurisés.

Lorsque vous écrivez du code en C, il est très facile d'implémenter des choses qui semblent correctes, mais qui sont fondamentalement mauvaises. Votre code peut très bien se compiler et même fonctionner correctement pendant un certain temps. Mais le même code peut se bloquer ou présenter un comportement indéfini si la taille de votre saisie et/ou votre mémoire augmentent. Par exemple, un numéro d'entrée particulier provoquant le débordement d'un entier, ou une séquence particulière de caractères provoquant le dépassement des limites d'un tableau.

C'est là que la norme de codage MISRA C peut vous aider. Les règles, directives et bonnes pratiques définies par la norme permettent aux développeurs d'écrire du code C sûr et fiable pour le développement embarqué.

MISRA C 2012, la dernière version de la norme, ajoute de nouvelles règles, améliore les règles existantes et corrige certaines divergences. Si vous utilisez toujours une ancienne version, c'est le moment idéal pour changer.

Qu'est-ce que la norme de codage MISRA C ?

La norme MISRA C inclut des directives de sécurité, de portabilité et de fiabilité du code pour le langage de programmation C. Le premier ensemble de directives a été publié en 1998, qui était spécifique au langage C.

Cependant, depuis lors, le consortium MISRA développe également des normes de codage pour le C++. Chaque document MISRA C contient un ensemble de règles, des exemples non conformes et des sections détaillées sur les informations générales qui ont contribué à l'élaboration de ces règles.

Le C et le C++ sont les langages les plus utilisés pour développer des logiciels embarqués. L'une des principales raisons est qu'ils sont rapides, n'ayant qu'un ou deux niveaux d'abstraction par rapport au langage machine. Mais cela signifie également que l'écriture de code sécurisé, en particulier en C, est difficile et sujette à des erreurs. Par exemple, dans la plupart des langages de haut niveau tels que Java et C#, vous n'avez pas à vous soucier de choses triviales comme le ramasse-miettes ou la saisie dynamique.

Cependant, en C, il n'existe pas de méthode prédéfinie pour collecter les déchets, c'est-à-dire que si vous allouez une partie de la mémoire à une structure de données, vous devez la libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le C, contrairement aux autres langages, ne libérera pas de mémoire pour vous, ce qui entraînera une fuite de mémoire.

MISRA C 2004 (C2) contre MISRA C 2012 (C3) — Qu'est-ce qui a changé ?

MISRA C : 2012, également connu sous le nom de C3, est sorti pour la première fois en avril 2013. S'appuyant sur les travaux de milliers de personnes et d'organisations, C3 ajoute de nouvelles règles, améliore l'explication et le contexte de certaines règles existantes et comble certaines lacunes.

C3 prend en charge la version C99 du langage, tout en conservant les règles de l'ancienne ISO C90. Le principal domaine d'intérêt de C3 était de réduire les coûts habituels liés à l'application des règles, tout en rendant l'utilisation du langage C plus sûre dans les systèmes critiques. Il est donc prudent de passer à la nouvelle norme, si ce n'est pas déjà fait.

Dans l'ensemble, voici une liste des changements les plus importants :

  • Corrigez les problèmes détectés dans la version 2004.
  • Augmenter de manière significative le nombre de règles déterminables. Une règle est décidable, si un outil d'analyse peut vous aider à déterminer la conformité à celui-ci.
  • Les règles sont classées comme « obligatoires », « consultatives » ou « obligatoires ». Les règles obligatoires ne doivent jamais être enfreintes, quelles que soient les circonstances. Les règles obligatoires et consultatives peuvent être violées dans des scénarios particuliers, à condition que la violation soit justifiée.
  • Ajout de conseils concernant la façon d'appliquer des règles au code généré automatiquement. C'est très important car les mêmes règles que le code écrit par l'homme ne s'appliquent pas toujours à celui généré par un outil.
  • Supprimez les règles trop générales qui interdisaient un comportement raisonnable des utilisateurs. Par exemple, auparavant, il était recommandé de ne pas utiliser de macros du tout, car elles peuvent entraîner diverses difficultés et créer de la confusion (impossible de déboguer les macros, les macros n'ont pas d'espaces de noms, etc.). Cela a empêché l'utilisation de macros, même dans les situations où elles pouvaient constituer une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux utilisateurs de les utiliser avec prudence, le cas échéant. Consultez l'extrait suivant, tiré d'un document MISRA C, qui recommande d'utiliser une macro plutôt qu'une fonction.

Les règles MISRA C en action

Assez de discussion, il est maintenant temps de vous familiariser avec certaines règles de la MISRA C, avec des exemples illustrant leur application.

Utiliser des types compatibles comme arguments de pointeur vers memcpy, memmove et memcmp

Les fonctions standard de la bibliothèque memcpy, memmove, et memcmp effectuer un déplacement octet par octet ou une comparaison du nombre d'octets spécifié. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de fonction doivent être des pointeurs vers le même type. Un appel de fonction avec des types de pointeurs incompatibles peut indiquer une erreur.

Considérez l'image suivante, tirée du document de conformité officiel de la MISRA. La règle est obligatoire, décidable, et s'applique à la fois au C90 et au C99.

MISRA Cルール21.15のスクリーンショット

La description de la règle est suivie d'un exemple.

非準拠のソリューションのスクリーンショット。

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), il s'agit d'une solution non conforme.

Les fonctions de gestion des chaînes qui ne prennent pas de longueur en entrée ne doivent pas entraîner d'accès sortant

Les fonctions de gestion des chaînes <string.h>qui ne prennent pas la longueur en entrée ne devraient pas entraîner d'accès sortant. Les fonctions pertinentes sont les suivantes : strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr et strtok. La règle est obligatoire, ce qui signifie qu'il ne pourra jamais être violé, quelles que soient les circonstances. Il s'applique à la fois au C90 et au C99 et est indécidable.

MISRA Cルール21.17のスクリーンショット。

L'exemple correspondant est le suivant :

文字列処理機能の正しい例のスクリーンショット

Comme vous pouvez le constater, strcpy dans la fonction f1, copiera au-delà de la longueur de la chaîne, qui ne peut contenir que 5 caractères. Nous avons également une utilisation conforme et sûre de strcpy, où la chaîne ne sera copiée que si le contenu de « str » convient.

Valider les données reçues de l'extérieur

Dir 4.14 recommande de vérifier la validité des données reçues de sources « externes ». L'entrée externe peut être :

  • Lisez à partir d'un fichier.
  • Lisez à partir d'une variable d'environnement.
  • Toute entrée utilisateur.
  • Tout ce qui est reçu via un canal de communication. Par exemple via une connexion TCP ou une API HTTP, etc.

Cette directive s'inscrit dans le requis catégorie, et s'applique à la fois au C90 et au C99. La raison en est qu'un programme n'a aucun contrôle sur les données reçues de sources externes, ce qui signifie que ces données peuvent être invalides ou malveillantes. Par exemple, un programme attend d'un utilisateur qu'il saisisse un nombre, mais que l'utilisateur saisisse une chaîne de caractères. Avant de traiter l'entrée, le programme doit vérifier qu'il s'agit bien d'un nombre.

外部からの数値の妥当性を確認すること。

Comment passer à MISRA C 2012

Le passage à MISRA C 2012 nécessitera une mise à jour de votre document de directives de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (qui est le choix recommandé), vous devrez peut-être vous procurer une version plus récente de l'outil. Voici trois outils qui vérifient la conformité à la norme MISRA C 2012 :

  1. Contrôle de la conformité est un outil open source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
  2. PC-Lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. En plus de vérifier la conformité à MISRA C, il peut également aider à identifier les bogues et vulnérabilités potentiels.
  3. Code Sonar est un autre outil qui vérifie la conformité à la fois à MISRA C et à C++.

Il existe également quelques compilateurs qui peuvent tester la conformité à la MISRA. En cas de détection d'une violation de règle, des avertissements ou des exceptions sont déclenchés en conséquence. Par ex. Logiciel Green Hills fournit des compilateurs compatibles avec toutes les normes MISRA, pour les architectures 32 bits et 64 bits.

Utiliser Secure Code Warrior pour améliorer les compétences des développeurs dans MISRA C

Le produit phare de Secure Code Warrior, la plateforme d'apprentissage, propose de nombreux défis, cours et évaluations interactifs qui peuvent aider à former les développeurs à écrire du code C/C++ sécurisé. Le contenu de la plateforme est spécifique au framework et très engageant. Nos défis de codage C/C++:Embed se sont inspirés de MISRA C, AUTOSAR C++ (MISRA C++) et IEC.

Les développeurs peuvent se lancer dans des parcours d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques au C/C++ et, surtout, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès pour identifier leurs faiblesses et même participer à des compétitions de codage amicales avec leurs pairs. En savoir plus sur comment nous aidons les industries de l'automobile et des transports grâce à nos solutions.

Vous voulez découvrir dans quelle mesure nos défis sont interactifs et intégrés ? Essayez quelques défis liés à C/C++:Embed sur la plateforme d'apprentissage dès aujourd'hui !

目次

PDFをダウンロード
リソースを表示する
さらに詳しく知りたいですか?

Secure Code Warrior fait du codage sécurisé une expérience positive et engageante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son parcours d'apprentissage préféré, afin que les développeurs doués pour la sécurité deviennent les super-héros du quotidien de notre monde connecté.

もっと詳しく

Secure Code Warrior ソフトウェア開発ライフサイクル全体を通じてコードのセキュリティを確保し、サイバーセキュリティを最優先事項とする文化を構築するために、組織をSecure Code Warrior 。アプリケーションセキュリティ担当者、開発者、情報セキュリティ責任者、その他セキュリティに関わるあらゆる方々のために、当社は組織が非セキュアなコードに関連するリスクを軽減するお手伝いをいたします。

デモを予約するダウンロード
共有する:
リンクトインのブランドソーシャルx ロゴ
リソースセンター

はじめの一歩を踏み出すためのリソース

投稿はありません
リソースセンター

はじめの一歩を踏み出すためのリソース

投稿はありません