2011年春天,震网的余波似已渐渐消散。赛门铁克确定,震网攻击的目标设备是某型号的变频器;奥尔布赖特确定,使用这些变频器的就是纳坦兹的离心机。虽然美国政府没有对此事正式表态,但《纽约时报》以长篇报道的形式印证了人们对“美以操盘震网”的怀疑。
对赛门铁克而言,它该尽的责任都尽到了。研究人员放下公司的业务,花了半年时间破解代码,还整理发布了一份涵盖他们所有发现的70页的档案。他们对此感到非常欣慰。然而,没过多久,欧洲又传出了新的消息——有证据表明,震网不过是攻击者用来攻击伊朗和其他目标的一系列武器之一。
布达佩斯技术和经济大学加密和系统安全实验室(CrySyS)的波尔蒂撒·本恰特(Boldizsár Bencsáth)一边咬着三明治,一边盯着计算机屏幕。他正在安装一款大型软件,为即将到来的2011年秋季学期做准备。这天是9月1日,夏末暖阳尚在,寒冷秋风未访,清朗的天空和适宜的温度令人心旷神怡。虽然手上有不少事情,本恰特的心情却是轻松加愉快。
[![](https://box.kancloud.cn/2015-12-08_5666b1b5a2242.jpg)](http://www.aqniu.com/wp-content/uploads/2015/11/640.webp-227.jpg)
波尔蒂撒·本恰特
这天下午,本恰特正在实验室吃午饭,一个电话打了过来。来电话的是实验室咨询业务客户、某公司CEO乔斯卡·巴图斯(Jóska Bartos)。
“波迪(本恰特的昵称),你有没有时间帮我们个忙?”巴图斯问。
“什么情况?和咱们上次谈的业务有关系吗?”波迪想起了他们之前讨论过的一种新产品。
“不是那个事,”巴图斯说,“这样说吧,你现在能不能过来一趟?事关重大,千万别告诉别人啊。”
本恰特三口两口把饭吃完,跟同事打招呼说,“嘿,我有点急事,必须出去一趟。”听到同事问“你去哪儿啊”,他回了一句“别问了,我去去就回。”一边说,一边跑出了实验室。
到了公司一看,这里已经临时成立了一个应急小组,就等他来讨论问题了。巴图斯开门见山的说:“我们公司好像遭到黑客入侵了”。
他们在一个开发人员的计算机上发现了一个可疑文件,文件创建时间显示,它是在夜间没人工作的时候生成的。文件经过了加密和压缩,他们打不开。他们推测,这应该是攻击者从机器上拷贝下来,打算之后再取走的数据。经过对公司办公网络的进一步排查发现,还有几台机器也出现了类似的情况。应急小组确定他们遭到了黑客入侵,所以他们想让本恰特帮忙查查,黑客是怎么进来的、到底想干什么。虽然他们公司有一套比较全面的保护措施,包括防火墙、杀毒软件、入侵检测和防御系统,但还是没能挡住黑客的入侵。
本恰特只是一名计算机教师,之前没有做过[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")取证这类的工作。他是CrySys实验室的4名研究生导师之一,主要任务是为欧盟开展学术研究,偶尔也为其他客户做一些“咨询”业务,其实就是一些病毒查杀与清理、恢复系统正常运行的一般性技术工作。他从来没做过染毒目标分析,更别提对付仍在进行中的攻击了。因此,对于这个挑战,他感到有些紧张。而且,他还不能求助于同事。因为,该公司的运作非常依赖于客户的信任,一旦被客户发现其系统遭到黑客攻击,就会立刻面临客户流失的窘境。
应急小组先前提取了染毒硬盘的镜像,因此他们和本恰特先用一下午的时间对镜像进行了分析。到了晚上,他们发现了一个用于记录密码和键盘按键的恶意程序。它可以盗取文件、对屏幕截图,还可以对连接到计算机上的设备和系统进行编目,以勾勒出公司内网的拓扑结构。攻击者并不急于将盗取的数据直接传输出去,而是耐心的把数据以临时文件的形式储存在染毒计算机上。应急小组最初发现的,就是这样一个临时文件。每当恶意程序完成一轮数据收集后,文件的体积就会随之变大,直到达到某个临界点,攻击者才会将其传输至一台位于印度的指挥控制服务器上。
天色已晚。公司删除了镜像中敏感的客户数据,然后让本恰特把镜像文件和公司系统日志带了回去。接下来的几天里,本恰特单枪匹马,又发现了多个恶意文件。与此同时,公司的应急小组也没闲着,发现了3个可疑文件,其中包括一个内核模式驱动文件,和只感染了部分计算机的另一个驱动文件。
本恰特检查这个内核模式驱动文件时,不禁心跳加速——这个文件居然有一个合法的数字证书,证书显示由一家台湾公司签发。“台湾公司……等等,” 本恰特心想,震网中的驱动文件,盗用的也是台湾公司的数字证书。只不过,震网用的是瑞昱半导体公司的数字证书,而这个驱动用的是骅讯电子公司的数字证书。此外,此数字证书的签发时间为2008年8月,与震网首次入侵伊朗计算机的时间重合。
难道,这两者之间存在联系?他想了想,然后摇了摇头。任何人都可以盗取骅讯公司的签名密钥和数字证书,所以,这事未必是震网攻击者干的。
之后,应急小组中有个人注意到了另一个与震网驱动文件的相似之处,即注入染毒计算机进程的方式。他对本恰特说,“这种方式我只在其他地方见过一次。”毋庸赘言,本恰特已经知道,他说的就是震网。但本恰特认为,这种技术并非震网独有,这或许只是个巧合。
后面几天里,本恰特和应急小组又发现了两个与震网类似的技术特征。但每一次,他们仍然以巧合待之。他们心想,一道闪电不可能同时击中两样东西。而且,没有迹象表明,本次攻击的目标是PLC。
病毒发现一周后,本恰特想到,会不会还有其他人也感染了同种病毒,因此他决定偷偷的做个试验,看能不能把其他受害者或攻击方给引出来。9月8日,他在个人网站boldi.phishing.hu上贴出了[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")的哈希值,并用一种神秘的口吻写道,“猜一猜,9749d38ae9b9ddd8ab50aad679ee87ec是什么意思?你懂的。”这个网站的域名phishing是计算机安全术语“钓鱼电邮”的双关语,但实际上却是一个汇集了各种鱼类食谱和罐装鱼烹饪评论的奇怪网站。把机密信息发在这样一个网站上,可谓绝妙。因为,正常用户根本看不懂是什么意思,只有当某人在Google上搜索这个哈希值时,才会在搜索结果中找到这个页面并访问它。而进行搜索的人,要么是相同病毒的受害者,希望在互联网上看到相关信息;要么是攻击的发起者,他们会想知道,有没有受害者发现了这个文件,有没有人在网络上讨论它。如果真的有人访问这个页面,网站的主人本恰特就能追踪到访客的IP地址。
可惜,几天过去,访问量仍然是零,于是他删掉了这个页面。
这时,秋季学期已经开始了,本恰特也陷入了各种繁杂的事务之中。他又要上课,又要带研究生,还得给杜布罗夫尼克(Dubrovnik,克罗地亚度假名城)的某个研讨会提交一篇论文。但不论他做什么,头脑中关于病毒入侵的影子总是挥之不去。他参加完研讨会返回布达佩斯后,立即和应急小组决定,把本次入侵中发现的驱动文件,跟震网中那个类似的驱动文件进行对比,看看两场攻击之间到底有没有内在联系。当他们把代码导入16进制编辑器,一行接一行检查后,一个个都惊掉了下巴。两个文件几乎完全一样,唯一的区别就是使用了不同的数字证书。
本恰特将情况向公司CEO巴图斯做了通报,并告诉他,需要CrySy实验室其他同事的协助。这已经不再是一个单纯的黑客攻击事件了,可能会牵涉到国家安全等问题。巴图斯同意了他的要求,但是他请求本恰特,不要对他人泄露公司的名称。除本恰特之外的唯一知情方,是当地政府辖内的计算机应急响应中心,而这也仅仅是因为,他们与该公司之间存在业务往来。
本恰特打算,过完这个周末就把这事告诉同事。在周末里,他找来了包括赛门铁克震网档案在内、他能找到的有关震网的所有技术文献,再次通读了一遍。当他读到震网用来隐藏代码的加密手段时,专门把它跟新发现的攻击进行了对比,结果,他发现两者极为相似。就连新发现攻击代码中使用的加密密钥,都和震网用的一模一样。
然后,他又仔细观察了新攻击代码中使用的6个内核级劫持函数(kernel hook,用于将攻击代码嵌入系统的特定函数),并将它们与其他已知攻击进行了对比。他发现,有些攻击的代码中具有2个或3个相同的劫持函数。他又查了一下震网的代码,结果,震网中恰恰使用了这6个完全相同的劫持函数。看到这里,本恰特确信,这两场攻击之间,定然有紧密的联系。
当然,这未必说明,两场攻击的代码是同一批人所写,只能说明新攻击的发起者以震网代码为框架和模板,创作了新的攻击。众所周知,震网成功破坏了伊朗的铀浓缩项目,那么,谁知道,这个新攻击的目标是什么?它已经感染了多少个系统?(待续)
本恰特立即把他的发现写成了一封电邮,发给了巴图斯。这段时间,他们一直处于一种比较轻松的工作状态中,有时间就分析一下代码,没时间就把它放着。但现在,他开始意识到,必须尽快查出攻击的目的,并把相关信息公诸于众,以便让更多的人参与进来。当年赛门铁克发布了震网的研究报告后,有人就在疑惑,为什么美国没有从中作梗,不让他们公开呢?而这一次,本恰特也有着类似的担心:一旦他公开研究结论,很可能会有人出来对他横加干涉。
周一,本恰特找来了他的两个同事莱文·布詹(Levente Buttyán)和戈博·派克(Gábor Pék),组建了一个3人团队。他们清楚,仅凭他们自己,还不具备深入分析这个复杂[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")的能力。因为,他们没有分析[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")的经验,就连用于逆向工程的调试工具都没怎么用过。但是,他们也明白,必须要做一些先期的分析工作,才能说服其他更有经验的研究者来关注它。在这个事件中,CrySyS实验室在计算机安全领域的地位有点类似VirusBlockAda公司,非得拿出一些过硬的证据,才能让别人相信,这场攻击与震网之间有紧密的联系,并着手开展进一步研究。
于是,他们确定了下一步工作的目标和时限:10天之内,尽量找到新攻击代码与震网代码之间的更多相似点。在工作的过程中,他们惊讶的发现,两者之间的相似之处比他们预想的还要多。10天之后,他们制作了一部60页的研究报告。经过商议,巴图斯同意本恰特向赛门铁克方面共享报告,条件是隐去实验室的名称。他担心,一旦公众看到CrySyS的名字,就会联想到受害者究竟是谁。
拿到这份报告的有,政府的计算机应急响应小组,赛门铁克的钱哥团队,一位在迈克菲(McAfee)公司工作的匈牙利籍研究员彼得·斯泽(Péter Szor),一位能帮助吊销[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")中数字证书的威瑞信(VeriSign)公司员工,还有一位微软公司的研究员。当本恰特亲手将一封封邮件发送出去时,心中不禁波澜起伏。“我非常激动,”他说,“我抛出了砖,却不知会引来怎样的玉。”
10月14日星期五早上,钱哥起床后,习惯性的打开手机查看收件箱,其中有一封邮件吸引了他的注意。邮件标题是“重要恶意程序”,带有一个附件。发件人是匈牙利某个不知名实验室的两名计算机科学家。邮件中,他们用生硬的英文写道,发现了一场与震网“高度相似”的新攻击。他们将它称为“毒区”,因为染毒计算机上的临时文件都以“~DQ”为文件名起始字符。此外,他们还将它称为“开启了震网故事的新篇章。”
“由于缺乏处置类似事件的经验,我们无法判断下一步该采取何种行动,”他们写道,“我们希望和包括贵方在内的其他专家开展合作。我们将提供恶意代码的样本,并愿意参与进一步的研究分析工作。”
钱哥把这封邮件转发至公司事件应急小组的其他成员,并单独给莫楚发了一条阅读提醒。随后,他怀着谨慎而激动的心情,把邮件递交给管理层。
过去几年,钱哥多次收到关于发现新型震网病毒的误报,这让他提高了对类似邮件的警惕。作为在知名反病毒公司上班的安全专家,对于周围朋友和邻居们一遇到困难就向他求助,他已经习以为常了。但在他带领团队破解震网病毒的工作公开后,出现了新的情况:偶尔会有一些陌生人跟他联系,告诉他,政府正在用震网之类的恶意程序监视他们。一次,有个家伙给他寄来了一封信,里面有50页的屏幕截图和网络流量日志的打印稿,还用黄色线条把重点标了出来。其中一页上,他在一个包含“en/us”字样的网址上画了一个圈,说这就是美国政府正在监视他的证据。还有更令人啼笑皆非的事。一位写烹饪书的女作家,曾用一种激进分子和犯罪分子用来隐去身份的匿名加密邮件工具Hushmail给钱哥发过几封邮件。看到他对此视而不见,她又找到了钱哥的电话号码,发短信提醒他。据她所言,她确信,有人正在用类似震网的病毒对她进行监视。理由是,每次去图书馆、把自己的U盘插入图书馆的计算机后,过不了多久家里的计算机也会感染同样的病毒。
尽管钱哥对来来往往的错报、误报一笑置之,但却不会错过任何新消息。他打开这份来自匈牙利的报告读了两页,立即发现了它的价值。他非常肯定的说:“这绝对是震网的亲戚。”
虽然缺乏分析恶意代码的经验,尽管一再抱歉说“还有诸多问题尚待解决”,匈牙利科学家们仍然努力做出了一部令人眼前一亮的报告。报告中包括多组反编译后的代码段,向读者展示出毒区与震网的相似点,还制作了一个标示两场攻击间10多个相同点/相似点的详细列表。毒区中没有针对PLC的攻击代码,甚至在键盘记录器之外没有任何载荷代码。但是,震网创作者的特征在其中俯首皆是。毒区要么是与震网同出一门,要么是有人用与震网相同的源码和工具制作出来的。
钱哥迅速给本恰特发了一个回执,然后开始焦急的等待莫楚到来,心中五味杂陈。他们一直期盼着,有一天自己或其他人能找到解答震网遗留问题的更多线索。而毒区的发现,似乎正是他们所希望的。然而,当初他们夜以继日的干了几个月,才完成了震网的破解,这一次的恶意代码,会不会又是一块难啃的硬骨头呢?
莫楚看到钱哥发来的消息时还没完全睡醒,但当他打开附件、看到研究报告时,顿时睡意全无。跃然而出的网络武器,在短短的一瞬间,就驱散了他脑海中的雾霭。“我得去趟办公室,”他一边对女友说着话,一边披上衣服冲出家门。
一路上,他边开车边整理思绪。回想起刚才看到的报告,他有点不敢相信,震网幕后的团队仍在活跃。在媒体聚焦震网事件、曝光美以计划之后,攻击者应该会保持低调、暂避风头。至少,他们会改头换面,用一些新手段和新代码,以确保一旦被发现,也不会被追查到与震网同源。但从这份来自匈牙利的报告来看,他们根本没在改变代码特征方面花什么心思。这帮家伙真有种。只要是他们认准的事,就下狠手去做,根本不在乎有谁把他们识破。还有一种可能,就是他们已经在毒区代码上押上了重注,即便在震网遭曝光的情况下仍然不愿将它放弃。
莫楚赶到公司时,钱哥和同事们已经展开了对新攻击代码的讨论。他们还联系了已经从巴黎调到南加州分部的法里尔。然后,他们下载了匈牙利人发来的毒区源代码,再次开始“全天候”的分析破解工作。他们欣喜的发现,毒区的规模比震网小得多,内部仅由几个很容易破解的文件组成。一个周末过去,他们已经掌握了新攻击代码中的绝大部分功能细节。
本质上,毒区是一种远程访问木马(RAT),为攻击者提供一个可持续控守染毒计算机的后门。一旦后门成功安装,毒区就会与指挥控制服务器建立通路,以便让攻击者从服务器上下载击键记录器或其他恶意程序,进一步增加攻击代码的功能。
很明显,毒区的意图与意在破坏的震网不同。它只是一个间谍工具。如果说震网像一个用来摧毁敌人的冷血杀手,那么毒区就像一个前哨侦察兵,为后续的攻击行动提供情报支持。赛门铁克怀疑,毒区的侦察,是另一项类似震网的攻击的前奏。然而,毒区的生存期受到了严格的限定,它将在感染成功的36天后进行自毁,擦除在染毒计算机上的所有痕迹。(待续)
这些都很容易理解,但当继续深入毒区代码时,他们发现了另一个线索。它似乎与另一场已经困扰他们几个月的攻击之间有所联系。6个月前,伊朗官员宣称,他们的计算机遭到了来自跟随震网而来的第二次攻击。这时,距离他们首次承认“用于控制离心机的计算机遭到网络攻击”已经过去了几个月。上一次,他们没有给攻击离心机的病毒命名,但这一次他们给病毒起了一个好听的名字:“星辰”(Stars)。伊朗民防部长吴拉姆-雷萨·贾拉利(Gholam-Reza Jalali)没有对命名做出解释,也没有提供有关攻击的更多细节。他只是说,攻击的目标不是破坏,而是盗取数据。他还提到,[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")似乎“被误当作了来自政府的可执行文件”,这表明,[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")可能是攻击者将恶意文件假扮成来自政府的文件,并作为邮件附件以“钓鱼”的方式实施入侵的。
由于伊朗方面没有对外界提供[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")的实例,赛门铁克和其他机构的研究者想分析也无从下手。同时,因为没有关于“星辰”的其他佐证,很多研究者决定忽略伊朗的报告。他们认为,这要么是伊朗人为了指责西方再次发动网络攻击而编造出来的故事,要么是夸大其词,把一种普通病毒说成了具有国家背景的攻击。
但是,他们在毒区中发现的一些细节暗示,它可能就是“星辰”。在毒区的攻击者将击键记录器推送至染毒计算机时,会将它嵌入一个.jpeg文件中,以躲避防火墙的过滤。由于原始图像中的大部分数据被删除、并替换成了击键记录器的代码,所以,莫楚代开这个图像时,屏幕上只能看到一小部分内容——黑色背景上的几个白色单词文本。文本只露出了上半部分,但仍可辨认:“互扰星系NGC 6745”。对其搜索所得结果显示,这张图像是哈勃天文望远镜在1996年3月拍摄而成。
[![](https://box.kancloud.cn/2015-12-08_5666b1b5c0d9f.jpg)](http://www.aqniu.com/wp-content/uploads/2015/11/640.webp_25.jpg)
这张令人震撼的图像上,一簇浓密的蓝色和白色恒星遮蔽在一层金黄色气状物之下,一大一小两个星系正在发生“碰撞”。有没有这种可能,毒区就是之前攻击伊朗的神秘病毒“星辰”呢?赛门铁克和CrySyS实验室认为,是这样的。
赛门铁克想把毒区的消息公开。发布前,公司的研究人员和本恰特对拟发布报告中的内容进行详细检查,消除了所有可能泄露受害者和CrySyS身份的蛛丝马迹。10月18日,赛门铁克团队发布了一版隐去CrySys实验室名称及其所做工作的报告。报告中,受害者是“欧洲某机构”,最先发现毒区的是“某个互联网领域的研究实验室”。
赛门铁克发布报告后仅1小时,本恰特就发现,有人在搜索他几周前放在个人网站上的病毒文件哈希值。原来,虽然他已经删除了这个页面,但是Google缓存中仍然存有这个页面。线上安全论坛上,也出现了关于这条被删消息的讨论。第二天,“一个奇怪的匈牙利鱼罐头网站居然与毒区有关”的消息一传十、十传百,本恰特平时无人问津的网站迎来了高达400次的访问量。尽管网站上没有本恰特个人的信息,但很快就有人通过域名注册信息查到了他的名字,又通过Google搜索查到了他的工作单位——CrySyS实验室。
这时,再想隐藏实验室的身份已经不现实了。于是,本恰特在实验室网站上发布了一则简短的声明,承认实验室在发现毒区的过程中发挥了重要作用,同时呼吁各方停止“人肉”受害者身份的行为。然而,这来得太晚了。关于“毒区的受害者是欧洲一家数字证书认证机构”的说法不胫而走。
原来,迈克菲公司研究员彼得·斯泽(Péter Szor)在收到本恰特的第一封邮件后,就发了一篇题为“王炸现身”的博客文章,声称毒区的目标是数字证书认证机构,并建议各家认证机构立即开展针对毒区的自查。而现在,大家已经知道CrySyS实验室是匈牙利的机构,那么不难猜测,受害者一定也来自匈牙利。而匈牙利的认证机构一共也没有几家,其中最大的两家,一家是NetLock,另一家是Microsec e-Szigno。然而,好事不出门,坏事传千里,很快,NetLock公司的几名研究员不慎走漏了风声,“受害者是NetLock”的消息传了出去。
这下子影响可大了。数字证书认证机构(CA)是互联网用户之间信任关系的核心。他们向政府、金融机构和各公司颁发数字证书,用于标记其软件和网站的可信性,以确保用户下载的程序是由微软等软件公司生产的合法软件,确保用户登录的网站是由美国银行或Gmail运营的合法业务。攻击CA意味着,攻击者可以以任何公司的名义颁发数字证书,包括给恶意程序“盖章”。与只是盗取了瑞昱、智微和骅讯3家公司数字证书的震网相比,这场攻击更进一步。
如果毒区是美国和以色列的杰作,那么这将意味着,仅仅为了实施这场秘密的网络攻击,北约国家及其盟友居然在“支撑在线交易的可信基础设施安全”方面做出了重大妥协。如果美国是这场攻击的发起者,这将意味着,一个政府部门大力宣扬关键安全基础设施重要性、推动制定可被各方接受的互联网行为准则,同时,另一个政府部门却在忙着入侵属于北约盟国、对互联网安全至关重要的关键安全系统,并给其他国家做出了错误的范例。要不是因为之前毒区的受害者没曝光,公众早就会对此大加鞭挞了。
放下这个细节不谈,毒区曝光后,安全业界给出了与震网曝光时截然不同的响应。当年,赛门铁克耗时数月破解震网载荷,其他研究团队只是袖手旁观,而如今毒区代码刚一露面,各路人马却蜂拥而至,纷纷开始分析研究。究其原因,一方面,毒区没有震网那么复杂,也没有针对PLC的载荷;另一方面,这一次所有人都明白了,不闻不问会有怎样的恶果。众多研究员自忖实力超群,却在震网开启新时代时错过了青史留名的绝好机会。
其中,有一家公司决心,这一次一定要做出点名堂来。它就是俄罗斯的卡巴斯基实验室。实际上,早在震网被发现时,卡巴斯基的研究员就参与了研究。他们在破解震网导弹部分代码方面完成了大量工作,并且作为首家发现其中全部零日漏洞的私营公司,将漏洞报给了微软。但是,除此之外,他们寸功未立。因为,他们没想到,震网竟然会如此特别、如此意义重大。客观来看,陌生的PLC代码成了进一步分析载荷的拦路虎,卡巴斯基最终判定,就算破解出PLC代码,也得不到什么有价值的结果。于是,他们在完成对导弹部分代码的分析后,没有继续深入。但这一次,他们不会再犯同样的错误了。
毒区曝光时,卡巴斯基全球研究团队负责人康斯丁·拉伊乌(Costin Raiu)正在北京候机,准备去香港参加一场会议。看到毒区的消息后,他的第一反应就是给莫斯科的同事们打电话。但是,由于时差关系,莫斯科还是深夜。于是,他赶在登机之前,迅速下载了赛门铁克提供的毒区文件,在飞行途中开始了分析。
一到香港,他立刻联系了身在莫斯科的年轻逆向工程高手、公司首席病毒分析师亚历山大·格斯特夫(Alexander Gostev)。尽管赛门铁克和CrySyS实验室已经对毒区文件进行了深入分析,但拉伊乌和格斯特夫猜测,其中可能仍有遗落的重要线索。事实证明,他们猜对了。
[![](https://box.kancloud.cn/2015-12-08_5666b1b5dbc3f.jpg)](http://www.aqniu.com/wp-content/uploads/2015/11/640.webp-134.jpg)
打开毒区的文件,他们马上意识到,这些代码必定出自高人之手。毒区的代码与他们经手过的一般间谍软件相比,简直是判若云泥。拉伊乌说,如果说前者是梵高的名画《星空》(Starry Night),后者就是一幅艺校学生的习作。在内行眼中,毒区的代码中充满了大师级的巧思和才气。(待续)
拉伊乌是一名在卡巴斯基工作的罗马尼亚人,年方33。他和另一名研究员,与一帮市场营销人员一起,在布加勒斯特一家规模很小的分公司上班。他浓密的头发黑白相间,眼神有一种与他年龄不相称的成熟和智慧。这让它在以年轻人为主的研究团队中脱颖而出,成为深孚众望的领袖。而且,他僧侣般冷静的举止,让他在同时面临多项棘手任务时,仍能很好的应对压力。在他带领团队深入探查震网和毒区幕后强大操盘者的几个月里,他的这些可贵品质得到了充分的发挥。他们的行动,甚至引起了外国情报机构的注意。
[![](https://box.kancloud.cn/2015-12-08_5666b1b6a5b2d.jpg)](http://www.aqniu.com/wp-content/uploads/2015/11/640.webp_27.jpg)
2000年,23岁的拉伊乌加入了仅有几十名员工的卡巴斯基公司。他一来,就被分配到了一个名为“布拉格计划”的下一代反病毒引擎研发项目组。
在社会主义国家罗马尼亚长大的拉伊乌,从小就对化学而非计算机特别着迷。他最喜欢观看某些化学成分混合在一起之后发生的燃烧反应,最喜欢学习用于揭示世界本质与结构的化学基础知识。但有一次,他在做实验时,险些烧掉家里的房子。于是,他的父母给他买了一台国产的山寨PC,希望把他的兴趣转移到不那么危险的方向。很快,他就自学掌握了编程技巧,并在十几岁时,从零开始设计了一个名为RAV的反病毒引擎。
他开发RAV的工作始于高中时期。一次,他们学校的网络遭到了病毒感染,但杀毒软件却检测不到。拉伊乌见状,熬了一个通宵,提取出病毒特征码,制作了专杀工具。随着时间的推移,他不断增加工具中的代码和病毒特征码,最终形成了一个相对成型的杀毒引擎。他为它取名为MSCAN,并免费分发给需要的人。消息传开后,一个罗马尼亚企业家找到了拉伊乌,邀请他加入他的GeCAD软件公司,并开始用RAV(Romanian Anti-Virus的缩写)为名销售他的程序。RAV很快成为公司的主打产品,并在一次又一次的测试中击败各路竞争对手,赢得了微软的关注。2003年,微软与GeCAD公司签订了RAV的采购合同,但此时,拉伊乌已经离开了公司,转投卡巴斯基。
当时,卡巴斯基实验室在美国还没什么名气,主导美国杀毒软件市场的是赛门铁克和迈克菲。作为一家俄罗斯公司,卡巴斯基在西方国家面临着不被信任的挑战。特别是公司创始人尤金•卡巴斯基(Eugene Kaspersky)曾在一个具有克格勃背景的研究机构受训,并在军事情报部门任职。但是,在东欧等地区,特别是在美国公司不被信任的中东地区,卡巴斯基逐渐积累起一定的声誉。
拉伊乌刚进入卡巴斯基时,干的是程序员的工作,之后于2004年进入公司新组建的[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")调查与逆向工程团队。2010年,这个团队已经在全球各大洲设立了子团队,而拉伊乌则成为了团队的负责人。毒区曝光后,多个子团队都加入了研究分析毒区的行动。
团队的技术工作由格斯特夫牵头。格斯特夫是个清瘦的小伙子,有一头浅棕色的短发,还有点轻微的驼背,让人很容易联想到,这肯定是他长期弯腰盯着电脑而造成的。当他和同事们仔细检视代码时,发现其中有很多罕见的现象。
[![](https://box.kancloud.cn/2015-12-08_5666b1b72ff3c.jpg)](http://www.aqniu.com/wp-content/uploads/2015/11/640.webp-135.jpg)
亚历山大·格斯特夫
一个特别有趣的部分,是攻击者用于“向染毒计算机发送盗取数据附加载荷”的功能组件。与毒区和震网所有其他部分代码不同的时,他用的编程语言不是C和C++,而是格斯特夫和拉伊乌从未见过的另一种语言。他们花了几周的时间查找资料、请教专家,却仍未找出答案。于是,他们发了一篇求助博客,并从回复内容的碎片信息中拼出了结论。原来,攻击者用的是C语言的一种变体,此外还对代码进行了特别的压缩处理,以减小体积。这种编程风格在10年前的商业软件中很常见,但对于现代的程序、尤其是恶意程序而言,可谓绝无仅有。显然,攻击者并非对前沿技术信手拈来的编程高手,而是谨慎保守的老派程序员。此外,拉伊乌推测,由于C++有时会在执行编译后,生成不可预测的代码,或出现不按既定方式执行的情况,因此攻击者为了确保对[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")进行更有效控制,最终选择了C语言,并在汇编过程中对代码进行了压缩,以增加代码密度、减轻传输负荷。
接下来,他们开始研究毒区的传播机制。在这方面,毒区与不受控制任意传播的震网相比,可谓大相径庭。看起来,毒区在传播过程中没有利用零日漏洞,也没有震网的自主传播功能。毒区的做法是,只有当某台染毒计算机收到攻击者从指挥控制服务器发来的指令时,才会向其他计算机传播病毒。而且,在与服务器之间通信方面,毒区采用的手段远比震网更加隐蔽。为了防止有人截获并读取通信数据,他们使用了一种强加密算法AES,并将[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")嵌入一个.JPEG图像文件中隐藏了起来。在感染规模方面,震网共感染了超过10万台计算机,而被发现感染毒区的计算机总共只有30多台。
虽然数量不多,但毒区的受害者分散在多个不同国家,目标包括军事机构和制造管道、阀门等工业设备生产商。所有目标的共同点是,他们生产的产品或提供的服务都具有重要的战略价值。如卡巴斯基所料,他们发现的很多目标都与伊朗有关。目标机构要么在伊朗设有办公室,要么与伊朗之间有贸易往来。目前为止,唯一一家与伊朗无关的受害者,就是首先发现毒区的匈牙利公司。
对多家受害机构日志文件的分析结果显示,攻击者对AutoCAD文件有独特的兴趣,特别是与伊朗工业设施中使用的控制系统有关的文件。AutoCAD是一款计算机辅助设计软件,可以用于绘制二维和三维建筑图纸、设计计算机面板和其他产品,还可以用于绘制计算机网络的拓扑结构图和厂房机器分布图。如果有人打算对工厂发动炸弹袭击,或用类似震网的数字武器实施攻击,这些文件定能派上用场。
攻击者在整个攻击过程中展现了很强的条理性。他们认真考虑了入侵目标的方式、编译用于攻击各目标的恶意文件的时机、以及指挥控制服务器的分布。他们在欧亚各地部署了多个服务器,以将每个服务器对应的染毒计算机数量控制在2-3台。这样做,既可以让他们同时跟踪多个不同目标,又可以确保万一外部人员闯入服务器时,也只能看到很有限的内容。实际上,这些服务器扮演的,是攻击者用于中转盗取数据的中间站,即“代理服务器”的角色。它们可以降低对外部人员全面暴露攻击行动的风险,并防止有人通过追溯被盗数据,查到攻击者的身份。比如,从匈牙利目标公司盗取的数据,首先会被发往一台位于印度的服务器,然后再通过菲律宾的服务器,中转至其他位置。而来自伊朗目标的数据,则会先发往越南的服务器,再转发至德国和其他位置。研究人员努力沿着这条路径追踪,但每次都会在追到3个代理服务器后走进死胡同。最后,他们判断,这是一场没有结果的战斗,于是放弃了跟踪。
不过,在这些服务器的宗主公司的帮助下,卡巴斯基拿到了包括越南境内用于控制伊朗方向目标的服务器在内,总共5台服务器的镜像文件。在赛门铁克发布毒区消息两天后的10月20日,卡巴斯基发现,攻击者实施了一次大规模战场清理行动,慌慌张张的擦除了服务器上的所有数据。但为什么他们花了两天才做出响应,原因不明。然而,正是这个时间差,使卡巴斯基有机会获得了这些日志文件,并以此为线索对毒区进行分析。这些日志显示,攻击者早在2009年11月就在德国建立了一个指挥控制服务器。这意味着,在匈牙利人发现毒区感染之前的两年前或更早,毒区的攻击活动就已经开始了。卡巴斯基研究员猜测,毒区可能比震网上线更早,而非更晚。他们相信,很快就能找到相关证据。(待续)
起初,谁也不知道毒区是怎样实现感染的。震网利用了一个.LNK零日漏洞,将U盘上的恶意文件植入目标计算机。但CrySyS实验室在巴图斯公司的染毒计算机上,没有发现病毒注入器,也没有发现零日漏洞。钱哥也意识到了这个问题。在赛门铁克发布毒区消息后,他请求本恰特再次对匈牙利目标公司的系统进行排查,看在8月11日毒区被发现前后,还有哪些可疑迹象。之后,钱哥得知,当时,NetLock公司曾收到一封附有Word附件的电邮。附件大小为700k,比公司平时所收邮件中的附件大得多。这引起了他们的高度重视。果然,当CrySyS实验室在测试机上打开这封邮件的附件后,毒区的恶意文件悄悄的跟了进来。
考虑到至今仍未发现实施感染的代码,CrySyS实验室怀疑其必定利用了零日漏洞。尔后,本恰特把这封带附件的邮件交给了钱哥。赛门铁克团队发现,它确实利用了Windows字体解析器(font-parsing engine)中的一个缓冲区溢出零日漏洞。字体解析器的功能是将某种字体在屏幕上显示出来。当Word文档中出现某种字体对应的代码时,解析器就会查阅对应文件,以确定字体的显示形态。但在毒区这里,当解析器要读取字体代码时,却会被攻击者利用缓冲区溢出漏洞将其劫持至他们的漏洞利用程序上。
一位研究员对这个漏洞利用程序的评价是“干得漂亮!”因为,一般情况下,利用缓冲区溢出漏洞的攻击者只能获得用户级访问权限,要想获得足以顺利加载[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")的系统级访问权限,必须要同时找到并利用第二个漏洞。然而,毒区中的漏洞利用程序一步到位,突破了防护体系,进入系统内核,完成了“安装并运行[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")”的目标。要知道,能在内核级利用的缓冲区溢出漏洞极其稀有,在利用这种漏洞的同时又不引发系统崩溃则更加困难。但毒区的设计者却做的非常完美。毒区中漏洞利用程序的复杂度,要比震网中的.LNK漏洞利用程序高出几个数量级。2010年7月震网代码刚一曝光,就有网络犯罪分子学会了.LNK漏洞利用程序的运用技巧;而要想用好毒区中的漏洞利用程序,恐怕至少得花上几个月。
或许是想要戏弄一下受害者,除了这个漏洞利用程序之外,攻击者还在代码中放置了一些“彩蛋”。他们将用于执行攻击的伪造字体命名为“德克斯特正体”,并专门为它标注了版权信息:“Copyright © 2003 文娱时间(Showtime)公司.版权所有. 德克斯特正体.”
显然,他们引用的是当年在文娱时间电视网上热播的电视剧《嗜血法医》(Dextor)。奇怪的是,这部剧的上映日期是2006年10月1日,版权日期却是2003年。谁也说不清,攻击者这样做,到底是有什么寓意,还仅仅是开玩笑而已。不过,对《嗜血法医》的引用似乎在暗示,毒区与震网之间有某种联系。这部剧的主角德克斯特·摩根(Dexter Morgan)既是一名法医专家,又是一名地下杀手。但是,他只杀十恶不赦的罪犯。这让德克斯特成了“有道德的杀手”的代名词。在他看来,他作恶的目的,是为了寻求更大的善。实际上,美国和以色列对伊朗发动网络攻击、袭击伊朗核科学家的行为,恰恰反映了与之相近的价值观——这是为了更大的善而必须使用的手段。
[![](https://box.kancloud.cn/2015-12-08_5666b1b747b75.jpg)](http://www.aqniu.com/wp-content/uploads/2015/11/640.webp-230.jpg)
字体名称和版权日期,只是给研究员们提供了一些谈资。真正值得关注的,是病毒注入器的编译日期——2008年2月21日。这个日期,为回答“震网已经存在了多久”这一问题提供了线索。在首个注入器发现不久之后,卡巴斯基就在苏丹的一台计算机上发现了第二个注入器,它的编译时间比第一个还要早。
苏丹与伊朗之间,有着密切的军事关系。在2004到2006年间,苏丹获得了伊朗提供的价值1200万美元的武器援助,同时,苏丹是伊朗核计划的坚定支持者。2006年,伊朗曾公开宣称,将与苏丹分享核领域的研究成果。此外,苏丹还是联合国制裁的对象。毒区在苏丹的目标是一家贸易服务公司,感染时间为2011年4月,比发生在匈牙利的感染早4个月。它利用了与匈牙利同样的德克斯特漏洞,也是通过钓鱼邮件的手段实施感染。这封钓鱼邮件发自韩国,发件人是一位名叫杰森(B.Jason)的销售经理。据估计,这台发送邮件的计算机也遭到了入侵。邮件内容为:“亲爱的先生,我对贵公司网站上的一些细节非常感兴趣,希望能和贵公司开展商务合作。附件中是我方的需求清单,请您详查。”附件中有一系列的调查问题,还有一个画有新芽吐绿形象的绿色地球。一旦受害者打开附件,德克斯特漏洞利用程序就会立即起效,并将其中的恶意文件释放到计算机上。
其中,用于释放毒区文件的注入器,编译时间为2007年8月。这进一步确认,毒区在被匈牙利人发现之前,确已存在多年。不过,这并不是毒区出现早于震网的孤证。研究人员还发现,毒区中的情报收集器文件也早在多年前就出现了。说来偶然,攻击者在代码中的一个错误,暴露了这一点。
当毒区的自毁机制在感染36天后被触发时,它将擦除染毒计算机上的所有痕迹。这样,受害者就再也无法知道自己曾遭受攻击了。但卡巴斯基研究团队发现,当毒区执行删除操作时,不小心落下了用于存储盗取数据的临时文件。就这样,卡巴斯基从伊朗目标的镜像文件中发现,其中一个临时文件的创建日期是2008年11月28日。
一直以来,卡巴斯基和赛门铁克总在怀疑,攻击者在使用震网攻击伊朗离心机之前,事先通过间谍活动获取了西门子PLC的配置数据等关键情报。之前他们怀疑伊朗方面有内奸,毒区出现后,他们转而相信,通过使用类似间谍工具获情的可能性更大。
从毒区攻击匈牙利数字证书认证机构的情况来看,攻击者之前使用的瑞昱和智微公司签名密钥和数字证书,很可能也是用毒区盗取的。
如果说,毒区早在2007年或更早就开始实施感染却一直未被发现,那么,为什么到了2011年,它突然被匈牙利人发现了?拉伊乌思考再三,得出了他的结论:毒区之所以被匈牙利人发现,其原因必定是攻击者傲慢自大的心态,让他们选择了一个错误的目标。多年来,毒区的攻击者屡屡得手、信心爆棚,认为根本没人能逮到他们。他们可能会想,去年震网的暴露完全是个意外,因为感染的计算机太多了。但是,毒区的目标均经过精心挑选、受到严格管控,暴露的可能性极小。但是,在匈牙利,他们着实选错了攻击对象。这家匈牙利CA对网络安全问题的敏感性,比之前遭攻击的贸易公司和设备制造商可高多了。所以,毒区攻击者在匈牙利遭遇滑铁卢,虽属意料之外,也在情理之中。
尽管震网和毒区使用了很多相同的代码和技术,拉伊乌团队仍然做出了“他们是两个团队基于共同平台分别开发”的判断。由于毒区和震网中都有很多以“~D”打头的文件,他们将这个开发平台命名为“~D”平台。
实际上,卡巴斯基还发现,除了震网和毒区之外,还有一系列[恶意代码](http://www.aqniu.com/infosec-wiki/827.html "恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。")也出自同一平台。他们发现,至少有6种驱动文件具有相同特征,都可以归入“~D”家族成员之列。其中,2个来自震网,1个来自毒区,另外3个“幽灵驱动”来自与震网和毒区之外的其他文件。这让人很难判断,它们究竟是用来配合震网或毒区的,还是另外用于其他攻击的。不过,这3个驱动所使用的算法和密钥,都与震网和毒区的驱动文件完全相同或高度近似,所以可以断定,它们定与“~D”团队有关。
其中,1号“幽灵驱动”是斯洛伐克反病毒公司ESET在2010年7月发现的,上面有智微公司的数字签名。尽管它不是在感染震网的计算机上被发现的,但由于它的曝光时间只比震网晚几天,所有人都猜测它与震网有关。这个驱动简直就是震网驱动和毒区驱动的混合体,从代码上看与震网驱动几无二致,从使用的函数和技术上看又像极了毒区驱动。不过,与震网驱动中使用的4重循环密码(four-round cipher)相比,它使用了更为复杂的7重循环密码。因此,拉伊乌和格斯特夫怀疑,它要么是震网的变种,要么是震网的“搭档”。
2号“幽灵驱动”是在某人发现并将其提交到VirusTotal后,而曝光的。它的编译日期是2008年1月20日。它也使用了7重循环密码,说明它和1号是用来实施同一场攻击的。据推测,它们可能来自震网的另一个版本,也可能是与其他攻击配合使用的“搭档”。
3号驱动也是被人提交到VirusTotal后曝光的。它来自一个中国IP,发现日期是2011年5月17日,比毒区在匈牙利被发现还早几个月。它使用了与震网驱动相同的4重循环密码和相同的加密密钥,编译日期和盗用的数字签名也与震网驱动一致,只是认证日期稍有不同——它的认证日期是2010年3月18日,而震网驱动的认证日期是2010年1月25日。3月18日距离震网2010年4月版本上线仅相隔数周,但是不知出于何种原因,攻击者却没在4月的版本中使用3号驱动。实际上,攻击方在震网2010年4月版本中沿用了2009年6月版本中的驱动。这表明,3号驱动或许另有它用。
在格斯特夫和拉伊乌心中,有几个问题不断闪现:这几个幽灵驱动到底是干什么用的?谁是它们的受害者?是否还有新的证据,能证明在2009年6月之前或2010年4月之后,还有震网的其他版本存在呢?
看来,震网的故事离剧终还远……(待续)