首页 > 其他分享 >SCA面面观 | 如何生成一份软件物料清单SBOM?

SCA面面观 | 如何生成一份软件物料清单SBOM?

时间:2024-01-12 12:33:33浏览次数:39  
标签:SCA 面面观 供应链 SBOM 格式 组件 软件

由于网络安全挑战和不断变化的威胁环境,使得软件供应链安全成为了一个重要议题。特别是近年来,软件供应链的复杂性和全球化程度的提升,第三方软件的安全性和可追溯性变得越来越重要。

为了应对这一挑战,从美国政府开始,各个国家开始积极推动软件供应链安全的相关政策和措施。美国陆续发布的了《保障软件供应链安全:SBOM实践应用相关指南》、拜登14028号行政令(EO14028)成为了其他国家进行软件供应链安全保护的指导性文件。

近年来,我国先后发布了《网络安全审查办法》《关键信息基础设施安全保护条例》等政策法规强调加强软件供应链的安全保障。《GB/T 36637-2018 信息安全技术 ICT 供应链安全风险管理指南》标准要求,从产品全生命周期的角度开展风险分析及管理,以实现供应链的完整性、保密性、可用性和可控性安全目标。

软件物料清单(SBOM)作为一种有效的基础性工具,被广泛应用于软件供应链的安全管理中。简单来说,SBOM是详细记录软件组件的来源、版本和依赖关系等信息,有助于提高软件的透明度和可追溯性,便于发现和修复其中的安全漏洞。本文我们就来详细讲解 SBOM的具体是什么样子?以及它是如何生成的?

SBOM是个什么样子?

根据美国国家电信和信息化管理局(NTIA)的定义:SBOM是一份信息详尽、机器可读的形式化清单,其中囊括了软件所有组件的详尽信息及它们之间的层级关系。

SBOM是一个结构化列表,其中包含了软件基本信息、软件间的关系和软件其他信息这三类成分。

SCA面面观 | 如何生成一份软件物料清单SBOM?_SBOM

而SBOM的生成和交付,需要符合相应标准的数据结构。目前,业界公认的三种主流SBOM格式标准分别是SPDX、CycloneDX和SWID。这些标准通常采用XML或JSON等机器可读的格式,以便在不同的系统和工具之间进行交换和处理。

1. SPDX格式:是由Linux基金会赞助的SPDX项目编写的开放标准,用于识别和编目与软件相关的组件、许可证、版权、安全参考和其他元数据。SPDX使用一种标准化的、机器可读的格式,使其在不同的公司和行业之间保持一致,适合提供软件供应链、组件和依赖关系的大图。支持包括YAML、JSON、RDF/XML、tag:value等多种文件类型。

2. CycloneDX格式:是一种轻量级的标准,专为应用安全和供应链组件分析而设计,专注于提供快速、可靠的软件组件信息,而不是提供信息详尽的元数据。这使得CycloneDX在处理大型、复杂的软件项目时具有较高的性能。

3. SWID格式:是一种用于标识和描述软件实体的XML标准格式。它是为了提供对软件产品的准确和一致的信息而设计的。SWID支持四种类型的标签,分别是corpus、primary、patch和supplemental,用于在软件开发生命周期中表示不同的软件状态和信息,可以用于软件部署、配置管理、软件资产管理、安全漏洞评估等场景。

美国国家电信和信息化管理局(NTIA)认证了这三种格式,并要求向美联邦政府销售软件的组织必须以这三种格式之一提供SBOM。其中,SPDX作为唯一被写入ISO国际标准的格式,被各个国家广泛使用。

如何生成一份SBOM?

SCA工具作为当下开源软件治理和软件供应链安全管理的重要工具之一,生成SBOM是其重要核心功能之一,为后续各阶段的安全工作提供必备的基础信息,SCA工具生产SBOM可分为6个步骤:

SCA面面观 | 如何生成一份软件物料清单SBOM?_SBOM_02

1. 扫描软件:SCA工具会对目标软件进行扫描,扫描过程会涉及软件的源代码、二进制文件、容器镜像等不同层面。SCA工具会分析这些文件,以识别和提取其中的组件信息。

2. 识别组件:在扫描完成后,SCA工具会识别出软件中包含的所有组件。这些组件可能包括开源库、框架、插件等。SCA工具会使用不同的技术和算法,如文件哈希、模式匹配等,来准确识别这些组件。

3. 收集组件信息:一旦组件被识别出来,SCA工具会开始收集这些组件的相关信息。这包括组件的名称、版本号、供应商、许可证类型等。这些信息对于生成完整和准确的SBOM至关重要。

4.生成 SBOM数据:SCA工具会将生成的数据与知识库进行匹配对比,与此同时,根据用户所选的SBOM格式标准(如SPDX、CycloneDX、SWID等)生成相应的SBOM结构,将比对后的数据填入到相应字段。

5. 验证和优化SBOM:在生成SBOM后,SCA工具可能会进行一些验证和优化操作。验证可以包括检查SBOM的格式是否正确、组件信息是否完整、依赖关系是否准确等。优化则是对SBOM进行进一步的调整和改进,以提高其质量和可用性

