如何通过SBOM(软件物料清单)实现安全治理

前言

SBOM(软件物料清单)是近年来在软件供应链领域频繁提到的概念,Linux基金会在2021年Q3调研了全球412 家机构发现已经有82%的人熟悉SBOM、78%的组织预计在今年使用SBOM。本文将介绍SBOM基本概念、实现方式、应用场景,帮助读者通过SBOM更高效地实现安全治理目标。

什么是SBOM

根据NTIA(美国国家电信和信息化管理局)的定义,SBOM(Software Bill of Materials,软件物料清单)是一份关于软件组件和依赖,包含它们的信息和层级关系的形式化、机器可读清单。

NTIA认为SBOM应该满足以下要求:

  • 这份清单应该是全面,或者是明确识别范围的
  • 应包含开源和闭源软件
  • 能被广泛使用或者限制访问

还定义了SBOM中应该包含的最小化的软件组件信息(基线软件组件信息),包括:供应商名称、组件名称、唯一标识符、版本字符串、组件哈希、组件之间的关系、SBOM作者姓名。

在展现方式上,SBOM的信息可以通过图、表格等方式进行展现。

如何通过SBOM(软件物料清单)实现安全治理

(左图为SBOM最小化信息示例,右图为依赖关系图示例)

如何通过SBOM(软件物料清单)实现安全治理

(树状表格展示的SBOM信息示例)

SPDX (ISO/IEC 5962:2021) 是目前SBOM格式的事实标准,常见的格式还有SWID和CycloneDX,都能满足最小化的使用需求。

SBOM的用途

根据Linux基金会的调研报告,人们普遍认为SBOM有三大收益:

  • 51%的人表示,开发人员更容易理解应用程序中组件之间的依赖关系
  • 49%的用户表示更容易监控组件的漏洞
  • 44%的人指出,管理许可证合规变得更容易

依赖治理

当今软件开发的过程,如同开发人员使用一个个组件作为积木搭出高楼,随着软件变得越来越复杂,开发人员可能并不清楚用到了哪些组件、这些组件之间又存在什么样的依赖关系,一个个的积木如同黑箱般存在,维护起来只能小心翼翼,随时可能陷入下图中的依赖地狱。

如何通过SBOM(软件物料清单)实现安全治理

对于企业的工程团队而言,对于一些管理需求,例如规范某类组件的使用、避免重复开发以提升研发效率,首先需要了解企业内各种项目中使用到的组件,梳理对应的依存关系,才能做出有效的管理动作,这也迎合了当前比较火热的可见性需求。

一个组件版本碎片化的go语言项目可能会像下图这样,依赖了大量不同版本的同一组件。基于SBOM可以将碎片化的组件版本固定至一个或多个长期维护的稳定版本,避免版本无人维护导致产生bug无法解决。

漏洞管理

企业安全团队在面对新的漏洞、安全事件出现时,需要评估企业内有哪些资产受到影响,可以通过将漏洞的影响软件、版本范围等信息与已有SBOM进行关联,得到受影响资产列表,从而指导进一步的风险处置动作。

例如当出现新的类似log4j的漏洞时,可以通过SBOM以图的形式查找哪些内部项目中用到了log4j,通知这些项目的维护者进行漏洞修复。

除了应急响应,在日常的风险管理中,可以基于SBOM计算每个项目存在依赖的漏洞风险,作为安全评价维度进行管理。

开源许可证合规

2021年罗盒公司的案件是中国法院首次认可了GPL许可证的效力,违反开源许可证也已经被越来越多的国家法律认定为侵权行为。为了降低软件侵权风险,企业需要识别软件中涉及的许可证,有效管理项目中涉及的许可证风险。

而由于许多开源许可证具有传递性,如果不能全面识别所涉及到的组件及对应的开源许可证信息,则可能忽略所开发软件需要遵循相应的开源许可证约束,比如需要提供源代码、需要对开源许可证进行标识。

如图中项目A引用了组件A,组件A使用了AGPL许可证,则项目A应该按照AGPL许可证的要求,不论修改或使用都应该开源。这样的场景对企业使用会有较多限制,应基于SBOM及时进行治理。

如何生成SBOM

可以看到包括墨菲安全的客户端在内有不少的开源工具都可以生成SBOM,而有效的SBOM依赖软件成分分析能力和大量知识数据的储备。

SCA(软件成分分析)

SBOM的生成依赖SCA技术,识别组件和版本,并输出对应的层级依赖关系。其复杂性在于

1)要适配不同的编程语言,而像java和c/c++这样不同语言的包管理机制会有较大差异;

2)要从源码、制品、二进制等不同形态的软件产物中解析提取特征,这些特征的提取策略依赖于对各类产物的理解。

知识库数据

除了SBOM中的基线字段信息外,漏洞、开源许可证也可以作为SBOM的附加信息,而这样的数据则强依赖于云端知识库的积累。

知识库需要实时跟踪当前的各种漏洞情报,并由人工运营加工;需要采集大量的代码、制品信息,分析依赖、计算哈希、提取特征等等,加工形成能和SCA工具结果匹配的特征数据。

如何发挥SBOM的作用

对于企业而言,要想充分发挥SBOM的作用,至少应该关注以下几点。

SBOM及时更新

老旧的SBOM数据可能产生反作用,做无用功的同时让研发团队产生抱怨,因此SBOM应该是跟随代码、制品动态变化的「实时」数据。

