独家连载 | 零日漏洞:震网病毒全揭秘 (2)
作者:星期一, 九月 14, 20150

640.webp

第一章 早期预警(接上)

乌尔森还是无法置信。VirusBlockAda公司,一个籍籍无名的微型安全公司,刚刚作为病毒探测者发现了一个病毒界的“稀世珍奇”!而且,它不仅利用了一个“零日漏洞”,是4个,对应Win2000以来的4个不同操作系统。攻击者将其分别注入到4个.lnk文件中,确保攻击万无一失。

乌尔森试图计算到底有多少台计算机遭受了它的感染。之后,又有一个问题困住了他。被注入到计算机上的两个驱动程序文件,已经在任何无弹窗提示的情况下,完成了自身的安装。要知道,Win7的安全特性要求“当没有安全证书的程序安装时,会弹出提示框”,但这两个文件在安装时并未遇到这个问题。乌尔森警觉的意识到,这是因为,这两个驱动已经获得了一家名为瑞昱半导体公司(RealTek Semiconductor,以生产声卡著称)的合法数字签名。

数字签名(digital certificates),就是经过认证的安全文件,就像数字护照一样。软件开发者用数字签名为产品进行鉴定,有签名的产品就是公司的合法产品。微软和反病毒公司也会为自家程序和更新包加上数字签名。计算机会认为,具有数字签名的程序是可信的。但如果攻击者偷到微软公司数字签名以及它的加密密钥,并用在自己的程序上,就能轻松的骗过计算机,让计算机认为“这是微软家的代码”。

此前,已有攻击者在数字签名上做过文章。但他们都是用假的、自己制作的签名文件冒充合法文件,或者通过注册一个“壳公司”欺骗认证方、让其误以为是合法公司的签名文件。但这两种方式下,计算机都可能将签名文件视为可疑对象,并拒绝相应文件。而在这件事中,攻击者使用的是瑞昱公司——一家著名台湾硬件厂商——的签名文件,因此计算机都会将其视为合法的。

这种战术是乌尔森从未见过的,激起了他心中的一系列疑问。

一种可能性是攻击者黑掉了瑞昱公司开发人员的计算机,然后使用开发人员的计算机及权限,秘密授予病毒文件数字签名。

另一种可能性是攻击者偷到了认证密钥(signing key)和证书(certificate)。出于安全考虑,聪明的公司会把它们的密钥和证书保存在不联网的服务器上,或者保存到提供额外安全防护的硬件模块上。但并不是每个公司都会这样做。有线索证明,瑞昱公司的证书确实被人偷走了。两个恶意程序文件上,数字签名的时间戳均为“2010年1月25日”。而一个文件于2009年1月1日,即于加签名之前一年被编辑过,另一个文件于加签名之前6分钟时被编辑过。由此可以推断,攻击者手上可能确实有密钥和证书,可以很快对文件加数字签名。

其影响之大,令人感到不安。将合法数字签名用在恶意程序文件上,颠覆了计算机世界对数字签名体系的信赖,让人对从此以后所有经过数字签名的程序都无法再信任了。其他黑客模仿这种偷盗数字签名的策略,也只是时间问题了。乌尔森必须将这件事公诸于众。

负责任的漏洞报告程序是,漏洞发现者在发现问题后,应首先与软件开发方取得联系,待开发方做好补丁之后再向公众发布消息。因此,乌尔森立即向瑞昱公司和微软公司发送了电子邮件,把自己的所见告诉了他们。

两周过去,两家公司没有任何回复。乌尔森和库普瑞决定,不再保持沉默。有义务让其他安全机构了解.lnk漏洞。随后,安装了Ada公司反病毒引擎的机构们发现,中东及附近地区的计算机中大量发现具有该特征的恶意程序。病毒正在肆虐,并且快速传播。这必须向媒体公开。

7月12日,乌尔森在公司网站上发布了一条关于“零日漏洞”的简短声明,同时在一个英文安全论坛上也发布了一条消息,警告说可能将爆发大规模感染。他公开了利用漏洞攻击的几个细节,但不足以使其他具有模仿能力的黑客根据这些信息进行类似攻击。但论坛上的成员都是内行,很快意识到其中的价值,指出这个漏洞具有造成“大规模杀伤”的潜力。

三天后,科技记者克雷布斯(Brian Krebs)发现了这条声明,并写了一篇博客,对当时还少为人知的漏洞进行了简介。这条新闻在安全社区中快速流转,让每个人都打起精神,来面对这种病毒以及可能出现的、跟风模仿者利用相同漏洞进行的其他攻击。同时,一家从事反病毒研究和测试的德国机构老大,向微软方面引荐了乌尔森,并督促微软开始研究补丁。根据已经公布的漏洞,微软决定向用户发布一个关于问题关键点的紧急报告,同时提供了如何减轻被感染风险的一点建议。但是,补丁的制作和分发可不是几个星期的事,解决问题仍然遥遥无期。

安全业界迅速展开了对这个病毒的讨论。现在,微软给它起了一个新的名字:震网(Stuxnet),是将一个驱动文件(mrxnet.sys)的名字和其他部分代码的字母进行拼合而成。安全公司纷纷将其特征纳入反病毒引擎,随即数以万计的病毒开始显现。

这时,又出事了。7月17日,斯洛伐克一家名叫ESET的安全公司发行了一个与震网有关联的另一种恶意驱动程序文件。这个文件也带有一家台湾公司的数字签名,但却并非瑞昱公司,而是生产电路板的台湾智微科技(JMicron Technology)。

