为何开源风险大于 SCA 工具

目录

开源软件至关重要。然而,它通常伴随着比传统软件组成分析(SCA)工具所能解决的更大的继承风险。本文旨在将开源软件供应链中的当前和新兴风险与传统及下一代 SCA 工具的能力进行对比。

为什么要使用开源代码?

为了快速构建并向客户交付软件。想象一下,在开发人员能够编写业务逻辑之前,必须从头构建 Springboot、Rails、Django、Express 等框架。假设新需求需要与基于 SAML 的身份提供者进行集成的能力,你是投入工程资源从 RFC 开始学习 SAML 并从头构建客户端库,还是使用开源社区提供的库?

我是否在使用开源软件?

几乎可以肯定是的。如果我们仅关注向客户交付软件产品的组织,那么很可能在库、容器镜像和其他平台软件形式上严重依赖开源软件。即使你的组织有不使用开源组件的政策(非常罕见!),你仍然从依赖开源软件的商业软件供应商那里继承并使用开源组件。

一级和三级开源软件关系

即使你正在基于 HTTP 路由器或 Servlet 构建自定义软件开发框架,你仍然通过协议和服务适配器、加密技术和其他库的形式利用开源软件。

我能摆脱开源软件吗?

许多公司依赖开源软件构建业务,这种代码如果没有免费提供,企业需要投入 8.8 万亿美元才能从头创建。- Frank Nagle 及哈佛商学院同事

这确实是开源软件对软件开发行业的价值。如果你正在为业务构建软件,没有开源软件的情况下成本通常是原来的 3.5 倍。Linux Foundation 开源软件普查 II 的数据支持这一观点,该普查估计现代软件中有70-90%来自开源软件。

开源软件有风险吗?

不。开源生态系统不是问题所在。事实上,它是当今全球经济的关键资源。导致开源软件成功的主要优势是其去中心化、志愿者和社区协作模式。开源软件的核心思想是自己构建东西来满足需求,并让社区参与扩展以解决他们自己的需求。

然而,开源软件的信任和安全问题是一个公地悲剧情境。开源软件生态系统的激励模式及其经济平台支持并不总是与企业安全要求保持一致。毕竟,志愿者向社区提供软件并没有义务遵循大型企业的安全要求。这正是开源软件供应链攻击中所利用的漏洞。

有哪些风险?

由于从开源生态系统以不同形式继承的代码不受控制,产生了三个关键问题。这些问题影响开源软件的消费者,即利用开源软件向客户交付软件的软件开发团队。

  1. 漏洞
  2. 恶意软件
  3. 法律与合规

在本文中,我们将忽略法律风险,这些风险已经通过技术和非技术手段得到了相当好的处理。从开源代码继承的漏洞会使你自己的产品变得脆弱,导致潜在的泄露。一个现实生活中的例子是 Zoho Manage Engine 身份验证绕过和远程代码执行,这是由于依赖存在 CVE-2022-47966 漏洞的 Apache Santuario

恶意开源软件

既然你可以直接向企业交付恶意代码,为什么还要费心在他们企业软件中寻找和利用复杂漏洞?国家支持的攻击者通过 Solarwinds 黑客事件和 Sunburst 后门 的早期证据认识到了这一点。开源软件是当今任何企业最大的软件供应商,无论是直接还是间接。直接是指他们利用开源库构建自己的软件,间接是指他们的商业软件供应商依赖开源库。这使得开源软件成为攻击大型企业的高价值目标。

xz 后门事件Ledger connect-kit 加密货币黑客事件CodeCov 后门窃取 CI 凭证事件 只是由恶意开源软件引发的一些事件。事实上,Sonatype 发现恶意开源组件增加了 700%

供应链恶意开源软件的攻击向量

真实生活中开源软件供应链攻击中观察到的攻击向量记录在 SLSA 威胁模型CNCF 供应链妥协事件目录 等资料中。值得注意的攻击模式包括:

