从关键基础设施到政府安全机构,软件供应链为众多组织带来了巨大风险。目前,软件供应链攻击日益流行、影响深远,使其成为国家级攻击行为的重要选项。

与日益流行的攻击形成对照,软件供应链安全状况不佳,某些方面甚至出现恶化。不同于安全开发和漏洞挖掘,软件供应链安全在安全政策上得到的关注和重视要少得多。

软件供应链攻击的五大趋势:1)影响上升到国家层面;2)通过绕过代码签名滥用用户信任;3)通过劫持软件更新破坏供应链;4)攻击和污染开源软件;5)攻击应用商店制造下载麻烦。

近期,美国智库大西洋理事会(Atlantic Council)发布题为《打破信任:不安全软件供应链中的危机阴影》的报告(Breaking trust: Shades of crisis across an insecure software supply chain)。

基于过去10年(2010-2020年)公开报道中的115个软件供应链攻击和泄露事件,报告对软件供应链攻击进行了归纳和分析。

报告指出,攻击者正在把攻击目标从安全性日益增强的目标软件系统转移到供应链最薄弱的环节。软件供应链的安全风险正在日益增加。

报告警告,一场安全危机的阴云正笼罩着软件领域,必须采取行动保护软件供应链安全,以提高软件供应链攻击的成本并降低其影响。否则,将面临更加严重的后果,可能损害重要的情报、国防和公共政策项目,并将损害已经动摇的美国技术主导地位的长期创新潜力。

1. 概述

数字化时代,软件已经成为人们生产生活不可或缺的必需品,而软件的获取(下载、更新、打补丁等)不可避免地要依赖软件的供应链。

现有的网络安全解决方案日益完善,可以对网络进行全方位的防护,攻击者不得不尝试其他方式对企业和机构进行渗透。软件供应链攻击成为当下普遍和流行的攻击方式。

当攻击者访问并修改复杂软件开发供应链中的软件,通过插入恶意代码来危害更深层目标时,就会发生软件供应链攻击。侵入软件供应链,可以使攻击者伪装成受信任程序来传递恶意代码。软件供应链攻击是一种非常有效的攻击方式,可以针对安全防护水平较高的系统进行广泛的攻击。

对于国家安全机构而言,软件攻击链的风险尤为严重,他们查看大量监视数据、运行复杂武器系统以及支持现代物流系统的能力取决于软件,其中大多数软件是在政府外部开发的。

在过去10年的软件供应链攻击呈现下面5个趋势:

(1)国家级组织利用供应链攻击造成深远影响国家级攻击组织利用软件供应链攻击取得巨大效果。通过劫持软件更新,国家级攻击发起后果严重的攻击。这些并非新颖的威胁。2012年Stuxnet和其他攻击事件就对物理世界造成了影响。2017年,NotPetya攻击和Equifax数据泄露影响了数百万用户,这些事件展示了软件供应链攻击的巨大潜在规模,及其对国家级攻击者的战略价值。

攻击实例包括:CCleaner、NotPetya、Kingslayer、SimDisk和 ShadowPad。

(2)绕过代码签名 代码签名作为公钥加密和证书系统应用,确保软件更新完整性及来源身份。突破防护措施则是供应链攻击中的关键一步,从而可以实现从简单的开源代码篡改到复杂的国家级窃密行动。

攻击实例包括:ShadowHammer、Naid / McRAT和  BlackEnergy 3。

(3)开源威胁:这类安全事件中,攻击者通过获得帐户访问权限,实现开源代码篡改,或发布与常用软件包名字相似的恶意软件包。所传播的恶意代码通常会窃取受害者数据,有时也针对支付信息。攻击者通常是罪犯分子,通常很快会被发现。

攻击实例包括:Cdorked / Darkleech、RubyGems后门、HackTask、 Colourama、JavaScript 2018后门和 PyPI存储库攻击。

(4)劫持更新:这类攻击通常是由国家级组织或能力强大的攻击者发起。利用被窃取或伪造证书签名的软件更新,将恶意软件带进攻击目标。高级恶意软件通常可以从受感染的计算机通过网络或在硬件进一步传播。这类攻击更有可能加密数据,攻击物理系统或提取信息,通常比应用商店复杂得多。

攻击实例包括:Flame、Stuxnet、CCleaner 1和2、NotPetya、Adobe pwdum7v71、Webmin和PlugX。

(5)应用商店攻击这类攻击使用谷歌 Play Store,苹果App Store和其他第三方应用软件分发工具,将恶意软件传播到移动设备。通常,攻击者设计的这些应用程序看起来都是合法的,尽管有些确实是被侵入的合法应用软件。这些恶意应用通常会运行广告软件,窃取支付信息,提取数据,发送到攻击者操作的服务器。大多数攻击者是罪犯分子,也发生了一些国家支持的攻击。

