零日倒计时:(连载 . 第二章)神秘的500KB文件

零日倒计时:(连载.第二章)神秘的500KB文件

零日倒计时

六年来,利亚姆·欧穆丘一直忙于分析各种病毒和蠕虫,但从未见过像眼前这样的代码。它使用的技术远远超越了自己见过的其他所有恶意软件。他坐在赛门铁克南加州办公室的电脑前,仔细查看着同事连夜从欧洲发来的“震网”资料,感到出乎意料。

这一天是7月16日星期五,也就是“震网”新闻在技术界爆出后的第一天。欧穆丘在检查“震网”代码时以为这只是一次普通的例行检查。这位33岁的爱尔兰人是赛门铁克卡尔弗城安全响应小组的负责人。他的职责是检查新出现的恶意软件,判断是否需要进一步深入调查。

位于爱尔兰都柏林分部的分析师已经在当地时间下午较晚时分拿到了“震网”文件,他们只有一两个小时处理这些代码,之后就要把文件移交给位于加州的刚从睡梦中醒来的欧穆丘团队。赛门铁克的威胁分析团队遍布世界各大洲,因此无论何时爆发重大威胁,总会有尚未休息的分析师迅速跟进。就这样,随着太阳起落,一个时区的分析师会在一天工作结束的时候将手头的工作资料交给下一时区的同事,这种模式如同两人一组的职业摔跤选手。

并非所有恶意软件都会遭遇这种不分昼夜的调查分析。赛门铁克和其他防病毒公司每月发现的恶意软件不下100万种,多数都是一些著名攻击工具的仿制品,黑客们只是对其稍作修改,试图躲过病毒检测装置的检测。常规威胁都要经过检测,符合已知恶意软件特征的代码或行为会被逐一筛查。检测算法认为有问题的代*会码**被踢出检测队列,由研究人员进行人工筛查。利用或者疑似利用零日漏洞的恶意软件一般都要经过人工筛查,这也是为什么“震网”文件会出现在欧穆丘办公桌上。

零日倒计时:(连载.第二章)神秘的500KB文件

欧穆丘本以为这次对“震网”代码的检查只是例行检查,只需要确认这些恶意代码是否存在乌拉森和库彼瑞夫发现的零日漏洞。所以,他将代码交给了一位初级分析师,为他提供一个分析零日漏洞恶意代码的锻炼机会,自己只是作为辅助,防止信息遗漏。但是,一打开文件欧穆丘就发现了古怪。

与常见的10~15千字节大小的恶意代码不同,“震网”的主文件非常大,居然有500千字节。即便是前几年感染了600多万台计算机的大型蠕虫病毒“飞客”,也不过35千字节。超过这个大小的恶意软件通常带有比较占空间的图片文件,例如:在被病毒感染的计算机浏览器上弹出假冒的网上银行页面。这些页面主要用于诱骗受害者提供自己的银行验证信息。但是,“震网”文档中既没有图片,也没有什么无关文件。之后,随着“震网”文档的拆解,欧穆丘意识到这些代码远比自己和其他人之前想象得复杂。

欧穆丘见识过许多恶意软件,看到某个病毒或者木马时,便马上知道它的用途,例如:这个是键盘记录器,用来记录受害者在键盘上操作的内容;那个是金融木马,专门*取盗**网上银行账户的登录验证信息。此外,他可以轻易分辨出哪些代码是粗制滥造,哪些是精心设计的。“震网”显然属于后者。“震网”病毒由大量悉心编排的数据和命令组成,这些数据和命令包含着不计其数的功能。具体有哪些功能仍是个谜,但欧穆丘立刻产生了兴趣。

欧穆丘第一次遭遇恶意软件是在1996年,当时他还在都柏林大学计算机系读书。他的一个同学用一种自制病毒使学校计算机实验室的计算机全部感染。3月15日,所有终端都被病毒控制,任何人都无法登录。用户必须回答完屏幕上出现的10个问题之后才能登录。大多数人感到愤怒的时候,欧穆丘却一心想要复制一份病毒文件回去拆解。喜欢拆解东西是他的天性。

