软件供应链攻击已成为当前网络安全领域的热点话题,其攻击方式的多样性和复杂性使得防御变得极为困难。以下我们整理了六种常见软件供应链攻击方法及其典型案例:
一、入侵上游服务器
攻击者入侵上游服务器或代码仓库,并在其中注入恶意代码。这种攻击方式的危险之处在于,恶意代码会被快速分发到大量用户,从而放大了攻击的影响范围。
典型案例:
- Codecov攻击:攻击者通过获取Docker镜像创建过程中的凭据,篡改在其CI环境中使用的BashUploader脚本,收集从客户的CI/CD环境上传的环境变量并窃取在环境变量中的敏感信息,如服务、数据库的凭据和密钥。
- SolarWinds攻击:在这次影响全球的攻击中,攻击者成功入侵了SolarWinds的Orion产品开发系统,并在源代码中植入恶意代码,进而发动了大规模的网络攻击。
- Node.jsevent-stream事件:攻击者通过对开源库event-stream的维护权进行社会工程攻击,成功将恶意代码发布到了npm,影响了大量使用该库的项目。
二、入侵中间环节发送恶意更新
攻击者入侵软件供应链中间环节的软件升级功能或CI/CD工具。这种攻击方式的狡猾之处在于,它可以在不直接修改源代码库的情况下,通过修改升级流程来实施攻击。
典型案例:
- Passwordstate攻击:攻击者入侵了Passwordstate企业密码管理器的“就地升级功能”,向用户分发包含恶意代码的更新。这种攻击方式使得攻击者能够窃取用户的密码和其他敏感信息。
- ASUSLiveUpdate攻击:攻击者入侵了ASUSLiveUpdate工具,并通过它分发了包含后门的恶意更新。这使得攻击者能够在全球范围内感染成千上万的ASUS计算机用户。
- M.E.Doc软件攻击:乌克兰的财务软件M.E.Doc被攻击者入侵,通过软件更新功能分发了NotPetya勒索软件。这导致了全球范围内的大规模网络中断。
三、依赖性混淆攻击
这种攻击方式利用了开源生态系统中的设计弱点。攻击者可以在公共仓库中注册一个与私有依赖项同名的依赖项,然后通过提高版本号来使其被软件构建拉取。这种方法几乎不需要人工干预,可以自动化地进行攻击。
典型案例:
- AlexBirsan的研究成果:安全研究员AlexBirsan通过创建和上传与私有包同名的公共包,成功实施了依赖性混淆攻击,影响了包括苹果和微软在内的多家知名公司。
- PyTorch攻击:在这起攻击中,攻击者利用依赖性混淆方法对机器学习库PyTorch进行了攻击,影响了使用该库的开发者和项目。
- node-ipc攻击:node-ipc是另一个受到依赖性混淆攻击的例子,攻击者通过这种方法影响了使用该库的各种应用和服务。
四、滥用SSL和代码签名证书
SSL/TLS证书的泄露会威胁到用户的在线通信安全。而代码签名证书的泄露则可能导致恶意软件被伪装成由知名公司签名的合法软件或更新。
典型案例:
- SolarWinds攻击:在这起广泛报道的供应链攻击中,攻击者使用了被盗的代码签名证书,使得恶意代码看起来像是合法的SolarWinds更新。
- Plead恶意软件:攻击者使用被盗的数字证书签名Plead后门恶意软件和密码窃取组件,这些恶意软件主要在东亚地区的攻击中被使用。
- NVIDIA证书被盗:攻击者盗取了NVIDIA的代码签名证书,并用它来签名CobaltStrikebeacon、Mimikatz、后门和远程访问木马等恶意软件。
五、针对开发者的CI/CD基础设施
在这种攻击中,攻击者会利用CI/CD自动化基础设施,这种攻击方式的独特之处在于,它可以在不直接修改代码的情况下,通过滥用CI/CD基础设施来实施攻击。
典型案例:
- 滥用GitHubActions挖掘加密货币。Sonatype最近观察到一次多重软件供应链攻击,该攻击不仅向用户的GitHub项目引入恶意拉取请求,还滥用GitHub的CI/CD自动化基础设施GitHubActions来挖掘加密货币。这种攻击双管齐下:它会诱骗开发人员接受恶意拉取请求,如果失败,它就会滥用现有的自动化CI/CD基础设施来进行恶意活动。
- 联合国网站数据泄露。攻击者利用联合国网站暴露的Git目录(.git)和“git-credentials”文件,获得Git凭证访问权限,不仅可以克隆私有Git存储库,还可能在上游(环境署的源代码库)引入恶意代码以触发供应链攻击。此事件导致过10万条联合国环境规划署(UNEP)工作人员记录泄露。
六、社会工程攻击
这种攻击方式通常涉及到人的因素。攻击者可能会利用开发者的信任或者疏忽,通过提交包含恶意代码的pull请求或其他方式来实施攻击。事实上,很多类型的软件供应链攻击都会涉及社会工程攻击。
典型案例:
- Linux“毒补丁”。Linux基金会最近禁止了明尼苏达大学研究人员的代码提交,因为他们故意提供有缺陷的“补丁”,从而在Linux内核源代码中引入了漏洞。该案例的启示是:社会工程攻击可能来自最不受怀疑的来源——在本案例中,攻击来自拥有“.edu”电子邮件地址看似可信的大学研究人员。
- 篡改通过GitHub发布的软件版本。2021年安全研究人员披露攻击者可以在项目所有者或公众不知情的情况下破坏合作者的GitHub帐户并用来修改已发布版本,从而导致针对项目用户的供应链攻击。
- NPM拼写错误攻击。攻击者创建与合法软件包非常相似的恶意软件包(例如恶意JavaScript包、数据采集木马等),然后将其上传到NPM的下载存储库。
每种软件供应链攻击方式都有其独特的实施方法和利用的弱点。为了更有效地防御这些攻击,安全和开发团队需要不断更新和优化安全策略和工具,包括加强对开源组件的清点、监控和审核,提高开发者的安全意识,以及优化CI/CD流程等。