SBOM(软件物料清单)—— 软件供应链安全的“成分说明书”
1. 概述
现代软件都是组装的而非纯自研。随着开源组件在数字化应用中的使用比例越来越高,混源开发已成为当前业内主流开发方式。开源组件的引入虽然加快了软件开发效率,但同时将开源安全问题引入了整个软件供应链。软件组成成分的透明性成为软件供应链安全保障的基础,SBOM(Software Bill of Materials,软件物料清单)作为软件供应链安全治理的重要抓手,其在行业的应用实践速度明显加快。
2. 软件供应链安全治理
2.1 供应链安全概述
供应链(Supply Chain)指生产及流通过程中,涉及将产品或服务提供给最终用户活动的上游与下游企业所形成的网链结构,即将产品从商家送到消费者手中整个链条。供应链的活动是指将自然原材料不断组装成消费者需要的成品的过程,描绘了产品供给关系。整个供应链系统涉及到人员、组织、材料、数据等。
软件供应链的定义由传统供应链概念扩展而来,指软件生命周期中从需求、设计、开发、构建、打包、发布、采购、部署、运维、下线到销毁整个链路,通常涉及软件生产者(供应商/上游)、软件使用者(消费者/下游)以及软件运营者(公司或者企业)三个方面。
软件供应链安全则是和针对软件供应链的攻击有关。攻击者通过网络工具、下载投毒、代码污染、漏洞利用、授权流氓等手段在软件供应链各个活动环节中,对企业业务系统进行破坏性操作。近几年比较严重的软件供应链安全事件有SolarWinds(太阳风暴)攻击、Realtek WiFi SDK漏洞、Apache Log4j2漏洞等。
2.2 风险治理重点

为了帮助企业有效解决软件供应链安全问题,SBOM作为软件供应链安全关键的技术工具之一,能够达到统一描绘软件资产信息格式、协助对采购软件和自研软件风险评估、形成软件供应链活动中传递的软件信息接口标准。
3. SBOM介绍
SBOM(Software Bill of Materials) 是软件成分的结构化清单,详细记录应用程序中包含的所有组件、库及其依赖关系,包括组件名称、版本、许可证、供应商信息和依赖层级。类比于制造业的“物料清单”,SBOM旨在提升软件供应链透明度,解决开源与第三方组件引发的安全与合规风险。
核心价值体现:
- 供应链可见性:97%的代码库含开源组件,81%存在已知漏洞,SBOM可快速定位风险组件。
- 漏洞响应加速:结合漏洞数据库(如NVD),识别受影响组件并优先修复,缩短暴露窗口期(如Log4Shell事件)。
- 许可证合规:避免法律风险,如GPL传染性条款可能导致的商业纠纷。
- 软件质量优化:识别过时组件(85%代码库含4年未更新的开源库),推动升级维护。
4. SBOM最小集定义
美国国家电信和信息管理局(National Telecommunications and Information Administration)发布SBOM最小集的定义: 数据字段是关于必须捕获和维护每个组件的基础数据,以便在整个软件供应链中跟踪组件,并基于此扩展License和漏洞库等其他数据字段。
| 数据字段 | 描述 |
|---|---|
| 供应商名称 | 创建、定义和标识组件的实体的名称。 |
| 组件名称 | 分配给原始供应商定义的软件单元的名称。 |
| 组件的版本 | 组件版本号、供应商用来指定软件从先前标识的版本发生变化的标识符。 |
| 其它唯一标识符 | 用于标识组件或用作相关数据库的查找键的其他标识符。 |
| 依赖关系 | 软件依赖关系、表征上游组件 X 包含在软件 Y 中的关系 |
| SBOM数据的作者 | 为此组件创建SBOM数据的实体的名称。 |
| 时间戳 | 记录SBOM数据组装的日期和时间。 |
| 推荐的数据 | |
| 组件的哈希 | 组件的唯一哈希,以帮助允许列表或拒绝列表。 |
| 生命周期阶段 | SDLC 中捕获 SBOM 数据的获取的阶段。 |
5. SBOM的格式
目前SBOM主要通过三种格式来进行实施:
5.1 SPDX(Linux 基金会标准)
SPDX是一种国际开放标准(ISO/IEC 5962:2021)格式,包含与软件包相关的组件、许可证、版权和安全参考信息。SPDX标准由Linux基金会主办的草根开源项目开发,目前维护到最新2.3版本,特点是对许可证的详细信息支持较好,主要输出文件格式包括RDF、XLS、SPDX、YAML、JSON。
特点:机器可读,支持嵌套依赖关系。
适用场景:大型企业、复杂供应链管理。
5.2 CycloneDX(OWASP 主导)
CycloneDX专为安全环境和供应链组件分析而构建,是一种轻量级SBOM标准,可用于应用程序安全上下文和供应链组件分析。CycloneDX源于OWASP社区的开源项目,由提供战略方向和标准维护的核心团队指导。目前最新维护到1.4版本,可扩展格式并集成SPDX许可证ID、pURL和其他外部标识符,主要输出格式包括XML、JSON。
特点:轻量化,专注安全风险。
适用场景:DevOps集成、开源项目审计。
5.3 SWID(ISO 标准)
SWID是一个标准化的XML格式,可以识别软件产品的组成部分并将其与上下文结合,记录有关软件组件的唯一信息,如产品名称、版本详细信息等。SWID标签在SDLC发布后添加作为软件产品的一部分,在软件安装时将标签信息添加到系统终端,并在产品卸载后自动删除。
特点:嵌入式元数据,适合二进制文件。
- 适用场景:国内企业实战化应用。
6.SBOM的实施流程与技术工具栈
6.1 生成阶段
(1)自动化工具集成CI/CD:
- Syft:开源CLI工具,扫描容器/代码库生成CycloneDX或SPDX格式SBOM。
- Microsoft sbom-tool:企业级工具,支持SPDX 2.2,集成Azure DevOps。
(2)签名验证:
使用非对称加密签名SBOM文件(如CycloneDX CLI),确保未被篡改。
示例(通过Syft为nginx镜像生成sbom文件):
1.Linux机器安装Syft工具
wget https://github.com/anchore/syft/releases/download/v1.29.0/syft_1.29.0_linux_amd64.rpm
rpm -ivh syft_1.29.0_linux_amd64.rpm
2.查看nginx镜像编号
docker images|grep nginx
nginx latest 2cd1d97f893f 8 days ago 192MB
3.为nginx镜像生成sbom(使用镜像名称:tag或者镜像编号均可)
syft 2cd1d97f893f -o cyclonedx-json > sbom.json