攻击实例包括:Sandworm安卓攻击、ExpensiveWall、BankBot、Gooligan和 XcodeGhost。

企业和机构在软件供应链问题上面临的安全风险在持续增长。

首先,物理设备出厂之后很少修改,而软件需要通过更新和补丁进行持续的修订,容易出现大量无意和恶意的缺陷和漏洞。

其次,越来越多功能丰富的软件正在进入越广泛的消费产品和企业服务领域,扩大了潜在的攻击面。

第三,企业和组织将IT管理和服务外包给云计算和管理服务提供商(MSP),增加了企业和组织受到针对这些提供商之一的攻击的可能性。

第四,企业和组织在场地开发复杂任务的软件系统也可能需要从第三方购买预先构建的软件组件,这些第三方构建的组件同样存在着安全漏洞。

1.1 软件供应链攻击的时序分布

2010-2020的10年期间的公开报道中,具有较高影响力的软件供应链攻击和泄露事件呈现逐年递增趋势。(注:2020年尚未结束,因此并非全年数据)

图1 :2010-2020年软件供应链攻击和泄露事件的时序分布

1.2 软件供应链攻击的类型分布

按照代码基(Codebase)类型不同,该报告对115个软件供应链攻击和泄露事件进行了分类,主要包括第一方操作系统或应用(First-Party OS/Application)、第一方固件(First-Party Firmware)、第三方应用(Third-Party Application)、第三方固件(Third-Party Firmware)、开源软件(Open Source Software,OSS)、攻击者应用(Attacker Application)和不明原因(Unknown/NA)等7种类型。

统计显示,软件供应链攻击类型的数量可以比肩软件类型的数量。其中,第三方应用程序和开源软件是攻击者关注的焦点。此外,智能手机的广泛普及,移动应用逐渐成为攻击者渗透的重要目标。图2给出了2010-20220年10年期间软件供应链攻击和泄露事件的类型分布状况。

图2 :2010-2020年软件供应链攻击和泄露事件的类型分布

移动应用,特别是攻击者自制或者渗透的移动应用,出现的频率越来越高。第三方固件(Third-party Firmware)也日益成为攻击者的攻击目标,这是因为固件开发过程繁琐、打补丁难度大,以及具备特权编辑和逃避反恶意程序检测的能力。图3进一步给出了软件供应链攻击类型的时序分布。

图3:2010-2020年软件供应链攻击类型的时序分布

1.3 软件供应链攻击的生命周期分布

按照所处软件供应链生命周期阶段的不同,115个软件供应链攻击和泄露事件可以分为五个阶段,主要包括系统设计(System Design)、系统实现(System Implementation)、迭代测试(Iterative Testing)、部署(Deployment)和更新维护(Update and Maintenance)等。(注:这里的软件生命周期模型是基于瀑布模型的)

软件供应链生命周期的系统设计阶段,32起事件存在供应链漏洞问题,包括证书窃取(Certificate Theft)、凭据窃取(Credential Theft)、缺陷加密(Flawed cryptography)、默认硬编码的密码(Defaulted Hardcoded Password)、固件编辑(Firmware Editing)和代码注入(Code Injection)等六类;

系统实现阶段,6起事件存在软件开发工具包(Software Development Kit , SDK)被攻破现象,18起事件涉及基于开源知识库(Open Source Repositories)的恶意代码嵌入;

系统部署阶段,10起事件涉及攻击向量的弱账户访问、9起涉及攻击向量的误植域名,23起事件涉及攻击者制作的恶意软件;

更新维护阶段,24起事件涉及应用商店的用户下载问题,31起事件涉及劫持更新问题,主要包括预签名注入(Presignature Insertion)、窃取证书(Stolen Certificates)、账户访问(Account Access)、缺陷加密(Flawed cryptography)和自(或无)签名(Self or Unsigned)。图4给出了2010-2020年软件供应链攻击和泄露事件在软件供应链生命周期中分布状况。

统计显示,攻击者可以针对软件供应链生命周期的不同阶段的不同目标进行攻击。其中,攻击者对开源软件项目、应用商店、劫持更新以及代码签名等目标展现了更多的兴趣,这些类型的攻击和泄露事件通常共享攻击向量、代码基和分布向量(传播媒介)。

图4:2010-2020年软件供应链攻击和泄露事件的生命周期分布

2.  软件供应链攻击的演化趋势

报告从攻击影响、攻击向量、分布向量、软件类型和软件下载等五个方面归纳了软件供应链攻击的演化趋势。