欧穆丘在基尔代尔县阿赛镇的郊外长大。其他孩子喜欢玩具车,而他更愿意把玩具车拆开,看看它们是如何工作的。欧穆丘并非一开始就立志要和病毒作斗争。刚上大学时,为了拿到理科学位,他认真学习物理和化学,但后来选修了计算机课程,从此便深陷其中。很快,他放弃了化学实验室,投身到计算机实验室。黑客行为在大学越来越严重,但欧穆丘从未想过将计算机安全作为自己今后的职业,直到有一次有黑客入侵了学校计算机俱乐部的服务器,一群学生受命将黑客赶出系统。

欧穆丘看到黑客一次次战胜防御者,重新侵占服务器。这场“猫鼠大战”让他学到了很多东西。攻破数字壁垒的技巧很快派上了用场。大学毕业后,欧穆丘和一些朋友去了美国,并且很快在圣迭戈一家新成立的公司找到了测试互联网信息亭的工作。这家公司想看看他们能否绕过互联网信息亭的付费墙,非法接入互联网。他们原本想雇用一些普通计算机用户,没想到却误打误撞招来了一群有经验的黑客。在一间用来组装系统的仓库中设置了十几台互联网信息亭,欧穆丘和他的伙伴们需要将它们拿下。按照计划,他们只有两周的时间测试系统,之后这些互联网信息亭就要被发送给客户。但是,欧穆丘和伙伴们总能找出新办法来突破付费墙。两个月过去了,他们还在查找漏洞,公司只好取消测试,将这批信息亭发货。

接下来的几年,欧穆丘在世界各地游玩、滑雪,虽然隐约有进入计算机安全界的想法,却没有具体计划。直到2002年,他在都柏林的一家垃圾邮件过滤公司—布莱特梅尔谋到一份工作。他的目的只是为了挣些钱,去更多地方旅游和滑雪。但是,当2004年赛门铁克将这家公司收购时,他觉得进军安全界的时机到了。赛门铁克为布莱特梅尔的员工们安排了一次参观都柏林分部的活动。欧穆丘耐着性子参观了其他部门,只想去看向往已久的病毒研究部门。但是,当他最终见到部门主管美国人艾瑞克·钱的时候,希望却破灭了。欧穆丘以为赛门铁克在全球拥有数百名恶意代码分析师,自己应该能够轻松成为其中的一员。但是,钱告诉他自己的团队只有六个人,他们已经工作了很多年。钱说:“没有人想要离开”,并且“每个人都很热爱自己的工作”。

不过,这一切并没有吓倒欧穆丘。通过自学,他掌握了分析师用来破解恶意代码和编写特征代码的各种工具。数月后,间谍软件和广告软件突然爆发,赛门铁克需要扩充人马,这时的欧穆丘已经做好了准备。接下来的四年,欧穆丘在赛门铁克都柏林分部工作,直到2008年被调往卡尔弗城。

都柏林分部的研究团队至今仍是赛门铁克最大的研究团队。多年来,欧穆丘和赛门铁克的研究团队处理了许多引人注目的复杂威胁。但没有一个像“震网”这样令人着迷,充满挑战,而且意义重大。

在检查“震网”主文件时,欧穆丘首先遇到的是一些用来保护各种部件和内核的加密层。幸运的是,第一层只是加壳工具,很容易就被破解了。

零日倒计时:(连载.第二章)神秘的500KB文件

