论文分享—— 软件物料清单(SBOM)开源与专有工具的现状研究

news/2024/12/28 16:45:03/

论文来源:https://arxiv.org/abs/2402.11151 A Landscape Study of Open Source and Proprietary Tools for Software Bill of Materials (SBOM)

以下论文总结由豆包生成:

一、研究背景

现代软件应用依赖众多第三方组件,软件供应链安全面临挑战。软件物料清单(SBOM)作为解决方案,可记录应用中的第三方组件及依赖关系,提高软件透明度。近期供应链攻击事件凸显了软件安全的重要性,SBOM 在其中发挥关键作用,其相关概念受重视,多种工具应运而生,但工具范围广泛且不标准。

二、研究方法

  1. 定义分析范围:确定与 SBOM 相关的开源和专有工具,涵盖软件成分分析及软件供应链安全工具。
  2. 文献分析与访谈:研究相关文献,与网络安全公司进行技术讨论,以深入了解 SBOM 相关情况。
  3. 工具识别:通过多种渠道,如开源仓库、网络资源、论坛、博客、行业外联及参与工作组等,利用关键词搜索工具。
  4. 工具评估标准:对识别的工具进行评估,包括文档、功能审查、代码审查(开源工具),在目标项目上执行工具,考虑核心功能、可用性、互操作性和可定制性等标准。
  5. SBOM Plugfest 和基准测试:对部分工具在样本软件项目上执行,进行基准测试和比较。
  6. SBOM 工具现状描述:整合分析收集的信息,总结当前工具的异同和差距。

三、SBOM 工具现状

(一)新兴用例

  1. SBOM 生成:54 个工具支持,部分工具使用 SPDX 和 CycloneDX 等标准格式,少数有自己的格式,部分工具从项目源生成,部分为用户提供创建接口。
  2. SBOM 使用
    • 漏洞管理(VEX):通过查询漏洞数据库识别软件中的漏洞。
    • 依赖滥用检测:检测依赖关系中的不当使用。
    • 许可证合规性:检查软件组件的许可证问题。
  3. SBOM 互操作性:解决不同格式 SBOM 的聚合问题,包括转换、合并和比较工具。
  4. SBOM 质量保证:验证 SBOM 的有效性和质量,包括模式检查、内容验证和评分。
  5. SBOM 服务
    • 存储和管理:提供集中存储 SBOM 数据的位置。
    • 共享:促进 SBOM 在供应链中的共享。
    • 事件响应:自动化漏洞通知和管理。
    • 签名:对 SBOM 进行签名和验证。

(二)SBOM 生成

  1. 支持的输入和开发环境
    • SBOM:63% 的工具支持,多数通过清单文件(如 pom.xml 或 package.json)生成,部分通过源代码分析。
    • 部署 SBOM:26% 的工具支持,通过包管理器获取已安装软件的信息。
    • 分析 SBOM:17% 的工具支持,对构建后的工件进行分析生成。
    • 设计 SBOM:9% 的工具支持,用于规划软件项目。
    • 构建 SBOM:9% 的工具支持,作为构建过程的一部分生成,便于集成到 CI/CD 管道。
    • 运行时 SBOM:仅 1 个工具支持,实时捕获运行时的依赖关系。
  2. 支持的生态系统:OSS 非设计 SBOM 生成器支持多种编程语言和包管理或构建系统,部分工具支持特定操作系统的包管理器和图像二进制文件。
  3. 支持的模式:CycloneDX 和 SPDX 是主要格式,多数生成工具至少支持一种,第三方工具更倾向于支持 CycloneDX。

(三)SBOM 使用和利用

  1. 许可证管理:部分工具用于管理软件组件的许可证。
  2. 漏洞管理和 VEX:漏洞扫描工具使用 SBOM 检测和修复漏洞,部分工具利用 VEX 生成或更新漏洞报告。
  3. 其他用例:一些工具提供可视化和访问管理等功能,方便使用 SBOM

(四)SBOM 互操作性

15% 的工具解决不同格式 SBOM 的互操作性问题,但由于缺乏统一标准,主流格式之间也无法直接映射,导致中间 SBOM 的出现,其格式不一致。

(五)SBOM 质量保证

17% 的工具提供验证 SBOM 质量的方法,多数仅进行模式验证,部分提供其他指标,如 NTIA 合规性、许可证验证、UID 验证、哈希存在和依赖关系信息,但缺乏标准化和深入的质量指标。

(六)SBOM 服务

15% 的工具提供 SBOM 服务,包括存储库服务器、CI/CD 插件和签名及证明工具,有助于促进 SBOM 的采用。

四、SBOM Plugfest 实验

