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)

开源SBOM分析平台,支持API集成,可视化漏洞影响(下图为其架构):

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当前已从合规要求演变为软件供应链安全的基础设施。其发展需三个阶段:

  1. 标准化:统一格式(SPDX/CycloneDX主导)与最小数据集;
  2. 自动化:CI/CD深度集成+智能漏洞关联;
  3. 生态化:与硬件BOM(HBOM)整合,构建全栈可观测性。

参考:SCA技术进阶系列(一):SBOM应用实践初探

​​SBOM(软件物料清单)—— 软件供应链安全的“成分说明书”​的更多相关文章

  1. OpenSSF安全计划:SBOM将驱动软件供应链安全

    在 软件成分分析(SCA)一文中,我们简单提到软件物料清单(SBOM)在安全实践中的价值. 本期文章将带你深入了解 "SBOM 无处不在"计划是什么,以及 SBOM 对未来软件供应 ...

  2. 关于软件物料清单(SBOM),你所需要了解的一切

    在此前的多篇文章中,我们已经详细地介绍了软件物料清单(SBOM)对于保障软件供应链安全的重要性以及一些注意事项.在本文中,我们将会更深入地介绍SBOM,包括最低要求元素.格式.使用场景以及如何对其进行 ...

  3. Psp个人软件开发软件需求分析和用例分析

    Psp个人软件开发软件需求分析和用例分析 一.需求分析 1.业务需求 1.1 应用背景 开发项目进度计划总是那么不明确,延期经常出现,甚至无法给出一个相对比较明确的延迟时间.这样给市场的推广会带来很大 ...

  4. 软件安装失败,导致ubuntu软件中心软件消失

    感谢百度上各位IT界朋友的帮助,由于某个软件安装失败,导致ubuntu软件中心软件消失的解决办法: 找百度,有人说, 使用命令:sudo apt-get install software-center ...

  5. 软件测试 → 第一章 基础-> 软件与软件危机

    一. 软件概念 1.软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合.2.程序是按事先设计的功能和性能要求执行的指令序列.3.数据是使程序能正常操纵信息的数据结构. ...

  6. C#,Winform软件防破译-源代码加密简单方法之.NET REACTOR(二)制作软件及软件试用时间限定

    二.简单介绍使用 .net reactor 软件制作试用软件,利用license制作授权软件的方法. 1.首先,生成试用版软件 设置主文件和附属文件,打开.net Reactor 设置试用期限,在Se ...

  7. JEPF 3.1.2 发布,我们的软件机床(软件快速开发平台)

    JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...

  8. Psp个人软件开发软件需求分析及用例分析

    一.需求分析 1.  业务需求 1.1 应用背景 开发项目进度计划总是那么不明确,延期经常出现,甚至无法给出一个相对比较明确的延迟时间.这样给市场的推广会带来很大的影响,不确定因素使得应对十分困难. ...

  9. Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)

    介绍完FTP协议后,来看看该软件完成后的效果图 客户端的主界面如上图所示,主要是分为以下几个界面: 数据输入界面:用来让用户输入服务器的地址,用户名,密码,端口号等. 站点菜单.本地菜单.远程菜单以及 ...

  10. [转]在linux下如何判断是否已经安装某个软件?软件安装在哪个目录

    <1>在linux下如何判断是否已经安装某个软件? ++++++++++++++++++++++++++++++++++++++++++ rpm -qa|grep 软件包 ++++++++ ...

随机推荐

  1. 【安装】Linux下安装CUDA ToolKit 11.4和cuDNN 8

    注意!如果你使用的是pytorch,只需要装好CUDA,不需要装cuDNN.而且完全可以等到报错了再装CUDA,一般情况系统都已经装好CUDA Toolkit了. 除非你只装了低版本的CUDA Too ...

  2. 时间工具类之“LocalDateTime方案转换地域性时差问题->UTC时间转纽约时间”

    一.使用方法 1.获取纽约ZoneId[纽约时区的ZoneId标识为"America/New_York"] -> ZoneId.of("America/New_Yo ...

  3. 浅谈鸿蒙跨平台开发框架ArkUI-X

    之前写过使用uniapp的跨平台开发鸿蒙项目,今天分享一下开发体验更友好的跨平台开发框架ArkUI-X. ArkUI-X看起来像是鸿蒙官方的框架,在DevEco中就可以安装和使用,而且会ArkUI就可 ...

  4. Alembic迁移脚本:让数据库变身时间旅行者

    title: Alembic迁移脚本:让数据库变身时间旅行者 date: 2025/05/09 13:08:18 updated: 2025/05/09 13:08:18 author: cmdrag ...

  5. C#之BitConverter.ToInt16

    byte[] bytes = { 1,3 }; short s = BitConverter.ToInt16(bytes,0); Console.WriteLine(s); 从低位到高位填充: 000 ...

  6. dll正由另一进程使用,因此该进程无法访问此文件

    打开 Windows 资源监视器:按下 Win+R 快捷键打开"运行"对话框,输入 resmon 命令并按下回车键.在资源监视器中,选择"CPU"选项卡,然后在 ...

  7. FFmpeg开发笔记(六十一)Linux给FFmpeg集成H.266编码器vvenc

    ​<FFmpeg开发实战:从零基础到短视频上线>该书的第一章介绍了如何在Linux环境给FFmpeg集成H.264和H.265的编码器,如今H.266的编码器vvenc也日渐成熟,从7.1 ...

  8. 布局控件:Grid和StackPanel

    布局控件:Grid和StackPanel 本文同时为b站WPF课程的笔记,相关示例代码 一个窗口顶上的部分叫做非客户区,下面的部分叫做客户区域.非客户区域主要就是一个Title和三个窗口样式按钮.我们 ...

  9. 打开host有感

    一年前的呼喊,消失在了文化课的彼端,没有回音: 直至今日打开host,才发觉那时悔恨与泪水的珍贵. [此时此刻的光辉,盼君勿忘]也得加上过去式了啊--

  10. Linux下如何使用perf/gdb/pstack分析性能与问题排查

    本文分享自天翼云开发者社区<Linux下如何使用perf/gdb/pstack分析性能与问题排查>,作者:5****m 在Linux系统中,perf.gdb和pstack是三个常用的性能分 ...