
MISRA C 2012 gegen MISRA C2 - So wechseln Sie
Sur Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs de systèmes embarqués et aux responsables de la sécurité de construire des systèmes embarqués sûrs, nous nous intéressons au monde de la sécurité des systèmes embarqués. Dans ce billet, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour construire des systèmes embarqués sécurisés.
Lorsque vous écrivez du code en C, il est très facile de mettre en œuvre des choses qui semblent correctes, mais qui sont intrinsèquement erronées. Votre code peut se compiler parfaitement et même fonctionner correctement pendant un certain temps. Mais ce même code peut se bloquer ou présenter un comportement indéfini si la taille de vos données d'entrée et/ou la mémoire augmentent. Par exemple, un nombre particulier en entrée peut faire déborder un nombre entier, ou une séquence particulière de caractères peut faire sortir un tableau de ses limites.
C'est là que la norme de codage C MISRA peut vous aider. Les règles, les lignes directrices et les meilleures pratiques définies par la norme permettent aux développeurs d'écrire un 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 encore une version plus ancienne, c'est le moment idéal pour passer à une autre.
Qu'est-ce que la norme de codage MISRA C ?
La norme MISRA C comprend des lignes directrices en matière de sécurité du code, de portabilité et de fiabilité pour le langage de programmation C. La première série de lignes directrices a été publiée en 1998. La première série de lignes directrices, spécifique au langage C, a été publiée en 1998.
Toutefois, depuis lors, le consortium MISRA développe également des normes de codage pour C++. Chaque document MISRA C contient un ensemble de règles, des exemples de non-conformité et des sections détaillées sur les informations de base qui ont contribué à l'élaboration de ces règles.
C et 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 qu'il est difficile d'écrire un code sûr, en particulier en C, et qu'il est sujet à des erreurs. Par exemple, dans la plupart des langages de haut niveau comme Java et C#, vous n'avez pas à vous préoccuper de choses triviales comme le ramassage des ordures ou le typage 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 un morceau de mémoire à une structure de données, vous devez le libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le langage C, contrairement à d'autres langages, ne libérera pas la mémoire pour vous, ce qui entraînera une fuite de mémoire.
MISRA C 2004 (C2) vs. MISRA C 2012 (C3) - Qu'est-ce qui a changé ?
MISRA C : 2012, également connue sous le nom de C3, a été publiée 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 des règles pour l'ancienne version ISO C90. L'objectif principal 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 vous ne l'avez pas encore fait.
Dans l'ensemble, voici une liste des changements les plus significatifs :
- Corriger les problèmes rencontrés dans la version 2004.
- Augmenter de manière significative le nombre de règles décidables . Une règle est décidable si un outil d'analyse peut vous aider à déterminer la conformité à cette règle.
- Les règles sont classées en trois catégories : "requises", "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 enfreintes dans des scénarios particuliers, à condition que l'infraction soit justifiée.
- Ajout de conseils sur la manière d'appliquer les règles au code généré automatiquement. C'est très important car les mêmes lignes directrices que pour le code écrit par un humain ne s'appliquent pas toujours au code généré par un outil.
- Supprimer les règles trop générales qui interdisaient un comportement raisonnable de la part de l'utilisateur. Par exemple, il était auparavant recommandé de ne pas utiliser de macros, car elles peuvent entraîner diverses difficultés et confusions (les macros ne peuvent pas être déboguées, les macros n'ont pas d'espace de noms, etc.) ). Cela a empêché l'utilisation de macros, même dans des situations où elles pouvaient fournir une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux gens de les utiliser avec précaution, chaque fois que c'est possible. Voyez l'extrait suivant, tiré d'un document de la MISRA C, qui recommande l'utilisation d'une macro plutôt que d'une fonction.