加壳工具作为数字工具,能够使代码压缩、变形,让防病毒引擎更难发现其中的特征代码,取证检查人员更难迅速判定恶意代码在做什么。恶意软件每使用同一个加壳工具进行加壳,外观上都会有些许变化;因此,同样的代码由同一加壳工具进行1000次加壳就会产生1000个不同版本的恶意代码,但是壳内的内容却都完全相同。遇到利用已知加壳工具的恶意代码,防病毒引擎会报警并去壳,以便寻找隐藏其中的特征代码。为了躲避这种检测,狡猾的攻击者会设计一些不太容易被识别或被去除的定制加壳工具。但是,“震网”的开发者并没有费心这样做,相反,他们使用了市场上现成的加壳工具—可执行文件终极加壳工具(UPX),这种加壳工具很容易被发现并去除。考虑到“震网”在其他方面表现出的复杂和精湛程度,例如利用零日漏洞和*取盗**数字证书,“震网”开发者选择这样的加壳工具似乎有些奇怪。因此,欧穆丘推断使用这个加壳工具的主要目的应该是压缩文件和减少痕迹。文件经过破壳和解压之后,其主模块的大小会增加到1.18兆字节。

“震网”被去壳之后,欧穆丘很快就看到了弗兰克·伯德文发现的那些与西门子有关的字符串。更重要的是,他还发现了一个加密的代码块,这个代码块后来证明是“震网”的母码(mother code)—一个巨大的动态链接库(DLL)文件。这个DLL文件当中包含着30多个其他DLL文件和一些组件,由多个加密层包裹着,像俄罗斯套娃一样。他还发现了一个巨大的配置文件,其中有一份菜单,里面有400多种设置,攻击者可通过调整设置来做各种改变,包括修改“震网”连接的命令控制服务网址(URL),以及在漏洞失效前,通过U盘感染“震网”的计算机数量。1 奇怪的是,欧穆丘还在文件中发现了停止感染的日期—2012年6月24日。每入侵一台新的计算机,“震网”都要检查一下这台计算机的日历,看看日期是否已经过了6月24日。如果已经超过这个日期,“震网”就会退出并离开,不会感染这台机器。已经安装在其他计算机上的载荷则会继续工作,但是,不会再有新的计算机被感染。从“震网”在伊朗感染第一台计算机到感染停止,攻击者设定的感染期是三年,也许攻击者预计能够在这个日期到来之前实现目标。

但是,最让欧穆丘感到意外的是“震网”在被感染机器上隐藏自身文件,逼迫机器利用常规功能开展恶意活动的复杂做法。欧穆丘花了近一天的时间才搞清楚所有细节,结果令他震惊。正常情况下,打开文件、读取文件、存盘等常规任务的执行代码都存放在Windows操作系统的DLL当中。一旦操作系统或者其他应用程序需要执行这些任务,就会像读者从图书馆中借阅书籍一样,从操作系统的DLL当中调取相关代码,然后在机器的内存中运行代码。传统黑客也会将恶意活动的代码存放在Windows的DLL当中,但是防病毒扫描器能够发现本不应该出现在这里的代码,所以,“震网”将自己的恶意代码藏到了机器的内存中,在这里恶意代码不太容易被防病毒软件察觉。这一点不足为奇,因为很多狡猾的黑客也会将恶意代码存放在机器内存中。令人惊愕的是“震网”隐藏在内存中的方式。

通常情况下,恶意代码潜伏在内存中,一旦系统从Windows库(动态链接库)中调取合法的函数代码时,恶意程序就会将自己的代码注入合法代码运行的进程当中。优秀的防病毒引擎能够发现注入到运行进程的流氓代码,但是,“震网”在这方面却技高一筹。

“震网”不是在一旁伺机拦截运行的合法代码,而是将自己的恶意代码放在自己的库中,这些库以虚拟文件的形式存储在内存当中,使用的是特殊名称。此外,“震网”还会“钓取”或者篡改部分Windows应用程序接口(API)—操作系统与运行其上的各种程序之间的接口,因此每当恶意软件从内存中调取那些名称古怪的库时,系统都会认为这些库是位于合法地点的合法文件,允许“震网”继续执行恶意行动。即使防病毒引擎对内存中的文件产生了怀疑,并试图进行检查,“震网”也早有准备。“震网”控制了一些负责显示文件属性的Windows API,因此它只需要欺骗病毒扫描器,让扫描器认为那些可疑文件都是空的,就可以达到规避检查的目的。实际上也就是告诉扫描器:“这里什么也没有,去别的地方查吧。”