这次发现的驱动程序文件是独立的,不像震网有那么多文件。但是,所有人都认为它与震网有关,因为它和Ada公司发现的驱动程序高度相似。这个文件的编辑日期中,有引人注目之处。当黑客在编译器中运行源代码,然后将其翻译成计算机能够读取的二进制代码时,编译器一般会在二进制文件中留下一个时间戳。攻击者可以操纵这个时间戳,以摆脱反编译研究者的跟踪,但这个文件的时间戳似乎是正常的(没被篡改)。时间戳显示,该驱动程序文件于7月14日,也就是在Ada公司将震网的信息公布后两天后被人编辑过。是攻击者在非常清楚一家白俄罗斯公司已经揭开病毒面纱之后,又释放出新的驱动来进行攻击吗?或者是他们知道事情即将败露,希望赶在被处理掉之前将震网病毒传播到更多机器?有线索证明,在攻击者为驱动程序文件加上智微公司数字签名时,漏掉了几个小步骤,这说明攻击者急于推出这个新的驱动,让它赶紧“干活”。有一件事是很明确的:攻击者需要给他们的驱动文件加上一个新的数字签名,因为瑞昱公司的数字签名已经于6月12日过期了。数字签名都有生命期限,一旦瑞昱公司的数字签名过期,攻击者就不能再用这个签名来标记新文件了。当震网被曝光,认证机构也会取消对相应病毒文件数字签名的认可,Windows系统将自动拒绝使用该签名的文件。

第二个签名文件的发现,让人们对于黑客如何获取相应安全文件有了更多的猜测。瑞昱和智微两家公司的总部都坐落于台湾新竹科技工业园,彼此相隔两个街区。考虑到地理位置接近,有人推测可能有人闯入了这两家公司,偷走了数字签名密钥和工具。还有人推测中国是震网幕后主使(躺枪),是中国方面黑了台湾公司、取得数字签名密钥和证书。

不论怎样,这意味着攻击方的“军火库”里面,可能还有其他公司的证书。既然他们已经费了这么大的力气来确认这种攻击是有效的,那么这很可能意味着他们为达目的,有着严肃的目标和精心设计的手段。安全业界中很多人都感到心神不宁、不知所措。ESET公司研究员皮埃尔在网上说:“擦,从来没见过这么专业的坏蛋。”

反病毒公司源源不断的检测着来自客户的震网病毒文件,令人吃惊的情况又出现了。根据文件的时间标记,震网病毒早在2009年6月就已经开始出现了,这比Ada公司发现它的时间要早一年还多。研究还显示,攻击者先后于2009年6月、2010年3-4月和2010年6月发起了三个波次的攻击,每一波攻击所用代码略有不同。

然而,震网的意图到底是什么,仍然是个谜。研究者没有发现任何有关震网试图盗取银行账号等机密信息的行为,这一点与其他大多数恶意程序大相径庭。研究者也无法从代码中找到其他动机的信号。直到有一天,一名来自德国的研究者弗兰克(Frank Boldewin)找到了一个可能的线索。

640.webp (3)

弗兰克Frank Boldewin

当乌尔森第一次在论坛上谈起震网时,弗兰克就曾问过他:“哥们,有谁深入看过它的代码吗?”原来,弗兰克曾深入震网的内层代码,发现其中有一些不寻常的、对德国西门子公司所生产软件的说明文字。攻击者看上去是在寻找那些安装有SIMATIC Step 7或SIMATIC WINCC这两种西门子公司专有软件的计算机。这两种软件都是与西门子公司生产的可编程逻辑控制器(PLC)配套的工业控制系统的一部分,用于配置自动控制系统的软硬件参数。而PLC,一般有烤箱那么大,是广泛用于世界各地的小型工业计算机,用来控制机械臂、传送带或装配生产线等。

640.webp (4)

西门子 SIMATIC 系列产品,硬件为PLC,软件为与之配套的软件,即震网的目标。

640.webp (5)

西门子SIMATIC Step 7操作界面

弗兰克从未见过以工业控制系统为目标的恶意软件。因为,黑工业控制系统根本没什么利润回报,起码不是黑银行账户和信用卡系统那种赚快钱的方式。只有一种可能。他说,“看来,这个恶意程序是个间谍软件”。攻击者一定是想盗取竞争对手的工业设计或产品模板。

客观的说,业界大多数人都太乐观了。震网似乎只以安装了西门子专用软件的计算机为攻击目标,这意味着没装西门子软件的计算机都是安全的,他们的机主也可安枕了。但乌尔森在伊朗发现的、反复重启的计算机并没有安装西门子软件,除了系统被破坏之外,震网并未引发持续性的伤害。这些都是为什么呢?

在震网声名远扬之后仅仅一周之后,就渐渐走向了平息。微软还在为了修复.lnk漏洞而开发补丁,但在多数其他安全公司眼中,一旦把震网的特征码加入本公司产品病毒库,震网就和他们没有一毛钱关系了。

世界上第一个数字武器的故事即将到此为止,但有几个业内研究者却认为其中有料,把震网揪住不放。(待续)

注释:震网导致计算机反复重启的原因

Stuxnet蠕虫被设计用来破坏伊朗核工厂铀浓缩离心机,但一个编程错误使蠕虫扩散到了 Windows 95和Windows 98等不支持的操作系统上,导致电脑蓝屏死机,从而引起了怀疑,使它曝光于世界。

相关阅读

震网蠕虫中的一个Bug差点令其“出师未捷身先死”

译者:李云凡

 

关键词:

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!