Directives en matière de codage et de sécurité

Appliquer automatiquement les normes de codage à chaque commit

L'analyse statique permet de transformer les directives de codage en contraintes techniques contraignantes, plutôt qu'en simples recommandations documentées. PC-lint Plus applique automatiquement ces contraintes aux normes MISRA C et C++, AUTOSAR, CERT-C et CWE à chaque compilation, et les étend aux contraintes spécifiques au projet grâce à un mécanisme de règles personnalisées basé sur des requêtes, couvrant les règles architecturales, les conventions de nommage et les exigences de sécurité propres au domaine.

Ligne directriceObjectifVersions prises en charge par PC-lint Plus
MISRA CSécurité et fiabilité du langage C dans les systèmes embarqués et critiques pour la sécuritéMISRA C:2025, MISRA C:2023, MISRA C:2012 (amendements 1 à 4), MISRA C:2004
MISRA C++Sécurité et fiabilité du langage C++ dans les systèmes embarqués et critiques pour la sécuritéMISRA C++:2023, MISRA C++:2008
AUTOSAR Règles de codage pour les logiciels d'ECU automobiles conformes à la norme AUTOSARAUTOSAR 17 et 19
CERT-CMeilleures pratiques en matière de sécurité et de fiabilité pour le langage CRègles CERT-C applicables de manière statique
CWEListe des vulnérabilités courantes des logiciels et du matérielTop 25 des CWE, Top 10 des CWE, KEV (toutes les entrées pertinentes pour C/C++), certifié compatible CWE
Directives personnaliséesRègles et contraintes spécifiques à l’organisationContrôles personnalisés basés sur des requêtes via l’inspection AST

MISRA C et MISRA C++

La MISRA (Motor Industry Software Reliability Association) publie les directives de codage les plus largement adoptées pour les logiciels critiques pour la sécurité et les logiciels embarqués. Bien que son nom trouve son origine dans le secteur automobile, les directives MISRA sont utilisées dans les domaines de l’aérospatiale, du médical, de l’industrie et du ferroviaire, partout où le langage de programmation utilisé est le C ou le C++.

MISRA C concerne le langage de programmation C. Ses règles visent à éliminer les constructions indéfinies, définies par l’implémentation ou présentant un risque dans des contextes embarqués : variables non initialisées, conversions de types implicites, code inaccessible et des centaines d’autres cas similaires. MISRA C++ étend cette même discipline au C++.

Ces directives évoluent au rythme des normes du langage. MISRA C:2025 et MISRA C++:2023 en sont les éditions actuelles.

Prise en charge de MISRA par PC-lint Plus

  • MISRA C : 2025
  • MISRA C : 2023
  • MISRA C : 2012 avec les amendements 1, 2, 3 et 4
  • MISRA C : 2004
  • MISRA C++ : 2023
  • MISRA C++ : 2008

AUTOSAR

AUTOSAR (Automotive Open System Architecture) est un partenariat mondial de l'industrie automobile qui définit une architecture logicielle normalisée pour les unités de contrôle électronique (ECU). Ses directives de codage en C++ précisent les règles à respecter pour écrire du code C++ capable de s'intégrer correctement dans des ECU conformes à la norme AUTOSAR provenant de différents fournisseurs.

Les directives AUTOSAR C++ portent sur la qualité, la fiabilité et la sécurité du code dans le contexte des systèmes logiciels automobiles. Le respect de ces directives favorise l’interopérabilité entre les composants développés par différentes équipes et différents fournisseurs, et ouvre la voie à la conformité à la norme ISO 26262 relative à la sécurité fonctionnelle pour les bases de code C++.

PC-lint Plus prend en charge AUTOSAR17 et AUTOSAR19 dès son installation.

CERT-C

La norme de codage CERT-C a été élaborée par la division CERT du Software Engineering Institute (SEI) de l'université Carnegie Mellon. Elle fournit des directives de codage et des bonnes pratiques pour le langage C, en ciblant spécifiquement les failles de sécurité et les défaillances de fiabilité.

