如何自动创建 SBOM

软件物料清单不再只是组织的“必备”文档。由于多种原因,它现在已成为“必备”。除了联邦法规强制披露软件组件这一事实之外,软件公司现在已经意识到,列出应用程序中使用的所有开源和商业依赖项是一种有益的网络安全实践。

有趣的是,尽管认识到 SBOM 的必要性,但创建它仍然相当具有挑战性。这是因为为产品创建软件物料清单的过程可能非常复杂、乏味且耗时。此外,由于监管机构建议为产品的每次迭代生成精确且准确的 SBOM,因此每次手动实施它即使不是完全不切实际,也是相当耗费资源的。 

在实施全面的 SBOM 时,始终建议采用自动化路线。每个软件都是一个由多个依赖项组成的复杂包,这些依赖项很可能也有自己的依赖项。这意味着即使是最简单的软件也可能有数百甚至数千个依赖项。编译所有这些并手动组织它们将需要大量工作。本文解释了为什么自动化对于实施 SBOM 是必要的,以及如何实施自动化以减轻手动生成 SBOM 带来的压力。 

为什么 SBOM 流程自动化很重要

软件物料清单只是软件产品组件的列表(类似于可食用产品的成分列表)。一般来说,创建软件物料清单所需的只是一个列出这些组件的电子表格。然而,这是一种过于简单化的做法,几乎不切实际。 SBOM 是一份详尽的列表,其中包含一组精确的所需信息。尝试手动处理此列表显然会非常耗时且复杂。

手动 SBOM 根本无法解决这个问题,这就是为什么自动化对于实施和摄取 SBOM 至关重要。除了实施手动 SBOM 的困难之外,手动创建 SBOM 还存在风险,更不用说合规性问题了。以下是为什么最好使用自动化系统创建 SBOM 的一些原因,该系统收集和编译完整的软件列表并将其存储在人类可读且易于查询的存储库中。

网络供应链威胁

生成全面的 SBOM 的主要目标是更好地了解软件组件并分析可能的漏洞。这已成为减轻每个软件产品威胁的重要网络安全措施。自动化的 SBOM 使此过程更加无缝。自动化的软件物料清单不仅更加安全(得益于加密签名和自动组件验证),而且自动化还确保在软件迭代的整个集成和部署管道中不断扫描组件。

节省时间

自动化 SBOM 实施意味着您依靠以机器速度运行的先进工具来生成软件物料清单。这可以通过多种方式节省您的时间。首先,以这种方式生成 SBOM 比手动尝试识别各个组件并将其包含在电子表格中要快。

自动化 SBOM 还可以更轻松、更快速地检测漏洞。使用手动编译的 SBOM,识别漏洞的可能位置是一个痛苦且漫长的过程。

SBOM 的更新速度也更快。自动化系统对您的 SBOM 进行频繁检查,以根据新更新的依赖项识别漏洞。这样,您可以更快地降低风险,并将时间和资源投入到其他重要任务上,而不是浪费时间创建 SBOM 或手动查询它们。

NIST 和联邦要求

除了有益之外,SBOM 自动化还具有监管重要性。联邦对 SBOM 的要求,例如 2014 年《网络供应链管理和透明度法案》,规定应使用自动解决方案和工具来生成 SBOM。

同样,2021 年 XNUMX 月,国家电信和信息管理局 (NTIA) 发布了联邦批准的指南,详细说明了每个 SBOM 必须包含的最低要素。 本文档中列出了自动化支持 作为每个 SBOM 的重要元素之一。

根据 NTIA 的规定,软件物料清单必须是人类和机器可读的,并且能够自动生成。实施自动化 SBOM 可以更轻松地跟踪文档中包含的数据。 

电子表格效率低下且容易出错

如前所述,每个软件包都有数百个依赖项。这意味着典型的软件物料清单中需要涵盖数千个数据点。电子表格根本无法管理如此大量的数据。手动输入所有这些数据点可能会导致人为错误,如果不及时发现,可能会造成严重后果。当您选择自动化系统时,您更有可能生成准确且全面的 SBOM。

持续一致

自动化 SBOM 生成过程的一大好处是,它有助于保持软件产品不同迭代的整个 CI/CD 管道的一致性。这包括在产品构建过程中甚至发布之后对产品所做的所有更改。

SBOM 不是静态的。随着产品的发展,会对其软件物料清单进行修订,以捕获添加的每个新依赖项。这些更改必须传达给内部和整个软件供应链的所有用户和其他利益相关者。重要的是,每个利益相关者都可以访问 SBOM 的最新版本以及该软件的所有先前版本。

使用手动准备的 SBOM,维护一致性和版本控制很困难,这可能会导致冲突和其他问题。自动化的 SBOM 可确保所做的更改保持一致,并且更容易查看这些更改的时间和方式。这对于手动系统来说是很难实现的。

自动化软件物料清单的方法

