Skip to content

The Minimum Elements For An Sbom

This document is abridged from =this.source[0]

Main Points

  1. An SBOM must include all required fields.
  2. An SBOM must be in an approved format
  3. An SBOM must be timestamped and generated for every build or release

Scope

  • Certain key points of the software supply chain discussion are out of scope of this report, including the question of regulatory and procurement requirements
  • The “software” in the “Software Bill of Materials” naturally limits considerations of hardware. While software embedded in hardware and devices is certainly in scope, the key supply chain and security issue pertaining to hardware is distinct and complex enough to deserve its own treatment.

Minimum Elements

A piece of software can be represented as a hierarchical tree, made up of components that can, in turn, have subcomponents, and so on. Components are often “third party,” from another source, but might also be “first party,” that is, from the same supplier but able to be uniquely identified as a freestanding, trackable unit of software. Each component should have its own SBOM listing their components, building the hierarchical tree. The data fields apply to each component, which are, in turn, encoded with tools and formats for automation support following the defined practices and processes

Data Fields

The core of an SBOM is a consistent, uniform structure that captures and presents information used to understand the components that make up software. Data fields contain baseline information about each component that should be tracked and maintained. The goal of these fields is to enable sufficient identification of these components to track them across the software supply chain and map them to other beneficial sources of data, such as vulnerability databases or license databases. This baseline component information includes

Data FieldDescription
Supplier NameThe name of an entity that creates, defines, and identifies components
Component NameDesignation assigned to a unit of software defined by the original supplier
Version of the ComponentIdentifier used by the supplier to specify a change in software from a previously identified version
Other Unique IdentifiersOther identifiers that are used to identify a component, or serve as a look-up key for relevant databases
Dependency RelationshipCharacterizing the relationship that an upstream component X is included in software Y
Author of the SBOM DataThe name of the entity that creates the SBOM data for this component
TimestampRecord of the date and time of the SBOM data assembly

Automation Support

Support for automation, including automatic generation and machine-readability, allows the ability to scale across the software ecosystem, particularly across organizational boundaries.

The SBOM ==must== be conveyed across organizational boundaries in one of these interoperable formats; the data formats that are being used to generate and consume SBOMs are:

  • Software Package Data eXchange (SPDX)
  • CycloneDX13
  • Software Identification (SWID) tags

Practices and Processes

Frequency

If the software component is updated with a new build or release, a new SBOM ==must== be created to reflect the new version of the software. This includes software builds to integrate an updated component or dependency. Similarly, if the supplier learns new details about the underlying components or wishes to correct an error in the existing SBOM data, the supplier should issue a new, revised SBOM.

Depth

An SBOM should contain all primary (top level) components, with all their transitive dependencies listed. At a minimum, all top-level dependencies ==must== be listed with enough detail to seek out the transitive dependencies recursively.

Going further into the graph will provide more information. As organizations begin SBOM, depth beyond the primary components may not be easily available due to existing requirements with subcomponent suppliers. Eventual adoption of SBOM processes will enable access to additional depth through deeper levels of transparency at the subcomponent level. It should be noted that some use cases require complete or mostly complete graphs, such as the ability to “prove the negative” that a given component is not on an organization’s network.

Known Unknowns

For instances in which the full dependency graph is not enumerated in the SBOM, the SBOM author ==must== explicitly identify “known unknowns.” That is, the dependency data draws a clear distinction between a component that has no further dependencies, and a component for which the presence of dependencies is unknown and incomplete. This must be integrated into the automated data. To avoid erroneous assumptions, the default interpretation of the data should be that the data is incomplete; the author of the data should affirmatively state when the direct dependencies of a component have been fully enumerated, or when a component has no further dependencies. Today, this is implemented in the dependency relationship data field.

Distribution and Delivery

SBOMs should be available in a timely fashion to those who need them and ==must== have appropriate access permissions and roles in place. The SBOM data can accompany each instance of the software, or merely be accessible and directly mappable to the specific version of the software in question (e.g. through a version-specific URL). Anyone offering SBOMs ==must== have some means to make them available and support ingestion, but this can ride on existing mechanisms. SBOM delivery can reflect the nature of the software as well: executables that live on endpoints can store the SBOM data on disk with the compiled code, whereas embedded systems or online services can have pointers to SBOM data stored online.

Access Control

If access control is desired, the terms ==must== be specified, including specific allowances and accommodations for integrating SBOM data into the user’s security tools. Such specification can be determined through licensing, contracts, or other existing mechanism used to circumscribe the use and rights around the software itself. Given the variation in software licensing and contracts, the nature of this specification is outside the scope of this document.

