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.