2.1 攻击影响演化趋势

长期以来,一些国家都未能采取有效的监管措施来确保代码签名的过程安全,甚至某些具有严重破坏力的劫持更新其背后是由政府支持的项目,软件供应链攻击已经上升为国家行为,并且这些国家已经利用软件供应链攻击取得了巨大的攻击效果。例如,2012年的震网病毒对伊朗核设施的破坏。

攻击者类型主要包括国家、犯罪集团、未知、其他以及N/A。由图可知,近十年高影响力的国家行为层面的攻击数量和犯罪集团的攻击数量不相上下。图5给出了开源软件、专有软件以及攻击者自制软件下的攻击者类型分布。

图5:攻击者类型分布  

2.2 攻击向量演化趋势

软件供应链攻击的攻击向量包括账户访问(Account Access)、损坏的签名系统(Broken Signature System)、默认密码利用(Default Password Exploit)、预签名注入(Pre-signature Insertion)、自签名/未签名证书(Self-signed/Unsigned Certificate)、窃取/购买的证书(Stolen/Purchased Certificate)和未知类型(Unknown, Other, or N/A)等7种类型。图6给出了攻击向量的时序分布。其中,代码签名是攻击者使用最多的攻击向量,其主要源于自签名/无签名证书、损害的签名系统和帐户访问。

图6:攻击向量的时序分布

代码签名对于分析软件供应链攻击是至关重要的。软件供应链攻击依赖于攻击者的代码编辑能力,需要其在第三方依赖的软件环境中滥用对代码作者的信任,而第三方依赖软件通常数据量巨大,甚至供应商都不知道依赖的整体联系。倘若每个代码签名都是安全的,软件供应链受到的攻击次数将会大大减少。

2.3 分布向量演化趋势

软件供应链攻击的分布向量(传播媒介)包括第三方应用商店(Third-Party Application Store)、软件开发(Development Software)、直接下载(Direct Download)、硬件组件(Hardware Component)、劫持更新(Hijacked Updates)、开源依赖(Open-Source Dependency)、网络钓鱼(Phishing)、专有应用商店(Proprietary Application Store)、供应链服务提供商(Supply Chain Service Provider)、误植域名(Typosquatting)、蠕虫组件(Worm Component)和未知类型(Unknown, N/A, or Other)等12种。

其中,供应链服务提供商、第三方应用商店和劫持更新是软件供应链攻击和泄露事件主要的传播媒介。值得注意的是,有鉴于软件更新是软件供应链中的一种主要的信任机制,劫持更新也就成了攻击软件供应链的重要一环。攻击者不仅可以使用新版本软件和开源依赖将恶意代码插入开源库,也可以采用劫持更新将恶意代码插入到第三方应用程序。图7给出了分布向量的时序分布。

图7:分布向量的时序分布

劫持更新攻击通常需要证书或者开发者账户,而应用商店和开源依赖需要基于攻击者自制的未签名软件。报告显示CCleaner是劫持更新最常用来攻击第三方应用程序,尽管存在攻击者渗透CCleaner开发网络并窃取签名证书的现象,但实际情况远不止如此。图8给出了软件供应链攻击的攻击向量和分布向量的热力图。

图8:攻击向量与分布向量的热力图

劫持更新在第三方应用中的分布向量随时间变化基本比较稳定,而在第一方操作系统/应用和开源软件中,劫持更新的时序分布不稳定。图9给出了代码基分布向量的时序分布。

最后,需要指出的是,劫持更新主要依赖于被攻破的服务器和代码发布工具,很少涉及加密机制的暴力破解,这意味着可以基于现有的企业网络保护以及敏感系统访问控制等网络安全实践构建防御措施,但是防御措施要比以前更加严格以应对恶意的劫持更新。

图9:代码基分布向量的时序分布

2.4 软件类型演化趋势

软件通常分为开源软件和专有软件。开源软件的开发非常灵活,可以通过众多不同的开发社区实现各种软件功能。然而,近些年来,对开源软件的攻击越来越频繁,并且开源项目经常默默地打补丁而不通知用户,使得嵌入补丁的恶意代码在用户意识打补丁到之前依然保持攻击。图10给出了开源软件、专有软件以及攻击者自制软件的时序分布。

图10:开源软件、专有软件以及攻击者自制软件的时序分布

2.5 软件下载演化趋势

应用商店作为软件汇聚的场所,连接着终端用户和第三方开发者,极大地简化了用户的软件查找操作。然而,应用商店已经成为攻击软件供应链的一种流行方式。应用商店的攻击方式通常有三种:

1)攻击者自行构建看似合法的应用程序,可能提供壁纸、教程视频或游戏;