Les règles de MISRA C en action
Assez parlé, il est maintenant temps de mettre en pratique certaines règles de MISRA C, avec des exemples d'application.
Utilisez des types compatibles comme arguments de pointeur pour memcpy, memmove et memcmp
Les fonctions de la bibliothèque standard memcpy, memmove et memcmp effectuent un déplacement ou une comparaison octet par octet du nombre spécifié d'octets. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de la fonction doivent être des pointeurs du 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 officiel de conformité MISRA. La règle est obligatoire, décidable et s'applique à la fois à C90 et à C99.

Un exemple suit la description de la règle.

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), cette solution n'est pas conforme.
Les fonctions de traitement des chaînes de caractères qui ne prennent pas la longueur en entrée ne doivent pas entraîner d'accès hors limites
String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

L'exemple correspondant est le suivant :

Comme vous pouvez le voir, 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" est suffisant.
Valider les données reçues de l'extérieur
La directive 4.14 recommande de vérifier la validité des données reçues de sources "externes". Les sources externes peuvent être
- Lecture d'un fichier.
- Lecture d'une variable d'environnement.
- Toute entrée de l'utilisateur.
- Tout ce qui est reçu sur un canal de communication. Par exemple, via une connexion TCP ou une API HTTP, etc.
Cette directive fait partie de la catégorie requise et s'applique à la fois à la norme C90 et à la norme C99. Elle se justifie par le fait 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 s'attend à ce que l'utilisateur entre un nombre, mais l'utilisateur entre 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 sur les règles de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (ce 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é à MISRA C 2012 :
- Cppcheck est un outil open-source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
- PC-lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. Outre la vérification de la conformité à la norme MISRA C, il permet également d'identifier les bogues et les vulnérabilités potentielles.
- CodeSonar est un autre outil qui vérifie la conformité aux normes MISRA C et C++.
Il existe également quelques compilateurs capables de tester la conformité à MISRA. Si une violation des règles est détectée, des avertissements ou des exceptions sont émis en conséquence. Green Hills Software , par exemple, propose des compilateurs qui prennent en charge 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 de MISRA C
Secure Code WarriorLe produit phare de la société - Plateforme D'apprentissage - comporte de nombreux défis interactifs, courses, et des évaluations qui peuvent aider à former les développeurs à l'écriture de code C/C++ sécurisé. Le contenu de la plateforme est spécifique au cadre et très engageant. Nos défis de codage C/C++:Embed se sont inspirés à la fois de MISRA C, d'AUTOSAR C++ (MISRA C++) et de la CEI.
Les développeurs peuvent s'embarquer dans des voyages d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques à C/C++ et, plus important encore, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès afin d'identifier leurs faiblesses, et même participer à des compétitions de codage amicales avec leurs pairs. Découvrez comment nous aidons les industries de l'automobile et du transport avec nos solutions.
Vous voulez découvrir à quel point nos défis sont interactifs et axés sur l'intégration ? Essayez quelques défis C/C++:Embed sur le site Plateforme D'apprentissage dès aujourd'hui !


In diesem Beitrag werden wir den MISRA C 2012-Standard mit C2 vergleichen und Sie durch den Umstieg auf den neuen Standard führen. Wir werden erklären, warum die Einhaltung von MISRA für den Aufbau sicherer eingebetteter Systeme erforderlich ist.
Secure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationSecure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.
Dieser Artikel wurde vom Branchenexpertenteam von Secure Code Warrior verfasst, das sich zum Ziel gesetzt hat, Entwicklern von Anfang an das Wissen und die Fähigkeiten zu vermitteln, um sichere Software zu entwickeln. Wir stützen uns auf fundiertes Fachwissen in Bezug auf sichere Codierungspraktiken, Branchentrends und Erkenntnisse aus der Praxis.


Sur Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs de systèmes embarqués et aux responsables de la sécurité de construire des systèmes embarqués sûrs, nous nous intéressons au monde de la sécurité des systèmes embarqués. Dans ce billet, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour construire des systèmes embarqués sécurisés.
Lorsque vous écrivez du code en C, il est très facile de mettre en œuvre des choses qui semblent correctes, mais qui sont intrinsèquement erronées. Votre code peut se compiler parfaitement et même fonctionner correctement pendant un certain temps. Mais ce même code peut se bloquer ou présenter un comportement indéfini si la taille de vos données d'entrée et/ou la mémoire augmentent. Par exemple, un nombre particulier en entrée peut faire déborder un nombre entier, ou une séquence particulière de caractères peut faire sortir un tableau de ses limites.
C'est là que la norme de codage C MISRA peut vous aider. Les règles, les lignes directrices et les meilleures pratiques définies par la norme permettent aux développeurs d'écrire un 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 encore une version plus ancienne, c'est le moment idéal pour passer à une autre.
Qu'est-ce que la norme de codage MISRA C ?
La norme MISRA C comprend des lignes directrices en matière de sécurité du code, de portabilité et de fiabilité pour le langage de programmation C. La première série de lignes directrices a été publiée en 1998. La première série de lignes directrices, spécifique au langage C, a été publiée en 1998.
Toutefois, depuis lors, le consortium MISRA développe également des normes de codage pour C++. Chaque document MISRA C contient un ensemble de règles, des exemples de non-conformité et des sections détaillées sur les informations de base qui ont contribué à l'élaboration de ces règles.
C et 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 qu'il est difficile d'écrire un code sûr, en particulier en C, et qu'il est sujet à des erreurs. Par exemple, dans la plupart des langages de haut niveau comme Java et C#, vous n'avez pas à vous préoccuper de choses triviales comme le ramassage des ordures ou le typage 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 un morceau de mémoire à une structure de données, vous devez le libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le langage C, contrairement à d'autres langages, ne libérera pas la mémoire pour vous, ce qui entraînera une fuite de mémoire.
MISRA C 2004 (C2) vs. MISRA C 2012 (C3) - Qu'est-ce qui a changé ?
MISRA C : 2012, également connue sous le nom de C3, a été publiée 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 des règles pour l'ancienne version ISO C90. L'objectif principal 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 vous ne l'avez pas encore fait.
Dans l'ensemble, voici une liste des changements les plus significatifs :
- Corriger les problèmes rencontrés dans la version 2004.
- Augmenter de manière significative le nombre de règles décidables . Une règle est décidable si un outil d'analyse peut vous aider à déterminer la conformité à cette règle.
- Les règles sont classées en trois catégories : "requises", "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 enfreintes dans des scénarios particuliers, à condition que l'infraction soit justifiée.
- Ajout de conseils sur la manière d'appliquer les règles au code généré automatiquement. C'est très important car les mêmes lignes directrices que pour le code écrit par un humain ne s'appliquent pas toujours au code généré par un outil.
- Supprimer les règles trop générales qui interdisaient un comportement raisonnable de la part de l'utilisateur. Par exemple, il était auparavant recommandé de ne pas utiliser de macros, car elles peuvent entraîner diverses difficultés et confusions (les macros ne peuvent pas être déboguées, les macros n'ont pas d'espace de noms, etc.) ). Cela a empêché l'utilisation de macros, même dans des situations où elles pouvaient fournir une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux gens de les utiliser avec précaution, chaque fois que c'est possible. Voyez l'extrait suivant, tiré d'un document de la MISRA C, qui recommande l'utilisation d'une macro plutôt que d'une fonction.

Les règles de MISRA C en action
Assez parlé, il est maintenant temps de mettre en pratique certaines règles de MISRA C, avec des exemples d'application.
Utilisez des types compatibles comme arguments de pointeur pour memcpy, memmove et memcmp
Les fonctions de la bibliothèque standard memcpy, memmove et memcmp effectuent un déplacement ou une comparaison octet par octet du nombre spécifié d'octets. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de la fonction doivent être des pointeurs du 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 officiel de conformité MISRA. La règle est obligatoire, décidable et s'applique à la fois à C90 et à C99.

Un exemple suit la description de la règle.

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), cette solution n'est pas conforme.
Les fonctions de traitement des chaînes de caractères qui ne prennent pas la longueur en entrée ne doivent pas entraîner d'accès hors limites
String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