然而,“震网”的厉害之处绝非仅此而已。一般的恶意软件会以最直接的方式执行代码,也就是调取并启动代码。“震网”则像一台复杂精巧的机器,它不会直接调取、执行自己的代码,而是将代码植入已经在机器进程中运行的另一个代码块中,然后将进程中正在运行的代码塞入其他运行的进程中。这样恶意代码就更加不容易被发现。

攻击者为研制“震网”投入的巨大工作量让欧穆丘感到震惊。即使是这些年他遇到的最复杂的威胁也无法与之相提并论。普通恶意软件开发者只需要达到保证攻击奏效,能够避开检测工具的最低标准即可。花费大量时间只为了制作出能够迅速抢夺密码或其他数据的代码并不会有额外收益。即便是高级间谍工具也不会费心使用“震网”使用的这些招数。代码上布满了弹出的“小红旗”,欧穆丘刚完成了5千字节内容的检查,而这个病毒的体积是1兆字节。

零日倒计时:(连载.第二章)神秘的500KB文件

显然,“震网”并非普通攻击,需要更深入的检查。但是,这些恶意代码体积庞大,并且非常复杂,需要一个专门的团队来做逆向工程和译码工作。此时,欧穆丘脑海里开始盘算一个问题:是否有必要这样做?即使赛门铁克现在就放弃这些代码,转而处理别的工作,也是情理之中的事。毕竟,防病毒公司的首要任务是在病毒感染机器之前阻止感染,或者从被感染的系统中删除恶意软件。至于恶意代码感染计算机之后要做什么,对防病毒公司来说则是次要的。

尽管防病毒公司检测到恶意软件后就完成了其首要工作,并且赛门铁克已经在客户的机器上检测到并删除了“震网”,但客户仍然想知道病毒到底对他们的系统做了什么。客户想知道“震网”有没有偷走自己的验证信息或重要文件,有没有篡改或删除关键数据。因此,欧穆丘认为赛门铁克有责任找出这些问题的答案。

然而,这并非促使欧穆丘继续探究“震网”的唯一原因。事实上,他被“震网”深深吸引是因为他觉得这是一个令人兴奋的谜团—这种病毒非常复杂,不可能只是一个间谍工具;攻击过于精湛,不可能出自网络犯罪分子之手。他觉得自己必须把谜团解开。

在第一天快要结束的时候,欧穆丘在计算机中写了一份关于“震网”的简要说明,介绍了目前已经掌握的情况,之后便将这份说明发给了赛门铁克东京分部,还在邮件中对自己没有更多时间处理这些代码表示抱歉。赛门铁克东京分部的工作人员周末加班绘制出了“震网”的构成图,并且对这个恶意代码进行了高级分析,以便其他同事能够了解到他们对付的到底是何方神圣。而在加州,与英国女友在玛瑞娜·戴尔瑞临海而居的欧穆丘努力想把这些恶意代码抛出脑外,却怎么也做不到。“震网”劫持系统采用的复杂方式不断涌现在他的脑海中。他开始质疑自己的判断是否正确。

为了让自己安心,他返回办公室,再次查看那些代码,直到确认自己的判断没有错。周一早晨,欧穆丘迫不及待地赶到办公室去见他的同事艾瑞克·钱,向他汇报自己的发现。和欧穆丘一样,钱也是从赛门铁克都柏林分部调到卡尔弗城分部的,目前任公司安全响应部门的技术主管。钱认为应该给尼古拉斯·法利埃打电话,他是赛门铁克巴黎分部一位年轻的高级软件工程师和分析师,也是拆解复杂代码的高手。他们三个为攻克“震网”制定了一份工作计划。