NTIA 对 SBOM 的最低要求等监管标准规定了软件物料清单的特定格式。这些标准包括软件包数据交换 (SPDX) 和 CycloneDX。软件安全团队应该知道,这些标准的本质已经意味着 SBOM 应该是自动化的。

因此,每个软件安全团队都应通过添加在其开发管道中的战略点执行的自动化步骤来生成 SBOM,以确保 SBOM 的生成和使用。这可以是用于在构建完成后调查软件组件的开源工具,也可以是集成在软件持续开发流程中的 SCA 工具。下面重点介绍了自动化软件物料清单的不同方法。

使用开源工具

创建软件物料清单最便宜的方法之一是使用开源工具。它们实际上是免费的,但只提供基本功能。有多种开源工具可以自动化 SBOM 实施过程。然而,大多数这些工具生成的报告仅以两种格式生成: CycloneDX 和 SPDX。

开源 SBOM 自动化工具的一个很好的例子是 微软的SBOM生成器. 这款通用构建时生成器旨在帮助企业为其软件包生成 SBOM。该工具提供跨平台支持,并以标准软件包数据交换 (SPDX) 格式生成 SBOM。

Microsoft 的 SBOM 生成器可以集成到使用 NPM、PyPI、Maven、Rust Crates、Ruby Gems、Linux 和 NuGet 框架构建的软件包中,以生成依赖项和组件列表。它还可以与 GitHub 公共存储库集成。

该工具输出有关 SBOM 最低要求中指定的 SBOM 文档的一般信息。它还列出了所有文件和包以及它们之间的关系。

使用插件工具

自动生成 SBOM 的另一种方法是在持续集成和持续部署管道(DevOps 管道)中执行此操作。您可以使用集成在工作流程构建阶段的 Maven 插件来完成此操作。这种方法是一种可扩展且方便的方法,可以在管道内自动生成软件物料清单的过程。

您会发现这要容易得多,因为您是在项目的构建环境中执行此操作。您只需传递一些参数即可自动生成 SBOM。对于 Maven 插件,SBOM 以 Cyclone DX 格式生成。

Maven 插件可以生成一个全面的 SBOM,详细说明项目中的所有依赖项。为此,您应该首先配置 pom.xml 文件,然后再运行“mvn verify”命令生成 SBOM 文件。在生成 SBOM 文件之前,首先生成 bom.json 文件。

Maven 插件附带一个内置的 SCA 工具,用于审核为依赖项生成的 SBOM 文件。文件审核完毕后,您可以再次运行 SCA 工具以再次生成软件物料清单。

这种插件工具的一个例子是 抄写平台,它使软件生产商能够自动生成 SBOM。它超越了 SBOM 生成的范围,可帮助用户管理和共享其 SBOM、验证完整性并跟踪其容器、依赖项和管道的漏洞。以下是 Scribe 如何自动创建 SBOM 的简单概述:

  • 步骤1: 在 Scribe Hub 上注册并登录(免费)。用户使用此 Web 界面注册并设置他们的项目。在 MAC 和 Linux 设备上运行的单独证据收集器会自行生成 SBOM。
  • 第 2 步:将 Scribe 与您的持续集成管道集成。将 Scribe Hub 中的代码片段添加到持续集成管道和/或最终构建映像即可实现此目的。
  • 步骤 3:生成并导出软件物料清单。软件物料清单是使用 Scribe gensbom CLI 工具生成的。生成的 SBOM 可以以 CycloneDX JSON 格式导出。

使用成分分析 (SCA) 工具

自动为软件产品生成 SBOM 的第三种方法是使用第三方软件组合分析工具。 SCA 工具会分析您的产品以识别软件中的第三方组件和许可证。该工具评估代码的合法性以及对许可证要求的遵守情况。

SCA 扫描软件的源代码、二进制文件、容器映像和清单文件,以确定其组成并列出软件中包含的所有开源组件。作为 SBOM 的一部分,SCA 还将针对各种数据库运行这些组件,以提取其安全信息、许可证和已知漏洞。

软件组合分析工具可自动执行并加速创建 SBOM 的过程。该工具旨在在短时间内扫描数千个数据点,以便为您的产品编译软件物料清单。 SCA 工具通过对软件包组件以及这些组件的来源进行全面监督,帮助您保护 DevOps 管道。 

结语

尽管一些公司只生成 SBOM,因为监管要求强制要求生成 SBOM,但事实证明,就减轻软件供应链威胁而言,这种做法是必要的。该过程的自动化更为重要,因为它有助于减少手动编译 SBOM 的繁琐、耗时的工作。正如本文介绍的每项技术所强调的那样,SBOM 自动化可以加快 SBOM 创建过程,并使其更加准确和可靠。像 Scribe 这样的插件工具可以在软件的开发流程中自动创建 SBOM。查看我们的博客和其他资源,了解 Scribe 如何自动生成 SBOM 以及如何利用它。