Qualité, complétude et profondeur
Un SBOM incomplet est pire qu’absent : il donne une assurance fausse. Cette page définit ce qu’est un SBOM utilisable et comment le vérifier automatiquement.
Les critères de qualité
| Critère | Question | Vérifiable |
|---|---|---|
| Complétude | Tous les composants sont-ils présents ? | Par écart avec l’Analyzed SBOM |
| Exactitude | Les versions correspondent-elles à l’artefact réel ? | Par empreinte |
| Fraîcheur | Le SBOM correspond-il à la dernière construction ? | Par horodatage et référence de build |
| Identifiants résolvables | Chaque composant porte-t-il un purl ou un cpe valide ? |
Automatique |
| Licences renseignées | Quelle proportion de NOASSERTION ? |
Automatique |
| Relations exprimées | Le graphe de dépendances est-il présent ? | Automatique |
| Absence d’inconnus | Combien de composants sans nom, sans version, ou non identifiés ? | Automatique |
| Complétude déclarée | La section de composition indique-t-elle honnêtement la couverture ? | Automatique |
La notation automatisée
Chaque SBOM produit reçoit un score calculé sur ces critères, et le seuil est bloquant en CI. La politique doit fixer, explicitement :
- le score minimal pour qu’une construction soit promouvable en production ;
- la proportion maximale tolérée de composants sans identifiant résolvable ;
- la proportion maximale de licences
NOASSERTION; - l’écart maximal toléré entre Build SBOM et Analyzed SBOM.
Sans seuil chiffré, la « qualité du SBOM » reste une intention. Avec un seuil bloquant, elle devient une propriété du pipeline.
La profondeur : direct et transitif
Le règlement exige au minimum les dépendances de premier niveau. Ce plancher est insuffisant en pratique.
| Dépendances directes | Dépendances transitives | |
|---|---|---|
| Définition | Déclarées explicitement par vous | Entraînées par vos dépendances |
| Volume typique | Dizaines | Centaines à milliers |
| Maîtrise | Vous les choisissez | Vous les subissez |
| Part des incidents de chaîne d’approvisionnement | Minoritaire | Majoritaire |
La doctrine retenue : profondeur complète, avec la distinction explicite direct / transitif dans le graphe, pour permettre la priorisation et pour identifier le chemin d’introduction d’un composant problématique.
Quelles dépendances inclure
| Catégorie | Dans le SBOM du produit livré ? |
|---|---|
| Dépendances d’exécution | Oui, sans discussion |
| Dépendances de compilation dont le résultat est embarqué | Oui |
| Dépendances de compilation non embarquées | Dans un SBOM de chaîne de construction distinct |
| Dépendances de test | Non dans le SBOM du produit — leur présence est une cause majeure de faux positifs |
| Paquets de l’image de base du conteneur | Oui s’ils sont livrés avec le produit |
Les sept pièges
1. Binaires liés statiquement. Une bibliothèque C ou Rust compilée dans l’exécutable n’apparaît dans aucun manifeste. Remède : analyse du binaire, et outils spécialisés par langage.
2. Code vendorisé. Des sources tierces copiées dans votre dépôt, souvent modifiées. Remède : détection par empreinte de fichier, du type de celle que pratiquent les outils d’analyse de composition orientés licences.
3. Dépendances système du conteneur. L’image de base apporte des dizaines de paquets. Remède : générer le SBOM sur l’image, pas seulement sur l’application ; réduire la surface avec des images minimales.
4. Artefacts multi-langages. Un paquet Python embarquant une bibliothèque native compilée, un module Node avec un binaire. Remède : combiner plusieurs générateurs.
5. Code généré à la construction. Le générateur lui-même a des dépendances, et le code produit peut en embarquer. Remède : documenter la chaîne de génération dans le SBOM.
6. Micrologiciels. Systèmes de fichiers embarqués, partitions, blobs binaires. Remède : outils d’analyse de micrologiciel, et exigence de SBOM auprès du fournisseur de la plateforme.
7. Composants renommés ou reconditionnés. Le même composant sous deux noms selon
l’écosystème. Remède : normalisation par purl — voir
Identifiants.
Ce qu’il faut écrire
Une politique de qualité SBOM, d’une page, qui fixe : le format et la version, la profondeur exigée, les catégories de dépendances incluses, le score minimal, les seuils bloquants, la procédure de dérogation temporaire et son expiration automatique.