美国国家安全局硬盘固件入侵技术解密

近期发现的间谍网络"方程式小组(Equation Group)"最令人震惊的部分就是其能用恶意代码对硬盘固件进行重编程的神秘模块。曝光此事的卡巴斯基研究人员称,这一颠覆计算机胃肠道一样的存在――硬盘固件的能力,他们"闻所未闻"。

这种黑客工具被认为是美国国家安全局(NSA)的杰作,它通过重写硬盘固件获得对计算机系统神一般的控制权,即使软件更新都不能阻止它长期潜伏。模块被命名为"nls_933w.dll",在卡巴斯基发现的间谍平台"方程毒药(EquationDrug)"和"角鲨(GrayFish)"中都有用到,是此类模块中第一个被发现的。

它还具备另一个能力:在硬盘上开辟隐藏存储空间以备攻击者在一段时间后取回盗取的数据。这一能力使得像方程组一类的间谍,通过将想要获取的文档藏入不会被加密的存储空间来规避硬盘加密。

卡巴斯基目前为止已发现了500个方程组的受害者,但只有5个在其系统上留存有固件重写模块。重写模块似乎仅在有特殊监视价值的重要系统上留存。卡巴斯基全球研究与分析团队主管科斯廷.拉尤认为,这些是未接入互联网且用硬盘加密进行了保护的高价值计算机。

关于固件重写模块,目前了解的有如下几点:

  

工作原理:

  

硬盘都有一个控制器,基本上相当于一台微型电脑,包含了一块存储芯片或是闪存ROM(只读存储器)用以存放驱动硬盘的固件代码。

当电脑感染了方程毒药或角鲨代码,固件重写模块就被植入到系统,并与主控服务器连接获取恶意代码,然后将之写入固件,代替原本的固件代码。研究人员发现了两种版本的重写模块:一个是2010年编译的,用在方程毒药中;另一个是2013编译的,用于角鲨。

被植入木马的固件使攻击者可以潜伏在系统中,即使软件更新升级都影响不到它。受害者就算怀疑自己的电脑被感染了,想抹掉旧操作系统再全新安装一个以清除恶意代码,恶意固件代码模块还是能够留存在系统中不受波及。它可以再次连接上主控服务器,将系统中被清除掉的其他恶意组件再行安装回来。

甚至就算厂商发布了固件自身的升级更新,恶意固件代码也有可能依然存续。因为有些固件更新只替换固件的某些部分,意味着存放了恶意代码的部分很可能没有被更新重写。受害者唯一的解决办法就是扔掉被感染的硬盘,换块新的。

这种攻击之所以会奏效,是因为固件在设计的时候就根本没考虑过安全性。硬盘生产商不会像软件厂商给软件加签名一样在安装在硬盘中的固件上也来个加密签名。自然,也没有内建的对签名固件进行的核查的验证机制。这也就给他人留下了修改固件的可能。而且固件也是隐藏恶意软件的最佳地点,因为反病毒扫描根本不检查这块地方。用户也没有什么好方法可以读取固件手工检查它是否被篡改了。

这一固件重写模块可以对十几家厂商的硬盘固件进行重编程,包括IBM、希捷、西部数据(Western Digital)和东芝。

拉尤说:"你知道仅仅染指一种硬盘的固件就有多难吗?你需要清楚很多细节,CPU、固件架构,还有它们的运行机制。"这位卡巴斯基的研究员称之为"一项令人震惊的技术成就,充分证明了'方程式小组'的能力。"

一旦固件被替换成植入了木马的版本,重写模块便会创建能与系统中其他恶意模块通信的应用程序接口(API),并访问硬盘上攻击者想藏匿所盗数据的隐藏扇区。他们将这些数据放在硬盘上所谓的"服务区"中,也就是硬盘为自身内部操作存储数据的地方。

如果目标主机开启了磁盘加密,这点空间就非常有用了。由于方程毒药和角鲨恶意软件都运行在Windows系统下,他们可以在文件还未被加密的时候获取到副本并存储到这片不会被加密的隐藏空间里。但是,芯片上并没有多少空间,存不下太多数据和文档,攻击者只能挑价值相当的东西来规避加密。

"考虑到角鲨恶意软件在系统引导阶段就能启动运行,他们也能够捕获到加密密钥并存储到这片隐藏存储区。"

当局可以在之后弄到这些电脑,可能是通过边境封锁,也可能是通过NSA所谓的"海关机会",然后从隐藏存储区抽取出捕获到的密钥解锁硬盘。

拉尤认为这种策略针对的目标仅限未接入互联网且有加密硬盘的机器。他们发现的5台中招的机器中有1台就是没有互联网连接并用于特殊安全通信的。