可以通过将SBOM更新的逻辑嵌入到每一次代码的变更,例如通过IDE插件识别对应的代码变更、与代码仓库集成在代码提交或合并时重新生成;对于没有代码或者项目中存在二进制依赖的情况,CI/CD环节则更为关键,通过与jenkins等软件的集成可以实现代码发布前的审查。

通过知识库关联风险数据

SBOM只是一个开始,要想用于风险的治理,只有基线数据字段的SBOM难以发挥它的价值,背后需要有强大的知识库作为支撑。

SBOM要和知识库进行联动,当SBOM发生变化或者知识库中的数据发生变化时,都应该触发风险识别逻辑。例如,当SBOM中引入了一个新的组件,需要通过知识库评估这个组件是否存在开源许可证约束、是否适合商业使用;当出现一个新漏洞,知识库收录后应该联动SBOM判断有哪些项目受到影响。

构建管理平台

对于企业的内部治理而言,单点的工具是不够的,还需要有管理平台输出全局的风险视图,提供管理和控制能力。

例如,管理平台需要记录每一次的SBOM变化情况,从而能够展现不同时间点的风险指标情况;要能够基于项目、资产等不同维度对结果进行聚合,便于对总体风险进行梳理。

基本的管理平台可以如下图所示,以SBOM和知识库作为核心数据,控制模块通过和制品库、代码库等的联动,进行数据收集和策略下发,出现问题时帮助企业及时止损。决策模块对黑白名单进行维护、对阻断等策略进行管理,管理模块提供SBOM查询和相关管理指标看板的能力。

要求供应商提供SBOM

企业难以避免会使用到各类供应商提供的软件产品,这些产品通常以二进制的形式交付,相比源码识别的效果覆盖率会更低,存在的风险更难识别。此时SBOM应该作为供应商准入的要求,在采购环节要求提供SBOM,并对SBOM进行审查和统一管理。

总结

对于企业而言,SBOM是软件供应链治理中很重要的基础数据,能够帮助企业实现依赖治理、漏洞管理和开源许可证合规。SBOM背后靠的是SCA和知识库数据的支撑,想要充分发挥SBOM的作用,应该将生成工具和尽可能多的研发流程打通,做到实时更新,和全面的知识库数据进行动态关联,通过管理平台支撑全局的风险呈现与管理,同时还应要求供应商提供SBOM信息。

参考链接

https://www.ntia.gov/SBOM

https://www.ntia.gov/blog/2021/ntia-releases-minimum-elements-software-bill-materials

https://linuxfoundation.org/wp-content/uploads/LFResearch_SBOM_Report_020422.pdf

(0)
上一篇 2023年8月9日 下午7:29
下一篇 2023年8月9日 下午8:33

相关推荐

  • CSO 们关注的软件供应链安全十个关键问题

    写在前面 自从和几个小伙伴一起创办墨菲安全以来,有一年半多的时间了,创业对于我来说,很有意思的一个地方,就是有机会可以和各行各业很多非常有意思的人一起交流,在这个交流的过程中能够不断的提升自己的认知,以我自己创业之前的经历来说,我接触的大多都是互联网和互联网安全这个圈子的人,而现在有很多机会去接触到更多行业的客户和合作伙伴,可以有机会去了解不同行业的业务、安…

    2023年8月9日
    0
  • 前沿 | 国外开源软件安全治理模式研究及工作建议

    开源软件是指软件源代码可以被共享和公共使用的软件。在人们享受开源软件的便捷性和广泛性同时,一旦发生开源软件安全漏洞,其危害程度大、波及范围广,将造成较大安全隐患,从而使对开源软件的治理成为一项重要内容。本文在分析开源软件安全风险的基础上,对国外开源软件安全治理模式进行研究,对我国开源软件安全治理工作存在的不足展开反思,基于以上研究,就如何更好地保障我国开源软…

    2023年8月24日
    0
  • 软件供应链攻击的演变史

    作者:Vishal Garg 软件供应链攻击在过去几年中迅速增加,包括SolarWinds和Log4Shell在内的一些备受瞩目的事件提高了人们对它们对网络安全构成的潜在风险的认识。 这些攻击引起了公共和私营部门的广泛关注,因此,美国总统于 2021 年 5 月 12 日发布了一项关于改善国家网络安全的行政命令,其中有一个部分专门致力于改善软件供应链安全。 …

    2023年9月7日
    0
  • Java开发初学者的五条安全小贴士

    前言 得益于Java的完备生态,Java一直是非常热门的编程语言。但对于刚刚接触Java的开发者来说,很少会去关注安全相关的问题,没有养成良好的开发习惯,在开发过程中容易带来安全隐患。 我们在本文中总结了五条简单有效的小建议。 一、及时更新依赖组件版本 在Java开发中,开发者经常会用到各类开源组件来实现自己的功能点,但是许多开发者不常关注安全资讯,不了解开…

    2023年8月9日
    0
  • SBOM清单是什么?

    引言 你是否知道你使用的软件都是由哪些组件构成的?你是否了解这些组件的来源、版本、许可证和安全状况?如果你是一个软件开发者或者供应链管理者,你是否能够追踪和管理你的软件产品中包含的所有组件?在当今的软件行业,这些问题都是非常重要和紧迫的。为了提高软件供应链的透明度和安全性,我们需要一种工具来帮助我们识别、记录和共享软件组件的相关信息。这就是SBOM清单。 S…

    2023年8月9日
    0