{"id":519,"date":"2026-03-15T16:38:00","date_gmt":"2026-03-15T15:38:00","guid":{"rendered":"https:\/\/secure-pipelines.com\/?p=519"},"modified":"2026-03-25T12:32:42","modified_gmt":"2026-03-25T11:32:42","slug":"sbom-tools-compared-syft-trivy-cyclonedx-cli","status":"publish","type":"post","link":"https:\/\/secure-pipelines.com\/fr\/ci-cd-security\/sbom-tools-compared-syft-trivy-cyclonedx-cli\/","title":{"rendered":"Outils SBOM Compar\u00e9s : Syft vs Trivy vs CycloneDX CLI"},"content":{"rendered":"<h2>Pourquoi les SBOMs sont importants : l&#8217;imp\u00e9ratif r\u00e9glementaire et s\u00e9curitaire<\/h2>\n<p>Un Software Bill of Materials (SBOM) est un inventaire formel et lisible par machine de chaque composant, biblioth\u00e8que et d\u00e9pendance qui constitue un logiciel. Consid\u00e9rez-le comme l&#8217;\u00e9tiquette nutritionnelle de votre application \u2014 sauf qu&#8217;au lieu des calories et du sodium, vous r\u00e9pertoriez les paquets, versions, licences et donn\u00e9es de provenance.<\/p>\n<p>Les SBOMs sont pass\u00e9s du statut de \u00ab nice-to-have \u00bb \u00e0 celui d&#8217;exigence r\u00e9glementaire. Deux politiques majeures stimulent leur adoption dans tous les secteurs :<\/p>\n<h3>Executive Order 14028 (\u00c9tats-Unis)<\/h3>\n<p>Sign\u00e9 en mai 2021, l&#8217;<strong>EO 14028<\/strong> \u2014 \u00ab Improving the Nation&#8217;s Cybersecurity \u00bb \u2014 impose que tout logiciel vendu au gouvernement f\u00e9d\u00e9ral am\u00e9ricain inclue un SBOM. Ce d\u00e9cret a charg\u00e9 le NIST de d\u00e9finir les \u00e9l\u00e9ments minimaux d&#8217;un SBOM, ce qui a abouti \u00e0 des recommandations align\u00e9es sur les normes SBOM de la NTIA. Si votre organisation vend \u00e0 des agences gouvernementales, la g\u00e9n\u00e9ration de SBOMs n&#8217;est plus optionnelle \u2014 c&#8217;est un pr\u00e9requis d&#8217;approvisionnement.<\/p>\n<h3>EU Cyber Resilience Act (CRA)<\/h3>\n<p>Le <strong>EU Cyber Resilience Act<\/strong>, entr\u00e9 en vigueur en 2024, exige des fabricants et distributeurs de produits comportant des \u00e9l\u00e9ments num\u00e9riques qu&#8217;ils fournissent des SBOMs dans le cadre de leur \u00e9valuation de conformit\u00e9. Le CRA s&#8217;applique largement \u2014 des appareils IoT aux plateformes SaaS d&#8217;entreprise. Avec des \u00e9ch\u00e9ances d&#8217;application qui s&#8217;acc\u00e9l\u00e8rent en 2026 et 2027, les producteurs de logiciels destin\u00e9s au march\u00e9 europ\u00e9en doivent int\u00e9grer la g\u00e9n\u00e9ration de SBOMs dans leurs processus de build d\u00e8s maintenant.<\/p>\n<h3>Au-del\u00e0 de la conformit\u00e9 : la valeur op\u00e9rationnelle<\/h3>\n<p>Outre les moteurs r\u00e9glementaires, les SBOMs apportent des b\u00e9n\u00e9fices op\u00e9rationnels concrets :<\/p>\n<ul>\n<li><strong>R\u00e9ponse aux vuln\u00e9rabilit\u00e9s :<\/strong> Lorsqu&#8217;un nouveau CVE est publi\u00e9 (comme Log4Shell), un SBOM vous permet de d\u00e9terminer instantan\u00e9ment quels produits et d\u00e9ploiements sont affect\u00e9s.<\/li>\n<li><strong>Conformit\u00e9 des licences :<\/strong> Les SBOMs \u00e9num\u00e8rent les licences dans votre arbre de d\u00e9pendances, signalant les licences copyleft ou incompatibles avant qu&#8217;elles ne deviennent des probl\u00e8mes juridiques.<\/li>\n<li><strong>Transparence de la cha\u00eene d&#8217;approvisionnement :<\/strong> Les SBOMs cr\u00e9ent une cha\u00eene de tra\u00e7abilit\u00e9 auditable, permettant aux consommateurs en aval de v\u00e9rifier exactement ce qu&#8217;ils ex\u00e9cutent.<\/li>\n<li><strong>Forensique d&#8217;incidents :<\/strong> Lors d&#8217;enqu\u00eates sur des violations, les SBOMs acc\u00e9l\u00e8rent l&#8217;analyse des causes profondes en fournissant un inventaire pr\u00e9cis des composants au moment du build.<\/li>\n<\/ul>\n<p>La question n&#8217;est plus de savoir <em>si<\/em> vous devez g\u00e9n\u00e9rer des SBOMs, mais <em>quel outil<\/em> utiliser. Dans ce comparatif, nous \u00e9valuons trois g\u00e9n\u00e9rateurs SBOM open source de premier plan : <strong>Syft<\/strong>, <strong>Trivy<\/strong> et <strong>CycloneDX CLI<\/strong>.<\/p>\n<h2>Syft : le g\u00e9n\u00e9rateur SBOM d\u00e9di\u00e9 d&#8217;Anchore<\/h2>\n<p><a href=\"https:\/\/github.com\/anchore\/syft\" target=\"_blank\" rel=\"noopener\">Syft<\/a> est d\u00e9velopp\u00e9 par <strong>Anchore<\/strong> et est con\u00e7u pour faire une seule chose exceptionnellement bien : g\u00e9n\u00e9rer des SBOMs pr\u00e9cis et complets. C&#8217;est un outil SBOM d\u00e9di\u00e9, et non un scanner qui produit des SBOMs comme effet secondaire.<\/p>\n<h3>Capacit\u00e9s cl\u00e9s<\/h3>\n<ul>\n<li><strong>Formats de sortie :<\/strong> SPDX (JSON, tag-value), CycloneDX (JSON, XML), JSON natif de Syft, et format de snapshot de d\u00e9pendances GitHub.<\/li>\n<li><strong>Types de sources :<\/strong> Images de conteneurs (depuis des registres, tarballs ou le daemon Docker), syst\u00e8mes de fichiers, r\u00e9pertoires et fichiers d&#8217;archives (tar, zip, jar, war).<\/li>\n<li><strong>\u00c9cosyst\u00e8mes de langages :<\/strong> Excellente couverture \u2014 Go, Java (Maven\/Gradle), JavaScript (npm\/yarn), Python (pip\/Poetry\/Pipenv), Ruby, Rust, PHP (Composer), .NET (NuGet), C\/C++ (Conan), Swift, Dart, Haskell, et plus encore.<\/li>\n<li><strong>Catalogueurs de paquets :<\/strong> Syft utilise une architecture de catalogueurs modulaire. Chaque \u00e9cosyst\u00e8me poss\u00e8de son propre catalogueur qui comprend les fichiers de verrouillage natifs, les manifestes et les artefacts binaires. Cela produit des r\u00e9sultats tr\u00e8s pr\u00e9cis.<\/li>\n<li><strong>Support des attestations :<\/strong> Syft s&#8217;int\u00e8gre \u00e9troitement avec les frameworks d&#8217;attestation <code>cosign<\/code> et <code>in-toto<\/code>. Vous pouvez diriger la sortie SBOM de Syft directement dans <code>cosign attest<\/code> pour produire des attestations SBOM sign\u00e9es.<\/li>\n<\/ul>\n<h3>Points forts<\/h3>\n<p>La focalisation unique de Syft sur la g\u00e9n\u00e9ration de SBOMs signifie qu&#8217;il poss\u00e8de la couverture de catalogueurs la plus approfondie de tous les outils de ce comparatif. Il d\u00e9tecte des composants que d&#8217;autres outils manquent \u2014 en particulier les paquets binaires compil\u00e9s dans les binaires Go et Rust, et les d\u00e9pendances imbriqu\u00e9es dans les uber-jars Java. Sa flexibilit\u00e9 de formats de sortie est in\u00e9gal\u00e9e, et il s&#8217;int\u00e8gre nativement avec le scanner de vuln\u00e9rabilit\u00e9s Grype d&#8217;Anchore.<\/p>\n<h3>Limitations<\/h3>\n<p>Syft n&#8217;effectue pas lui-m\u00eame de scan de vuln\u00e9rabilit\u00e9s. Vous devez l&#8217;associer \u00e0 <strong>Grype<\/strong> ou un autre scanner. C&#8217;est sans doute un point fort (philosophie Unix : faire une seule chose bien), mais cela implique un outil suppl\u00e9mentaire dans votre pipeline.<\/p>\n<h3>Exemple d&#8217;utilisation<\/h3>\n<pre><code># G\u00e9n\u00e9rer un SBOM CycloneDX \u00e0 partir d'une image de conteneur\nsyft packages registry.example.com\/myapp:latest -o cyclonedx-json > sbom.cdx.json\n\n# G\u00e9n\u00e9rer un SBOM SPDX \u00e0 partir d'un r\u00e9pertoire local\nsyft dir:\/path\/to\/source -o spdx-json > sbom.spdx.json\n\n# Attester le SBOM avec cosign\ncosign attest --predicate sbom.cdx.json --type cyclonedx my-image:latest<\/code><\/pre>\n<h2>Trivy : le scanner tout-en-un d&#8217;Aqua Security avec mode SBOM<\/h2>\n<p><a href=\"https:\/\/github.com\/aquasecurity\/trivy\" target=\"_blank\" rel=\"noopener\">Trivy<\/a> est d\u00e9velopp\u00e9 par <strong>Aqua Security<\/strong> et a d\u00e9but\u00e9 comme scanner de vuln\u00e9rabilit\u00e9s pour les conteneurs. Au fil du temps, il a \u00e9volu\u00e9 en un outil de s\u00e9curit\u00e9 complet qui g\u00e9n\u00e8re \u00e9galement des SBOMs. Sa capacit\u00e9 SBOM a \u00e9t\u00e9 ajout\u00e9e comme mode de scan aux c\u00f4t\u00e9s du scan de vuln\u00e9rabilit\u00e9s, de mauvaises configurations, de secrets et de licences.<\/p>\n<h3>Capacit\u00e9s cl\u00e9s<\/h3>\n<ul>\n<li><strong>Formats de sortie :<\/strong> CycloneDX (JSON), SPDX (JSON), JSON natif de Trivy, SARIF, et sortie tabulaire\/lisible par l&#8217;humain.<\/li>\n<li><strong>Types de sources :<\/strong> Images de conteneurs, syst\u00e8mes de fichiers, d\u00e9p\u00f4ts git, clusters Kubernetes, comptes AWS et images de VM.<\/li>\n<li><strong>\u00c9cosyst\u00e8mes de langages :<\/strong> Forte couverture \u2014 Go, Java, JavaScript, Python, Ruby, Rust, PHP, .NET, C\/C++, Elixir, Dart, Swift, et plus encore.<\/li>\n<li><strong>Scan de vuln\u00e9rabilit\u00e9s int\u00e9gr\u00e9 :<\/strong> C&#8217;est la fonctionnalit\u00e9 phare de Trivy. G\u00e9n\u00e9rez un SBOM et scannez-le pour d\u00e9tecter des vuln\u00e9rabilit\u00e9s en une seule passe, ou scannez un fichier SBOM existant produit par un autre outil.<\/li>\n<li><strong>Support des attestations :<\/strong> Trivy peut g\u00e9n\u00e9rer et v\u00e9rifier des attestations in-toto nativement via <code>trivy image --format cosign-vuln<\/code>, et s&#8217;int\u00e8gre avec cosign pour les workflows d&#8217;attestation SBOM.<\/li>\n<\/ul>\n<h3>Points forts<\/h3>\n<p>Le plus grand avantage de Trivy est son <strong>architecture tout-en-un<\/strong>. Un seul binaire g\u00e8re la g\u00e9n\u00e9ration de SBOMs, le scan de vuln\u00e9rabilit\u00e9s, la d\u00e9tection de mauvaises configurations, le scan de secrets et l&#8217;analyse de licences. Cela r\u00e9duit consid\u00e9rablement la complexit\u00e9 de la cha\u00eene d&#8217;outils. C&#8217;est \u00e9galement le seul outil de ce comparatif capable de scanner directement des clusters Kubernetes et des comptes cloud. Sa base de donn\u00e9es de vuln\u00e9rabilit\u00e9s est mise \u00e0 jour fr\u00e9quemment et couvre de multiples sources (NVD, avis des \u00e9diteurs, GitHub Security Advisories).<\/p>\n<h3>Limitations<\/h3>\n<p>Parce que la g\u00e9n\u00e9ration de SBOMs de Trivy est une fonctionnalit\u00e9 parmi d&#8217;autres, la profondeur de ses catalogueurs peut \u00eatre inf\u00e9rieure \u00e0 celle de Syft dans les cas limites \u2014 en particulier pour l&#8217;analyse binaire des binaires Go\/Rust compil\u00e9s et des artefacts Java profond\u00e9ment imbriqu\u00e9s. Le support SPDX a \u00e9t\u00e9 ajout\u00e9 plus tard que celui de CycloneDX, de sorte que la sortie CycloneDX tend \u00e0 \u00eatre plus compl\u00e8te dans certains sc\u00e9narios. La nature tout-en-un implique \u00e9galement un binaire plus volumineux et des t\u00e9l\u00e9chargements de base de donn\u00e9es initiaux plus longs.<\/p>\n<h3>Exemple d&#8217;utilisation<\/h3>\n<pre><code># G\u00e9n\u00e9rer un SBOM CycloneDX \u00e0 partir d'une image de conteneur\ntrivy image --format cyclonedx --output sbom.cdx.json registry.example.com\/myapp:latest\n\n# G\u00e9n\u00e9rer un SBOM SPDX \u00e0 partir d'un syst\u00e8me de fichiers\ntrivy fs --format spdx-json --output sbom.spdx.json \/path\/to\/source\n\n# Scanner un SBOM existant pour les vuln\u00e9rabilit\u00e9s\ntrivy sbom sbom.cdx.json\n\n# Combin\u00e9 : g\u00e9n\u00e9rer un SBOM + scanner en une passe\ntrivy image --format json --list-all-pkgs registry.example.com\/myapp:latest<\/code><\/pre>\n<h2>CycloneDX CLI : la bo\u00eete \u00e0 outils SBOM native d&#8217;OWASP<\/h2>\n<p><a href=\"https:\/\/github.com\/CycloneDX\/cyclonedx-cli\" target=\"_blank\" rel=\"noopener\">CycloneDX CLI<\/a> fait partie du projet <strong>OWASP CycloneDX<\/strong>. Contrairement \u00e0 Syft et Trivy, ce n&#8217;est pas principalement un <em>g\u00e9n\u00e9rateur<\/em> de SBOMs \u00e0 partir de code source ou d&#8217;images de conteneurs. C&#8217;est plut\u00f4t une bo\u00eete \u00e0 outils pour <strong>manipuler, convertir, valider, fusionner et comparer<\/strong> des SBOMs CycloneDX. L&#8217;\u00e9cosyst\u00e8me CycloneDX plus large inclut des plugins de g\u00e9n\u00e9ration de SBOMs sp\u00e9cifiques aux langages (par ex., <code>cyclonedx-maven-plugin<\/code>, <code>cyclonedx-npm<\/code>, <code>cyclonedx-gomod<\/code>) qui produisent des SBOMs pendant le processus de build lui-m\u00eame.<\/p>\n<h3>Capacit\u00e9s cl\u00e9s<\/h3>\n<ul>\n<li><strong>Formats de sortie :<\/strong> CycloneDX (JSON, XML, Protocol Buffers) \u2014 fid\u00e9lit\u00e9 totale. Peut convertir entre les versions de CycloneDX. Support de conversion SPDX limit\u00e9.<\/li>\n<li><strong>Op\u00e9rations SBOM :<\/strong> Fusionner plusieurs SBOMs en un seul, comparer deux SBOMs pour voir ce qui a chang\u00e9, valider les SBOMs par rapport au sch\u00e9ma CycloneDX, et convertir entre les formats CycloneDX.<\/li>\n<li><strong>G\u00e9n\u00e9ration au moment du build :<\/strong> Les plugins de langages de l&#8217;\u00e9cosyst\u00e8me CycloneDX g\u00e9n\u00e8rent des SBOMs <em>pendant le build<\/em> en lisant directement le r\u00e9solveur de d\u00e9pendances (Maven, npm, Go modules, pip, etc.), ce qui produit le graphe de d\u00e9pendances le plus pr\u00e9cis possible.<\/li>\n<li><strong>Support des attestations :<\/strong> Les SBOMs CycloneDX peuvent \u00eatre encapsul\u00e9s dans des attestations CycloneDX BOM-Link, et l&#8217;\u00e9cosyst\u00e8me prend en charge les documents VEX (Vulnerability Exploitability eXchange) comme \u00e9l\u00e9ments de premi\u00e8re classe.<\/li>\n<\/ul>\n<h3>Points forts<\/h3>\n<p>L&#8217;approche de <strong>g\u00e9n\u00e9ration au moment du build<\/strong> de l&#8217;\u00e9cosyst\u00e8me CycloneDX produit les SBOMs les plus pr\u00e9cis car elle exploite la r\u00e9solution r\u00e9elle des d\u00e9pendances de l&#8217;outil de build \u2014 et non un scan post-hoc du syst\u00e8me de fichiers. La capacit\u00e9 de fusion du CLI est inestimable pour les monorepos et les architectures microservices o\u00f9 vous devez combiner des SBOMs par service en un SBOM au niveau du produit. La validation de sch\u00e9ma garantit que les SBOMs sont conformes aux sp\u00e9cifications avant distribution. Le support VEX est le plus mature dans cet \u00e9cosyst\u00e8me.<\/p>\n<h3>Limitations<\/h3>\n<p>L&#8217;approche CycloneDX n\u00e9cessite une <strong>int\u00e9gration de plugin par langage<\/strong> dans votre syst\u00e8me de build. C&#8217;est plus de travail que d&#8217;ex\u00e9cuter un seul binaire sur une image de conteneur. Le CLI lui-m\u00eame ne scanne pas les conteneurs ou les syst\u00e8mes de fichiers \u00e0 la recherche de paquets \u2014 vous avez besoin des plugins de langages pour la g\u00e9n\u00e9ration. Le support SPDX est limit\u00e9 par rapport \u00e0 Syft et Trivy. L&#8217;outillage est plus fragment\u00e9 (CLI + multiples plugins) par rapport \u00e0 un seul binaire.<\/p>\n<h3>Exemple d&#8217;utilisation<\/h3>\n<pre><code># G\u00e9n\u00e9rer un SBOM pendant le build Maven\nmvn org.cyclonedx:cyclonedx-maven-plugin:makeBom\n\n# G\u00e9n\u00e9rer un SBOM \u00e0 partir d'un projet npm\nnpx @cyclonedx\/cyclonedx-npm --output-file sbom.cdx.json\n\n# Fusionner plusieurs SBOMs\ncyclonedx merge --input-files sbom-api.cdx.json sbom-frontend.cdx.json --output-file product-sbom.cdx.json\n\n# Valider un SBOM par rapport au sch\u00e9ma\ncyclonedx validate --input-file sbom.cdx.json --fail-on-errors\n\n# Comparer deux SBOMs pour voir ce qui a chang\u00e9 entre les versions\ncyclonedx diff --from v1-sbom.cdx.json --to v2-sbom.cdx.json<\/code><\/pre>\n<h2>Tableau comparatif d\u00e9taill\u00e9<\/h2>\n<table style=\"width:100%; border-collapse:collapse;\">\n<thead>\n<tr style=\"background-color:#f4f4f4;\">\n<th style=\"border:1px solid #ddd; padding:10px; text-align:left;\">Fonctionnalit\u00e9<\/th>\n<th style=\"border:1px solid #ddd; padding:10px; text-align:left;\">Syft<\/th>\n<th style=\"border:1px solid #ddd; padding:10px; text-align:left;\">Trivy<\/th>\n<th style=\"border:1px solid #ddd; padding:10px; text-align:left;\">CycloneDX CLI + Plugins<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Objectif principal<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">G\u00e9n\u00e9ration de SBOMs<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Scanner de s\u00e9curit\u00e9 tout-en-un<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Manipulation de SBOMs + g\u00e9n\u00e9ration au moment du build<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Sortie SPDX<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">JSON, tag-value (excellent)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">JSON (bon)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Conversion limit\u00e9e uniquement<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Sortie CycloneDX<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">JSON, XML (excellent)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">JSON (excellent)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">JSON, XML, Protobuf (natif, meilleur)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Scan de conteneurs<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Oui (registre, daemon, tarball)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Oui (registre, daemon, tarball)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Non (build uniquement)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Scan du syst\u00e8me de fichiers<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Oui<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Oui<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Via plugins de langages<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Analyse binaire<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Forte (binaires Go, Rust)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Mod\u00e9r\u00e9e<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Aucune<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Scan de vuln\u00e9rabilit\u00e9s<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Non (utiliser Grype)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Oui (int\u00e9gr\u00e9)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Non (utiliser un outil s\u00e9par\u00e9)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Pr\u00e9cision (profondeur des d\u00e9pendances)<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Excellente<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Tr\u00e8s bonne<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Meilleure (r\u00e9solution au moment du build)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Fusion\/comparaison de SBOMs<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Non<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Non<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Oui (natif)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Support VEX<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Via Grype\/Vunnel<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Support OpenVEX<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">VEX CycloneDX natif<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Signature d&#8217;attestation<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Via int\u00e9gration cosign<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Via int\u00e9gration cosign<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Attestation BOM-Link<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Int\u00e9gration CI\/CD<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">GitHub Action, CLI<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">GitHub Action, CLI, op\u00e9rateur Kubernetes<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Plugin de build par langage<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Vitesse (conteneur typique)<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Rapide (15\u201330s)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Mod\u00e9r\u00e9e (20\u201360s avec t\u00e9l\u00e9chargement de la BDD)<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">La plus rapide (int\u00e9gr\u00e9 au build, pas de scan s\u00e9par\u00e9)<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #ddd; padding:10px;\"><strong>Scan de cluster Kubernetes<\/strong><\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Non<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Oui<\/td>\n<td style=\"border:1px solid #ddd; padding:10px;\">Non<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Pr\u00e9cision et compl\u00e9tude : l\u00e0 o\u00f9 cela compte vraiment<\/h2>\n<p>La pr\u00e9cision du SBOM est le diff\u00e9renciateur le plus important. Un SBOM incomplet est sans doute pire que l&#8217;absence de SBOM \u2014 il procure une fausse confiance.<\/p>\n<p>Les <strong>plugins CycloneDX au moment du build<\/strong> l&#8217;emportent en pr\u00e9cision pour une raison claire : ils s&#8217;int\u00e8grent au r\u00e9solveur du gestionnaire de paquets pendant le build. Quand <code>cyclonedx-maven-plugin<\/code> s&#8217;ex\u00e9cute, il voit exactement le m\u00eame arbre de d\u00e9pendances que celui r\u00e9solu par Maven. Pas de devinettes, pas de correspondance heuristique \u2014 il lit directement le graphe r\u00e9solu.<\/p>\n<p><strong>Syft<\/strong> arrive en deuxi\u00e8me position. Son architecture de catalogueurs est sp\u00e9cifiquement ajust\u00e9e pour analyser les fichiers de verrouillage, les manifestes et les m\u00e9tadonn\u00e9es binaires avec une haute fid\u00e9lit\u00e9. Syft excelle \u00e0 trouver des composants que d&#8217;autres outils manquent \u2014 en particulier les binaires Go (qui int\u00e8grent les informations de modules), les binaires Rust et les uber-jars Java avec des d\u00e9pendances embarqu\u00e9es.<\/p>\n<p><strong>Trivy<\/strong> est tr\u00e8s performant pour la plupart des cas d&#8217;utilisation mais peut manquer des cas limites dans l&#8217;analyse binaire. Sa force r\u00e9side dans l&#8217;\u00e9tendue \u2014 il couvre davantage de types de sources (Kubernetes, cloud) m\u00eame si la profondeur par source est l\u00e9g\u00e8rement inf\u00e9rieure \u00e0 celle de Syft dans certains sc\u00e9narios.<\/p>\n<h2>Int\u00e9gration CI\/CD : int\u00e9grer les SBOMs dans votre pipeline<\/h2>\n<p>Les trois outils s&#8217;int\u00e8grent dans les pipelines CI\/CD, mais les sch\u00e9mas d&#8217;int\u00e9gration diff\u00e8rent significativement :<\/p>\n<h3>Syft en CI\/CD<\/h3>\n<p>Syft fournit une <strong>GitHub Action<\/strong> officielle (<code>anchore\/sbom-action<\/code>) qui g\u00e9n\u00e8re des SBOMs et les t\u00e9l\u00e9charge optionnellement comme snapshots de d\u00e9pendances GitHub. Pour GitLab, Jenkins ou d&#8217;autres syst\u00e8mes CI, le binaire CLI est simple \u00e0 installer et \u00e0 invoquer. Associez-le \u00e0 <code>anchore\/scan-action<\/code> (Grype) pour les contr\u00f4les de vuln\u00e9rabilit\u00e9s.<\/p>\n<h3>Trivy en CI\/CD<\/h3>\n<p>Trivy offre la surface d&#8217;int\u00e9gration CI\/CD la plus large : une <strong>GitHub Action<\/strong> (<code>aquasecurity\/trivy-action<\/code>), un op\u00e9rateur Kubernetes (<strong>Trivy Operator<\/strong>), et une sortie SARIF pour l&#8217;int\u00e9gration avec GitHub Code Scanning. Une seule \u00e9tape Trivy peut produire un SBOM, scanner les vuln\u00e9rabilit\u00e9s, v\u00e9rifier les mauvaises configurations et d\u00e9tecter les secrets \u2014 rempla\u00e7ant trois ou quatre outils distincts.<\/p>\n<h3>CycloneDX en CI\/CD<\/h3>\n<p>L&#8217;int\u00e9gration CycloneDX n\u00e9cessite d&#8217;ajouter le <strong>plugin de langage appropri\u00e9<\/strong> \u00e0 votre configuration de build. Pour Maven, vous ajoutez le plugin \u00e0 votre POM. Pour npm, vous ajoutez un script appelant <code>@cyclonedx\/cyclonedx-npm<\/code>. Cette approche native au build signifie que le SBOM est g\u00e9n\u00e9r\u00e9 comme artefact de build aux c\u00f4t\u00e9s de votre application, sans \u00e9tape de scan s\u00e9par\u00e9e n\u00e9cessaire.<\/p>\n<h2>Quand utiliser quel outil<\/h2>\n<h3>Choisissez Syft quand :<\/h3>\n<ul>\n<li>La pr\u00e9cision de la g\u00e9n\u00e9ration de SBOMs est votre priorit\u00e9 absolue<\/li>\n<li>Vous avez besoin d&#8217;une flexibilit\u00e9 maximale des formats de sortie (SPDX + CycloneDX)<\/li>\n<li>Vous scannez des images de conteneurs ou des artefacts pr\u00e9-construits (pas du code source)<\/li>\n<li>Vous utilisez d\u00e9j\u00e0 ou pr\u00e9voyez d&#8217;utiliser Grype pour le scan de vuln\u00e9rabilit\u00e9s<\/li>\n<li>Vous devez analyser des binaires compil\u00e9s (Go, Rust)<\/li>\n<li>Vous voulez un outil l\u00e9ger, \u00e0 usage unique, avec un minimum de d\u00e9pendances<\/li>\n<\/ul>\n<h3>Choisissez Trivy quand :<\/h3>\n<ul>\n<li>Vous voulez un seul outil pour la g\u00e9n\u00e9ration de SBOMs <em>et<\/em> le scan de vuln\u00e9rabilit\u00e9s<\/li>\n<li>Vous devez scanner des clusters Kubernetes ou des comptes cloud<\/li>\n<li>La simplicit\u00e9 et la r\u00e9duction de la complexit\u00e9 de la cha\u00eene d&#8217;outils comptent plus que la profondeur maximale du SBOM<\/li>\n<li>Vous voulez la d\u00e9tection int\u00e9gr\u00e9e des mauvaises configurations et des secrets en plus des SBOMs<\/li>\n<li>Votre \u00e9quipe pr\u00e9f\u00e8re un outil unique et bien maintenu plut\u00f4t que d&#8217;assembler plusieurs composants<\/li>\n<li>Vous avez besoin d&#8217;une sortie SARIF pour GitHub Code Scanning ou l&#8217;int\u00e9gration Azure DevOps<\/li>\n<\/ul>\n<h3>Choisissez CycloneDX CLI + Plugins quand :<\/h3>\n<ul>\n<li>Vous avez besoin de la r\u00e9solution de d\u00e9pendances la plus pr\u00e9cise possible<\/li>\n<li>Votre organisation a standardis\u00e9 le format CycloneDX<\/li>\n<li>Vous g\u00e9rez des monorepos et devez fusionner des SBOMs par service en SBOMs au niveau produit<\/li>\n<li>Vous devez comparer les SBOMs entre les versions pour suivre les changements de d\u00e9pendances<\/li>\n<li>La validation de sch\u00e9ma des SBOMs avant distribution est une exigence<\/li>\n<li>La g\u00e9n\u00e9ration de documents VEX fait partie de votre workflow de divulgation de vuln\u00e9rabilit\u00e9s<\/li>\n<\/ul>\n<h2>Pipeline combin\u00e9 : utiliser les trois ensemble<\/h2>\n<p>En pratique, de nombreuses organisations matures combinent ces outils. Voici un sch\u00e9ma de pipeline qui exploite les forces de chacun :<\/p>\n<pre><code># \u00c9tape 1 : SBOM au moment du build (graphe de d\u00e9pendances le plus pr\u00e9cis)\n# Dans votre \u00e9tape de build Maven\/npm\/Go :\nmvn org.cyclonedx:cyclonedx-maven-plugin:makeBom\n# Sortie : target\/bom.json (format CycloneDX)\n\n# \u00c9tape 2 : SBOM au niveau du conteneur (capture les paquets OS + d\u00e9pendances runtime)\nsyft packages myapp:${BUILD_TAG} -o cyclonedx-json > container-sbom.cdx.json\n\n# \u00c9tape 3 : Fusionner les SBOMs du build et du conteneur\ncyclonedx merge \\\n  --input-files target\/bom.json container-sbom.cdx.json \\\n  --output-file merged-sbom.cdx.json\n\n# \u00c9tape 4 : Valider le SBOM fusionn\u00e9\ncyclonedx validate --input-file merged-sbom.cdx.json --fail-on-errors\n\n# \u00c9tape 5 : Scanner le SBOM fusionn\u00e9 pour les vuln\u00e9rabilit\u00e9s\ntrivy sbom merged-sbom.cdx.json --exit-code 1 --severity CRITICAL,HIGH\n\n# \u00c9tape 6 : Signer et attester\ncosign attest --predicate merged-sbom.cdx.json \\\n  --type cyclonedx myapp:${BUILD_TAG}<\/code><\/pre>\n<p>Ce pipeline atteint le meilleur de tous les mondes : les plugins CycloneDX fournissent la pr\u00e9cision au moment du build, Syft ajoute la d\u00e9couverte de paquets au niveau du conteneur, le CLI CycloneDX fusionne et valide le SBOM combin\u00e9, Trivy scanne les vuln\u00e9rabilit\u00e9s comme porte de qualit\u00e9, et cosign fournit l&#8217;attestation cryptographique.<\/p>\n<h2>Consid\u00e9rations de performance<\/h2>\n<p>La vitesse compte dans les pipelines CI\/CD o\u00f9 chaque minute de temps de build a un co\u00fbt :<\/p>\n<ul>\n<li><strong>Syft<\/strong> est constamment rapide. Un scan typique d&#8217;image de conteneur se termine en 15\u201330 secondes sans t\u00e9l\u00e9chargement de base de donn\u00e9es externe requis. Le binaire est l\u00e9ger et d\u00e9marre instantan\u00e9ment.<\/li>\n<li><strong>Trivy<\/strong> n\u00e9cessite un t\u00e9l\u00e9chargement initial de la base de donn\u00e9es de vuln\u00e9rabilit\u00e9s (~30\u201350 Mo) lors de la premi\u00e8re ex\u00e9cution, ce qui ajoute 10\u201330 secondes. Les ex\u00e9cutions suivantes avec une base de donn\u00e9es en cache sont comparables \u00e0 Syft. L&#8217;utilisation de <code>--skip-db-update<\/code> en CI (avec un cache pr\u00e9-charg\u00e9) \u00e9limine cette surcharge.<\/li>\n<li>Les <strong>plugins CycloneDX<\/strong> ajoutent un temps n\u00e9gligeable aux builds car ils s&#8217;ex\u00e9cutent dans le cadre du processus de build existant. Il n&#8217;y a pas de phase de scan s\u00e9par\u00e9e \u2014 le SBOM est un sous-produit de la r\u00e9solution de d\u00e9pendances qui a d\u00e9j\u00e0 eu lieu.<\/li>\n<\/ul>\n<h2>Attestation et signature : prouver la provenance du SBOM<\/h2>\n<p>Un SBOM non sign\u00e9 est un document \u00ab faites-moi confiance \u00bb. Pour que les SBOMs aient une r\u00e9elle valeur dans la s\u00e9curit\u00e9 de la cha\u00eene d&#8217;approvisionnement, ils doivent \u00eatre sign\u00e9s cryptographiquement et associ\u00e9s \u00e0 l&#8217;artefact qu&#8217;ils d\u00e9crivent.<\/p>\n<p><strong>Syft + cosign<\/strong> est le workflow d&#8217;attestation le plus mature. Anchore a investi massivement dans le support des attestations SLSA et in-toto, et la sortie de Syft est con\u00e7ue pour alimenter directement <code>cosign attest<\/code>.<\/p>\n<p><strong>Trivy<\/strong> prend en charge l&#8217;attestation bas\u00e9e sur cosign et peut v\u00e9rifier les attestations existantes. La sortie <code>trivy image --format cosign-vuln<\/code> produit des rapports de vuln\u00e9rabilit\u00e9s pr\u00eats pour l&#8217;attestation.<\/p>\n<p><strong>CycloneDX<\/strong> prend en charge BOM-Link, qui fournit un m\u00e9canisme de liaison bas\u00e9 sur les URI entre les SBOMs et les artefacts qu&#8217;ils d\u00e9crivent. Combin\u00e9 avec Sigstore ou in-toto, cela cr\u00e9e une cha\u00eene v\u00e9rifiable de la source au d\u00e9ploiement.<\/p>\n<h2>Conclusion<\/h2>\n<p>Il n&#8217;existe pas de \u00ab meilleur \u00bb outil SBOM unique \u2014 le bon choix d\u00e9pend de vos besoins sp\u00e9cifiques. Pour la profondeur pure de g\u00e9n\u00e9ration de SBOMs, <strong>Syft<\/strong> est la r\u00e9f\u00e9rence. Pour la simplicit\u00e9 tout-en-un, <strong>Trivy<\/strong> r\u00e9duit consid\u00e9rablement la complexit\u00e9 de la cha\u00eene d&#8217;outils. Pour la pr\u00e9cision au moment du build et la gestion du cycle de vie des SBOMs, l&#8217;<strong>\u00e9cosyst\u00e8me CycloneDX<\/strong> est in\u00e9gal\u00e9.<\/p>\n<p>L&#8217;approche la plus solide consiste \u00e0 les combiner : utilisez les plugins CycloneDX au moment du build pour une pr\u00e9cision maximale, Syft pour la d\u00e9couverte au niveau du conteneur, le CLI CycloneDX pour la fusion et la validation, et Trivy pour le scan de vuln\u00e9rabilit\u00e9s. Ajoutez l&#8217;attestation cosign par-dessus, et vous disposez d&#8217;un pipeline SBOM de qualit\u00e9 production qui satisfait l&#8217;EO 14028, l&#8217;EU CRA et vos propres besoins de s\u00e9curit\u00e9 op\u00e9rationnelle.<\/p>\n<p>Pr\u00eat \u00e0 construire ce pipeline concr\u00e8tement ? Consultez notre <a href=\"https:\/\/secure-pipelines.com\/fr\/ci-cd-security\/lab-sbom-pipeline-generate-attest-verify-syft-cosign\/\">Laboratoire SBOM<\/a> pour un guide pas \u00e0 pas avec de vraies images de conteneurs et des templates CI\/CD.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pourquoi les SBOMs sont importants : l&#8217;imp\u00e9ratif r\u00e9glementaire et s\u00e9curitaire Un Software Bill of Materials (SBOM) est un inventaire formel et lisible par machine de chaque composant, biblioth\u00e8que et d\u00e9pendance qui constitue un logiciel. Consid\u00e9rez-le comme l&#8217;\u00e9tiquette nutritionnelle de votre application \u2014 sauf qu&#8217;au lieu des calories et du sodium, vous r\u00e9pertoriez les paquets, versions, &#8230; <a title=\"Outils SBOM Compar\u00e9s : Syft vs Trivy vs CycloneDX CLI\" class=\"read-more\" href=\"https:\/\/secure-pipelines.com\/fr\/ci-cd-security\/sbom-tools-compared-syft-trivy-cyclonedx-cli\/\" aria-label=\"En savoir plus sur Outils SBOM Compar\u00e9s : Syft vs Trivy vs CycloneDX CLI\">Lire la suite<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49,50],"tags":[],"post_folder":[],"class_list":["post-519","post","type-post","status-publish","format-standard","hentry","category-ci-cd-security","category-software-supply-chain"],"_links":{"self":[{"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/posts\/519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/comments?post=519"}],"version-history":[{"count":2,"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/posts\/519\/revisions"}],"predecessor-version":[{"id":863,"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/posts\/519\/revisions\/863"}],"wp:attachment":[{"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/media?parent=519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/categories?post=519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/tags?post=519"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/secure-pipelines.com\/fr\/wp-json\/wp\/v2\/post_folder?post=519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}