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

640.webp

莫楚禁不住再次对攻击者在代码中巧夺天工的设计叹服不已。周全考虑可能遇到各种问题、匪夷所思却天衣无缝的解决方案、以及在代码上线之前对无数种场景的360度无死角测试。莫楚觉得,令人印象深刻的,不仅是震网的代码本身,还有对整个攻击流程的精妙策划

第四章 解构震网(接上)

但如果震网过了这一关,就会激活同样伪装成驱动程序文件“第二匹马”。它有两个任务:第一个是感染插在计算机上的所有USB存储设备,但从登陆起算只持续21天;第二个、最重要的是,将震网病毒主体文件——那个巨大的DLL文件及其组件进行解密,并用之前莫楚已经验证过的那种复杂手段,先把大DLL解压成若干小DLL,再把它们载入内存。这时,病毒的代码只是在内存中驻留,每次计算机重启后,代码就会消失。所以,每次重启后,拆分与加载的工作就会重做一次。

一旦震网主体部分被载入内存,震网就会开始搜索新的目标,并把战果汇报给指挥控制服务器。如果计算机上没有安装西门子的Step 7和WinCC软件,那么震网就会在完成以上任务后,主动进入休眠状态。

好,现在赛门铁克的男神们已经清楚了震网传播和加载代码的方法,但却对它的最终目的一无所知。问题的答案,仍然隐藏在载荷部分浩若繁星的代码中。

这一次,跟莫楚在完成震网导弹部分代码解构时一样,他禁不住再次对攻击者在代码中巧夺天工的设计叹服不已。他能想到的,攻击者全都做到了:周全考虑可能遇到各种问题、匪夷所思却天衣无缝的解决方案、以及在代码上线之前对无数种场景的360度无死角测试。莫楚觉得,令人印象深刻的,不仅是震网的代码本身,还有对整个攻击流程的精妙策划。

除了加载文件和骗过杀毒软件的复杂手段之外,震网还使用了一个扩展检查清单,来判断计算机上的环境是否适合释放病毒载荷。它会仔细跟踪自身在计算机上占用的处理器资源情况,只有在确定震网所占用资源不会拖慢计算机速度时才会将其释放,以免被发现。另外,所有的应用程序都会生成临时文件,但由于这些临时文件早晚会被其他程序生成的临时文件覆盖,多数应用程序都不会主动将其删除。但震网的设计者不希望相关文件因长期在系统中保存而暴露行踪。

虽然攻击方在代码中额外增加了一些保护措施,但还是存在一些不可思议的设计漏洞。并非只有莫楚一个人这样认为。当赛门铁克方面在几周之后发布震网代码的研究成果时,业内人士们纷纷开始在网上吐槽震网的众多缺点。他们还说,震网的设计者根本不像最初的报道中描述的那般高大上,他们连“顶级”都算不上。还有人指出,震网在技术上虽有诸多亮点,但存在前后不一致的情况,而且设计者所犯下了很多低级错误,才让研究者能比较轻易地破解其真实意图。

也就是说,如果震网的设计者能够针对潜在破解者所使用的通用工具,采用更具迷惑性的反制手段,那么将对破解者带来更大的困难。这些手段包括,用更复杂的加密技术阻止目标计算机之外的任何人解锁载荷,不轻易让人了解震网的目标是安装西门子Step 7软件和PLC的计算机等。震网在与指挥控制服务器的通信中使用的是较弱的加密算法和标准通信协议,如果它在这方面做些文章,研究者也不会如此轻易建立“槽洞”并追踪到它的流量信息了。

密码专家内特•劳森(Nate Lawson)在博客中用充满鄙夷的口吻写道,“震网的设计者应该为隐藏载荷所用的业余手段感到汗颜”,还说他们用了一些其他黑客早都抛弃的过时手法。“我真心希望这不是美国人写的”,他说,“因为我希望高端网络武器开发者至少应该知道保加利亚少年(代指业余选手)在90年代初期就曾经做过的事情。”艺术水准的策略和漏洞百出的技术结合在一起,让震网看上去就像一个稀松平常的“科学怪人之拼凑品”,而不像是顶级情报机构机密的尖端研究项目。

但是,对于震网中的这些矛盾,莫楚有着自己的看法。他认为,设计者故意在遭感染计算机与服务器的通信中使用了弱加密和标准协议,目的是让这些通信看起来和正常通信没什么两样,以免引起注意。而且,由于服务器涉及的通信流量很小,不作特别加密处理也是可以理解的。在保护载荷安全性方面,设计者可能没有办法使用更复杂的技术。比如,设计者打算用目标计算机的精确配置信息来生成密钥,以防其他计算机实施解密。但目标计算机在配置上可能无法做到100%相同,从而难以使用同一密钥加密载荷。这会造成一定的不可控。而且,设计者考虑到目标计算机的配置可能发生变化,这样一来密钥就会失效,载荷就无法被解密、激活了。

此外,震网中存在问题的原因也可能是“赶工期”。设计者可能面临马上将病毒投入使用的压力,所以慌慌张张的把病毒赶制出来,其中难免会有一些粗心之举。

对“拼凑”的另一种解释是,震网的代码很可能是由水平不同的多个团队共同编写的。震网代码的模块化特征意味着,代码的各个部分可能是由多个团队同时或在不同时段内合作完成的。莫楚猜测,至少有3个团队参与了震网代码的编写——一个是由顶尖高手组成的、编写针对西门子软件和PLC的载荷部分代码的核心团队,一个是设计病毒传播、代码加载与载荷解锁机制的次顶级团队,最后一个负责运营指挥控制服务器并设计通信加密和协议选取机制的糙哥团队。照此设想,各团队的职责分工明确而独立,彼此之间没有影响。

纵然各团队在技术水平和经验上参差不齐,但至少在一件事上是步调一致的。他们没有主动在代码中留下可以追踪自己身份的任何线索。

在对于黑客攻击的取证调查工作中,始终存在归因的问题。计算机攻击可以从世界上任何角落发起,可以通过无数台被黑计算机或代理服务器掩盖其发起攻击的初始路径。除非攻击者在掩盖踪迹方面非常大意,调查者很难单凭数字证据对锁定攻击者的真实位置和身份。

不过,攻击者偶尔会有意无意的在代码中留下一些线索。这些线索会告诉人们,他们是谁、他们来自什么地方,等等。在看上去毫无关联的病毒和木马中,可能存在同样的离奇痕迹。这些痕迹,可以帮助取证调查者把这些病毒关联起来,甚至找出它们的共同作者,就像根据在连环案件中的犯罪手法来找出罪犯一样。

和其他病毒相比,震网几乎没有这方面的信息。但钱哥和莫楚还是挖到两处。

一天,钱哥正在详细筛查震网感染计算机部分代码的注释,忽然发现了一些有趣的东西:一个阻止震网在某些特定计算机安装的“感染标记”。每当震网“登陆”一台新的计算机,都会在解密、解压病毒文件之前检查Windows系统的注册表。如果其中有一个含有“0x19790509”字母数字组合的“神秘字符串”,震网就会立即放弃感染动作,退出这台计算机。(待续)

译者:李云凡

 

关键词:

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