La norme CERT-C est indépendante du domaine d’application. Elle est utilisée dans les secteurs de l’aérospatiale, de l’automobile, de la santé et des logiciels financiers, partout où un code C sécurisé et fiable est requis. Elle est reconnue dans le cadre des référentiels de conformité aux Critères communs et à la norme ISO 27001, et est fréquemment adoptée en complément de MISRA C pour les projets nécessitant à la fois une couverture en matière de sûreté et de sécurité.

PC-lint Plus prend en charge un grand nombre des directives de CERT-C applicables de manière statique, couvrant ainsi un large éventail des règles de sécurité et de fiabilité de la norme.

CWE : Common Weakness Enumeration

Le CWE est une liste, gérée par la communauté, des types courants de failles logicielles et matérielles, alimentée par les données du NIST et de la CISA. Son objectif est de faire connaître ces failles afin qu’elles puissent être éliminées dès la phase de développement plutôt que d’être découvertes après le déploiement.

Le classement CWE des 25 failles logicielles les plus dangereuses et la liste CWE des 10 principales failles KEV (vulnérabilités connues pour avoir été exploitées) fournissent des cibles prioritaires aux équipes de développement et aux éditeurs d’outils. La certification de compatibilité CWE atteste qu’un outil d’analyse statique couvre les failles figurant sur ces listes de manière documentée et vérifiable.

PC-lint Plus version 2.1 et les versions ultérieures sont certifiées compatibles CWE. Elles couvrent toutes les failles relatives aux langages C et C++ figurant dans la liste des 10 principales failles KEV (vulnérabilités connues et exploitées) du CWE, ainsi que la plupart de celles du Top 25 du CWE.

Directives relatives au codage personnalisé

Les normes de codage publiées couvrent les catégories courantes de défauts et les risques liés aux langages de programmation. La plupart des projets comportent également des contraintes spécifiques à leur architecture, à leur organisation ou à leur domaine, qui ne relèvent d’aucune directive publiée. PC-lint Plus prend en charge ces deux aspects grâce à un mécanisme de règles personnalisées basé sur des requêtes, qui applique le même contrôle statique aux contraintes spécifiques au projet qu’aux règles MISRA ou AUTOSAR.

Le système de requêtes de PC-lint Plus parcourt l’arbre de syntaxe abstraite (AST) généré lors de l’analyse, en utilisant un langage spécifique au domaine et à typage statique pour spécifier exactement ce que le contrôle recherche. Les règles personnalisées peuvent faire respecter des contraintes architecturales, signaler des anti-modèles ou définir des règles de sécurité spécifiques à l’organisation.

Ce même mécanisme de requête est utilisé pour définir des exceptions justifiées : des suppressions précises, basées sur des modèles, qui ne s’appliquent que lorsque des conditions spécifiques sont remplies, plutôt que des suppressions générales qui désactivent toute une catégorie de règles. Cela permet de garantir que les fichiers de suppression restent clairs, vérifiables et ciblés.

Gestion de la suppression et préparation à l'audit

Une analyse statique d’une base de code existante mettra en évidence des résultats nécessitant un examen, une justification ou une suppression. En l’absence d’une approche structurée pour gérer ces décisions, les fichiers de suppression s’accumulent avec des exceptions obsolètes, les écarts justifiés ne sont pas documentés et la configuration s’éloigne de l’état approuvé lors de l’audit initial.

PC-lint Plus permet de définir des suppressions au niveau des résultats individuels, des régions de code, des fichiers et des catégories de règles. Chaque suppression peut être documentée et traçable. La fonctionnalité « Diagnostic Accounting » signale les suppressions qui ne sont plus nécessaires, empêchant ainsi l’accumulation d’exceptions obsolètes qui compromettent la fiabilité de l’audit.