软件物料清单(SBOM)
盘点软件所包含的内容。
软件物料清单(SBOM) 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
什么是 SBOM
软件物料清单(SBOM)是软件中每个组件的正式、机器可读清单,包括库、库的版本、许可证和供应商信息。
正如食品标签会列出配料一样,SBOM 让您可以在几秒钟内回答:该产品是否包含 X 的易受攻击版本?没有 SBOM,这个问题可能需要数天的人工考查。
SBOM 为何如今至关重要
当一个严重漏洞出现时,运营层面的第一个问题就是暴露情况:我们的哪些产品交付了受影响的组件?
在 Log4Shell 事件期间,拥有 SBOM 的组织可以查询其清单,并在数小时内完成分诊。没有 SBOM 的组织则花费数周搜索构建目录。监管机构和大型采购方越来越多地将 SBOM 作为采购条件。
- 快速分析漏洞影响
- 许可证合规与义务跟踪
- 为客户和审计人员提供供应链透明度
标准 SBOM 格式
目前有两种开放标准占据主导地位。工具通常可以在两者之间进行转换。
- SPDX——Linux 基金会标准,在许可证方面功能强大,并得到监管机构广泛认可
- CycloneDX——OWASP 标准,专注于安全性,支持漏洞和依赖关系数据
请避免自行发明格式;使用者和扫描工具都期待这些标准。
条目中应包含什么
每个组件条目都应包含足够的身份信息,以便与漏洞信息源进行匹配。关键字段包括:
- 名称和版本——必须精确,而不是范围
- PURL(软件包地址)——一种通用标识符,例如
pkg:npm/lodash@4.17.21 - 哈希值——用于验证完整性
- 许可证——SPDX 许可证标识符
- 供应商——组件的生产者
# A PURL uniquely identifies a component across ecosystems
pkg:npm/lodash@4.17.21
pkg:pypi/requests@2.31.0
pkg:golang/github.com/gin-gonic/gin@v1.9.1生成 SBOM
可以从源代码或构建产物中自动生成 SBOM。Syft 是一种常用的跨生态系统生成工具,可以输出这两种标准。
# from a project directory (CycloneDX JSON)
syft dir:. -o cyclonedx-json=sbom.cdx.json
# from a container image (SPDX JSON)
syft my-app:1.4.0 -o spdx-json=sbom.spdx.json
# CycloneDX has native generators per ecosystem too
cyclonedx-npm --output-file sbom.json源代码、构建与运行时 SBOM
在不同阶段生成的 SBOM 记录的是不同层面的事实。
- 源代码 SBOM——清单声明的内容;可能遗漏打包或内置的代码
- 构建 SBOM——构建实际引入的内容;对发布版本而言最准确
- 运行时/已部署 SBOM——运行中映像实际包含的内容,包括 OS 软件包
为了保证供应链安全,应在构建时从真实构建产物生成 SBOM,并扫描最终容器中的 OS 级软件包。
扫描 SBOM 中的漏洞
将 SBOM 提供给能把组件映射到已知 CVE 的匹配工具后,它才会真正发挥作用。这样可以将生成与分析解耦:在新的 CVE 发布当天扫描旧的 SBOM。
# match an SBOM against vulnerability databases
grype sbom:sbom.cdx.json
# OSV scanner consumes SBOMs directly
osv-scanner --sbom=sbom.spdx.json
# fail CI above a severity threshold
grype sbom:sbom.cdx.json --fail-on highVEX:说明哪些内容可被利用
SBOM 可能显示某个易受攻击的组件,但该组件在您的产品中实际上无法被利用(因为易受攻击的函数从未被调用)。VEX(漏洞可利用性 eXchange)文档会记录这项评估。
VEX 可以减少噪声:您不必让每位客户都因列出的 CVE 而恐慌,而是可以发布带有理由的 not_affected 声明,或发布带有补救措施的 affected 声明。它将原始清单转化为可采取行动的分诊依据。
分发并签署 SBOM
只有在 SBOM 真实可信,并且与其描述的确切构建产物绑定时,它才值得信任。请对其进行签名,并将其作为证明声明附加,而不是作为单独文件存放。
# attach a signed SBOM attestation to an image with cosign
cosign attest --predicate sbom.cdx.json \
--type cyclonedx \
my-registry/my-app:1.4.0
# verify the attached SBOM attestation
cosign verify-attestation --type cyclonedx my-registry/my-app:1.4.0在持续集成中自动化 SBOM
手动维护的 SBOM 会立即过时。请将生成过程接入流水线,使每个发布版本都生成并存储一个 SBOM,最好在同一作业中完成签名和扫描。
- 从构建产物生成,而不只是从代码库生成
- 将 SBOM 存储在可查询的注册表中,并以版本作为键
- 按计划根据最新的 CVE 信息源重新扫描已存储的 SBOM
- 根据漏洞扫描结果控制发布
SBOM 的常见问题
如果把 SBOM 当成打勾即可完成的事项,它就会在不知不觉中失效。
- 过时——只生成一次,之后从未重新生成
- 不完整——遗漏 OS 软件包、静态链接的代码或内置代码
- 未验证——没有将其与已部署构建产物关联起来的哈希值
- 未使用——已经生成,却从未扫描或查询
目标是获得准确、重新生成、已签名并持续扫描的 SBOM,而不是一次性的 JSON 文件。
快速检查:SBOM 的用途
将您学到的内容应用于一个事件场景。
回顾:SBOM
现在,您可以清点软件包含的内容,并据此采取行动。
- SBOM 是一份机器可读的组件清单,格式为 SPDX 或 CycloneDX
- 使用PURL、版本、哈希值和许可证识别组件
- 在构建时生成,然后将其提供给匹配工具(grype、osv-scanner)以查找 CVE
- 使用VEX声明实际可利用性,减少误报
- 在持续集成中签名并自动化;根据新的信息源重新扫描已存储的 SBOM
下一步:通过签名证明构建产物的来源。
用 AI 导师学习 Cyber Security Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 76
- 课程
- 303
常见问题解答
「软件物料清单(SBOM)」课时是免费的吗?
是的 — 「软件物料清单(SBOM)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「软件物料清单(SBOM)」这节课中我会学到什么?
盘点软件所包含的内容。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「软件物料清单(SBOM)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 供应链威胁
- 软件物料清单(SBOM)
- 依赖项与制品签名
- 保护 CI/CD 流水线