概念
SBOM(软件物料清单)是一种正式的、结构化的记录。它不仅对软件产品的组件构成进行了详细的说明,同时还描述了这些组件之间的供应链关系。SBOM概述了应用程序中引入的包和库,以及这些包、库与其他上游项目之间的关系。这在重用代码与引入开源代码的时候非常有用。
合适的SBOM,可以帮助组织对自己所部署的包以及这些包的版本有一个确切的了解,从而便于组织根据自己的需要来进行更新,以维护安全。
SBOM的用途不仅限于安全领域。例如,它还可以帮助开发人员对不同类型软件组件中包含的开源代码许可证进行跟踪。
国家电信和信息管理局(NTIA)列出了任何SBOM都应该包含的七个数据字段:
• 供应商名称:创建、定义和标识组件的实体名称。
• 组件名称:原供应商为软件组件指定的名称
• 组件版本:供应商用于表明先前版本软件做出更改的标识符。
• 其他唯一标识符:用于标识组件或用于相关数据库查找的其他标识符。例如,NIST 的CPE字典中的标识符。
• 依赖关系:描述软件Y中包含上游组件X的关系。这对于开源项目尤为重要。
• SBOM数据的作者:为该组件创建SBOM数据的实体名称。
• 时间戳:记录SBOM数据程序集的日期和时间。
SBOMs 必须满足以下要求:
• SBOM的格式符合SPDX, CycloneDX, 或 SWID tags这三个标准中的其中一个。这样才能确保它能够被机器识别。
• 每个新的软件版本都必须生成一个新的SBOM,以确保它们是最新的。
• 除了依赖关系之外,SBOM还必须解释这些关系可能存在在哪些组织所不知道的的地方。
Java生成方式
在Java项目中,可以使用maven插件生成BOM文件。这样在软件编译过程中,就可以自动生成信息。一旦软件发生变动,也可以同步生成新的BOM文件。
CycloneDX格式清单生成
生成CycloneDX规范的BOM 需要用到:cyclonedx-maven-plugin插件在maven的package阶段运行插件,pom配置示例:
<plugin> <groupId>org.cyclonedx</groupId> <artifactId>cyclonedx-maven-plugin</artifactId> <version>2.7.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>makeAggregateBom</goal> </goals> </execution> </executions> <configuration> <projectType>library</projectType> <schemaVersion>1.4</schemaVersion> <includeBomSerialNumber>true</includeBomSerialNumber> <includeCompileScope>true</includeCompileScope> <includeProvidedScope>true</includeProvidedScope> <includeRuntimeScope>true</includeRuntimeScope> <includeSystemScope>true</includeSystemScope> <includeTestScope>false</includeTestScope> <includeLicenseText>false</includeLicenseText> <outputReactorProjects>true</outputReactorProjects> <outputFormat>all</outputFormat> <outputName>bom</outputName> </configuration> </plugin>
生成路径和名称:target/bom.jsontarget/bom.xml
参考链接: