从NotPetya到SolarWinds,这是一个不会很快消失的问题。
长期以来,网络安全问题一直被老生常谈地用一些简单的信任术语来描述:要提防陌生来源的电子邮件附件,不要将凭据交给欺诈性网站。但是,越来越多老练的黑客正在破坏这种基本的信任感,并提出一个关键性问题:如果构成网络的合法硬件和软件从源头上受到损害怎么办?
这就是供应链攻击,一种攻击者将恶意代码甚至恶意组件插入受信任的软件或硬件中的攻击方式。通过攻击单个供应商,攻击者可以劫持其分发系统,将供应商销售的任何应用程序、推出的任何软件更新,甚至是他们运送给客户的物理设备,都变成特洛伊木马。
通过一次“适当”的入侵,攻击者就能以供应商的客户网络为跳板,斩获成百上千的受害者。这是因为攻击者清楚——客户是信任其整个生态的,包括信任自己的供应商的。他们“巧妙地”利用了这些信任。
从编译器开始的信任摧毁
供应链威胁的严重性在去年 12 月得到了大规模证明。俄罗斯黑客(后来被美国指认为俄罗斯情报机构 SVR)入侵了软件公司 SolarWinds 并在其 IT 管理工具 Orion 中植入了恶意代码,从而允许访问全球使用该应用程序的多达 18000 个网络。攻击者甚至利用这个立足点深入挖掘了至少9个美国联邦机构的网络,包括 NASA、美国国务院、国防部和司法部。
无独有偶。就在上个月,有消息称黑客入侵了CodeCov公司出售的软件开发工具,该工具使黑客能够访问数百个受害者的网络。2017年名为Sandworm的俄罗斯黑客组织(隶属于俄罗斯GRU军事情报部门)则劫持了乌克兰会计软件 MEDoc的软件更新,并利用软件更新来分发 NotPetya代码,最终在全球造成 100 亿美元的损失。
事实上,最早的供应链攻击大约在40年前就首次出现。
当时Unix操作系统的创造者之一Ken Thompson想看看他是否可以在Unix的登录功能中隐藏一个后门。因此,Ken Thompson自己植入了一段恶意代码,这使他能够登录任何系统,并且他还构建了一个编译器,一个将可读源代码转换为机器可读的可执行程序的工具。该工具会在编译时秘密地将后门放置在函数中,接着,Ken Thompson进一步地破坏了编译编译器的工具。
简单来说,这是一种编译器“学会”编译后门,并在将来的编译器代码中移除它从而无法在源码中发现篡改痕迹,最终利用人们对编译器的信任来激活后门的攻击方式。
1984 年,Ken Thompson在的一次演讲中分享了这件事,他说“你不能相信不是完全由你自己创造的代码(尤其是那些雇用像我这样的人的公司的代码)。”
此后,2015年的PoC||GTFO电子杂志上也刊登了一篇名为Deniable Backdoors Using Compiler Bugs的文章,讲述如何通过一个可利用的编译器 miscompilation bug,并且向目标的开源社区提交看起来不怎么像后门的patch,从而实现提权。这种针对特定版本的编译器的利用方式更为隐蔽更难察觉。有兴趣的可以自己看一下原文:https://www.alchemistowl.org/pocorgtfo/pocorgtfo08.pdf
Deniable Backdoors Using Compiler Bugs的作者当时也对开源社区防御后门植入提出了相应建议,虽然文章距今数年,但仍然具备参考价值。
编译器开发人员
尽快修复已知的错误编译bug
考虑将错误编译bug的修复程序向后移植(backport)到维护版本中
使用fuzz工具寻找问题
开源包的维护人员
对提交过来的奇怪的patch持怀疑态度
考虑重写patch
操作系统打包人员
在选择系统编译器之前评估编译器的可靠性
在所有平台上测试编译代码后再开始部署
在系统编译器上运行trusting trust test测试
终端用户
使用不同的编译器或编译器版本从源代码重新编译系统
在预编译的应用程序上运行验收测试
研究人员
创建可以被证明不会被此种方式利用的编译器
创建可检测到 miscompilation的编译验证功能
创建可在后门执行中检测到的多版本编程系统
用“不完全信任”瓦解供应链攻击
研究认为,供应链攻击的增长是因为基本攻击防御已经得到改善,因此黑客不得不寻求更为脆弱的入口。而且供应链攻击的规模效应——破坏一个供应商即可访问上百个网络,也让黑客觉得“物超所值”。
预防未来的供应链攻击并非易事,公司也没有简单的方法来确保他们购买的软件和硬件没有被损坏。
注:硬件供应链攻击,攻击者在设备中植入恶意代码或组件,一般特别难以检测。
因此,美国网络安全和基础设施安全局的高级顾问 Beau Woods 认为,供应链攻击的解决方案与其说是技术上的,不如说是组织上的。公司和政府机构需要知道他们的软件和硬件供应商是谁,对他们进行审查,并确保他们符合某些标准。简单来说,最好可以简化供应链,让更少的供应商提供更高质量的组件,而软件开发和 IT 运营在某些方面也需要重新学习这些供应链原则。
值得注意的是,白宫在早些时候发布了网络安全行政命令,为任何想要向联邦机构出售软件的公司设定了新的最低安全标准,可以作为一定的参考。
最后,Reflect on Trusting Trust,反思你所信任的。只有不能完全相信任何不是自己编写的代码,但是相信你所信任且经过审查的供应商代码,或者这是应对供应链攻击的理念前提。