查看原文
其他

GitHub谈软件供应链安全及其重要性

GitHub 代码卫士 2022-04-06

 聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队

近期发生的 SolarWinds 供应链攻击事件以及研究人员发现的 “依赖混淆”攻击(回顾SolarWinds “依赖混淆”软件供应链攻击事件,不仅引发了网络安全行业的高度关注,也走入了公众的视野,加强对软件供应链的保护成为共识。奇安信代码安全事业部技术专家章磊指出,软件供应链攻击作为一种新型的攻击手段,还处在快速发展的过程中。针对现代软件构建工具链自身和机制的攻击,都可能造成远超预期的危害。2020年9月,GitHub 发布博客文章,阐述了什么是软件供应链安全及其重要性,今天看来仍不失借鉴意义,现节选编译如下。


你真的了解软件是由什么组成的吗?

当前,开源软件无处不在——几乎在所有专有代码库和社区项目中都有它的身影。对于组织机构而言,问题不是使用或未使用开源代码,而是用了哪些以及用了多少开源代码。如果不了解软件供应链的组成部分,则其中一个依赖关系中出现的上游漏洞即可影响应用程序,使其遭受潜在攻击。本文将深挖“软件供应链”这一概念、它的重要性以及如何如何保护项目供应链的安全。


软件供应链即影响软件的一切组成部分


传统意义上的供应链是指交付产品所需的一切,包括我们使用的所有组件。对于在商店购买的巧克力棒而言,供应链就是原料清单、包装、营养原料信息,甚至是有机原料或生产设备。但又不止如此:它也指能够影响交付该产品的一切。如果在炎热的天气未将巧克力棒冷藏起来,则会影响被消费的最终产品。

从巧克力切换到代码库,软件供应链是指影响从开发、整个 CI/CD 管道到生产部署阶段的一切。它包括所有进入软件的任何一切,如代码、二进制和其它组件及其来源如仓库或包管理器。软件供应链包括:软件由谁编写、何时接收贡献、如何审计安全问题、已知漏洞、受支持版本、许可信息等等。除了应用程序外,供应链还包括栈的其它部分,包括 build和封装脚本或运行应用程序所依赖的基础设施的软件。软件供应链还包括关于所运行软件我们想了解的一切,以便判断运行该软件存在的风险。


软件供应链的风险继承自依赖关系


为什么软件供应链对于安全至关重要呢?如今,软件依赖关系的存在非常普遍。我们的项目常常会使用数百个开源依赖关系(每个仓库平均使用203个开源依赖关系),我们并不会自己写出整个功能。行业数据表明,99%的代码库中包含开源代码,85%至97%的企业代码库源自开源代码。这意味着多数应用程序由并非自己编写的代码组成。我们无法像控制自己编写的代码那样控制第三方或开源依赖关系中的漏洞,因此它们会带来重大的潜在安全风险。

如果其中一个依赖关系中存在漏洞,那么意味着我们的项目中会有漏洞。而令人恐慌的地方在于,某依赖关系可能会在我们毫不知情的情况下做出修改——即使今天整个依赖关系中存在一个漏洞但在我们的应用程序中不可被利用,但代码库内部或外部做出修改后可能会使我们在未来遭受攻击。能够利用数千名开源开发者的工作意味着有数千名开发人员实际上能够访问我们的生产代码。因此供应链中未修复的漏洞、无心之过或者对依赖关系的恶意攻击都能够对我们产生深远的影响。


供应链攻击真实存在但数量仍然相对较少


当恶意代码被有意增加到某组件中时,使用该组件供应链将代码传播到目标时就会发生软件供应链攻击。供应链攻击是真实存在的。攻击供应链的方法有多种:以新提交者身份直接插入恶意代码、接管提交者账户在其他人未察觉的情况下插入恶意代码,或者攻陷签名密钥传播由非官方组件组成部分的软件。然而,在少数情况下软件供应链攻击本身就是终极目标,攻击者将其视作插入恶意软件以挖掘密币或插入后门访问僵尸网络的机会。

软件供应链攻击的数量仍然相对较少,每年的攻击数量不到十起(2020年统计数据)。而且这些攻击也具有高针对性特征;例如,国家黑客攻陷能源企业,因此并非广泛存在的危险。截止目前,针对开源软件安全的攻击仍然少见。


未修复软件仍然是罪魁祸首


即使直接的供应链攻击仍然相对少见,但未修复软件的情况却并非如此。当前软件对开源软件的使用非常广泛而且并无下降趋势:开源获胜。鉴于我们无法停止使用开源软件(而且也不应该这么做!),那么如何解决含有漏洞的项目依赖关系带来的风险?

好在,据估算开源软件中85%的漏洞被披露时已拥有可用的补丁,因此我们要做的就是尽快打补丁。但主动积极且成功解决软件供应链威胁并不止步于打补丁。遵循 DevSecOps 实践意味着我们需要将安全视作软件开发的一部分,也意味着我们需要经常了解所使用的依赖关系,了解这些依赖关系中的漏洞并修复它们。开发人员需要具备一些能力:

  • 了解环境中有什么。它要求我们发现包括传递依赖关系在内的依赖关系;并且了解这些依赖关系的风险如漏洞和许可限制;

  • 管理依赖关系。当发现新的安全漏洞时,首先应该确认自己是否受影响;如受影响则更新并获取最新功能和安全补丁。审计引入新依赖关系的变化,时刻关注依赖关系并定期清除不必要的依赖关系。

  • 监控供应链。审计部署的控制,管理自己的依赖关系,并最终从审计走向执行,防止供应链遭攻击。

我们在保护软件供应链的路上迈出了一小步,不过除了修复依赖关系外还可以做更多。整个行业正在努力提升供应链中的信任,包括确保完整性和验证来源。供应链完整性是指确保组件和所表述的一致,即可以信任巧克力包装纸上著名的原料。例如,可以通过可复用的 build 实现。来源是指了解某个特定组件的来源,以便信任该组件或该组件元数据提供商;例如通过build 或透明度日志。这些都和软件物料清单的概念紧密相关。软件物料清单为我们提供了软件中所使用的组件,就像巧克力厂商提供的已验证的原料清单。









推荐阅读
揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司
谷歌Linux基金会等联合推出开源软件签名服务 sigstore,提振软件供应链安全
Linus Torvalds 警告:勿用 Linux 5.12 rc1,担心供应链攻击?
多家航空巨头遭大规模供应链攻击
微软和火眼又分别发现SolarWinds 供应链攻击的新后门



参考链接

https://github.blog/2020-09-02-secure-your-software-supply-chain-and-protect-against-supply-chain-threats-github-blog/


题图:Pixabay License


本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。



奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

    觉得不错,就点个 “在看” 或 "” 吧~



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存