(一)实验设置

  1. 工具选择:选择支持语言和生态系统最多的五个开源 SBOM 生成工具。
  2. SBOM 类型:生成源 SBOM
  3. 基准项目和测试用例:使用 Maven 构建的 Java 项目,包括正常使用依赖、未使用的依赖导入和仅清单文件包含依赖三种场景。
  4. 实验执行和方法:使用标准化 Docker 镜像,在不同场景下运行工具,分析生成的 SBOM 是否包含 NTIA 定义的最小元素。

(二)实验结果

  1. 源代码对 SBOM 输出无影响:工具生成的 SBOM 相同,引发对依赖清单文件而不参考源代码的担忧。
  2. PURL 和 CPE 使用差异大:组件的 PURL 更常见,Syft 是唯一提供 CPE 和 PURL 信息的工具。
  3. Maven 和清单文件对依赖关系的影响:Maven 和清单文件影响工具的依赖关系报告能力,缺失时确定依赖关系困难。
  4. 构建系统移除导致数据丢失:构建系统移除后,SBOM 中的数据丢失严重,尤其是依赖关系信息,影响依赖和漏洞管理。

(三)总体分析

实验揭示了现有 SBOM 生成工具存在的问题,包括缺乏大规模准确的基准数据、依赖次级系统导致不准确、生成结果不一致、成分标准化不足、对包管理系统支持有限和软件识别挑战等。

五、研究结论

  1. 研究收集 84 个 SBOM 相关工具数据,分类并评估市场情况,虽工具多样表明社区对 SBOM 概念接受度高,但筛选工具困难。
  2. 不同工具功能多样,OSS 工具多需手动生成 SBOM,部分专有工具可自动集成,软件供应链安全受关注,当前 SBOM 市场有差距需改进,以提高 SBOM 采用率和易用性,未来需更多研究和开发将 SBOM 工具集成到软件获取过程中。

http://www.ppmy.cn/news/1558836.html

相关文章

【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理

前言 Flutter端在处理网络请求的时候,最常用的库当然是Dio了,那么在改造成web端的时候,最先处理的必然是网络请求,否则没有数据去处理驱动实图渲染。 官方链接 pub https://pub.dev/packages/diogithub https://github.com/c…

基于Oauth2的SSO单点登录---后端

【springbootvue项目(十三)】 Springboot整合Spring SecurityJWT 【springbootvue项目(十四)】基于Oauth2的SSO单点登录(一)整体流程介绍 【springbootvue项目(十五)】基于Oauth2的…

HTML5文档元数据详解

HTML5文档元数据详解 在HTML5中&#xff0c;元数据&#xff08;Meta Data&#xff09;是文档头部的重要组成部分&#xff0c;提供了关于网页本身的信息。以下是一些常见的元数据标签及其详细说明。 1. <meta> 标签 <meta>标签用于定义文档的元数据&#xff0c;通…

matlab遇到的各种问题及解决方案

&#x1f642;本文整理了自己学习matlab过程中遇到的一些问题&#xff0c;及在网上找到的解决方法&#xff0c;并记录下来&#xff0c;方便后续学习&#xff0c;文章出处已附上链接&#x1f642;~ “变量似乎要更改脚本中每个循环迭代的大小。请考虑对速度进行预分配。” MAT…

cesium通过经纬度获取3dtiles 得feature信息

找到这里3dtiles的两种访问方式&#xff1a; 1.1 3DTileContent#getFeature 这里涉及3DTile 数据结构&#xff0c;暂不了解3DTile 数据结构&#xff0c;因此暂不使用。 1.2 scene.pick 本次使用 scene表示虚拟场景中所有 3D 图形对象和状态的容器&#xff1b;scene中…

C++-------递归知识点串讲

C递归简介 递归的定义&#xff1a;递归是指在函数的定义中使用函数自身的方法。一个递归函数通常包含两部分&#xff1a;基线条件&#xff08;base case&#xff09;和递归条件&#xff08;recursive case&#xff09;。基线条件用于终止递归&#xff0c;防止无限循环&#xf…

虚拟机桥接模式网络连接不上解决方法

可能是桥接模式自动配置网络地址的时候没配好&#xff0c;自己手动配置一下。先看看windows里的wifi的ip 把虚拟机的网络设置打开ipv4把地址、子网掩码、网关输进去&#xff0c;然后再连接

leetcode 3083. 字符串及其反转中是否存在同一子字符串 简单

给你一个字符串 s &#xff0c;请你判断字符串 s 是否存在一个长度为 2 的子字符串&#xff0c;在其反转后的字符串中也出现。 如果存在这样的子字符串&#xff0c;返回 true&#xff1b;如果不存在&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;s "…