6. 输出和交付SBOM:SCA工具会将生成的SBOM输出为机器可读的格式(如XML、JSON等),并交付给需要的相关方(软件开发团队、安全团队、合规性检查团队等),可以使用SBOM进行供应链安全管理、软件资产管理、风险评估、漏洞修复、安全事件响应等工作。

充分利用SBOM,确保软件供应链安全

生成SBOM之后,如何充分利用这份清单是保障软件供应链安全的关键所在。首先,通过SBOM可以精确掌握软件中每个组件的来源、版本和依赖关系,这有助于及时发现和修复已知的漏洞,避免安全风险,并且利用SBOM进行许可证合规性检查,确保软件使用合法,避免因违规而引发的法律纠纷。

此外,将SBOM与自动化工具相结合,在软件供应链的引入、生成、应用阶段的风险评估中,帮助识别关键供应商和组件,确保供应链的可靠性。因此,充分利用SBOM,不仅大幅度提升软件的安全性,而且进一步提高软件开发效率,降低合规风险,为整个软件供应链带来更加稳固可靠的安全基础。

标签:SCA,面面观,供应链,SBOM,格式,组件,软件
From: https://blog.51cto.com/u_15891519/9213934

相关文章

  • 安装ScaleIO on Centos7.4 遇到错误
    安装ScaleIOonCentos7.4,在部署完SDC后,节点sc1是MDM主节点,也是SDC。新建了volume01,然后进行mapping,之后主机失去响应,重启后报错如下:CentOSLinux7(Core)Kernel3.10.0-693.e17.x86_64onanx86_64sc1login:[25.6298101ScaleIOR2_0drvMain_Init:61:Driverstartingloadp......
  • 玩 inkscape/adobe illustrator 玩的
    如有需要可提供矢量版本挺好玩的......
  • 32-Scala-函数式编程
    1.偏函数1.1案例引入给你一个集合List(1,2,3,4,"abc"),请完成如下要求:将集合中的所有数字+1,并返回一个新的集合;要求忽略掉非数字的元素,即返回的新的集合形式为(2,3,4,5)。objectPrePartialFuncTest{defmain(args:Array[String]):Unit={//=====......
  • 33-Scala-Akka
    1.Akka概述Akka是Java虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时,你可以理解成Akka是编写并发程序的框架。Akka用Scala语言写成,同时提供了Scala和Java的开发接口。Akka基于Actor模型,它提供了一种轻量级的并发抽象,称为Actor,以及处理并发和......
  • 29-Scala-面向对象
    1.面向对象编程基础1.1定义类基本语法:[修饰符]class类名{//code}Scala语法中,类并不声明为public,所有这些类都具有公有可见性(即默认就是public)一个Scala源文件可以包含多个类1.2成员变量属性的定义语法同变量:[访问修饰符]var属性名称[:类型]=属性值......
  • 1.9 Rotated Multi-Scale Interaction Network for Referring Remote Sensing Image S
    RotatedMulti-ScaleInteractionNetworkforReferringRemoteSensingImageSegmentation参考遥感图像分割的旋转多尺度交互网络参考遥感图像分割(RRSIS)是一个新的挑战,它结合了计算机视觉和自然语言处理,通过文本查询描述了航空图像中的特定区域。传统的参考图像分割(RIS)......
  • 新手学习指南:用Scala采集外卖平台
    学习爬虫不是一蹴而就的,在掌握相关的知识点的同时,还要多加练习,学习是一部分,更多的还是需要自己上手操作,这里配合自己学习的基础,以及使用一些爬虫的专有库,就可以轻松达到自己想要的数据。那么今天我将用Scala编程一个爬外面平台的代码,并且做了相关的注释,希望能帮助更多的人。在Scala......
  • 无涯教程-Redis - DISCARD命令函数
    RedisDISCARD命令刷新事务中所有先前排队的命令,并将连接状态恢复为正常。DISCARD-返回值返回字符串OKDISCARD-语法redisDISCARD命令的基本语法如下所示:redis127.0.0.1:6379>DISCARD参考链接https://www.learnfk.com/redis/transactions-discard.html......
  • 无涯教程-Redis - ZSCAN 命令函数
    RedisZSCAN命令迭代"排序集"类型的元素及其关联的分数。ZSCAN-返回值返回数组。ZSCAN-语法以下是RedisZSCAN命令的基本语法。redis127.0.0.1:6379>ZSCANkeycursor[MATCHpattern][COUNTcount]参考链接https://www.learnfk.com/redis/sorted-sets-zscan.h......
  • datavault4dbt Scalefree的dbt datavault2.0 包
    基于基于dbt的datavault2.0实现还是不少的,可以加速模型的创建,以前简单介绍的automate-dv也是一个类似的dbt包包含的maccroStagingArea(ForHashing,prejoinsandghostrecords)Hubs,Links&Satellites(allowingmultipledeltas)Non-HistorizedLinksandSatellitesMul......