Iconos SCW
héroe bg sin separador
Blog

MISRA C 2012 vs MISRA C2 - Comment effectuer un changement

Secure Code Warrior
Publicado el 17 de agosto de 2021
Última actualización el 8 de marzo de 2026

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.

Captura de pantalla de la regla 21.15 de MISRA C

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

Captura de pantalla de una solución no conforme.

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.

Captura de pantalla de la regla 21.17 de MISRA C.

L'exemple correspondant est le suivant :

Captura de pantalla de un ejemplo correcto de funciones de manejo de cadenas

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.

Se comprobará la validez de los valores recibidos de fuentes externas

Comment passer à MISRA C 2012

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

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

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

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

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

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

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

Mostrar el recurso
Mostrar el recurso

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.

¿Desea obtener más información?

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é.

Más información

Secure Code Warrior aquí para ayudar a su organización a proteger el código a lo largo de todo el ciclo de desarrollo de software y a crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es responsable de la seguridad de las aplicaciones, desarrollador, responsable de la seguridad informática o cualquier otra persona involucrada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código no seguro.

Reserve una demostración
Compartir en:
marcas de LinkedInSocialx logotipo
Autor
Secure Code Warrior
Publicado el 17 de agosto de 2021

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.

Compartir en:
marcas de LinkedInSocialx logotipo

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.

Captura de pantalla de la regla 21.15 de MISRA C

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

Captura de pantalla de una solución no conforme.

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.

Captura de pantalla de la regla 21.17 de MISRA C.

L'exemple correspondant est le suivant :

Captura de pantalla de un ejemplo correcto de funciones de manejo de cadenas

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.

Se comprobará la validez de los valores recibidos de fuentes externas

Comment passer à MISRA C 2012

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

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

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

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

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

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

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

Mostrar el recurso
Mostrar el recurso

Rellene el siguiente formulario para descargar el informe.

Nos gustaría obtener su autorización para enviarle información sobre nuestros productos y/o sobre temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el mayor cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Icono de éxito de SCW
Icono de error scw
Para enviar el formulario, active las cookies «Analytics». No dude en desactivarlas de nuevo una vez que haya terminado.

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.

Captura de pantalla de la regla 21.15 de MISRA C

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

Captura de pantalla de una solución no conforme.

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.

Captura de pantalla de la regla 21.17 de MISRA C.

L'exemple correspondant est le suivant :

Captura de pantalla de un ejemplo correcto de funciones de manejo de cadenas

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.

Se comprobará la validez de los valores recibidos de fuentes externas

Comment passer à MISRA C 2012

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

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

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

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

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

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

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

Ver el seminario web
Comience
Más información

Haga clic en el enlace siguiente y descargue el PDF de este recurso.

Secure Code Warrior aquí para ayudar a su organización a proteger el código a lo largo de todo el ciclo de desarrollo de software y a crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es responsable de la seguridad de las aplicaciones, desarrollador, responsable de la seguridad informática o cualquier otra persona involucrada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código no seguro.

Mostrar el informeReserve una demostración
Descargar el PDF
Mostrar el recurso
Compartir en:
marcas de LinkedInSocialx logotipo
¿Desea obtener más información?

Compartir en:
marcas de LinkedInSocialx logotipo
Autor
Secure Code Warrior
Publicado el 17 de agosto de 2021

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.

Compartir en:
marcas de LinkedInSocialx logotipo

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.

Captura de pantalla de la regla 21.15 de MISRA C

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

Captura de pantalla de una solución no conforme.

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.

Captura de pantalla de la regla 21.17 de MISRA C.

L'exemple correspondant est le suivant :

Captura de pantalla de un ejemplo correcto de funciones de manejo de cadenas

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.

Se comprobará la validez de los valores recibidos de fuentes externas

Comment passer à MISRA C 2012

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

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

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

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

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

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

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

Índice

Descargar el PDF
Mostrar el recurso
¿Desea obtener más información?

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é.

Más información

Secure Code Warrior aquí para ayudar a su organización a proteger el código a lo largo de todo el ciclo de desarrollo de software y a crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es responsable de la seguridad de las aplicaciones, desarrollador, responsable de la seguridad informática o cualquier otra persona involucrada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código no seguro.

Reserve una demostraciónDescargar
Compartir en:
marcas de LinkedInSocialx logotipo
Centro de recursos

Recursos para ayudarle a empezar

Más publicaciones
Centro de recursos

Recursos para ayudarle a empezar

Más publicaciones