Accommodation of Mistakes

A final practice area, accommodation of mistakes, should be built into the initial implementation phase of SBOM, allowing for omissions and errors. As many commentators have observed, while internal management of supply chain data may be a best practice, it is still evolving. The Administration has identified SBOM as a priority to drive software assurance and supply chain risk management, and starting today is better than waiting for perfection. In light of the absence of perfection, consumers of SBOMs should be explicitly tolerant of the occasional incidental error. This will facilitate constant improvement of tools: suppliers should offer updated data as they come across issues with past SBOMs, and consumers should encourage these updates by welcoming supplements and corrections without penalty when offered in good faith. As stated above regarding frequency, when new data is known an updated SBOM should be issued. Notably, this tolerance should not apply to intentional obfuscation or willful ignorance.


Beyond Minimum Elements: Enabling Broader SBOM Use Cases

This section describes further additions and inclusions that can support broader SBOM use cases.

Hash of the Component

When referring to a piece of software, robust identifiers are important for mapping the existence of a component to relevant sources of data, such as vulnerability data sources. A cryptographic hash would provide a foundational element to assist in this mapping, as well as helping in instances of renaming and whitelisting.

Lifecycle Phase

The data about software components can be collected at different stages in the software lifecycle, including from the software source, at build time, or after build through a binary analysis tool. Due to unique features of each of these stages, the SBOM may have some differences depending on when and where the data was created.

In the short run, simply noting how this data was captured, (e.g. “source,” “build,” or “post-build”) will be helpful for consumption and data management.

Other Component Relationships

One approach that can be captured today beyond direct dependencies is “derivation” or “descendancy”. This can indicate that a component is similar to some other known component, but that some changes have been made.

License Information

License management was an early use case for SBOM, helping organizations with large and complex software portfolios track the licenses and terms of their diverse software components, especially for open source software.

Cloud-based Software and Software-as-a-Service

In the short run, it is recommended that cloud service providers assert that they have an internal SBOM. That SBOM must be maintained with the rough functional equivalents of the minimum elements above, although the exact format and architecture may vary based on a provider’s internal system.

The organization must also have the capability to act on this information and have a process to do so in a timely fashion.

SBOM Integrity and Authenticity

Those supplying and requesting SBOMs are encouraged to explore options to both sign SBOMs and verify tamper-detection.

Vulnerabilities and SBOM

It is recommended that vulnerability data be tracked in separate data structures from the SBOM.

Vulnerability and Exploitability in Dependencies

In the SBOM context, focusing on upstream vulnerable components that have been deemed not to have an impact on the downstream software will waste time and resources, without offering immediate security benefits. Addressing this challenge requires two steps.

First, the supplier must make some reliable determination that a vulnerability does not affect a specific piece of software.

The second step requires communication downstream to the next user of this SBOM data, asserting that the vulnerability does not put the organization at risk. This is straightforward, linking of a piece of software (the vulnerability in question) and the status of that vulnerability. The community refers to this as a “Vulnerability Exploitability eXchange,” or VEX.

The core of VEX is the communication of whether or not a given piece software is “affected” by a given vulnerability. It is recommended that tools that analyze SBOM data for the customer build in the capability to automatically incorporate VEX data.

VEX is being implemented today as a profile in the [[Common Security Advisory Framework]].

Legacy Software and Binary Analysis

There is a key difference in how SBOMs are generated from a source repository, at the point of the building of the software, and for already-built software. While there are many unique circumstances, those requesting SBOM data should try to obtain it from the instance of the build since the instance of the build captures the details of the software as built, including reflecting any changes made by the compiler or other tools.

Flexibility vs Uniformity in Implementation

All requirements built on the minimum elements should draw from two key concepts. First, all security, especially SBOM, is a process and not a single goal. Second, the fundamental principle behind SBOM is the power of transparency, and any rules or guidance should focus on enabling the use cases described in this document and elsewhere.

Future SBOM Work

As this document has tried to emphasize, SBOM is an emerging technology and practice. Organizations are implementing SBOM today, but there is much more to do. It is important to stress that SBOM will not solve all security or supply chain attacks. Effectively using this data requires automation, and automation requires the potential for both automated consumption and policy enforcement.

Ultimately, SBOM should not be seen as a unique security phenomenon, but yet another practice that can support the broader effort to secure the supply chain.


Sources:
  • https://www.ntia.gov/files/ntia/publications/sbom_minimum_elements_report.pdf
  • https://www.whitehouse.gov/briefing-room/presidential-actions/2021/05/12/executive-order-on-improving-the-nations-cybersecurity/