2)攻击者对已有应用进行重新打包,即在一个合法的应用程序中添加自己的恶意代码,并将其打包成一个完整的项目供用户下载;

3)一些组织破坏了用于构建应用程序的软件,即软件开发工具包(SDKs),使得SDK能够在合法应用程序创建时将恶意软件注入其中。

谷歌应用商店面临着更多的攻击,可能的原因是谷歌移动操作系统全球市占率最高。但无论何种应用商店,对国家安全来说都是一个越来越大的风险来源,因为一些看似无害的服务却可以用来获取军事人员的位置、健康和福利等信息。同时,恶意软件混淆技术在不断发展,需要筛查的应用程序的数量也在增加。提升应用商店的安全性必须成为开发者和软件行业的首要任务。图11显示了我们在不同应用商店中观察到的事件数量。

图11:按应用程序商店类型分类的事件

2.6 供应链攻击的多元化特点

软件供应链攻击具有多样化的特点。软件供应链本身是多样化的链条,攻击者在攻击原始的代码基和攻击最终目标之间还有很多步骤,致使攻击的分布向量(传播媒介)是多样化的。软件供应链攻击流行的分布向量包括利用自动更新、攻破软件开发应用和潜入移动应用商店等。

软件供应链攻击的攻击向量也是多样化的,包括窃取或伪造代码签名证书、闯入开发人员帐户或破解硬编码的默认密码等;软件供应链的攻击者身份是多样化,攻击者从本科生到世界上最先进的国家网络攻击团队。

软件供应链攻击的最终目标是多样化的,从铀浓缩离心机到移动视频游戏;软件供应链攻击的后果是多样化的,从数十亿美元损失的影响,猖獗的数据截取到完全没有任何影响。

软件供应链攻击并不等同于攻击者武器库中的新武器系统,软件供应链攻击是机会和意图的体现,通过攻击供应链上的邻居和供应商的薄弱环节来攻击安全性日益增强的目标系统。防御措施与安全最佳实践存在的差距或者对最佳实践的不良使用,使得削弱了软件的可持续性。

有迹象表明,固件和云服务提供商作为软件供应链攻击的最优目标,相关攻击和泄露事件尚未达到顶峰。一场危机的阴云正笼罩在技术行业的上空。软件供应链的安全风险正在日益增加,不断侵蚀着软件用户的信任。如若不能增强对于软件供应链的安全保护,恐将面临更加严重的后果。

3、应对建议

对于软件供应链安全,我们既不能恐慌,也不能采取不切实际的做法,而是关注软件供应链安全实践,增加公私部门的投资以及修订公共安全政策,以提高安全行为最低标准和应对影响深远的攻击。

该报告为安全政策制定者和软件行业提供了应对建议,以解决软件供应链安全问题。

首先, 提高安全基线。广泛改善软件供应链安全的关键将是如何改善大量代码库的共同标准,而不是最大程度地改善单个代码库。对安全政策机构来说,最有用的做法是为广泛兼容的标准和工具提供支持,以减轻开发人员和项目所有者在安全软件供应链管理方面的负担。孤立的最佳实践不会有效;而且特定阈值以下,很难描述哪些供应商和项目所有者实施了良好的安全实践。报告建议着重于将最佳的供应链安全工具带入公共领域,使其与广泛支持的标准保持一致,并呼吁关键利益相关者共同分享部署和评估经验。

其次,更好地保护开源代码。开源代码构成大多数企业系统和网络的基础。甚至大型专有项目(例如Windows  操作系统)也建立在大量开源代码之上。开源项目的安全性以及攻击者可以轻松植入不安全代码的问题,一直是被持续关注的问题。任何人都可以顺畅地将代码提交到开源项目,这既是核心优势,也是明显的弱点。安全政策机构必须支持为保护开源项目安全而做出的努力,否则它将经历重要和创新生态系统的凋零。

第三, 应对系统性威胁。信任是软件领域的关键要素,各国必须携手,应对故意破坏软件供应链的行为。国家级攻击者冒充软件供应商的做法损害了防御者修补代码漏洞和提高软件生命周期安全性的能力。软件生命周期对于维持当前和未来技术所取得的国家安全优势至关重要。无法保护对软件的信任可能会削弱从软件获得的收益。需要加强跨国的应对和合作,以及更有效的联合溯源,来保护软件供应链。

《打破信任:不安全软件供应链中的危机阴影》报告原文下载:

https://www.atlanticcouncil.org/wp-content/uploads/2020/07/Breaking-trust-Shades-of-crisis-across-an-insecure-software-supply-chain.pdf

声明:本文来自安全内参,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。