L'exemple correspondant est le suivant :

Comme vous pouvez le voir, 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" est suffisant.
Valider les données reçues de l'extérieur
La directive 4.14 recommande de vérifier la validité des données reçues de sources "externes". Les sources externes peuvent être
- Lecture d'un fichier.
- Lecture d'une variable d'environnement.
- Toute entrée de l'utilisateur.
- Tout ce qui est reçu sur un canal de communication. Par exemple, via une connexion TCP ou une API HTTP, etc.
Cette directive fait partie de la catégorie requise et s'applique à la fois à la norme C90 et à la norme C99. Elle se justifie par le fait 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 s'attend à ce que l'utilisateur entre un nombre, mais l'utilisateur entre 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 sur les règles de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (ce 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é à MISRA C 2012 :
- Cppcheck est un outil open-source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
- PC-lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. Outre la vérification de la conformité à la norme MISRA C, il permet également d'identifier les bogues et les vulnérabilités potentielles.
- CodeSonar est un autre outil qui vérifie la conformité aux normes MISRA C et C++.
Il existe également quelques compilateurs capables de tester la conformité à MISRA. Si une violation des règles est détectée, des avertissements ou des exceptions sont émis en conséquence. Green Hills Software , par exemple, propose des compilateurs qui prennent en charge 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 de MISRA C
Secure Code WarriorLe produit phare de la société - Plateforme D'apprentissage - comporte de nombreux défis interactifs, courses, et des évaluations qui peuvent aider à former les développeurs à l'écriture de code C/C++ sécurisé. Le contenu de la plateforme est spécifique au cadre et très engageant. Nos défis de codage C/C++:Embed se sont inspirés à la fois de MISRA C, d'AUTOSAR C++ (MISRA C++) et de la CEI.
Les développeurs peuvent s'embarquer dans des voyages d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques à C/C++ et, plus important encore, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès afin d'identifier leurs faiblesses, et même participer à des compétitions de codage amicales avec leurs pairs. Découvrez comment nous aidons les industries de l'automobile et du transport avec nos solutions.
Vous voulez découvrir à quel point nos défis sont interactifs et axés sur l'intégration ? Essayez quelques défis C/C++:Embed sur le site Plateforme D'apprentissage dès aujourd'hui !

Sur Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs de systèmes embarqués et aux responsables de la sécurité de construire des systèmes embarqués sûrs, nous nous intéressons au monde de la sécurité des systèmes embarqués. Dans ce billet, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour construire des systèmes embarqués sécurisés.
Lorsque vous écrivez du code en C, il est très facile de mettre en œuvre des choses qui semblent correctes, mais qui sont intrinsèquement erronées. Votre code peut se compiler parfaitement et même fonctionner correctement pendant un certain temps. Mais ce même code peut se bloquer ou présenter un comportement indéfini si la taille de vos données d'entrée et/ou la mémoire augmentent. Par exemple, un nombre particulier en entrée peut faire déborder un nombre entier, ou une séquence particulière de caractères peut faire sortir un tableau de ses limites.
C'est là que la norme de codage C MISRA peut vous aider. Les règles, les lignes directrices et les meilleures pratiques définies par la norme permettent aux développeurs d'écrire un 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 encore une version plus ancienne, c'est le moment idéal pour passer à une autre.
Qu'est-ce que la norme de codage MISRA C ?
La norme MISRA C comprend des lignes directrices en matière de sécurité du code, de portabilité et de fiabilité pour le langage de programmation C. La première série de lignes directrices a été publiée en 1998. La première série de lignes directrices, spécifique au langage C, a été publiée en 1998.
Toutefois, depuis lors, le consortium MISRA développe également des normes de codage pour C++. Chaque document MISRA C contient un ensemble de règles, des exemples de non-conformité et des sections détaillées sur les informations de base qui ont contribué à l'élaboration de ces règles.
C et 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 qu'il est difficile d'écrire un code sûr, en particulier en C, et qu'il est sujet à des erreurs. Par exemple, dans la plupart des langages de haut niveau comme Java et C#, vous n'avez pas à vous préoccuper de choses triviales comme le ramassage des ordures ou le typage 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 un morceau de mémoire à une structure de données, vous devez le libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le langage C, contrairement à d'autres langages, ne libérera pas la mémoire pour vous, ce qui entraînera une fuite de mémoire.
MISRA C 2004 (C2) vs. MISRA C 2012 (C3) - Qu'est-ce qui a changé ?
MISRA C : 2012, également connue sous le nom de C3, a été publiée 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 des règles pour l'ancienne version ISO C90. L'objectif principal 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 vous ne l'avez pas encore fait.
Dans l'ensemble, voici une liste des changements les plus significatifs :
- Corriger les problèmes rencontrés dans la version 2004.
- Augmenter de manière significative le nombre de règles décidables . Une règle est décidable si un outil d'analyse peut vous aider à déterminer la conformité à cette règle.
- Les règles sont classées en trois catégories : "requises", "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 enfreintes dans des scénarios particuliers, à condition que l'infraction soit justifiée.
- Ajout de conseils sur la manière d'appliquer les règles au code généré automatiquement. C'est très important car les mêmes lignes directrices que pour le code écrit par un humain ne s'appliquent pas toujours au code généré par un outil.
- Supprimer les règles trop générales qui interdisaient un comportement raisonnable de la part de l'utilisateur. Par exemple, il était auparavant recommandé de ne pas utiliser de macros, car elles peuvent entraîner diverses difficultés et confusions (les macros ne peuvent pas être déboguées, les macros n'ont pas d'espace de noms, etc.) ). Cela a empêché l'utilisation de macros, même dans des situations où elles pouvaient fournir une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux gens de les utiliser avec précaution, chaque fois que c'est possible. Voyez l'extrait suivant, tiré d'un document de la MISRA C, qui recommande l'utilisation d'une macro plutôt que d'une fonction.

Les règles de MISRA C en action
Assez parlé, il est maintenant temps de mettre en pratique certaines règles de MISRA C, avec des exemples d'application.
Utilisez des types compatibles comme arguments de pointeur pour memcpy, memmove et memcmp
Les fonctions de la bibliothèque standard memcpy, memmove et memcmp effectuent un déplacement ou une comparaison octet par octet du nombre spécifié d'octets. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de la fonction doivent être des pointeurs du 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 officiel de conformité MISRA. La règle est obligatoire, décidable et s'applique à la fois à C90 et à C99.

Un exemple suit la description de la règle.

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), cette solution n'est pas conforme.
Les fonctions de traitement des chaînes de caractères qui ne prennent pas la longueur en entrée ne doivent pas entraîner d'accès hors limites
String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