"固件木马的主人只在没有别的办法的特殊情况下才使用它。想想本.拉登,他可是住在与外界隔绝的沙漠里,没有互联网也没有电子足迹。如果你想从他的电脑里获取信息,你能怎么办?你只能将文档放到隐藏存储区,然后等待,一两年之后卷土重来偷掉它。用这招获取的利益是明确又具体的。"

不过,拉尤也认为,攻击者脑海中应该还有更宏大的蓝图。"也许在不久之后他们就会将其升级换代,不再只存放密钥而是将所有文档都存进隐藏区。到那时,一旦有机会实际接触到受感染系统,他们就能从隐藏去拿到所有明文文档。"

如果他们可以将操作系统的整个目录都拷贝进隐藏扇区备用,密钥也就不需要了。但是固件所在的闪存芯片对大量数据来说实在是太小了。因此,攻击者需要更大的隐藏存储空间。幸运的是,这空间还真有。硬盘的服务区上有大片可被强制征用来存储大量文件缓存的扇区,甚至计算机其他部分上被删除的文件副本也能存。这片服务区,也被称为保留区或系统区,是用来存储固件和操作硬盘需要的其他数据的,但有很大一部分是空闲空间。

以色列公司"恢复"的数据恢复专家艾莉尔.伯克曼(Ariel Berkman)在2013年2月发表了一篇有意思的文章,里面提到:"这些区域不仅不会被常规工具清理,反病毒软件和计算机取证工具也无法访问。"

伯克曼指出,西部数据的一款硬盘有141MB是保留的服务区,但只使用了其中12MB,剩下的空间都能用作隐藏储存。

想在服务区写入数据必须知道每家厂商未公开的特定指令,因此攻击者必须先搞清楚这些指令都是些什么。而一旦他们搞清楚了,"通过直接向硬盘发送厂商特定指令(VSCs),攻击者就能操纵这些服务区读写原本无法访问的数据"。写个程序自动拷贝文档到这个区域也是可行的,虽然这活儿有点微不足道。伯克曼自己写了个概念性验证程序读取并写入94MB的文件到服务区,只是这程序有点不太稳定,有可能导致数据丢失或是硬盘崩溃。

然而,用这种方式隐藏大量数据有一个问题:只要检查服务区的已用空间大小就能发现隐藏数据的存在。如果这一扇区理应有129MB空闲空间却只剩了80MB,那就表明这里存有本不应该存在的东西。不过,一份写于2006年却直到上个月才被《明镜周刊》登载的NSA泄密文件显示,NSA可能已经解决了这一问题。

NSA实习生的解决方案

这份文件基本上是NSA希望为其所谓的"持续部"发展未来间谍能力而开列的心愿单。"持续部"里有一个攻击团队专门利用改写固件、基本输入输出系统(BIOS)、总线(BUS)和驱动器的方法在被侵入主机上建立和保持长久的控制。这份文件列出了NSA实习生们需要为攻击团队搞定的大量项目。其中一个就是"隐藏存储"项目,通过开发出硬盘固件植入程序避免硬盘上的隐藏存储被发现。要达到这一效果,植入程序需阻止系统发现磁盘上可用空间的真实容量。

文件上写道:"项目思路是修改特定硬盘的固件,使其只能正常识别可用空间的一半。它将向操作系统返回识别到的容量数据,且不提供任何可以访问到附加空间的方法。"硬盘上只有一个分区会显示在分区表中,让其他分区――也就是隐藏数据存储的地方――保持不可见,更不可访问。

修改过的固件中留有一个特殊的钩子,只有当主机重启,硬盘驱动接收到特定的命令,才会解锁隐藏储存空间。解锁后,隐藏分区才能在分区表中看到,并在另一条特定命令锁定分区之前都是可访问的。

从这份八年前的文件中我们无法得知NSA取回隐藏数据的详细计划。同样处于迷雾中的还有那些实习生是否真的有研制出符合NSA所求目标的固件植入程序。但是,文件中提到一条:实习生们必须在任务签署六个月内拿出一份项目的解决方案,加之考虑到NSA在其他事务上表现出的创造力,我们毫不怀疑他们已经做到了。

隐藏存储区

在这起固件木马事件被曝期间,攻击者可利用隐藏扇区存储数据的特性并没有被多做解释,但那却是固件入侵的一个重要组成部分。同时,它也引发了对攻击者究竟是如何做到这一点的一系列疑问。由于手上没有写入受感染系统的真实固件木马代码副本,此种攻击尚留有很多未解之谜,但我们还是能做出一些推测。

装载了固件的ROM芯片里有少量存储空间是未被使用的。如果ROM芯片容量为2M字节,固件可能仅占用了其中1.5M,留有0.5M空间可供攻击者用来隐藏想偷取的数据。