Tool Analysis

Brief overview

This section analyses some SBOM generation tools available in the market. The study is based on the fossa framework for Evaluating SBOM Tools, on the NTIA minimum element guidelines, and in some quality metrics for SBOMs available in the sbomqs tool. We also analyzed the SBOMs generated through knowledge graphs.

Tools overall analysis

Some of the features we used to analyze the SBOM generation tools were based on the framework for Evaluating SBOM Tools in fossa, such as:

  • What standards it supports (SPDX, Cyclone DX)
  • Compliance with the Cyber Security Executive Order
  • Data Field Coverage
  • Automation Support
  • Programming Language Support
  • Dependency Recognition Depth

We classified the tools following the SBOM Tool Classification Taxonomy document by the NTIA SBOM Formats & Tooling Working Group.

The SBOM generation tools we analyzed are listed below, and their overall analysis can be found here.

  • Syft
  • Trivy
  • Bom
  • Microsoft/sbom-tool
  • Sbom4python
  • gh-sbom
  • CycloneDX Generator
  • Tern
  • ScanCode toolkit
  • OSS Review Toolkit
  • Cosign
  • Augur
  • SPDX SBOM Generator
  • SwiftBOM

Quality metrics to assess the generated SBOMs

We evaluated the performance of the tools by examining the quality of the SBOMs they produced for some case studies projects:

The SBOMs generated by the tools were analyzed using the sbomqs tool. The analysis results can be found on the pages dedicated to each case study.

The evaluation of SBOMs involves five categories in the scoring system, NTIA-minimum-elements, Structural, Semantic, Quality, and Sharing. The score is calculated based on the number of elements in each category, and the higher the score, the more consumable the SBOMs should be. More details about the sbomqs SBOM quality check can be found here.

The following table shows the features used to calculate each category’s score.

NTIA-minimum-elements

Includes features that help you understand if your SBOM complies with NTIA minimum element guidelines.

Feature Description
comp_with_name number of components that have names divided by the total components detected
comp_with_supplier number of components that have supplier divided by the total components detected
comp_with_uniq_ids number of components that have unique ID’s divided by the total components detected
comp_with_version number of components that have versions divided by the total components detected
sbom_authors doc has authors
sbom_creation_timestamp doc has creation timestamp
sbom_dependencies doc has relationships

Structural

It checks if the SBOM complies with the underlying specifications, be it SPDX or CycloneDX

Feature Description
sbom_parsable provided sbom is parsable
sbom_spec provided sbom is in a supported sbom format of spdx, cyclonedx
sbom_spec_file_format provided sbom should be in supported file format for spec: json and version: json, yaml, rdf, tag-value
sbom_spec_version provided sbom should be in supported spec version for spec: SPDX-2.3 and versions: SPDX-2.1, SPDX-2.2, SPDX-2.3

Semantic

It checks the meaning of SBOM fields specific to their standard.

Feature Description
comp_with_checksums number of components that have checksums divided by the total components detected
comp_with_licenses number of components that have licenses divided by the total components detected
sbom_required_fields Doc Fields:(true or false) Pkg Fields:(true or false)

Quality

It helps determine the quality of the data present in the sbom.

Feature Description
comp_valid_licenses number of components that have valid licenses divided by the total components detected
comp_with_any_vuln_lookup_id number of components that have any lookup id divided by the total components detected
comp_with_deprecated_licenses number of components that have deprecated licenses divided by the total components detected
comp_with_multi_vuln_lookup_id number of components that have multiple lookup id divided by the total components detected
comp_with_primary_purpose number of components that have primary purpose specified divided by the total components detected
comp_with_restrictive_licenses number of components that have restricted licenses divided by the total components detected
sbom_with_creator_and_version number of components that have creator and version divided by the total components detected

Sharing

It helps determine if the SBOM can be shared.

Feature Description
sbom_sharable doc has a sharable license

Other tools used to support the analysis