L'exemple correspondant est le suivant :

Comme vous pouvez le voir, 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" est suffisant.
Valider les données reçues de l'extérieur
La directive 4.14 recommande de vérifier la validité des données reçues de sources "externes". Les sources externes peuvent être
- Lecture d'un fichier.
- Lecture d'une variable d'environnement.
- Toute entrée de l'utilisateur.
- Tout ce qui est reçu sur un canal de communication. Par exemple, via une connexion TCP ou une API HTTP, etc.
Cette directive fait partie de la catégorie requise et s'applique à la fois à la norme C90 et à la norme C99. Elle se justifie par le fait 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 s'attend à ce que l'utilisateur entre un nombre, mais l'utilisateur entre 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 sur les règles de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (ce 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é à MISRA C 2012 :
- Cppcheck est un outil open-source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
- PC-lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. Outre la vérification de la conformité à la norme MISRA C, il permet également d'identifier les bogues et les vulnérabilités potentielles.
- CodeSonar est un autre outil qui vérifie la conformité aux normes MISRA C et C++.
Il existe également quelques compilateurs capables de tester la conformité à MISRA. Si une violation des règles est détectée, des avertissements ou des exceptions sont émis en conséquence. Green Hills Software , par exemple, propose des compilateurs qui prennent en charge 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 de MISRA C
Secure Code WarriorLe produit phare de la société - Plateforme D'apprentissage - comporte de nombreux défis interactifs, courses, et des évaluations qui peuvent aider à former les développeurs à l'écriture de code C/C++ sécurisé. Le contenu de la plateforme est spécifique au cadre et très engageant. Nos défis de codage C/C++:Embed se sont inspirés à la fois de MISRA C, d'AUTOSAR C++ (MISRA C++) et de la CEI.
Les développeurs peuvent s'embarquer dans des voyages d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques à C/C++ et, plus important encore, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès afin d'identifier leurs faiblesses, et même participer à des compétitions de codage amicales avec leurs pairs. Découvrez comment nous aidons les industries de l'automobile et du transport avec nos solutions.
Vous voulez découvrir à quel point nos défis sont interactifs et axés sur l'intégration ? Essayez quelques défis C/C++:Embed sur le site Plateforme D'apprentissage dès aujourd'hui !

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.
Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Consulter le rapportRéserver une démonstrationSecure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.
Dieser Artikel wurde vom Branchenexpertenteam von Secure Code Warrior verfasst, das sich zum Ziel gesetzt hat, Entwicklern von Anfang an das Wissen und die Fähigkeiten zu vermitteln, um sichere Software zu entwickeln. Wir stützen uns auf fundiertes Fachwissen in Bezug auf sichere Codierungspraktiken, Branchentrends und Erkenntnisse aus der Praxis.
Sur Secure Code Warrior, nous cherchons toujours à étendre notre couverture de formation. Pour permettre aux développeurs de systèmes embarqués et aux responsables de la sécurité de construire des systèmes embarqués sûrs, nous nous intéressons au monde de la sécurité des systèmes embarqués. Dans ce billet, nous parlerons de la norme MISRA C 2012 et des raisons pour lesquelles sa conformité est nécessaire pour construire des systèmes embarqués sécurisés.
Lorsque vous écrivez du code en C, il est très facile de mettre en œuvre des choses qui semblent correctes, mais qui sont intrinsèquement erronées. Votre code peut se compiler parfaitement et même fonctionner correctement pendant un certain temps. Mais ce même code peut se bloquer ou présenter un comportement indéfini si la taille de vos données d'entrée et/ou la mémoire augmentent. Par exemple, un nombre particulier en entrée peut faire déborder un nombre entier, ou une séquence particulière de caractères peut faire sortir un tableau de ses limites.
C'est là que la norme de codage C MISRA peut vous aider. Les règles, les lignes directrices et les meilleures pratiques définies par la norme permettent aux développeurs d'écrire un 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 encore une version plus ancienne, c'est le moment idéal pour passer à une autre.
Qu'est-ce que la norme de codage MISRA C ?
La norme MISRA C comprend des lignes directrices en matière de sécurité du code, de portabilité et de fiabilité pour le langage de programmation C. La première série de lignes directrices a été publiée en 1998. La première série de lignes directrices, spécifique au langage C, a été publiée en 1998.
Toutefois, depuis lors, le consortium MISRA développe également des normes de codage pour C++. Chaque document MISRA C contient un ensemble de règles, des exemples de non-conformité et des sections détaillées sur les informations de base qui ont contribué à l'élaboration de ces règles.
C et 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 qu'il est difficile d'écrire un code sûr, en particulier en C, et qu'il est sujet à des erreurs. Par exemple, dans la plupart des langages de haut niveau comme Java et C#, vous n'avez pas à vous préoccuper de choses triviales comme le ramassage des ordures ou le typage 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 un morceau de mémoire à une structure de données, vous devez le libérer manuellement vous-même, une fois que vous avez fini de l'utiliser. Si vous ne le faites pas, le langage C, contrairement à d'autres langages, ne libérera pas la mémoire pour vous, ce qui entraînera une fuite de mémoire.
MISRA C 2004 (C2) vs. MISRA C 2012 (C3) - Qu'est-ce qui a changé ?
MISRA C : 2012, également connue sous le nom de C3, a été publiée 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 des règles pour l'ancienne version ISO C90. L'objectif principal 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 vous ne l'avez pas encore fait.
Dans l'ensemble, voici une liste des changements les plus significatifs :
- Corriger les problèmes rencontrés dans la version 2004.
- Augmenter de manière significative le nombre de règles décidables . Une règle est décidable si un outil d'analyse peut vous aider à déterminer la conformité à cette règle.
- Les règles sont classées en trois catégories : "requises", "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 enfreintes dans des scénarios particuliers, à condition que l'infraction soit justifiée.
- Ajout de conseils sur la manière d'appliquer les règles au code généré automatiquement. C'est très important car les mêmes lignes directrices que pour le code écrit par un humain ne s'appliquent pas toujours au code généré par un outil.
- Supprimer les règles trop générales qui interdisaient un comportement raisonnable de la part de l'utilisateur. Par exemple, il était auparavant recommandé de ne pas utiliser de macros, car elles peuvent entraîner diverses difficultés et confusions (les macros ne peuvent pas être déboguées, les macros n'ont pas d'espace de noms, etc.) ). Cela a empêché l'utilisation de macros, même dans des situations où elles pouvaient fournir une solution élégante, sûre et pratique. Dans MISRA C : 2012, de nouvelles règles concernant les macros ont été introduites, permettant aux gens de les utiliser avec précaution, chaque fois que c'est possible. Voyez l'extrait suivant, tiré d'un document de la MISRA C, qui recommande l'utilisation d'une macro plutôt que d'une fonction.

Les règles de MISRA C en action
Assez parlé, il est maintenant temps de mettre en pratique certaines règles de MISRA C, avec des exemples d'application.
Utilisez des types compatibles comme arguments de pointeur pour memcpy, memmove et memcmp
Les fonctions de la bibliothèque standard memcpy, memmove et memcmp effectuent un déplacement ou une comparaison octet par octet du nombre spécifié d'octets. La règle 21.15 de la norme MISRA C 2012 stipule que les deux paramètres de la fonction doivent être des pointeurs du 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 officiel de conformité MISRA. La règle est obligatoire, décidable et s'applique à la fois à C90 et à C99.

Un exemple suit la description de la règle.

Comme vous pouvez le constater, les objets étant de types différents (uint8_t et uint16_t), cette solution n'est pas conforme.
Les fonctions de traitement des chaînes de caractères qui ne prennent pas la longueur en entrée ne doivent pas entraîner d'accès hors limites
String handling functions from <string.h> that don’t take the length as an input, shouldn’t result in out-of-bound access. The relevant functions are: strcat, strchr, strcmp, strcoll, strcpy, strcspn, strlen, strpbrk, strrchr, strspn, strrstr, and strtok. The rule is mandatory, meaning it can never be breached, under any circumstances. It applies to both C90 and C99, and is undecidable.

L'exemple correspondant est le suivant :

Comme vous pouvez le voir, 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" est suffisant.
Valider les données reçues de l'extérieur
La directive 4.14 recommande de vérifier la validité des données reçues de sources "externes". Les sources externes peuvent être
- Lecture d'un fichier.
- Lecture d'une variable d'environnement.
- Toute entrée de l'utilisateur.
- Tout ce qui est reçu sur un canal de communication. Par exemple, via une connexion TCP ou une API HTTP, etc.
Cette directive fait partie de la catégorie requise et s'applique à la fois à la norme C90 et à la norme C99. Elle se justifie par le fait 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 s'attend à ce que l'utilisateur entre un nombre, mais l'utilisateur entre 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 sur les règles de codage. Si vous n'en utilisez pas et que vous vous fiez plutôt à un outil d'analyse statique (ce 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é à MISRA C 2012 :
- Cppcheck est un outil open-source qui permet de vérifier les règles MISRA et de détecter différents types de bogues.
- PC-lint Plus est un outil payant assorti d'une période d'évaluation de 30 jours. Outre la vérification de la conformité à la norme MISRA C, il permet également d'identifier les bogues et les vulnérabilités potentielles.
- CodeSonar est un autre outil qui vérifie la conformité aux normes MISRA C et C++.
Il existe également quelques compilateurs capables de tester la conformité à MISRA. Si une violation des règles est détectée, des avertissements ou des exceptions sont émis en conséquence. Green Hills Software , par exemple, propose des compilateurs qui prennent en charge 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 de MISRA C
Secure Code WarriorLe produit phare de la société - Plateforme D'apprentissage - comporte de nombreux défis interactifs, courses, et des évaluations qui peuvent aider à former les développeurs à l'écriture de code C/C++ sécurisé. Le contenu de la plateforme est spécifique au cadre et très engageant. Nos défis de codage C/C++:Embed se sont inspirés à la fois de MISRA C, d'AUTOSAR C++ (MISRA C++) et de la CEI.
Les développeurs peuvent s'embarquer dans des voyages d'apprentissage personnalisés, au cours desquels ils identifient les vulnérabilités spécifiques à C/C++ et, plus important encore, apprennent à corriger ces bogues. Au cours de ce processus, les développeurs peuvent suivre leurs progrès afin d'identifier leurs faiblesses, et même participer à des compétitions de codage amicales avec leurs pairs. Découvrez comment nous aidons les industries de l'automobile et du transport avec nos solutions.
Vous voulez découvrir à quel point nos défis sont interactifs et axés sur l'intégration ? Essayez quelques défis C/C++:Embed sur le site Plateforme D'apprentissage dès aujourd'hui !
Table des matières
Secure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationTéléchargerRessources pour débuter
Thèmes et contenus de la formation Securecode
Nos contenus de pointe sont constamment développés afin de s'adapter à l'évolution constante du paysage du développement logiciel, en tenant compte de votre rôle. Les thèmes abordés couvrent tous les domaines, de l'IA à l'injection XQuery, et sont proposés pour une multitude de rôles, des architectes et ingénieurs aux chefs de produit et responsables assurance qualité. Nous vous invitons à découvrir un aperçu de notre catalogue de contenus classés par thème et par rôle.
La Chambre de commerce établit la norme en matière de sécurité à grande échelle axée sur les développeurs
La Chambre de commerce néerlandaise explique comment elle a intégré le codage sécurisé dans le développement quotidien grâce à des certifications basées sur les rôles, à l'évaluation comparative du Trust Score et à une culture de responsabilité partagée en matière de sécurité.
Modélisation des menaces avec l'IA : transformer chaque développeur en modélisateur de menaces
Vous repartirez mieux équipé pour aider les développeurs à combiner les idées et les techniques de modélisation des menaces avec les outils d'IA qu'ils utilisent déjà pour renforcer la sécurité, améliorer la collaboration et créer des logiciels plus résilients dès le départ.
Ressources pour débuter
Cybermon est de retour : les missions KI « Beat the Boss » sont désormais disponibles sur demande.
Cybermon 2025 Beat the Boss est désormais disponible toute l'année dans SCW. Il utilise des exigences de sécurité IA/LLM avancées pour renforcer le développement sécurisé de l'IA à grande échelle.
Explication de la loi sur la cyber-résilience : implications pour le développement de logiciels sécurisés dès la conception
Découvrez les exigences de la loi européenne sur la cyber-résilience (CRA), à qui elle s'applique et comment les équipes de développement peuvent s'y préparer en adoptant des méthodes sécurisées, en prévenant les failles de sécurité et en renforçant les compétences des développeurs.
Facteur 1 : Critères de réussite définis et mesurables
Le catalyseur n° 1 inaugure notre série en dix parties intitulée « Les catalyseurs de la réussite » et démontre comment un codage sécurisé peut être associé à des résultats commerciaux tels que la réduction des risques et la rapidité afin d'atteindre une maturité programmatique à long terme.




%20(1).avif)
.avif)
