开源软件供应链

供应链(Supply chain)不是一个新词,一般指产品的多阶段生产过程:每个阶段都从前一阶段获得投入,然后增加自己的技能和贡献,再为后一个阶段进行生产。初始阶段一般是基础的组件(如原材料),生产的最终阶段是用户或消费者。
百度百科对于供应链的定义是:供应链(Supply chain)是指生产及流通过程中,涉及将产品或服务提供给最终用户活动的上游与下游企业所形成的网链结构。维基百科对于软件供应链的定义是:在商业和金融中,供应链是一个组织,人员,活动,信息和资源的系统,涉及向消费者提供产品或服务。供应链活动涉及将自然资源,原材料和组件转换为成品并交付给最终客户。
一言以蔽之:供应链就是将“原材料”(不同行业的原材料不同)通过某种方式(组装、合并等)变为有用的产品,最终交付给终端用户使用的过程中所构建一个有效系统(如链条一样,环环相扣)。对于软件供应链来说就是将“原材料”(代码)进行加工(修改、编译等)交付(分发或再分发)给用户的过程。根据前面所写,开源已经成为了软件行业的主旋律,已经很少有企业或者组织从零开始去开发一款软件了,几乎都是利用开源代码来快速构建软件。所以,软件供应链也可以认为是“开源软件供应链”,示意图如下:

image.png
开源软件供应链的规模在扩大,速度在变快。Synopsys的报告指出,四大开源生态系统(Java、JavaScritp、Python以及.Net)过去一年发布了6,302,733个新版本,并且引入了723,570个新项目。这些社区现在拥有37,451,682个不同版本的组件,意味着全球的开源供应链年增长率达到了20%。

开源软件供应链攻击

软件攻击一般是指企业或组织的软件漏洞被利用,从而导致系统被破坏,进而造成经济损失的行为或过程。由于开源成了现代社会所需软件的基石,所以传统的软件攻击模式也发生了变化,已经从集中攻击已被公开披露的漏洞,逐渐转向对开源软件的攻击,因为开源软件位于软件供应链的上游(upstream),一旦某个开源项目被攻击,则会直接影响到整个使用此开源项目的下游(upstream),这就造成了非常大的攻击面。
SolarWinds是一家创立于1999年的美国公司,主要为企业或组织提供IT管理软件。在2020年12月13日,FireEye发布了关于SolarWinds软件供应链攻击的公告。公告指出SolarWinds旗下的Orion软件包中被植入了恶意代码,这些恶意代码会绕过SolarWinds的数字证书验证,然后与第三方发起通信,而且这种通信会被伪装成Orion Improvement Program(OIP)协议,让自己变得“合法”,从而达到隐藏自己的目的。由于SolarWinds拥有众多客户,甚至包括美国政府部门。在补救的过程中,众多用户不得不关闭受影响的设备。此次攻击的波及面大、持续时间长,造成了很大的影响。而根据时间分析,恶意代码是在2019年的部分Orion产品中被注入的,恶意代码在结束休眠期后,开始发动攻击。这也是软件供应链攻击的一个特点:主动注入攻击漏洞,而非传统的针对既有漏洞进行集中攻击。
软件供应链攻击在 2021 年呈现爆炸式增长,2015 年 2 月到 2019 年 6 月,216 次软件供应链攻击事件被记录;2019 年 7 月到 2020 年 5 月,929 次被记录,而在过去的一年,攻击事件爆炸式的增长,增长率达到了恐怖的 650%
image.png
图片来源:Sonatype《2021年软件供应链现状》

这一点在Anchore发布的《Anchore 2021年软件供应链安全报告》中也得到了印证。报告提到 64% 的受访者表示在过去的12个月中受到过不同程度的软件供应链攻击。
image.png
图片来源:Anchore《Anchore 2021年软件供应链安全报告》

开源软件供应链安全

现状
开源的发展如火如荼,但是安全问题也凸显。Synopsys的《2021 年开源安全和风险分析报告》提到,84% 的样本库中至少包含一个公开的开源漏洞,这一数字在上一年是 75%,而且最近三年都呈逐渐上升趋势;65% 的样本库存在许可证冲突的问题,也就是意味着这些代码存在许可证合规的风险。所以,软件供应链的安全不是很乐观。

特点

  • 复杂性安全的复杂性与生俱来。不仅仅指软件研发的复杂(涉及到的环节多,人员多,流程多),更是指在软件成为现代化社会的基石后,软件的开发模式、交互模式、交付模式都发生了巨变。这一切都是一个复杂的生态系统。能理清楚整个系统本身就是一个很具复杂性的挑战,更别说维护整个生态的安全了。
  • 易忽略安全也是最容易被忽视的,一方面,大家还没有充分养成良好的安全防护意识,诸如在编码时考虑自己引入的第三方包是否是安全的,应用程序上线时,API是否做了权限验证,访问链接是否是 https 的(至今还能看到大量的网站用的是 http);二者,安全需要一定的投入,包括招聘安全专业人员,建立良好的安全防护体系,在某些角度看,是属于“投入产出比”比较低的,在极力追求商业利益的今天,安全的优先级往往靠后;再者,人都有侥幸心理:安全漏洞、攻击怎么可能发生在自己身上。所有这些都很容易忽略安全。
  • 影响广由于开源成为软件开发的主流,很多软件都是由开源组件组成,很多开源组件都是共享共用的,一旦某个组件发生了安全问题,影响的不仅仅是某一款软件,某一企业或组织,很有可能是众多款软件,众多企业或组织。可以说是一个点影响到了一个面。影响范围大、影响程度深。

好处

  • 降低成本安全问题最直接的影响就是造成直接或间接的经济损失。攻击常常会导致文件被锁、系统被毁,导致整个用户服务中断,这会造成巨大的经济损失。而且在供应链中,如果上游遭受了攻击,则下游受到的攻击面可能是指数级的。正如前面的 SolarWinds 攻击一样,整个攻击导致数万用户受到影响,更可怕的是,很多用户不知道自己所用的软件中包含被攻击的组件,所以不会采取补救措施,但是攻击威胁一直存在。这也是软件供应链攻击的可怕之处,软件组件被多次分发、包装,当攻击发生的时候,不能第一时间判断出受影响的系统范围,从而不能够及时制定补救措施,当潜在威胁变成真正攻击的时候,那就是灾难。所以,保证软件供应链安全能够降低企业的运营成本。
  • 建立信任安全之所以一直是老大难问题,原因之一就是互不信任,导致团队之间、上下游存在壁垒。软件供应链安全背后的一个重要逻辑就是要有足够的透明性,比如软件的组件组成透明化(也是现在常说的软件物料清单Software bill of materials,也即 SOBM),软件的交付透明化(比如可以采用CI/CD)等。足够的透明化是能够建立信任的。信任的建立也将打破团队之间、上下游之间的壁垒,让团队、上下游的协作、沟通高效运行起来。
  • 加速创新如果安全不再是软件研发、交付的最大阻碍,而且有完整的手段来确保软件研发、交付的全流程安全时,软件研发的生命周期会大大缩短,也就能够在敏锐把握市场动向的时候把软件快速推向市场,让市场检验产品,由于交付快速、安全,能够带来更大的容错空间,也让创新成为可能。毕竟尝试,不断地尝试是创新的重要方法。