
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 Ihr Unternehmen dabei, den Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie für die Anwendungssicherheit verantwortlich sind, Entwickler, IT-Sicherheitsbeauftragter oder in einer anderen Funktion im Bereich Sicherheit tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Demo buchenSecure 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 !

Klicken Sie auf den untenstehenden Link und laden Sie das PDF dieser Ressource herunter.
Secure Code Warrior Ihr Unternehmen dabei, den Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie für die Anwendungssicherheit verantwortlich sind, Entwickler, IT-Sicherheitsbeauftragter oder in einer anderen Funktion im Bereich Sicherheit tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Bericht anzeigenDemo buchenSecure 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 !
Inhaltsverzeichnis
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 Ihr Unternehmen dabei, den Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit oberste Priorität hat. Ganz gleich, ob Sie für die Anwendungssicherheit verantwortlich sind, Entwickler, IT-Sicherheitsbeauftragter oder in einer anderen Funktion im Bereich Sicherheit tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Demo buchenHerunterladenRessourcen, die Ihnen den Einstieg erleichtern
Themen und Inhalte der Schulung zum sicheren Code
Unsere hochmodernen Inhalte werden ständig weiterentwickelt, um mit den ständigen Veränderungen in der Softwareentwicklungslandschaft Schritt zu halten und gleichzeitig Ihre Rolle zu berücksichtigen. Die Themen reichen von KI bis hin zu XQuery-Injection und sind für eine Vielzahl von Positionen konzipiert, von Architekten über Ingenieure bis hin zu Produktmanagern und Qualitätssicherungsmitarbeitern. Verschaffen Sie sich einen Überblick über die Inhalte unseres Katalogs, sortiert nach Themen und Rollen.
Die Kamer van Koophandel setzt Maßstäbe für entwicklergesteuerte Sicherheit in großem Maßstab
Die Kamer van Koophandel berichtet, wie sie sicheres Codieren durch rollenbasierte Zertifizierungen, Trust Score-Benchmarking und eine Kultur der gemeinsamen Verantwortung für Sicherheit in die tägliche Entwicklungsarbeit integriert hat.
Bedrohungsmodellierung mit KI: So wird jeder Entwickler zum Bedrohungsmodellierer
Sie werden besser gerüstet sein, um Entwicklern dabei zu helfen, Ideen und Techniken zur Bedrohungsmodellierung mit den KI-Tools zu kombinieren, die sie bereits verwenden, um die Sicherheit zu erhöhen, die Zusammenarbeit zu verbessern und von Anfang an widerstandsfähigere Software zu entwickeln.
Ressourcen, die Ihnen den Einstieg erleichtern
Cybermon ist zurück: Die missions „Beat the Boss“ sind jetzt auf Abruf verfügbar.
Cybermon 2025 Beat the Boss ist jetzt das ganze Jahr über in SCW verfügbar. Setzen Sie fortschrittliche Sicherheitsherausforderungen im Zusammenhang mit KI und LLM ein, um die sichere Entwicklung von KI in großem Maßstab zu stärken.
Erläuterung des Gesetzes zur Cyberresilienz: Was bedeutet das für die Entwicklung sicherer Software bereits ab der Konzeption?
Entdecken Sie, was das europäische Gesetz zur Cyberresilienz (CRA) verlangt, für wen es gilt und wie sich Ingenieurteams durch Sicherheitsmaßnahmen bereits in der Entwurfsphase, durch die Vermeidung von Schwachstellen und durch die Stärkung der Fähigkeiten der Entwickler darauf vorbereiten können.
Moderator 1: Definierte und messbare Erfolgskriterien
Enabler 1 gibt den Startschuss für unsere 10-teilige Serie mit dem Titel „Enablers of Success“ und zeigt, wie sichere Codierung mit geschäftlichen Ergebnissen wie Risikominderung und Schnelligkeit kombiniert werden kann, um die langfristige Reife von Programmen sicherzustellen.




%20(1).avif)
.avif)
