引言
软件供应链安全是我们总在谈及的话题,但由于并没有对自身产生具体的影响,关于供应链安全的理解还停留在重大安全事件的旁观中。
但事实上,软件开发中的新威胁不只与特定公司有关,整个软件供应链都是攻击者的目标。供应链流程包括将原材料、组件和资源转化为成品并将其交付给客户。所以我们要尽力保护每个环节,一旦有一个环节发生故障,一切都会受到影响。
本系列文章将分为上下两篇为您详解软件供应链安全。
软件供应链定义
软件供应链流程同其他行业类似,资源会以转换的形式被消耗,最终以产品或服务的终态交付给客户。在此过程中,所有环节和资源构成的网络,不仅包括设备的生产、存储、销售、交付等供应链环节,还延伸到产品的涉及、开发、集成等生命周期。
类比理解可以得到,在软件供应链中,原材料是将代码转换为最终可交付的库、代码或工具等。这种交付通常部署为面向用户的应用程序、供应链服务或定制产品等。我们可以简单理解为这是一个肉质罐头加工的过程,原始代码是生肉,最终交付的结果是罐头。罐头的终态由用户决定,可以是即食的也可以是能作为辅料的半成品。
为了帮助大家在软件供应链中理解,我们举一个简单的“栗子":
为了给客户生成最终的"Web应用程序",我们需要编译源码,在此过程中会依赖来自第三方的支持(包括但不限于组件、库等),当这一流程链条中引入某些恶意元素时,就会发生软件供应链攻击。
相较于传统的供应链攻击,在软件供应链中,由于供应链复杂性,攻击会从点到面进行蔓延,进而导致攻击面不断扩大。一旦成功攻击会造成受影响的代码或组件被传播到下游,又因没有察觉到问题已经发生,难以追溯漏洞出现的最初时间进而造成重大影响。
大多数情况下,攻击会通过在中间注入恶意软件或漏洞来破坏软件供应商,对客户造成致命后果。
软件供应链攻击
软件供应链攻击是指威胁行为渗入软件供应商的网络,使用恶意代码破坏供应商的软件,进而影响交付的客户产品。软件可能从一开始就受到损害,也可能通过修补程序或修补程序等其他方式受到损害,软件供应链攻击会影响所有使用受损软件的用户。趋势表明,供应链攻击正以每年4-5倍的指数速度增长,最常见的是与依赖混淆或域名仿冒有关,其次是恶意源代码注入。
通常,企业研发的产品只是整个软件供应链中的一部分,相关的安全措施可以概括为以下三点:
接下来看一下常见的供应链攻击的流程:
在图中我们可以看到绿色部分代表公共服务或资源,黄色部分代表私有代码,即自研部分。
我们将通常会将代码放在放在私有存储库中,该存储库可能是供应商提供的基础结构或 SaaS 的一部分以及基本容器映像注册表等,依赖项托管在公共存储库中。此外,我们还将应用程序作为容器映像发布到公共存储库中。
整个流程中,一些组件或资源是受到保护的(黄色),比如存储在私有代码库中的自研代码,应用程序代码本身以及生成的最终二进制或容器映像。但是很多组件或资源是公共服务和资源或由其他公司提供(绿色),这意味着这部分代码是完全不受用户的控制。
因此,软件供应链攻击可以直接攻击私有存储库,也可以攻击任何上游组件(如外部依赖关系或提供的服务)。如图中所示,公共存储库受到攻击会影响在其下游的源码。用户在供应链中成为受害者,要么直接遭受攻击,要么成为受感染源的供应商。
软件供应链攻击危害
软件供应链一旦被攻击造成的直接危害是经济损失。
大多数的供应链攻击的发生都是利益驱使,攻击活动通常像盈利性企业一样运作,试图实现低运营成本并获得高投资回报率。
例如,大规模进行黑客攻击 -——攻击者可以构建针对单个组织的黑客操作,获得最初的立足点后,可以不费吹灰之力破坏数百或数千个其他组织。若操作未被发现,攻击者可以持续从攻击中获益。除直接被攻击者造成的经济损失外,企业需要花费一笔不菲的开销对检测到的缺陷进行补救工作。
此外,除了经济损失,受损的企业或组织还需花费大量时间重构积累的信誉和口碑,这将严重阻碍在业内的可持续发展。
总结
软件供应链是一个非常复杂的网络,由从代码和库到硬件组件的互连和异构部分组成。因此,保护每个部件的方法是不同的,不能作为一个整体来涵盖。无论是供应商还是消费者,我们都需要将重点放在保护流程上,并与可信赖和经过验证的提供商建立牢固的联系。通过《详解软件供应链安全》上篇的介绍,希望大家可以了解到产生攻击具体所在的环节。
在下篇中我们会通过具体的例子为您详解软件供应链安全的实例,以及如何保证公共资源安全,敬请期待!
GitHub:
https://github.com/XmirrorSecurity/OpenSCA-cli/
Gitee:
https://gitee.com/XmirrorSecurity/OpenSCA-cli/
OpenSCA官网:
https://opensca.xmirror.cn/