Tu connais les familles, reste à choisir l'outil
Le billet précédent sur l'OWASP Top 10 et l'AppSec répondait à une question de principe : que font le SAST, le DAST et le SCA, et pourquoi les trois plutôt qu'un seul. La question suivante arrive vite, en général devant un fichier de pipeline vide : quel outil, concrètement, et branché où.
Ce billet est le catalogue. Pas un classement du meilleur outil, un rangement par famille avec ce que chaque outil regarde, où il tourne, et ce qu'il ne fera pas pour toi.
Le découpage suit la taxonomie du guide d'analyse de code de Stéphane Robert, qui range le sujet en SAST, DAST, SCA et fuzzing. J'emprunte sa grille parce qu'elle est stable et qu'elle colle à la façon dont les outils se branchent réellement dans une chaîne CI/CD. Les commentaires et les arbitrages qui suivent sont les miens.
Quatre familles, donc, plus une cinquième qui les recoupe toutes : les conteneurs. Un conteneur embarque du code, des dépendances, une configuration et parfois un secret oublié, ce qui en fait le point de rencontre des quatre autres analyses.
Un scanner ne vaut que par l'endroit où il tourne. Le meilleur SAST du marché branché sur une pull request que personne ne lit produit exactement zéro sécurité.
Le tout s'inscrit dans la démarche décrite dans Qu'est-ce que le DevSecOps ? : les contrôles sont automatisés, précoces, et leurs résultats remontent là où la décision se prend.
Deux sujets restent hors périmètre ici : les agents d'exécution (RASP et IAST, qui instrumentent l'application en cours de fonctionnement) et la chaîne de confiance des artefacts (signature, attestations de provenance, cadre SLSA), qui méritent leur propre billet.
Comment lire ce panorama
Chaque tableau suit les mêmes colonnes, et chacune répond à une question que tu te poses avant d'installer quoi que ce soit.
Licence reste volontairement grossière : Open source, Freemium ou Commercial. Aucun prix, aucun quota, parce que ces valeurs changent plus vite qu'un billet de blog. Freemium signifie qu'une version utilisable existe sans payer, avec des limites qui apparaissent à l'usage.
Cibles dit ce que l'outil sait lire : des langages, des formats de fichiers, des images, un schéma d'API. C'est le premier filtre. Un scanner excellent qui ne parle pas ta stack ne sert à rien.
Intégration dit où il tourne : en pre-commit sur le poste, en CI, dans l'IDE, dans le registre d'images, en service hébergé. C'est le critère que l'on sous-estime le plus, alors que c'est lui qui détermine si l'outil sera utilisé ou contourné.
Point fort ou limite donne la raison de le choisir, ou la raison de ne pas s'en contenter. Court, parce qu'un tableau n'est pas une fiche produit.
Le placement dans la chaîne compte plus que la marque. Un outil qui rend son verdict trois heures après le commit ne changera pas le comportement de l'équipe.
Le schéma ci-dessous donne le calendrier d'exécution. Il ne décrit pas un pipeline complet, seulement les cinq moments où une famille d'analyse a du sens.
secrets, SAST local"] ci["CI
SAST code + IaC, SCA"] reg["Registre
scan d'image"] rec["Recette
DAST"] cont["En continu
fuzzing, veille SCA"] pc --> ci --> reg --> rec --> cont cont -- "nouvelle CVE ou crash" --> pc classDef secrets fill:#f5f2ec,stroke:#8a4d16,color:#1a1a1a classDef statique fill:#d89253,stroke:#8a4d16,color:#1a1a1a classDef image fill:#ede9e1,stroke:#b5651d,color:#1a1a1a classDef dynamique fill:#b5651d,stroke:#5f5e5a,color:#f5f2ec classDef continu fill:#a0413e,stroke:#5f5e5a,color:#f5f2ec class pc secrets class ci statique class reg image class rec dynamique class cont continu
La flèche de retour est la partie que l'on oublie en dessinant un pipeline. Une CVE publiée trois semaines après la mise en production, ou un crash trouvé par un fuzzer qui tourne la nuit, doivent revenir au début de la chaîne. Sinon tu as un pipeline de conformité, pas un dispositif de sécurité.
SAST : trois domaines, pas un seul
Le SAST analyse sans exécuter. Il lit des fichiers, en construit une représentation, et cherche des motifs dangereux ou des chemins de données suspects entre une entrée non fiable et une opération sensible.
Réduire le SAST au code applicatif est l'erreur la plus fréquente. Dans un dépôt moderne, trois matières distinctes se lisent à froid : le code, la description de l'infrastructure, et les secrets qui traînent dans les deux.
Le SAST voit tout ce qui est écrit et rien de ce qui se passe. Il signale des chemins théoriquement dangereux, à toi de dire lesquels sont réellement atteignables.
Code applicatif
Les généralistes couvrent beaucoup de langages avec un moteur unique. C'est le socle, celui qui tourne sur toute la base de code.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Semgrep | Freemium | Une trentaine de langages | CLI, CI, pre-commit, IDE | Règles custom lisibles, écrites dans la syntaxe du langage cible, mais l'analyse inter-fichiers relève de l'offre payante. |
| SonarQube | Freemium | Multi-langage, qualité et sécurité | Serveur, CI, extension IDE | L'édition Community laisse de côté les règles les plus avancées, mais offre déjà une vue unique sur la dette technique et les failles. |
| CodeQL | Freemium | Principaux langages compilés et interprétés | GitHub Actions, CLI | Analyse sémantique interrogeable comme une base de données, très expressive. Coûteuse en temps de build et en apprentissage. |
| Bearer | Freemium | Code applicatif, orienté flux de données sensibles | CLI, CI | Cartographie les données personnelles qui traversent le code. Couverture de langages plus étroite que les généralistes. |
| Snyk Code | Freemium | Multi-langage | IDE, CLI, CI, SCM | Retour rapide directement dans l'éditeur, au prix d'un moteur propriétaire dont les règles se modifient peu. |
| Checkmarx | Commercial | Multi-langage | CI, SCM, IDE | Couverture large et support entreprise. Paramétrage et tri des résultats coûteux à mettre en place. |
| Veracode | Commercial | Multi-langage, analyse de binaires | Service d'analyse, CI | Sait analyser un artefact compilé sans accès au code source. Boucle de retour plus longue. |
| GitLab SAST | Freemium | Analyseurs par langage | Pipeline GitLab | Aucune glu à écrire si tu es déjà sur GitLab, mais la gestion des vulnérabilités demande l'offre supérieure. |
| GitHub Advanced Security | Freemium | Dépôts GitHub | Actions, onglet Security | Code, secrets et dépendances remontent au même endroit. Gratuit sur les dépôts publics, payant sur les privés. |
Trois noms manquent à cette liste et se croisent surtout dans les grands comptes, l'embarqué et l'industrie : Fortify d'OpenText, Coverity et Klocwork. Analyses profondes, licences lourdes, et une intégration CI qui demande du travail.
Les spécialisés, eux, ne parlent qu'un langage, mais ils en connaissent les idiomes et les pièges. Ils coûtent quelques secondes de CI et se posent volontiers en complément d'un généraliste.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Bandit | Open source | Python | CLI, CI, pre-commit | Rapide, règles idiomatiques Python. Reste une détection de motifs, sans suivi de flux profond. |
| Brakeman | Open source | Ruby on Rails | CLI, CI | Connaît les conventions Rails et les analyse finement. Ailleurs, aucun intérêt. |
| gosec | Open source | Go | CLI, CI | S'installe et tourne en une ligne dans un projet Go. Couverture limitée à son jeu de règles. |
| SpotBugs + Find Security Bugs | Open source | Java et bytecode JVM | Maven, Gradle, CI | Analyse le bytecode, donc voit le code réellement produit. Le volet sécurité vient du plugin, pas du moteur seul. |
| PMD | Open source | Java, Apex, JavaScript et autres | Maven, Gradle, CLI | Excellent pour écrire des règles maison, mais son catalogue de sécurité en propre reste mince. |
| ESLint et son plugin security | Open source | JavaScript, TypeScript | Build front, pre-commit | Déjà présent dans la plupart des projets front. Détection superficielle, à ne pas confondre avec un vrai SAST. |
Côté PHP, Psalm propose une analyse de teinte pour suivre une entrée non fiable jusqu'à une opération sensible. PHPStan reste centré sur le typage, ce qui élimine déjà une classe entière de bugs mais ne remplace pas un scanner de sécurité.
Infrastructure as Code
Un bucket public, un groupe de sécurité ouvert sur le monde, un conteneur qui tourne en root : ces failles ne sont pas dans le code applicatif, elles sont dans les fichiers qui décrivent la plateforme. Ce sont des fichiers texte, donc du SAST.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Checkov | Open source | Terraform, CloudFormation, Kubernetes, Helm, ARM, Dockerfile | CLI, CI, pre-commit | La couverture de formats la plus large, politiques custom en Python ou YAML. Volume d'alertes élevé au premier lancement. |
| KICS | Open source | Terraform, Kubernetes, Docker, Ansible, CloudFormation | CLI, CI | Requêtes écrites en Rego, catalogue fourni. Sorties verbeuses à filtrer. |
| tfsec | Open source | Terraform | CLI, CI | Longtemps la référence Terraform. Aqua a depuis basculé l'effort d'ingénierie sur Trivy, qui a repris son moteur d'analyse. |
| Terrascan | Open source | Terraform, Kubernetes, Helm, Kustomize | CLI, CI, admission controller | Les mêmes politiques Rego servent en CI et en garde-fou à l'admission du cluster. Dépôt archivé par Tenable, plus de maintenance. |
| Trivy en mode config | Open source | IaC, Dockerfile, manifests Kubernetes | CLI, CI, opérateur Kubernetes | Un seul binaire pour l'IaC, les images et les dépendances. Moins fin qu'un outil dédié sur les cas tordus. |
| kube-bench | Open source | Nœuds et clusters Kubernetes | Job dans le cluster | Vérifie le CIS Kubernetes Benchmark. Cible la configuration du cluster, pas tes manifests. |
| Kubescape | Open source | Manifests et clusters Kubernetes | CLI, CI, opérateur | Contrôles organisés par référentiels (CIS, NSA, MITRE ATT&CK). |
| Dockle | Open source | Images de conteneurs | CLI, CI | Contrôle les bonnes pratiques de construction d'image. Ne cherche aucune CVE. |
| hadolint | Open source | Dockerfile | CLI, CI, pre-commit | Lint du Dockerfile avec ShellCheck intégré sur les commandes RUN. Ne voit que le fichier, jamais l'image produite. |
Secrets
Une clé d'API commitée est un incident, pas une alerte. La détection se joue à deux endroits : sur le poste avant le commit, et en CI sur l'historique complet, parce qu'un secret retiré au commit suivant reste lisible dans les objets Git.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Gitleaks | Open source | Dépôts Git, historique, fichiers | pre-commit, CI, CLI | Rapide, règles TOML personnalisables, mais bruyant tant que l'allowlist n'est pas entretenue. |
| TruffleHog | Open source | Git, systèmes de fichiers, images, stockages objet | CLI, CI | Vérifie si le secret trouvé est encore actif, de quoi trier par ordre d'urgence. Analyse d'historique longue sur les gros dépôts. |
| detect-secrets | Open source | Fichiers et dépôts | pre-commit, CI | Fige les faux positifs connus dans une baseline versionnée, qu'il faut ensuite maintenir. |
| git-secrets | Open source | Commits Git | hook pre-commit | Très simple à poser, orienté clés AWS. Peu de règles au-delà. |
| GitGuardian | Freemium | Dépôts, CI, périmètre SaaS | SCM, CI, agent | Détection et suivi des incidents dans un tableau de bord dédié. Service externe à intégrer et à autoriser. |
| Talisman | Open source | Commits Git | hook pre-commit ou pre-push | Se pose globalement sur le poste, tous dépôts confondus. Détection basique. |
Détecter ne suffit pas. Un secret trouvé dans l'historique doit être révoqué et remplacé, jamais simplement supprimé du fichier. Et si des secrets réapparaissent régulièrement dans le code, c'est qu'il manque un coffre en amont.
Côté stockage, Vault centralise et distribue des identifiants dynamiques, SOPS chiffre des fichiers de configuration versionnés, Sealed Secrets permet de committer un secret Kubernetes sans le révéler, et External Secrets synchronise un coffre externe vers le cluster.
Quatre critères suffisent à trancher entre tous ces outils.
- Langages et formats couverts. Un scanner qui ignore la moitié de ton dépôt donne un faux sentiment de couverture. Vérifie la liste avant le tableau comparatif.
- Règles custom et faux positifs. Le taux de détection annoncé compte moins que ta capacité à écrire une règle métier et à taire une alerte de façon durable et tracée.
- pre-commit ou pull request. Le pre-commit donne un retour en secondes mais reste contournable. La pull request est le point de contrôle qui compte, parce qu'il est visible et opposable.
- Stratégie de blocage. Bloque sur Critical et High, alerte sur Medium, ignore le reste au démarrage. Un pipeline qui casse sur tout est désactivé en deux semaines.
DAST : trois types de scanners
Le DAST attaque l'application en fonctionnement, sans regarder son code. Il envoie des requêtes malformées, observe les réponses, et conclut. Trois profils d'outils cohabitent sous ce sigle, et ils ne servent pas au même usage.
Les scanners automatisés explorent l'application puis rejouent des attaques génériques sur ce qu'ils ont trouvé.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| OWASP ZAP | Open source | Web, API | Docker, CI, proxy, interface graphique | Le plus complet côté libre, avec des modes taillés pour la CI. La configuration de l'authentification demande de la patience. |
| Burp Suite | Freemium | Web, API | Poste de travail, extensions | La référence du test manuel et de l'exploration fine. L'édition Community n'inclut pas le scanner automatisé. |
| Dastardly | Freemium | Applications web en CI | Conteneur dans un job CI | Scan court, pensé pour ne pas ralentir un pipeline, au prix d'un sous-ensemble de contrôles assumé. |
| Nikto | Open source | Serveurs web | CLI, CI | Repère fichiers oubliés et configurations connues. Ne comprend pas les applications JavaScript modernes. |
| Wapiti | Open source | Web | CLI | Léger, sans infrastructure à monter. Couverture plus étroite que ZAP. |
| Acunetix | Commercial | Web, API | Scanner hébergé ou installé | Exploration solide des applications riches. Licence par cible. |
| Invicti | Commercial | Web, API | SaaS ou installé, CI | Revendique une validation automatique des résultats pour réduire le tri manuel. |
| StackHawk | Freemium | Web, API | CI, configuration par application | Construit sur ZAP, avec une configuration versionnée à côté du code. |
| Rapid7 InsightAppSec | Commercial | Web | SaaS | Cohérent si tu utilises déjà la plateforme Insight. |
| Qualys WAS | Commercial | Web, API | SaaS | Se raccorde à l'inventaire d'actifs Qualys. |
| Detectify | Commercial | Web, surface exposée | SaaS | Orienté découverte et surveillance de la surface externe. |
| Probely | Commercial | Web, API | SaaS, CI | Pensé pour être piloté par les équipes de développement via API. |
Tenable Web App Scanning complète la liste côté suites d'entreprise, dans la même logique d'intégration à un inventaire existant.
Les scanners à templates fonctionnent autrement : ils ne raisonnent pas, ils rejouent une bibliothèque de signatures.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Nuclei | Open source | Web, API, réseau, services cloud | CLI, CI | Catalogue de templates YAML communautaire, très réactif après une CVE publique. Détecte du connu, ne découvre rien d'inédit. |
| Nmap et ses scripts NSE | Open source | Hôtes, ports, services | CLI | Va au-delà du port ouvert et interroge le service. Ce n'est pas un scanner applicatif. |
| sqlmap | Open source | Points d'injection SQL | CLI | Exploitation approfondie d'une injection identifiée. Outil offensif, à n'utiliser que sur une cible autorisée. |
Les proxies d'interception, enfin, ne scannent pas : ils te placent au milieu du trafic pour comprendre et rejouer.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Burp Suite | Freemium | Trafic HTTP et HTTPS | Proxy local, navigateur intégré | L'outil de travail du test manuel, avec historique et rejeu. |
| mitmproxy | Open source | HTTP, HTTPS, WebSocket | CLI, interface web, scripts Python | Scriptable, parfait pour modifier du trafic à la volée. Ne cherche aucune vulnérabilité tout seul. |
| OWASP ZAP en mode proxy | Open source | Trafic HTTP et HTTPS | Proxy, navigateur | Sert à cartographier l'application avant de lancer un scan actif. |
Trois réglages décident du résultat. Le mode d'abord : un scan baseline se contente de parcourir l'application et de signaler les problèmes passifs en quelques minutes, un scan d'API part d'une définition OpenAPI, un scan complet lance les attaques actives et prend des heures. Commence par le baseline en CI, garde le complet pour une exécution nocturne.
L'authentification ensuite. Un scanner non authentifié ne voit que les pages publiques, soit la partie la moins intéressante. Fournir un jeton valide et un moyen de le renouveler est ce qui sépare un rapport décoratif d'un rapport utile.
Les exclusions enfin. Sans liste noire, le scanner trouvera le bouton de déconnexion et perdra sa session, ou déclenchera un endpoint destructeur. Excluer /logout, les suppressions en masse et les envois de mails fait partie de la configuration initiale.
docker run -v $(pwd):/zap/wrk/:rw -t ghcr.io/zaproxy/zaproxy:stable \
zap-baseline.py -t https://recette.exemple.internal -r rapport.html
Un DAST ne trouve que ce qu'il atteint. S'il ne sait pas s'authentifier ni parcourir ton application, son rapport vide ne veut pas dire que tout va bien.
Et une règle sans exception : jamais sur la production. Un scan actif crée des comptes, remplit des formulaires, déclenche des traitements. Il s'exécute sur une recette dont les données sont jetables.
SCA : inventorier avant de scanner
Le SCA répond à une question simple qui a une réponse difficile : qu'est-ce que mon application embarque exactement. Tout le reste, la corrélation avec les bases de failles, le calcul de sévérité, la remédiation, découle de cet inventaire.
Les scanners en ligne de commande sont le point d'entrée. Ils lisent un fichier de verrouillage ou un arbre de dépendances, et le confrontent à une base de vulnérabilités.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Trivy | Open source | Dépendances, images, IaC, secrets, SBOM | CLI, CI, opérateur Kubernetes | Couvre presque tout en un binaire sans dépendance. La largeur se paie en finesse sur certains écosystèmes. |
| Grype | Open source | Dépendances, images, SBOM | CLI, CI | Se combine avec Syft pour scanner un SBOM plutôt que le projet. Aucun suivi dans le temps. |
| OWASP Dependency-Check | Open source | Java, .NET et autres via analyseurs | CLI, Maven, Gradle, CI | Projet historique, adossé à la NVD. Base à synchroniser et faux positifs liés à la correspondance des identifiants. |
| OSV-Scanner | Open source | Nombreux écosystèmes via la base OSV | CLI, CI | Données précises et versionnées par écosystème, sur un périmètre assumé : les dépendances, rien d'autre. |
| npm audit | Open source | Écosystème npm | CLI, CI | Déjà installé, zéro configuration. Beaucoup de bruit sur les dépendances de développement. |
| pip-audit | Open source | Python | CLI, CI | Maintenu par la PyPA, aligné sur PyPI et OSV. Ne couvre que Python. |
| cargo-audit | Open source | Rust | CLI, CI | Adossé à la base RustSec, très propre. Ne couvre que Rust. |
Un scanner CLI dit ce qui est vulnérable aujourd'hui, au moment où il tourne. Une plateforme, elle, garde l'inventaire et le réévalue quand une nouvelle faille est publiée. C'est le rôle de Dependency-Track, qui ingère des SBOM au format CycloneDX et sait donc te dire, sans relancer un build, quels projets embarquent le composant qui vient d'exploser.
syft dir:. -o cyclonedx-json > sbom.json
grype sbom:sbom.json --fail-on high
Les suites commerciales ajoutent la remédiation guidée, le volet licences et le suivi de conformité.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Snyk | Freemium | Dépendances, conteneurs, IaC, code | CLI, CI, SCM, IDE | Couverture large et expérience développeur soignée. Quotas serrés hors abonnement. |
| Mend | Commercial | Dépendances, licences | CI, SCM | Correctifs proposés automatiquement et gestion des licences. |
| Black Duck | Commercial | Dépendances, licences, binaires | CI, build | Référence de l'audit de conformité open source. |
| Sonatype | Commercial | Dépendances, dépôts d'artefacts | Dépôt interne, CI | Bloque les composants au niveau du dépôt, avant même le build. |
| JFrog Xray | Commercial | Artefacts, images, dépendances | Artifactory, CI | Analyse récursive des artefacts déjà stockés. |
| FOSSA | Commercial | Licences et dépendances | CI, SCM | Orienté conformité et obligations de licence. |
| Endor Labs | Commercial | Dépendances, atteignabilité | CI, SCM | Écarte les CVE présentes mais jamais appelées par ton code. |
| Socket | Freemium | Paquets npm, PyPI et autres | Application SCM, CI | Cherche les comportements suspects d'un paquet plutôt que les seules CVE connues. |
Deux outils sont souvent rangés ici par erreur : Dependabot et Renovate. Ils ne scannent pas, ils mettent à jour. Ils ouvrent une pull request quand une version plus récente existe, ce qui règle une bonne part du problème sans jamais produire d'inventaire. Un SCA détecte, un updater corrige, les deux sont complémentaires.
Reste la question de l'inventaire lui-même. Syft génère un SBOM à partir d'un répertoire ou d'une image, au format CycloneDX ou SPDX. Le premier porte nativement des informations de vulnérabilité et de VEX, le second est un standard normalisé très présent côté conformité.
VEX sert à dire « cette CVE est présente mais pas exploitable chez nous », avec une justification tracée. Sans ce mécanisme, une équipe finit par ignorer un rapport dont l'essentiel des lignes est hors sujet.
Un dernier point structure tout le reste : la différence entre dépendances directes et transitives. Tu déclares une quinzaine de bibliothèques, ton node_modules en contient mille. La quasi-totalité des alertes SCA porte sur des composants que tu n'as jamais choisis, souvent tirés à trois niveaux de profondeur. D'où l'importance de savoir remonter la chaîne pour identifier quelle dépendance directe mettre à jour.
Fuzzing : ni SAST ni DAST
Le fuzzing occupe une case à part. Il exécute le code, comme un DAST, mais il vise une fonction ou un parseur plutôt qu'une URL, et il génère lui-même ses entrées au lieu de rejouer un catalogue. Son terrain de prédilection : tout ce qui lit un format binaire, un protocole ou une entrée non structurée.
| Famille | Principe | Exemple |
|---|---|---|
| Coverage-guided | Le binaire est instrumenté, et le fuzzer conserve les entrées qui font découvrir de nouveaux chemins d'exécution | AFL++, libFuzzer |
| Black-box | Aucune visibilité sur l'intérieur, on envoie du trafic sur une interface et on observe les réactions | boofuzz sur un protocole réseau |
| Mutation | On part d'un corpus d'entrées valides que l'on altère progressivement | AFL++ alimenté par un corpus de fichiers réels |
| Génération ou structure-aware | Les entrées sont construites depuis une grammaire ou un schéma, donc valides par construction | Schemathesis à partir d'un schéma OpenAPI |
La distinction compte au moment de choisir. Un fuzzer coverage-guided finit par atteindre les branches profondes d'un parseur, mais il lui faut une cible instrumentable. Un fuzzer structure-aware franchit d'emblée les validations d'entrée, ce qui le rend bien plus efficace sur une API qui rejette d'emblée les requêtes aléatoires.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| libFuzzer | Open source | C et C++ compilés avec Clang | Build LLVM | Fuzzing dans le processus, donc très rapide. La documentation LLVM le décrit en mode maintenance. |
| AFL++ | Open source | Binaires natifs, avec ou sans source | CLI, conteneur | Fork communautaire actif d'AFL, riche en modes et en instrumentations. La prise en main se mérite. |
| honggfuzz | Open source | C, C++, binaires | CLI | Bon rendement sur cible native, mode persistant efficace. |
| atheris | Open source | Python et extensions natives | Script de fuzz, CI | Porte libFuzzer sur Python. Surtout pertinent sur les fonctions de parsing. |
| Fuzzing natif Go | Open source | Go | go test |
Intégré à la chaîne d'outils standard, corpus versionné dans le dépôt. Le coût d'entrée le plus bas de la liste. |
| Jazzer | Open source | JVM (Java, Kotlin) | JUnit, CLI | Fuzzing coverage-guided sur la JVM, avec des détecteurs de bugs applicatifs. |
| cargo-fuzz | Open source | Rust | Cargo | Branche libFuzzer sur un projet Rust en quelques commandes. Demande la toolchain nightly. |
| ASan et UBSan | Open source | C, C++ | Options de compilation | Transforment une corruption mémoire silencieuse en crash net et localisé. Coût important en performance. |
| OSS-Fuzz | Open source | Projets open source éligibles | Intégration hébergée | Fuzzing continu offert aux projets acceptés, avec remontée automatique des crashs. |
| ClusterFuzz | Open source | Infrastructure de fuzzing | Déploiement dédié | Le moteur derrière OSS-Fuzz, déployable en interne. Lourd à opérer. |
| Schemathesis | Open source | API décrites en OpenAPI ou GraphQL | CLI, pytest, CI | Génère les cas depuis le schéma et vérifie que les réponses le respectent. |
| RESTler | Open source | API REST avec spécification OpenAPI | CLI | Fuzzing avec état, enchaîne les requêtes pour atteindre des scénarios profonds. Mise en route exigeante. |
| boofuzz | Open source | Protocoles réseau | Scripts Python | Successeur de Sulley, adapté aux protocoles maison et à l'embarqué. |
Les sanitizers méritent une mention à part : sans eux, un fuzzer trouve une entrée qui plante, ou pire, une entrée qui corrompt la mémoire sans rien signaler. Avec eux, chaque anomalie devient un rapport exploitable.
Le fuzzing prouve la présence de bugs, jamais leur absence. Une campagne sans crash signifie que le fuzzer n'a rien trouvé dans le temps qui lui a été donné, pas que le code est sûr.
Une campagne se juge donc sur la durée, la qualité du corpus initial et la couverture atteinte. C'est ce qui explique que le fuzzing tourne en continu plutôt qu'à chaque commit. Le contrôle Fuzzing d'OpenSSF Scorecard vérifie d'ailleurs simplement qu'un projet en fait, signe qu'il s'agit désormais d'un critère de maturité et non d'une curiosité de chercheur.
Conteneurs : la famille transverse
Une image de conteneur est un empilement : une distribution de base, ses paquets système, tes dépendances applicatives, ton code, et une configuration d'exécution. Chaque couche relève d'une famille d'analyse déjà vue, d'où le statut particulier de cette catégorie.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Trivy | Open source | Paquets système et dépendances applicatives d'une image | CLI, CI, opérateur Kubernetes | Le plus simple à mettre en place, résultats immédiats. |
| Grype | Open source | Images et SBOM | CLI, CI | Se combine avec Syft pour séparer inventaire et analyse. |
| Clair | Open source | Images stockées dans un registre | Service, API | Conçu comme un service d'analyse de registre. Demande à être opéré. |
| Docker Scout | Freemium | Images Docker | CLI, Docker Hub, CI | Intégré à l'outillage Docker, avec suggestions d'image de base plus saine. |
| Snyk Container | Freemium | Images, Dockerfile | CLI, CI, registre | Relie la CVE à la ligne du Dockerfile qui l'introduit. |
| Anchore | Commercial | Images, SBOM, politiques | Service, CI | Volet politique et conformité au-dessus de Syft et Grype. |
Le registre est l'endroit le plus rentable pour scanner : toutes les images y passent, y compris celles construites hors de ta CI. Harbor intègre nativement cette analyse et sait refuser la récupération d'une image dont la sévérité dépasse un seuil, ce qui transforme le rapport en garde-fou effectif.
La configuration de construction, elle, relève des outils déjà cités côté IaC : hadolint sur le Dockerfile, Dockle sur l'image produite. Les deux répondent à des questions différentes, l'un sur ce que tu as écrit, l'autre sur ce que tu as obtenu.
Côté plateformes, Aqua, Sysdig, Prisma Cloud et Wiz couvrent la chaîne complète, du scan d'image à la posture du cluster et des comptes cloud. Elles s'adressent à des parcs où le nombre d'images rend le suivi manuel impossible.
Scanner une image ne dit rien de ce qu'elle fait une fois démarrée. Un conteneur sans CVE peut très bien lancer un shell inattendu à trois heures du matin.
Cette surveillance du comportement à l'exécution est un autre métier, celui de Falco et des outils de détection runtime, hors périmètre de ce panorama.
Plateformes ASPM : tout agréger
Une fois les familles précédentes en place, un nouveau problème apparaît : sept outils, sept formats de rapport, sept listes de vulnérabilités qui se recoupent partiellement, et aucune vue d'ensemble. C'est le créneau de l'ASPM (Application Security Posture Management) : agréger, dédupliquer, prioriser et suivre la correction.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| OX Security | Freemium | Code, dépendances, secrets, IaC, SBOM, chaîne d'approvisionnement | SCM, CI, cloud | Suit une faille du code jusqu'au runtime, avec des modules distincts pour le code, le cloud, le code généré par IA (OX VibeSec) et le pentest agentique. |
| GitHub Advanced Security | Freemium | Dépôts GitHub | Actions, onglet Security | Code scanning, secrets et dépendances au même endroit, sans intégration à écrire. Périmètre limité à GitHub. |
| GitLab Ultimate | Commercial | Dépôts et pipelines GitLab | Pipeline natif | Tableau de bord de vulnérabilités unifié pour tous les analyseurs GitLab. |
| Snyk | Freemium | Code, dépendances, conteneurs, IaC | CLI, CI, SCM, IDE | Couverture des quatre familles avec une seule intégration. |
| Checkmarx One | Commercial | Code, dépendances, API, IaC | CI, SCM | Suite complète issue d'un éditeur SAST historique. |
| Veracode | Commercial | Code, binaires, dépendances | Service d'analyse, CI | Analyse d'artefacts compilés et suivi de conformité. |
| DefectDojo | Open source | Rapports de dizaines de scanners | Import de rapports, API | L'agrégateur libre de référence, sans dépendre d'un éditeur. À héberger et à alimenter toi-même. |
Cycode, Apiiro et ArmorCode occupent le même segment, sur la même promesse d'agrégation et de priorisation. Je n'ai pas de retour d'usage à en donner.
Une plateforme ASPM remplace la glu entre les outils, pas les outils eux-mêmes. Sous le capot, ce sont toujours un SAST, un SCA et un scanner d'images qui produisent les résultats.
Le critère de décision est prosaïque : si tu passes plus de temps à recoller des rapports qu'à corriger des failles, la plateforme se justifie. Avant ce seuil, DefectDojo et un tableur suffisent souvent.
Ouverture : l'IA entre dans la chaîne
Trois évolutions récentes touchent directement l'outillage décrit plus haut. Aucune ne remplace une famille existante, toutes en déplacent l'usage.
L'IA ne supprime pas les faux positifs, elle en change la nature. Une alerte fausse coûte cinq minutes de lecture, un correctif faux entre en production.
Les scanners assistés par IA
L'assistance porte sur les deux tâches les plus ingrates de l'AppSec : trier des alertes et écrire le correctif.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| GitHub Copilot Autofix | Freemium | Alertes de code scanning | Pull request GitHub | Propose un correctif directement dans la PR, avec le contexte de l'alerte. La documentation insiste sur la revue humaine obligatoire. |
| Snyk DeepCode AI | Freemium | Code applicatif | IDE, CLI, CI | Correctifs suggérés à partir des motifs appris sur le code corrigé ailleurs. |
| OX VibeSec | Commercial | Code généré par IA | Plateforme OX | Cible spécifiquement le code produit par les assistants de codage. |
Semgrep Assistant et SonarQube AI CodeFix jouent sur le même terrain, respectivement pour le tri des résultats et la proposition de correctif dans l'interface de l'outil.
Le déplacement est net : le travail du relecteur glisse de « lire les alertes » à « valider les correctifs proposés ». Le second exercice est plus rapide mais plus dangereux, parce qu'un correctif plausible et faux passe plus facilement qu'une alerte incompréhensible.
MCP : brancher les scanners sur les agents
Le Model Context Protocol est un protocole ouvert qui standardise la façon dont un modèle accède à des outils et à des données externes, via des serveurs déclarés côté client. Deux mouvements opposés en découlent côté sécurité.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| Semgrep MCP | Open source | Code analysé par Semgrep | Serveur MCP | Un agent de code peut lancer une analyse et lire ses résultats sans quitter la conversation. |
| Trivy MCP | Open source | Dépendances, images, IaC | Serveur MCP | Même logique côté SCA et conteneurs. |
| Snyk Agent Scan, ex mcp-scan d'Invariant Labs | Open source | Serveurs MCP eux-mêmes | CLI | Détecte le tool poisoning, l'injection de prompt et le tool shadowing dans les descriptions d'outils exposées. |
Le second mouvement mérite qu'on s'y arrête. Un serveur MCP installé sur ton poste ou dans ton agent est du code tiers qui reçoit du contexte, obtient des jetons et exécute des actions. C'est un point d'entrée de chaîne d'approvisionnement, au même titre qu'un paquet npm, avec une surface d'attaque particulière : la description d'un outil est lue par le modèle, donc elle peut contenir des instructions.
La discipline à appliquer est celle que tu appliques déjà aux dépendances. Épingler les versions, vérifier l'origine, scanner les secrets exposés dans la configuration, et relire ce qu'un serveur déclare avant de l'autoriser.
Tester les LLM et les agents
Quand ton application expose un modèle, les familles classiques ne couvrent plus le risque principal. Un prompt système contourné ne se voit ni dans le SAST ni dans le SCA.
Le OWASP Top 10 for LLM Applications sert de carte des risques, exactement comme le Top 10 web sert de carte pour une API. Les outils ci-dessous en sont le pendant outillé.
| Outil | Licence | Cibles | Intégration | Point fort ou limite |
|---|---|---|---|---|
| garak | Open source | LLM et points d'accès de génération | CLI, CI | Batterie de sondes sur l'injection de prompt, le contournement de garde-fous et la fuite de données. |
| promptfoo | Open source | LLM, agents, serveurs MCP | CLI, CI | Évaluation et red-teaming pilotés par fichier de configuration, avec un proxy pour observer les échanges MCP. |
| PyRIT | Open source | LLM et systèmes génératifs | Bibliothèque Python | Cadre d'automatisation du red-teaming, orienté équipes offensives. |
| LLM Guard | Open source | Entrées et sorties de LLM | Bibliothèque Python | Garde-fous à l'exécution (filtrage, anonymisation), donc il protège plus qu'il ne teste. Dépôt passé en archive publique. |
| Purple Llama | Open source | Modèles et garde-fous | Bibliothèques et jeux d'évaluation | Regroupe des évaluations de risque cyber et des classificateurs de garde-fou. |
La bonne façon de les situer : ce sont les DAST des applications IA. Ils attaquent un système en fonctionnement, depuis l'extérieur, sans rien savoir de ses poids ni de son prompt. Et comme un DAST, ils ne prouvent rien, ils explorent.
Quelle combinaison selon ton contexte
Personne n'installe trente outils. La bonne question est celle du premier lot, cohérent et tenable, quitte à l'étendre ensuite.
| Contexte | Combinaison |
|---|---|
| Solo ou homelab | Semgrep et Gitleaks en pre-commit, Trivy sur les images et les dépendances, ZAP en mode baseline sur la recette. Le fuzzing natif Go ou atheris si tu publies une bibliothèque, promptfoo si tu exposes un LLM ou un serveur MCP. |
| PME | SonarQube Community pour le code, Checkov sur l'IaC, Dependency-Track alimenté par un SBOM à chaque build, Gitleaks en CI, Harbor avec Trivy au registre, ZAP en recette, Snyk Agent Scan sur les serveurs MCP installés. |
| Entreprise | Une plateforme ASPM pour l'agrégation, un DAST commercial pour la couverture et l'authentification complexe, un SCA commercial pour la remédiation et les licences, une campagne de fuzzing continue sur les composants critiques, du red-teaming LLM régulier. |
Une remarque sur l'ordre d'installation. Commence toujours par la détection de secrets, parce que c'est le contrôle au meilleur rapport valeur sur effort, puis le SCA, parce que la majorité des vulnérabilités exploitables vient des dépendances. Le SAST et le DAST arrivent ensuite, quand l'équipe a pris l'habitude de traiter les alertes plutôt que de les accumuler.
Un outil de plus dans un pipeline dont personne ne lit les résultats dégrade la sécurité, parce qu'il fabrique la croyance qu'un contrôle existe.
Ce panorama reste théorique tant qu'il n'est pas confronté à une installation réelle. C'est l'objet du prochain billet côté lab, la cartographie de mon SOC homelab en sept couches, avec ce que j'ai réellement déployé et surtout ce qui manque encore.
Points clés
- Le SAST couvre trois domaines, pas un seul : le code applicatif, l'Infrastructure as Code et les secrets. Négliger les deux derniers laisse une base de code propre sur une plateforme ouverte.
- Le DAST regroupe trois profils d'outils : scanners automatisés, scanners à templates et proxies d'interception. Sans authentification configurée ni exclusions, son rapport ne vaut rien, et il ne tourne jamais sur la production.
- Le SCA commence par l'inventaire. Un SBOM versionné et une plateforme qui le réévalue valent mieux qu'un scan ponctuel, et un updater comme Renovate corrige sans jamais scanner.
- Le fuzzing est une campagne, pas une étape de CI. Il prouve la présence de bugs, jamais leur absence, et n'a de sens qu'associé à des sanitizers et à un corpus soigné.
- L'IA déplace le travail plus qu'elle ne le supprime : correctifs à valider plutôt qu'alertes à lire, serveurs MCP à traiter comme des dépendances, applications LLM à tester avec leur propre outillage.
Pour aller plus loin
- Le guide de Stéphane Robert, dont ce billet reprend la taxonomie : SAST, DAST, SCA et fuzzing
- OWASP Source Code Analysis Tools et OWASP Vulnerability Scanning Tools, les listes communautaires de référence
- OWASP Top 10 pour la carte des risques web, et OWASP Top 10 for LLM Applications pour son équivalent côté IA
- La spécification du Model Context Protocol, pour comprendre ce qu'un serveur MCP expose réellement
- Sécuriser le code et les API : OWASP Top 10, SAST, DAST, SCA, le billet qui pose les familles avant ce catalogue
- Qu'est-ce que le DevSecOps ?, pour replacer tout cet outillage dans une démarche d'équipe