SPDX et CycloneDX : choisir un format SBOM
Sytance · Mis à jour
SPDX et CycloneDX décrivent tous deux les composants logiciels et leurs relations. Le choix dépend des informations dont le destinataire a besoin et des versions que ses outils peuvent traiter. Convenir d’un format implique donc également de s’accorder sur sa version, son encodage et les champs obligatoires.
Les besoins d’information du destinataire
Un fournisseur de micrologiciels qui transmet une SBOM à un fabricant peut être soumis à des exigences différentes de celles d’une équipe qui la charge dans un service de gestion des vulnérabilités. Les versions et encodages pris en charge par le destinataire déterminent les fichiers qu’il peut traiter. Un fichier représentatif permet de confirmer cette prise en charge.
Consignez les informations requises, notamment l’identité du produit, les identifiants des composants, leurs relations, les licences et toute donnée relative aux vulnérabilités ou à la provenance. Si le destinataire ne prend en charge qu’une partie du format, déterminez si les champs omis nuisent à l’objectif de l’échange.
Versions des spécifications et prise en charge des outils
SPDX 2.3 et SPDX 3.0.1 sont deux spécifications publiées distinctes. SPDX 3.0.1 utilise un modèle fondé sur des profils, dont une classe de SBOM logicielle. Il ne faut pas supposer qu’un outil acceptant le format JSON SPDX 2.3 peut également traiter un document 3.x.
La vue d’ensemble de la spécification CycloneDX répertorie la version 1.7. Son modèle d’objets comprend des composants, des services, des relations de dépendance et des informations sur les vulnérabilités. Un producteur peut prendre en charge une spécification récente alors qu’un importateur en aval n’en prend en charge qu’une version antérieure.
| Détails de l’échange | Exemple SPDX | Exemple CycloneDX |
|---|---|---|
| Version | 2.3 ou 3.0.1 | 1.7 |
| Identité du document | Modèle de document propre à la version | Numéro de série et version de nomenclature (BOM) |
| Dépendances | Relations typées | Graphique des dépendances |
| Validation | Règles de la version choisie | Schéma de la version choisie |
Relations et champs de licence
Dans SPDX 2.3, CONTAINS indique une relation de contenance et DEPENDS_ON une dépendance. Le fait qu’un paquet figure dans une archive ne signifie pas la même chose que le fait qu’un autre paquet en ait besoin pour être compilé ou exécuté. Conservez le type et le sens de la relation lors de l’importation.
SPDX 2.3 distingue également la licence déclarée de la licence conclue. La déclaration d’un fournisseur et la conclusion d’un analyste ne doivent pas être fusionnées silencieusement dans un même champ. Un outil destinataire doit conserver cette distinction si elle est importante pour l’examen.
Pour CycloneDX, examinez le graphe des dépendances et les références aux composants dans la version choisie. Une liste plate de composants peut rester lisible après conversion tout en perdant les chemins nécessaires pour déterminer quels produits utilisent un composant.
Vérifier les informations converties
Un petit fichier de test peut révéler des pertes d’information lors de la conversion. Incluez un produit, une dépendance directe et une dépendance indirecte. Deux versions d’un même composant, une expression de licence et un champ explicitement marqué comme inconnu permettent de vérifier davantage que la simple acceptation du fichier.
- Validez le fichier d’origine au regard de la version de spécification déclarée.
- Importez-le dans l’outil destinataire et examinez le produit cible.
- Comparez les identités des composants, les versions et le sens des relations.
- Vérifiez les champs de licence et la représentation des informations inconnues.
- Si l’export est pris en charge, exportez à nouveau le fichier, puis comparez le sens des informations plutôt que la mise en forme.
Choisir un format de livraison
Si un client exige SPDX 2.3, fournissez cette version avec les champs convenus et conservez l’enregistrement source plus complet si la conversion supprime d’autres données. Si le processus destinataire utilise déjà CycloneDX et conserve le graphe nécessaire, utilisez la version de CycloneDX prise en charge.
Si les clients ont besoin des deux formats, maintenez et testez les correspondances entre leurs champs. Documentez les informations perdues ou déplacées dans des extensions lors de la conversion. Celle-ci doit transformer les données conformément à la spécification cible.
Après l’importation, vérifiez que le destinataire peut toujours utiliser les informations comme prévu. Pour l’analyse des vulnérabilités, cela implique notamment de partir d’un composant et de retrouver les produits et versions qui l’utilisent.