攻击向量描述值得注意的事件
源代码妥协攻击者入侵开源项目源代码仓库PHP git 服务器妥协
恶意代码提交攻击者向开源项目提交故意存在漏洞或恶意的代码SushiSwap
恶意维护者开源项目中有特权的维护者变为恶意xz 攻击事件
构建环境妥协攻击者入侵 CI/CD 环境并在软件包制品中注入后门Solarwinds Orion IT 黑客事件
软件包注册表妥协攻击者入侵软件包注册表并发布恶意软件包Docker Hub 凭证暴露
误植域名攻击攻击者在公共注册表(如 PyPI)中发布与流行软件包名称相似的恶意组件Python requests
依赖混淆攻击攻击者利用软件包管理器的注册表优先级来劫持内部软件包参见参考部分
锁文件污染攻击者篡改自动生成的 lockfiles 并利用代码审查人员的认知负担,在开源项目中悄悄植入恶意软件参见参考部分
复活劫持攻击者重新注册已被原始维护者删除的开源项目到软件包注册表(如 PyPI)参见参考部分

存在漏洞与恶意开源软件的区别

漏洞是软件缺陷不可避免的无意副作用。开源组件中的漏洞可能会或可能不会影响下游消费者,其利用可能并不简单。另一方面,恶意开源组件有意造成损害,几乎总是导致消费者受到损害。为了防范开源软件供应链风险,检测和阻止不可信及恶意开源组件的能力是企业开源治理项目中最重要的方面。

恶意开源软件构成的威胁大于漏洞,因为其影响是直接的。通过分析 CNCF 供应链妥协事件 可以证明这一点。过时依赖仅占妥协事件的 1.2%,而发布基础设施妥协和恶意维护者贡献了跟踪事件中 30% 的妥协。

什么是软件组成分析(SCA)?

SCA 工具识别软件制品的组成,特别是其第三方依赖项及其漏洞。通常,它们依赖 NVDOSV 等漏洞数据库。该过程涉及通过坐标(即软件包版本)匹配发现的组件与漏洞数据库,以识别存在漏洞的组件。这类工具多年来不断演进,具有代码分析能力以减少噪音并消除误报。

下一代:可达性分析

开源库并非整体存在漏洞,某个函数内的代码块可能存在漏洞。使用存在漏洞版本的开源库的应用只有在从主机应用到库中存在漏洞函数的可达路径时才会受到影响。由于涉及整个程序调用图生成的复杂性以及安全公告中缺乏精确的漏洞函数符号说起来容易做起来难。下一代 SCA 工具执行可达性分析以识别可利用性的证据,帮助确定修复优先级并消除噪音。

SCA 能解决开源软件风险吗?

部分解决。SCA 多年来一直在尝试解决存在漏洞的开源组件问题。早期 SCA 工具的高噪音和精确度差距未能有效解决问题。下一代 SCA 工具旨在通过代码分析来解决这一问题。然而,SCA 工具无法防范恶意开源软件,也无法防范由于企业内外软件交付所涉及的任何系统和复杂性的漏洞而产生的软件供应链攻击。

风险SCA差距
已知漏洞漏洞数据库的细微差别和代码上下文
未知漏洞除非数据库中有漏洞信息,否则无法发现漏洞
恶意开源软件有限仅当公开已知并包含在数据库中用于匹配时
误植域名攻击有限使用流行度、来源可信度等属性,但无法提供修复路径
依赖混淆攻击无法了解源软件包的来源和 provenance

管理开源软件风险

开源软件无处不在,企业软件对其的依赖同样重要。开源软件的不受控特性引入了多种安全风险。为了减轻这些风险,必须在消费端实施适当的控制。安全供应链消费框架 是一个 OpenSSF 项目,致力于为软件消费者提供软件供应链威胁缓解的成熟度模型。管理开源软件风险的一般指导原则涉及建立技术能力以:

  1. 识别所有产品组合中的第三方/开源组件
  2. 定义、实施和执行基于策略的安全防护措施,防止有风险的 开源软件进入你的产品
  3. 定义实践,以便在受到关键风险影响时快速升级/替换/重建 开源组件

参考资料