
MISRA C 2012 vs MISRA C2 - Comment effectuer un changement
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.

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.

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 :
- 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.
- 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.
- 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 là pour aider votre organisation à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité informatique ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.
Veuillez réserver une démonstration.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.


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.

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.

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 :
- 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.
- 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.
- 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 !

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.

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.

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 :
- 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.
- 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.
- 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 !

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.
Secure Code Warrior là pour aider votre organisation à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité informatique ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.
Veuillez consulter le rapportVeuillez réserver une démonstration.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.
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.

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.

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 :
- 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.
- 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.
- 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 !
Table des matières
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 là pour aider votre organisation à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité informatique ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.
Veuillez réserver une démonstration.TéléchargerRessources pour vous aider à démarrer
Thèmes et contenus de formation sur le code sécurisé
Notre contenu de pointe évolue constamment pour s'adapter à l'évolution constante du paysage du développement de logiciels tout en tenant compte de votre rôle. Des sujets couvrant tout, de l'IA à l'injection XQuery, proposés pour une variété de postes, allant des architectes aux ingénieurs en passant par les chefs de produit et l'assurance qualité. Découvrez un aperçu de ce que notre catalogue de contenu a à offrir par sujet 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 vous aider à démarrer
Cybermon est de retour : les missions Beat the Boss sont désormais disponibles sur demande.
Cybermon 2025 : Vaincre le Boss est désormais accessible toute l'année dans SCW. Mettez en œuvre des défis de sécurité avancés liés à l'IA et au LLM afin de 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 leur conception
Découvrez les exigences de la loi européenne sur la cyber-résilience (CRA), à qui elle s'applique et comment les équipes d'ingénieurs peuvent se préparer grâce à des pratiques de sécurité dès la conception, à la prévention des vulnérabilités et au renforcement des capacités des développeurs.
Facilitateur 1 : Critères de réussite clairement définis et mesurables
Enabler 1 inaugure notre série en 10 parties intitulée « Enablers of Success » en démontrant comment associer le codage sécurisé à des résultats commerciaux tels que la réduction des risques et la rapidité afin d'assurer la maturité à long terme des programmes.




%20(1).avif)
.avif)
