如何生成软件物料清单 (SBOM)

由于网络安全实践的进步,现代软件包比以往任何时候都更加安全。然而,他们也面临着最先进的威胁,这使得他们既安全又脆弱。供应链攻击,例如 SolarWinds的 以及严重的漏洞,例如 Log4Shell 是当今软件系统面临的最新威胁之一。此类软件供应链攻击的效果是动态的,并且更难以驾驭,因为它们利用的是超出您直接控制范围的系统漏洞。

然而,对抗此类软件供应链攻击的第一步是清楚地了解软件中包含的软件包、依赖项和组件。这就是为什么为您的构建生成软件物料清单 (SBOM) 很重要。它不仅增强了软件供应链中漏洞的可见性,SBOM 对于合规性目的也变得很重要。 SBOM 生成已由最近的一项授权 美国联邦政府发布的行政命令 增强网络安全并保证软件包中使用的第三方组件的真实性。

根据一个 Gartner公司 据预测,到 60 年,2025% 负责开发关键基础设施软件的组织将需要标准化的 SBOM。创建 SBOM 首先要选择符合组织标准和目标的工具,确定软件构建生命周期的阶段。应用 SBOM,确认其符合格式,并执行漏洞扫描。生成 SBOM 是一个微妙而复杂的过程。本文将介绍何时需要生成 SBOM 以及如何为您的软件生成它。

何时生成软件物料清单

生成软件物料清单 (SBOM) 对于保护您的软件构建以及整个软件供应链至关重要。 SBOM 生成可以集成到软件构建过程的各个阶段。您可以在构建时、运行时或对软件进行取证时使用源代码生成物料清单。其中,专家建议在构建期间生成 SBOM。这是因为构建时 SBOM 生成器更准确,并生成更完整的依赖项列表。但是,由于这并不总是可行,因此可以在 DevOps 生命周期中的任何其他时间生成 SBOM。

值得注意的是,要使用的 SBOM 生成工具的类型取决于生成 SBOM 文档的 DevOps 生命周期的哪个阶段。以下是构建生命周期中可以生成 SBOM 的不同阶段。每个时期都有不同的优势和权衡。最好了解您正在生成的 SBOM 数据的目标受众和用例,并选择一种为您提供最佳结果的方法。

在源代码阶段

通过检查工件和任何相关源(例如清单、元数据和锁定文件),源或二进制工具将在源代码阶段生成软件物料清单。在此阶段,您可以对软件进行软件组件分析或二进制分析。

SCA(软件组件分析)工具旨在分析软件及其清单文件以确定其组件。另一方面,二进制分析工具分析软件元数据并构建工件信息以生成 SBOM。此阶段使用的分析工具的示例包括 CycloneDX、It-Depends、Fossa、AppSonar、Cybellum、Black Duck 和 Fortress。

您可以将漏洞分析器与源代码阶段生成的 SBOM 结合使用,以接收正在构建的软件中的早期漏洞警告。然而,此阶段生成的 SBOM 存在局限性。其一,它们并不完整,因为在构建依赖项信息期间生成的信息通常会丢失。此外,它们可能包括有关最终部署的产品中未使用的组件的信息。

构建期间

使用构建系统中的工具在构建时创建 SBOM,可以最准确地了解二进制文件中的内容,包括传递依赖项和未固定依赖项。这是由  NTIA 关于软件供应商 SBOM 生产和提供的研究.

NTIA 建议为每个新组件版本创建一个 SBOM。这意味着每次更新或发布新版本的软件时都会创建一个新的 SBOM。供应商在发现前一个版本中存在错误或了解以前未记录的有关其软件组件的新信息时也需要创建新的 SBOM。

在构建时生成 SBOM 涉及使用适用于您构建软件的本机环境的插件。大多数开发环境都有与依赖管理系统集成的插件,可以自动生成 SBOM。构建时 SBOM 生成器的示例包括 SPDX、CycloneDX Maven 插件和 OWASP 的 Dependency-Track-Check。

尽管构建时 SBOM 生成器最全面、最准确,但与其他方法相比,它们更难设置。此外,此方法不适用于某些构建系统,并且您不能将此方法用于旧产品。 

在运行时生成 SBOM

在运行时工作的 SBOM 生成器旨在捕获软件、应用程序服务器或插件在运行时使用的库。这种类型的生成器还详细介绍了软件调用的所有服务以及它访问的端口和活动库。然而,这种生成 SBOM 的方法并未广泛使用。此外,没有明确的工作流程用于将使用此方法生成的数据与原始 SBOM 文档合并。 杰博姆 威胁映射器 是运行时 SBOM 生成器的示例。

如何生成软件物料清单:分步指南