“震网”病毒体积庞大,构成成分繁多,其命令控制服务器显然是比较理想的切入点。因此,当法利埃忙着熟悉欧穆丘已经掌握的情况时,钱和欧穆丘把注意力放在了“震网”的命令控制服务器上。每感染一个系统,“震网”都会呼叫两个伪装成球迷网站中的一个:www.mypremierfutbol.com和www.todaysfutbol.com。这两个互联网域名都是用假名和假信用卡注册的。两个网站分别指向了位于丹麦和马来西亚的服务器,也就是攻击使用的命令控制服务器。每当“震网”感染一台新的计算机时就会和这些服务器联系,通报自己的战果,发回新感染机器的相关情报。这些通信都是经过加密的,以防他人偶然读到情报内容。但令人意外的是攻击者使用的加密手段很弱,非常容易破解。钱和欧穆丘破解了加密的通信内容,发现“震网”向攻击者汇报的是被攻击的计算机名称和域名、内部IP地址、运行的Windows系统版本号以及是否安装了“震网”关注的西门子软件。

这些数据能够帮助攻击者判断“震网”是否已经逼近目标。这一点对攻击者来说很重要,因为他们的攻击基本上是盲目的。像“震网”这样的自动传播的病毒一旦被释放,便会产生自己的生命轨迹,因此攻击者实际上无法控制这些恶意代码的行走路径。这些反馈给服务器的数据能够帮助攻击者跟踪恶意代码。

但是,在“震网”向攻击者报告的所有信息当中,最重要的是有关西门子的数据。研究人员很快就发现,一旦“震网”病毒意识到入侵的系统并未安装西门子软件时,便会自行停止。“震网”会寻找其他可以感染的机器,只是不会向任何未安装西门子软件的机器释放其载荷。没有安装西门子软件的系统都会使“震网”自行终结。

零日倒计时:(连载.第二章)神秘的500KB文件

欧穆丘联系了两个命令控制服务器所用域名的DNS服务供应商,要求他们阻断通往攻击者的流量,将流量导向一个由赛门铁克控制的落水洞—一台专门用来截获恶意流量的计算机。DNS服务供应商就像互联网上的交警,负责保证电子邮件和浏览器能够到达正确的目的地。有了他们,任何时候我们在浏览器上输入网址www.nytimes.com或者点击某个网站的链接地址,都能够到达正确的IP地址。1 将“震网”与攻击者之间的通信流量引入落水洞之后,赛门铁克的研究人员终于可以收集到“震网”向攻击者发回的实时数据了。7月20日周二的早上,大量通信流量涌入落水洞。每出现一台呼叫落水洞的被感染机器,欧穆丘和钱都会将其汇报的域名和国家在地图中标示出来,总结“震网”收集数据的共同点,包括装有西门子软件的被感染机器数量。一周结束的时候,至少有3.8万台来自十几个国家的被感染机器与落水洞进行过联系。每天新增的被感染机器有9000台,感染数字还在飞快增长。最终,他们跟踪到的被感染机器总共有10万台以上,分布在100多个国家。2 尽管防病毒公司为了阻止病毒扩散已经公布了“震网”的特征代码,但病毒仍在扩散,这说明很多被感染的机器并没有安装最新版本的防病毒软件。在被呼入落水洞的被感染机器中偶尔能够见到防病毒公司的设备—表明赛门铁克的一些竞争对手仍然在检测“震网”。

随着欧穆丘和钱在地图上标绘的感染地点不断增多,一种不寻常的分布模式开始显现。在他们最初跟踪的3.8万台机器当中,至少有2.2万台位于伊朗,其次是印尼,有6700台,之后是印度,有3700台,美国有不到400台,还有一些国家有少数机器被感染。所有这些被感染的机器当中,只有很小一部分安装了西门子软件,而这些机器多数也分布在伊朗—伊朗有217台,美国仅有16台 。

这次伊朗出现大规模病毒感染显然不符合以往恶意代码在全球爆发的特征。伊朗从来都不是病毒攻击和感染的焦点。即使是从中东或中亚地区开始传播的病毒,伊朗的感染数量也不多。这次攻击的目标似乎是“伊斯兰共和国”。然而,如果攻击者的主要目标是伊朗安装了西门子软件的机器,那么“震网”的传播显然超越了目标范围。为何“震网”在印度和印

