Temps de lecture : 3 minutes
Qu'est-ce qu'un Audit de Code ?
En développement logiciel, un audit de code est une pratique consistant à parcourir le code source d'un logiciel dans un objectif de vérification tant de cybersécurité que de sureté de fonctionnement.
Cette analyse permet, avant même toute exécution du code, d’identifier des constructions peu sûres, des vulnérabilités voire des erreurs latentes présentes dans le code et susceptibles de compromettre la sécurité du système qui l’utilise. La correction de ces faiblesses améliore la fiabilité, la robustesse et la maintenabilité du code et permet de s’assurer de sa conformité vis-à-vis des standards métiers ou de normes d’assurance qualité logicielle (IEC 61508, EN 50155, ISO 26262, DO178, CERT-C/SecureC, CRW...etc.)
Dans le cadre d’une étude de cybersécurité, l'audit de code peut être réalisé préalablement à des tests d’intrusion : il est ainsi possible de tester les vulnérabilités identifiées, afin de mieux en évaluer leur exploitabilité par un attaquant.
Cette analyse permet, avant même toute exécution du code, d’identifier des constructions peu sûres, des vulnérabilités voire des erreurs latentes présentes dans le code et susceptibles de compromettre la sécurité du système qui l’utilise. La correction de ces faiblesses améliore la fiabilité, la robustesse et la maintenabilité du code et permet de s’assurer de sa conformité vis-à-vis des standards métiers ou de normes d’assurance qualité logicielle (IEC 61508, EN 50155, ISO 26262, DO178, CERT-C/SecureC, CRW...etc.)
Dans le cadre d’une étude de cybersécurité, l'audit de code peut être réalisé préalablement à des tests d’intrusion : il est ainsi possible de tester les vulnérabilités identifiées, afin de mieux en évaluer leur exploitabilité par un attaquant.
Les étapes de l'audit de code
Le déroulement du processus d’audit est illustré dans la figure suivante. Après réunion de lancement destiné à s’assurer avec le client des objectifs de l’audit et de la complétude des données d’entrée, les activités d’audit sont séquencées en plusieurs phases jusqu’à la fourniture du rapport d’audit présenté lors de la réunion de clôture.
La première phase consiste à préparer l’environnement d’analyse à mettre en place : identification et collection des éléments logiciels du projet, installation de l’environnement de développement et vérification de compilation correcte du code source, configuration des outils d’analyse avec les spécificités du projet, telles que les règles de codage à vérifier ou les classes de défauts à rechercher en fonction du domaine d’application, des normes applicables...etc.
La phase suivante est la phase d’analyse statique du code proprement dite, réalisée de façon automatique par les outils et à l’issue de laquelle chaque outil génère un rapport exhaustif des résultats d’analyse et des erreurs détectées, selon des critères propres à l’outil utilisé.
Elle est suivie d’une phase d’analyse des rapports par les experts qui doivent interpréter les résultats bruts fournis par les outils pour confirmer les défauts (élimination des faux-positifs), comprendre leur origine dans le contexte global de l’application, généralement hors de portée des outils d’analyse statique de code, et synthétiser les résultats dans le rapport final livré au client.
Ces résultats sont généralement présentés avec l’évaluation des risques identifiés et les propositions de mesures correctives lors d’une réunion de clôture de l’audit de code.
La phase suivante est la phase d’analyse statique du code proprement dite, réalisée de façon automatique par les outils et à l’issue de laquelle chaque outil génère un rapport exhaustif des résultats d’analyse et des erreurs détectées, selon des critères propres à l’outil utilisé.
Elle est suivie d’une phase d’analyse des rapports par les experts qui doivent interpréter les résultats bruts fournis par les outils pour confirmer les défauts (élimination des faux-positifs), comprendre leur origine dans le contexte global de l’application, généralement hors de portée des outils d’analyse statique de code, et synthétiser les résultats dans le rapport final livré au client.
Ces résultats sont généralement présentés avec l’évaluation des risques identifiés et les propositions de mesures correctives lors d’une réunion de clôture de l’audit de code.
Audit de codes et détection des défauts d’un logiciel
Forte de sa longue expertise dans les outils et le développement d’applications temps réel critiques, ISIT a mis en place un service d’audit de code à la demande de clients qui ne disposent pas des outils et/ou de l’expertise nécessaire dans leur bureau d’études, mais qui souhaitent néanmoins pouvoir garantir un haut niveau de qualité, de robustesse et de sécurité de leurs logiciels, exigence particulièrement prégnante dans le cas de développement des systèmes connectés, pour lesquels les faiblesses non connues du code se traduisent souvent en dangereuses vulnérabilités.
Les audits de code réalisés par ISIT regroupent plusieurs volets en fonctions des objectifs et demandes clients :
Au-delà de l’audit de code, nos experts sont à même de vous accompagner et de vous assister tout au long de votre développement pour vous aider à développer un logiciel conforme aux normes les plus exigeantes de sécurité fonctionnelle et de cybersécurité.
Les audits de code réalisés par ISIT regroupent plusieurs volets en fonctions des objectifs et demandes clients :
- Vérification du respect des règles de codage : Quelles soient spécifiques (propriétaires) au projet ou imposées par une norme (telles que MISRA ou CERT), ISIT s’appuie sur des outils de d’analyse statique syntaxique reconnus et qualifiés qui fournissent des indicateurs détaillés de qualité du code en termes de conformités vis-à-vis de standards de codage, de complexité, de testabilité et de maintenabilité.
- Analyse statique avancée : Toujours par le biais d’outils spécialisés, les équipes d’expert ISIT sont à même d’effectuer des analyses statiques avancées par modélisation du code source (C, C++, Java & C#). Cette approche permet la détection d’anomalies susceptibles de provoquer des erreurs d’exécution, appelées aussi « erreurs Run-time », telles que division par zéro, buffer overrun, ….. Cette technique permet également de détecter des failles de sécurité avant toute exécution du code, et peut même analyser les défauts les plus graves (dépassement de pointeur, injection SQL, …). La particularité de l’approche ISIT est de pouvoir mener ces analyses non seulement sur les fichiers sources mais également sur les librairies ou codes objet ne disposant pas des fichiers sources.
- Analyse de composition : L’analyse de composition logicielle (SCA), permet d’établir l’inventaire (SBOM) des composants « open-source » et des librairies tierces-parties (COTS). Réalisée sur le code source mais aussi également sur le code objet, ce type d’analyse permet l’identification de vulnérabilités déjà connues et documentées (vulnérabilités N-days) ainsi que connaitre les types de licences (GPL entre autre) auxquels sont liés ces composants.
Au-delà de l’audit de code, nos experts sont à même de vous accompagner et de vous assister tout au long de votre développement pour vous aider à développer un logiciel conforme aux normes les plus exigeantes de sécurité fonctionnelle et de cybersécurité.