对于开发人员来说,手动生成软件物料清单既耗时又乏味。以这种方式列出软件程序的所有组件基本上是不切实际的。然而,现在有许多 SBOM 生成工具可以简化此过程。如何进行此操作取决于您组织的标准以及您希望在开发生命周期中何时生成 SBOM。

通过将 SBOM 工作流程集成到软件构建管道中,您可以自动化 SBOM 流程。 抄写员平台 就是这样一种工具,可以简化您创建软件物料清单的方式。 Scribe 允许您从一处管理和共享您的 SBOM。通过这种方式,您可以验证软件组件的完整性并无缝跟踪软件管道中的漏洞。本节是使用 Scribe 生成软件物料清单的分步指南。

第 1 步:注册并登录 Scribe Trust Hub。

在开始之前,您应该知道 Scribe 平台有一个 Web 界面 — Scribe Trust Hub — 可通过浏览器访问。然而,Scribe 证据收集器仅在 Linux 和 Mac 设备上运行。要使用 Scribe 生成完整性报告和 SBOM,您必须有权修改项目的构建脚本并添加将项目连接到 Scribe 所需的相关代码片段。请记住,虽然 Scribe 可以为使用任何生成容器映像的编程语言编写的项目生成 SBOM,但当前版本仅适用于 Node.js 项目。

将 Scribe 集成到您的项目中的第一步是在 Scribe Trust Hub 上注册。注册并登录后,导航至“产品”选项卡并单击“设置”。 Scribe 在此页面上有一个演示产品,您可以与之交互以了解该平台及其工作原理。

第 2 步:集成 Scribe Trust Hub

下一步是将 Scribe 连接到项目的持续集成管道。这会自动执行 SBOM 生成过程。通常,您可以将 Scribe Trust Hub 中的代码片段添加到 CI 管道上的两个点中。您可以将代码放置在源代码签出处或最终构建的映像中。第一个选项是推荐的,但不是强制性的,而第二个选项是强制性的。

Scribe 的 CI 设置目前仅适用于 Jenkins,而不是 Kubernetes 和 GitHub Actions。为这些 CI 设置集成 Scribe 的过程类似。您需要在 Scribe Hub 产品设置页面上获取以下凭据才能开始:

  • 产品密钥
  • 客户ID
  • 客户机密

产品密钥因产品而异,而客户端凭据对于您的帐户来说是唯一的。

为 Jenkins 设置 CI 集成

要为 Jenkins 设置 CI 集成,您可以在结帐点和/或创建 Docker 映像后添加代码片段以调用“Gensbom”(Scribe Trust Hubs 的用于收集证据和生成 SBOM 的工具)。

首先根据独特的说明将上述凭据添加到您的构建环境中 詹金斯。接下来,根据说明将代码片段添加到您的管道中 点击此处。

为 GitHub Actions 设置 CI 集成

为 GitHub Actions 设置 CI 集成的过程与 Jenkins 类似。主要思想是将 Scribe 的证据收集器和 SBOM 生成器称为“Gensbom”。要开始使用,请按照 GitHub 说明 根据说明将产品设置凭据和代码片段添加到管道 点击这里

将 Scribe Trust Hub 与其他 CI 系统集成

尽管 Scribe 仅提供对 Jenkins 和 GitHub 操作的本机支持,但您也可以将其用于其他 CI 系统。首先,从基于 Unix 的命令行界面下载“Gensbom”工具。接下来,添加您的产品和客户端凭据,然后在结帐时或在最终构建映像之后从构建脚本调用 Scribe gensbom。

第 3 步:生成软件物料清单

Scribe 的 gensbom CLI 工具可为 Docker 和开放容器映像 (OCI) 生成软件物料清单 (SBOM)。该工具仅在 Mac 或 Linux 系统上运行。 Scribe 生成的最终 SBOM 为 CycloneDX JSON 格式,这是 SBOM 认可的标准机器和人类可读格式之一。打开的容器镜像可以从 Docker、本地磁盘或远程注册表中提取,视情况而定。

尽管生成 SBOM 的图像的名称、目录和路径有默认设置,但如果需要,可以相应地更改这些默认设置。

第 4 步:导出 SBOM

Scribe Trust Hub 还允许您在软件验证过程中无缝导出和共享软件物料清单。 SBOM 以 CycloneDX JSON 报告格式生成,详细说明了所分析的 Docker 映像的所有开源依赖项。生成 SBOM 后,您可以一键导出。您将在报告的右上角找到“导出 SBOM”按钮。单击它可导出您的软件物料清单。

结语

生成软件物料清单正成为保护软件供应链和合规性目的日益重要的一步。无论您生成 SBOM 的原因是什么,您都会发现 Scribe Trust Hub 是一种易于使用且灵活的方法,可以为您的每个软件构建自动化 SBOM 生成工作流程。