在此前的多篇文章中,我们已经详细地介绍了软件物料清单(SBOM)对于保障软件供应链安全的重要性以及一些注意事项。在本文中,我们将会更深入地介绍SBOM,包括最低要求元素、格式、使用场景以及如何对其进行管理等。
SBOM所包含的元素___________________
年年中,NTIA发布了软件物料清单(SBOM)的最少必需元素。这些元素包含以下三类:
数据字段:每个软件组件的基本信息
自动化支持:能够自动生成机器可读格式的SBOM
实践和流程:SBOM应该如何及何时生成和分发
所需元素的目的是为SBOM使用者提供他们所需的信息,以管理漏洞、清点软件组件,并监管许可证合规性。
数据字段
根据NTIA的说法,这一字段是为了“充分识别这些组件以在整个软件供应链中跟踪它们,并将它们映射到其他相关的数据来源,如漏洞数据库或许可证数据库”。
7个必要的数据字段如下:
供应商名称:开发该软件组件的个人或组织
组件名称:给一组软件命名,通常由供应商决定
组件版本:一个标识符,指定软件与以前版本的变化。同样,这是由供应商决定的
其他独特标识符:像SoftwareIdentification(SWID)标签、PackageUniformResourceLocators(PURL)、CommonPlatformEnumeration(CPE)或类似的标识符,可以帮助SBOM消费者在关键数据库中找到组件
依赖项关系:表示软件组件是如何结合在一起的,如,某个上游组件包含在某个软件中
SBOM数据的作者:生成SBOM元数据的实体,可能是软件供应商或其他个人、团体
时间戳:SBOM生成的日期和时间
自动化支持
下一组最低要求元素是指SBOM数据在整个软件生态系统内部以及跨组织通信的方式。这一要求的目标是为了确保SBOM数据真正可用——不仅仅是机器可读,还能够让人直接阅读,而且它的传输格式是可互操作的。
要达到这一目标,NTIA认证了3个交付格式来生成和消费SBOM。至关重要的是,向联邦政府销售软件的组织必须以这三种格式之一传送SBOM,以符合网络安全行政命令的要求。
这3个格式是:
SoftwarePackageDataExchange(SPDX)
SoftwareIdentification(SWID)Tags
CycloneDX
在后面一节,我们将会对这3个格式进行详细介绍。
实践和流程
最后一组SBOM最低要求元素涉及生成和申请SBOM的具体操作。具体而言,实践和流程部分包括以下6个方面的要求:
频率(Frequency):NTIA规定,“如果软件组件随着新的构建或发布而更新”,企业应该生成新的SBOM。此外,供应商在以下情况下也需要生成新的SBOM:1)需要纠正原始版本中的错误2)了解有关软件组件的新细节
深度(Depth):合规的SBOM需要包含:1)所有顶层组件2)所有间接依赖关系。如果SBOM作者不能包含所有间接依赖关系,则需要囊括足够的信息,使消费者可以递归地找到他们。
已知的未知因素(KnownUnknowns):在SBOM作者没有提供完整的依赖关系图的情况下,他们需要说明这是因为:1)该组件没有进一步的依赖关系,或者2)不知道是否存在其他的依赖关系。
分发和交付:这一部分分为几个环节,都是关于确保SBOM以可消化的格式快速交付。首先,SBOM被要求以“及时”的方式提供(尽管没有设定天数或周数)。其次,他们必须有“适当的”角色和访问权限。最后,SBOM可以与产品的每个实例一起分发或者以其他可访问的方式提供,如公开的网站。
访问控制:如果供应商想将SBOM数据的访问限制在某些客户或用户,他们需要提供这种访问控制的条款。此外,供应商需要提供“具体的允许和便利”,以便SBOM消费者能够将数据纳入其安全工具。
容错程度:网络安全行政命令和指导SBOM创建的法规目前尚不成熟,因此,各组织被指示要对(无意的)错误或遗漏给予理解。
SBOM交付格式及规范___________________
企业可以通过各种不同的格式创建和发布软件物料清单(SBOM)。对于一个想要在其网站发布SBOM的企业来说,HTML是一个合理的选择。如果SBOM中包含了文档或者源代码,那么纯文本也许是更佳选项。此外,还有Markdown、PDF、CSV等格式可供使用。
除了这些常见的格式外,还有几种专门为交付SBOM而设计的格式,如SPDX(软件包数据交换),SWIDTags(软件识别)以及CycloneDX。
SPDX
SPDX是由Linux基金会运营的项目,旨在标准化企业共享和使用SBOM中信息的方式。SPDX捕捉与provenance、许可证和安全相关的数据,下图展示了SPDX文档中所包含的数据:
该格式支持以下文件类型:
YAML
JSON(你可以在GitHub上找到SPDX的JSONschema: