In this article
Les bases de l’audit de sécurité du code
Dans le développement logiciel moderne, l’analyse de la sécurité du code est un élément essentiel de l’approche « mieux vaut prévenir que guérir ». L’audit de sécurité du code améliore la qualité du code et constitue donc une bonne pratique DevSecOps pour toute organisation.
Qu’est-ce qu’un audit de sécurité du code ?
Un audit de sécurité du code (également appelé audit de sécurité logicielle ou audit du code logiciel) consiste à analyser le code source ou à examiner un programme en cours d’exécution afin de détecter les vulnérabilités de sécurité, les licences non conformes et d’autres problèmes de programmation. Le principal avantage d’un audit de sécurité du code est de repérer les problèmes avant la mise en production du logiciel, afin qu’aucun utilisateur n’en subisse les conséquences. Il s’agit d’un élément important du DevSecOps et des pratiques de codage sécurisé, généralement utilisé pour vérifier les risques liés à la cybersécurité, au droit et à la conformité.
La mise en place d’un outil d’audit de sécurité du code relève généralement de la responsabilité des équipes DevOps et, si l’organisation en dispose, DevSecOps. En outre, comme l’analyse statique du code examine directement le code source, il est utile qu’au moins un développeur participe afin d’apporter des éclairages sur les vulnérabilités potentielles.
Types d’audits de sécurité du code
Les deux types d’audit les plus courants sont l’analyse statique et l’analyse dynamique du code.
L’audit statique du code, également appelé analyse statique du code ou simplement scan, consiste à examiner les fichiers source pour y détecter des vulnérabilités. En d’autres termes, il s’agit d’une revue automatisée du code qui peut porter sur différents aspects, comme les normes de codage, le formatage du code ou les vulnérabilités.
Le type d’audit de sécurité du code le plus répandu dans le secteur est l’analyse statique axée sur les vulnérabilités du code. Cet article se concentre principalement sur ce type d’analyse. Découvrez-en plus sur les différents types d’audits de sécurité ici.
Pourquoi l’audit du code est-il important ?
Négliger l’analyse de sécurité du code vous expose à des risques. Le scan du code à la recherche de vulnérabilités est généralement considéré comme la fonction la plus importante de l’analyse statique, car il aide à prévenir les cyberattaques contre vos logiciels déployés sur le long terme. Grâce à un pipeline fiable qui analyse votre code source, vous pouvez détecter les vulnérabilités, agir immédiatement et ainsi réduire la fenêtre d’opportunité d’une attaque.
Les risques juridiques et les problèmes de conformité doivent également être pris en compte, comme nous le verrons ci-dessous.
Dans le contexte de l’open source, l’analyse statique du code, notamment l’analyse statique du code open source et l’audit open source, sont également considérés comme des bonnes pratiques.
Éléments à vérifier lors d’un audit de sécurité du code
L’audit de sécurité du code doit être adapté à votre base de code, mais plusieurs vulnérabilités courantes constituent un bon point de départ :
Validation des entrées/injection SQL
Bibliothèques tierces
Identifiants codés en dur
Cryptographie faible
Version SSL/TLS
Débordement de mémoire
Conformité
Licences
Vérifications propres au projet
Examinons chacun de ces éléments plus en détail :
1. Validation des entrées/injection SQL
L’injection SQL est l’une des techniques de cyberattaque les plus répandues. Elle utilise une requête SQL pour inciter votre application à exécuter une transaction SQL malveillante. Une méthode courante consiste à injecter du code SQL dans un champ de saisie d’une page web, ce qui peut, par exemple, permettre à des attaquants d’accéder à des données non autorisées ou de les supprimer. L’analyse statique du code aide à prévenir ces attaques en repérant les endroits où du code SQL pourrait être injecté.
2. Bibliothèques tierces
Les bibliothèques tierces sont essentielles au développement logiciel moderne. Les développeurs peuvent réutiliser du code créé et testé par d’autres, ce qui améliore l’efficacité de l’équipe et lui permet de se concentrer davantage sur les objectifs principaux de l’entreprise.
L’inconvénient des bibliothèques tierces est qu’elles peuvent présenter des vulnérabilités. Vous pouvez toutefois atténuer ces risques en analysant le code source de toutes vos bibliothèques chaque jour.
3. Identifiants codés en dur
En règle générale, il est strictement interdit d’inscrire des clés API et des mots de passe en dur dans le code source. Cependant, lors de tests locaux d’une nouvelle fonctionnalité ou intégration, il arrive que l’on oublie de supprimer les identifiants codés en dur.
Dans le cas peu probable où une valeur codée en dur échapperait à la revue de code — par exemple dans une très grande demande de fusion ou de pull request —, un outil d’analyse statique du code devrait la détecter et vous avertir.
4. Cryptographie faible
Certains algorithmes cryptographiques ne sont pas sécurisés et doivent être interdits dans les applications sécurisées, même s’ils ont été largement adoptés pour des applications plus anciennes. Par exemple, il faut éviter l’algorithme de hachage MD5 ; selon l’application, vous pouvez plutôt utiliser SHA-256, plus sûr.
5. Version SSL/TLS
Le chiffrement SSL/TLS, dont la dernière version est TLS 1.3, est une méthode essentielle pour la sécurité sur Internet. Par exemple, si votre base de code exécute un serveur HTTP avec une version obsolète de TLS/SSL — ou, pire encore, si du code ancien exécute un serveur web sur un réseau non privé sans TLS/SSL —, l’analyse statique du code peut le détecter et vous avertir.
6. Débordement de mémoire
Un débordement de mémoire survient lorsqu’un tampon mémoire dépasse la limite qui lui est attribuée. Il peut alors écraser l’emplacement mémoire suivant. Ce problème est plus courant dans des langages comme C et C++, qui permettent de manipuler la mémoire plus facilement.
Une analyse de sécurité du code adéquate permet souvent de détecter les débordements de mémoire dans le code source et de prévenir ainsi les comportements dangereux à l’exécution. C’est indispensable pour les développeurs de systèmes embarqués, industriels et à haut débit.
7. Conformité
Certains secteurs exigent le respect de normes telles que l’ISO. Par exemple, les normes ISO 270001 et ISO 26262 définissent des exigences précises auxquelles les logiciels doivent satisfaire pour être certifiés. L’analyse statique du code peut également aider à vérifier d’autres exigences de conformité, comme SOC pour la gestion des données clients et PCI pour les applications du secteur des paiements. Elle vous permet de vérifier la conformité de votre code actuel et de vous assurer que tout nouveau code respecte également ces exigences.
8. Licences
La plupart des projets logiciels modernes s’appuient sur des bibliothèques externes. La réutilisation du code est un avantage majeur pour les développeurs. La plupart des bibliothèques externes (modules ou frameworks, par exemple) sont assorties d’informations de licence (MIT, GPL, BSD, etc.).
Certaines licences sont entièrement gratuites, même pour un usage commercial, tandis que d’autres sont payantes. En analysant vos dépendances, l’analyse statique du code peut vérifier que vous respectez les licences de vos bibliothèques externes. Vous réduisez ainsi le risque de poursuites judiciaires à l’encontre de votre organisation.
9. Autres vérifications
Les audits de sécurité du code peuvent vérifier bien d’autres éléments, notamment le respect des normes de codage et le formatage du code. Un outil d’audit de sécurité peut automatiser une partie de la revue de code, une bonne pratique pour la revue de code sécurisée. Le plus important est que votre audit de sécurité du code recherche les types de vulnérabilités les plus susceptibles d’être présents et d’avoir le plus d’impact sur votre organisation.
Par exemple, si vous travaillez sur une base de code de système embarqué en C qui n’est reliée à aucune base de données, l’injection SQL est moins préoccupante ; en revanche, vérifier la présence de débordements de mémoire est essentiel.
Quels outils utiliser pour réaliser un audit de sécurité du code ?
Il existe différents outils de test permettant de réaliser un audit de sécurité du code, notamment :
Tests de sécurité des applications statiques (SAST) : analyse le code source pour détecter les problèmes.
Tests de sécurité des applications dynamiques (DAST) : exécute votre application et évalue sa sécurité applicative à l’aide de techniques telles que les tests d’intrusion applicatifs.
Analyse de la composition logicielle (SCA) : recherche les vulnérabilités dans les dépendances open source directes et indirectes.
Lancez-vous dans les compétitions Capture The Flag
Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.
Scans automatisés et rapports
L’intégration de scans du code dans vos pipelines CI/CD (comme GitHub Actions, GitLab ou Jenkins) est une bonne pratique recommandée. La plupart des outils CI/CD modernes permettent d’automatiser les scans, bien plus efficacement que de les réaliser manuellement. Les scans automatisés vous font gagner du temps et des efforts : ils s’exécutent uniquement lorsque nécessaire et évitent les problèmes dus aux erreurs humaines.
Selon votre situation, effectuer un scan à chaque pull request ou demande de fusion est un moyen efficace de prévenir les vulnérabilités dans votre base de code. Il est également recommandé de planifier une tâche cron pour lancer l’analyse toutes les 24 heures, car de nouvelles vulnérabilités sont constamment ajoutées à la base de données distante.
Plus votre équipe est rapidement informée d’un problème dans votre base de code, plus vite elle peut le corriger et éviter d’autres menaces. Pour réagir rapidement aux vulnérabilités détectées dans votre code source, il est important de configurer des alertes. L’intégration d’un mécanisme d’alerte à votre CI/CD est simple. Ces notifications peuvent être aussi élémentaires qu’un e-mail vous informant de l’échec de votre pipeline d’analyse statique.
Choisir un outil d’audit de sécurité du code
Pour choisir un outil d’analyse statique ou un logiciel d’audit de sécurité, plusieurs critères sont à prendre en compte :
Langage de programmation : choisissez un outil qui prend en charge le langage de programmation utilisé dans votre base de code. Certains outils d’analyse statique sont compatibles avec plusieurs langages, ce qui permet d’utiliser un seul outil pour toutes vos bases de code.
Fonctionnalités principales : pour choisir le bon outil, il est essentiel qu’il couvre les risques importants pour votre organisation et votre base de code. Selon votre secteur et vos exigences, vous n’aurez peut-être pas besoin d’un outil qui vérifie la conformité ISO ; de même, les débordements de mémoire peuvent ne pas concerner votre environnement ni votre langage de programmation.
Intégration CI/CD : la plupart des outils s’intègrent facilement à la CI/CD, ce qui est important pour automatiser le processus de scan.
Intégration à l’IDE : les outils intégrés à l’IDE permettent de lancer facilement des scans directement depuis l’environnement de développement, d’un simple clic. Vous pouvez même configurer les scans pour qu’ils s’exécutent avant un commit.
Débuter avec l’audit de sécurité du code
L’analyse du code source est un élément important des pratiques de codage sécurisé et, associée aux audits de cybersécurité, elle doit faire partie intégrante de tout programme de gestion des cyberrisques.
Compatible avec plusieurs langages de programmation modernes, comme JavaScript, Go et bien d’autres, Snyk Code détecte les vulnérabilités directement dans votre code. Snyk Open Source analyse et détecte automatiquement les vulnérabilités dans les dépendances de vos projets.
Soyez prêt pour le prochain Log4j. Sécurisez votre base de code et prévenez les menaces grâce aux outils Snyk conçus pour les développeurs. Inscrivez-vous gratuitement ou réservez une démo. Essayez notre outil de vérification du code gratuit en ligne pour voir comment Snyk Code analyse votre code à la recherche de problèmes de sécurité et de qualité.