6.2 开源存储与管理平台(OWASP Dependency-Track)

7. 政策合规与国际实践
(1)美国:强制性要求
EO 14028行政令:联邦采购软件需提供SBOM,CISA制定后续指南。
NTIA最低要素:明确数据字段、格式与实践规范。
(2)亚太地区进展
日本:经济产业省(METI)发布《SBOM导入指南》,分三阶段实施(环境搭建→生成→管理)。
澳大利亚:网络安全中心(ACSC)要求厂商提供SBOM,纳入“安全设计”原则。
(3)行业标准延伸
SAFECode:发布《SBOM推荐实践》,强调风险评分与生命周期管理。
ISO/IEC 27001:2022:将SBOM纳入软件供应链安全控制项(A.8.31)。
8. 总结
SBOM 是软件安全的“成分表”,通过标准化记录组件信息,实现漏洞快速定位、合规审计和供应链透明化。SBOM当前已从合规要求演变为软件供应链安全的基础设施。其发展需三个阶段:
- 标准化:统一格式(SPDX/CycloneDX主导)与最小数据集;
- 自动化:CI/CD深度集成+智能漏洞关联;
- 生态化:与硬件BOM(HBOM)整合,构建全栈可观测性。
SBOM(软件物料清单)—— 软件供应链安全的“成分说明书”的更多相关文章
- OpenSSF安全计划:SBOM将驱动软件供应链安全
在 软件成分分析(SCA)一文中,我们简单提到软件物料清单(SBOM)在安全实践中的价值. 本期文章将带你深入了解 "SBOM 无处不在"计划是什么,以及 SBOM 对未来软件供应 ...
- 关于软件物料清单(SBOM),你所需要了解的一切
在此前的多篇文章中,我们已经详细地介绍了软件物料清单(SBOM)对于保障软件供应链安全的重要性以及一些注意事项.在本文中,我们将会更深入地介绍SBOM,包括最低要求元素.格式.使用场景以及如何对其进行 ...
- Psp个人软件开发软件需求分析和用例分析
Psp个人软件开发软件需求分析和用例分析 一.需求分析 1.业务需求 1.1 应用背景 开发项目进度计划总是那么不明确,延期经常出现,甚至无法给出一个相对比较明确的延迟时间.这样给市场的推广会带来很大 ...
- 软件安装失败,导致ubuntu软件中心软件消失
感谢百度上各位IT界朋友的帮助,由于某个软件安装失败,导致ubuntu软件中心软件消失的解决办法: 找百度,有人说, 使用命令:sudo apt-get install software-center ...
- 软件测试 → 第一章 基础-> 软件与软件危机
一. 软件概念 1.软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合.2.程序是按事先设计的功能和性能要求执行的指令序列.3.数据是使程序能正常操纵信息的数据结构. ...
- C#,Winform软件防破译-源代码加密简单方法之.NET REACTOR(二)制作软件及软件试用时间限定
二.简单介绍使用 .net reactor 软件制作试用软件,利用license制作授权软件的方法. 1.首先,生成试用版软件 设置主文件和附属文件,打开.net Reactor 设置试用期限,在Se ...
- JEPF 3.1.2 发布,我们的软件机床(软件快速开发平台)
JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...
- Psp个人软件开发软件需求分析及用例分析
一.需求分析 1. 业务需求 1.1 应用背景 开发项目进度计划总是那么不明确,延期经常出现,甚至无法给出一个相对比较明确的延迟时间.这样给市场的推广会带来很大的影响,不确定因素使得应对十分困难. ...
- Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)
介绍完FTP协议后,来看看该软件完成后的效果图 客户端的主界面如上图所示,主要是分为以下几个界面: 数据输入界面:用来让用户输入服务器的地址,用户名,密码,端口号等. 站点菜单.本地菜单.远程菜单以及 ...
- [转]在linux下如何判断是否已经安装某个软件?软件安装在哪个目录
<1>在linux下如何判断是否已经安装某个软件? ++++++++++++++++++++++++++++++++++++++++++ rpm -qa|grep 软件包 ++++++++ ...
随机推荐
- 遇到的问题之“对象不为空,字段为空,取出使用时报空指针异常【特例场景:Optional的使用】”
一.场景 二.原因 目前找到的原因是:使用Optional.of()方法对其判空后直接报错了,就没有走orElse了 Optional.of()源码 Optional.java /** * Retur ...
- C#程序的内存缓存
C#程序可以使用IMemoryCache.IMemoryCache是.NET Core中内置的一个轻量级缓存实现,可以用于在内存中缓存数据,以提高应用程序的性能和响应速度.它支持通过键值对的方式缓存数 ...
- javax.validation @Valid注解实现参数校验
在 RESTful 的接口服务中,存在各种各样的请求参数.在跳入业务处理环节之前,通常会有一个基础的数据验证的机制,待验证通过,结果无误后,请求参数才会传递到正式的业务处理中. maven 依赖引 ...
- 打开host有感
一年前的呼喊,消失在了文化课的彼端,没有回音: 直至今日打开host,才发觉那时悔恨与泪水的珍贵. [此时此刻的光辉,盼君勿忘]也得加上过去式了啊--
- 记一次SSD性能瓶颈排查之路——寿命与性能之间的取舍
1. 背景 我就职于一家轨道交通行业公司,负责的产品之一是日志记录板卡配套软件.有一天接到了现场报告,记录软件出现通信异常,将日志数据拉回来以后,发现出现异常时,CPU使用率接近100%,记录相关软 ...
- kali系统在hyper-v上的配置
安装 镜像下载地址 下载: 将压缩包解压,后找到 .bat 文件,以管理员身份运行. 之后便可以在 \(hyper-v\) 管理器中看到其虚拟机. 汉化处理: 在最上面找到终端,点击打开. 1.打开终 ...
- DeepSeek MOE 代码实现
前置知识: PyTorch 基础函数操作整理 1. topk 操作 功能: torch.topk 用于返回输入张量中指定维度上的前 k 个最大元素及其对应的索引. 示例代码: import torch ...
- OceanBase 中的身外身法 —— Auto DOP(自适应并行)使用技巧分享
首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 "老纪的技术唠嗑局",会持续更新和 OceanBase 相关的各种技术内容.欢迎感兴趣的朋友们关注! Part 1 ...
- 无法直连 SSH?一招反向SSH搞定内网到公网的远程连接问题
作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 在校园网或者是家里的内网中,我们常常会遇到一个头疼的问题:两台设备明明都接入了网络,但当我离开内网之后却无法再远 ...
- SAP的PI日志查看工具
被很多人吐槽的SAP PI能坚挺的活下来,真是不容易... SXI_MONITOR是PI的标准的消息查看器,如果又权限的话,甚至可以做自定义字段的查询增强(如果对单据创建接口,增加单号...速度杠杠的 ...