尼的传播比美国和欧洲更广泛?印度、印尼和美国这三个国家有什么共同点?考虑到攻击者制作恶意代码投入的大量时间和金钱,研究人员认为这次攻击并非像伯德文猜测的那样只是试图窃取制药配方或者汽车厂商的制造机密。攻击者的目标应该是获取重要系统的情报信息,也许此番行为具有重要的地缘战略政治意义。“震网”寻找的西门子软件不仅用于工厂,也用在一些重要基础设施系统中。钱用谷歌简单搜索了一下伊朗和印度之间是否存在某些联系,结果发现近期一条连接这两个国家的天然气管道正在修建。这条所谓的“和平管道”长1700英里,由伊朗南部的南帕斯气田经巴基斯坦进入印度。这个项目遭到了美国的强烈反对。由于地缘政治压力和资金问题,这个项目多年来几经起伏,最后印度迫于美国的压力于2009年从项目中撤出。但是,2010年5月份,也就是发现“震网”病毒的两个月前,印度重新加入该项目。同月,伊朗开始设计并建设在伊朗境内的最后一段输气管道。

有关伊朗的其他重要新闻就是迅速发展的伊朗核计划。伊朗准备在南部的布什尔建一个核反应堆,这个计划是导致伊朗与以色列和西方国家多年来关系紧张的元凶。但是,更具争议的是伊朗在纳坦兹修建了一个铀浓缩厂,为布什尔核反应堆供应核燃料。伊朗已经因为纳坦兹铀浓缩厂受到了联合国的制裁,并且有可能因此遭到空中打击。

一幅令人不安的地缘政治图开始形成。“震网”使用如此尖端的恶意代码、被*取盗**的证书,以及伊朗作为此次病毒爆发的中心,这些证据表明“震网”可能是隐秘的政府间谍任务产物—尽管这个产物已经失控。很显然,此次攻击的目标就在伊朗,发动攻击的嫌疑人范围很小—可能是以色列、中国、俄罗斯或美国。

钱停下手头的工作,开始思考事件背后的深意。如果“震网”确实是政府开展间谍活动的工具,他们使用落水洞欺骗“震网”病毒的做法就太冒失了;如果“震网”的背后主谋是美国政府,情况则更糟—他们截获了攻击者本应该从伊朗被感染机器上接收到的数据。他们可能卷入了一场国际事件,并且还有可能破坏了一次秘密行动。

但是,钱此刻不能想这些问题。赛门铁克的职责不是保护政府的秘密行动,不管行动背后是哪个国家,保护客户的机器才是他们的职责所在。无论恶意代码是谁投放的,也不管他针对的目标是什么,只要客户受到了影响,赛门铁克就必须阻止代码的行动。

虽然“震网”的主要目标是伊朗的机器,而赛门铁克在伊朗并没有客户,但“震网”在其他国家也感染了大量计算机,并且病毒尚未得到控制,传播仍在继续。此外,研究人员也还没有搞清楚“震网”的恶意载荷到底是用来做什么的,也不知道“震网”是否会感染目标以外的机器。

另外,赛门铁克的研究人员也不能排除伊朗并非攻击目标,而是攻击源的可能。“震网”有可能是伊朗为了攻击美国的机器而制作的,但在试验过程中失去了控制。这样就能解释为何伊朗会有大量被感染的机器。如果“震网”已经传播到了美国的重要系统,如发电厂、水库或铁路的控制系统,会怎么样呢?

钱和欧穆丘认为他们别无选择,唯有继续调查。

“震网”背后的政治意味不容深究,只能先放一放了。

=========================================================分割线

零日倒计时:(连载 . 第一章)警兆初现

http://www.toutiao.com/i6397272047499608577/

零日倒计时:(连载 . 风波起)离奇的伊朗离心机事件

http://www.toutiao.com/i6397265299808190978/

零日倒计时:(连载.第二章)神秘的500KB文件