2009年的短时间内,震网病毒就感染了伊朗国内外的10多万台计算机。国际原子能机构(IAEA)的监测表明,伊朗位于纳坦兹的铀浓缩工厂出现了大面积的离心机损坏,产量直线下降。震网病毒是怎么对工厂进行破坏的?又是怎样被外界发现的?我们接着说。
伪装和破坏:你从未见过如此精巧的病毒
前面说过,震网病毒的目标是西门子的SIMATIC Step 7和SIMATIC WINCC两个软件。Step 7是用来为其S7系列PLC编写、编译指令和代码用的工具软件。而且必须配合Simatic WinCC软件使用。Simatic WinCC是一种可视化工具,PLC会向其发送自身运行及数据的报告。工程师可以通过Simatic WinCC来监视其所控制的PLC运行状况。
在震网病毒打包的大量dll文件中,具有和Step 7软件中同名dll文件的全部功能,并增加了一些读取和写入的指令。当系统对目标PLC执行这种操作的时候,就对其进行劫持。这意味着震网病毒成了“史上第一个”针对工业控制系统的后门。震网病毒将原本的s7otbxdx.dll文件改名为s7otbxsx.dll,然后把假冒的s7otbxdx.dll文件放进去。这样,当系统调用这个文件执行任务的时候,病毒文件就生效了。
震网病毒震网病毒针对S7-315型PLC的代码有15段。在攻击之前,会确认PLC系统所控制的是芬兰产的某型变频器或者它的伊朗山寨版。这种变频器的工作频率在807hz至1210hz之间,属于美国核管委限制出口的产品。震网病毒要找的目标就是一个安装有186个这种变频器的工厂。
一台S7-315控制6X31共计186个变频器的控制机构
每当操纵员向PLC发送指令时,震网病毒都会把自己的恶意指令跟着一起发送出去。震网病毒并不会替换命令代码,而是在正常的代码前面增加一段。为确保恶意指令的执行,病毒还PLC上嵌入代码废掉了PLC的自动报警系统,防止安全系统发现离心机转速异常时将其离心机关机停车。同时病毒为防被发现,会在工程师检查PLC代码时反馈给他们“清洁版”的代码。如果工程师重新发送指令,病毒就会重新对指令代码进行感染。
为了进行伪装,震网病毒会在PLC上潜伏并记录下正常的运行数据。当恶意代码开始运行之后,就将之前记录的正常数据发送给负责监控的Simatic WinCC。所以当值班工程师检查运行情况的时候,他们看到的是“运行正常”。于是,破坏行动就这样开始了。
在13天的潜伏后,震网病毒通过变频器把离心机的旋转频率提升至1410赫兹,并持续15分钟;然后降低至正常范围内的1064赫兹,持续26天。在这26天当中,震网会将所需信息全部收集完毕。之后它会让频率在2赫兹的水平上持续50分钟,然后再恢复到1064赫兹。再过26天,攻击会再重复一遍。
而针对S7-417型PLC的攻击代码很奇怪,共有40段,他的目标系统是一个由每组164台,共6组合计984台离心机组成的运行网络,并破坏其中的110台离心机。纳坦兹的每台离心机上有3个控制气体出入的阀门,还有其他的联机机组的辅助阀门。如果按照震网病毒的控制模式来开关阀门,这些离心机也将损坏。
然而这段攻击代码上有一个故意留下的错误导致其无法执行。或许其他未知版本的震网病毒会通过升级来将攻击动作重新激活。
这样一来,伊朗人将陷入莫名其妙的工厂事故中去,当他们检查设备的时候又只能发现他们运转正常。 那么,隐匿如此之深的震网病毒是如何被发现的呢?
国际马拉松:病毒的发现和破解
根据国际原子能机构(IAEA)的核查报告,2009年11月,纳坦兹大概有8700台离心机,根据正常的10%损坏率,一年大约只需要替换800台。但IAEA的官员发现,在2009年12月到2010年1月短短两个月内,离心机的替换率高得不正常,大约有2000台离心机被替换。而铀浓缩的产量也同时骤减。某车间的18个机组中甚至有11个出现了故障。
震网病毒的传播和破坏
2010年6月,白俄罗斯的一家小杀毒软件公司Ada的伊朗客户出现了电脑反复重启的毛病,因此他们对客户电脑进行了扫描,并发现了可疑的驱动程序文件(盗用了台湾瑞昱公司的数字签名)。这个驱动正是用于隐藏那些在u盘中的lnk文件的。
这个病毒在中东大量发现并快速传播,于是他们将这个发现公布在国际安全论坛上。微软开始针对这两个漏洞制作补丁。
7月17日,捷克的ESET安全公司则发现了另个一带合法数字签名(台湾智微)的恶意驱动,它和震网病毒所用的非常相似。这让人们怀疑是制作者对病毒进行了升级,他们要抢在病毒被破解前不惜代价进行扩散并生效。
根据病毒文件内的感染标记,震网病毒从2009年6月就出现了,病毒的一个编程错误使其扩散到了 Windows 95和98等不支持的操作系统上,导致电脑频繁蓝屏死机,从而引起了怀疑被Ada公司揪了出来。
赛门铁克公司
著名杀软公司赛门铁克的病毒分析师开始接力对震网病毒进行分析。他们破解了震网病毒在计算机上隐匿自己的复杂方法,并为其精巧的设计感到震惊。在震网病毒的代码中,他们发现了SIMATIC Step 7和SIMATIC WINCC软件的说明文字。这让他们大致明白震网病毒并不是常见的电脑病毒,而是攻击生产设施用的特种病毒。
震网病毒在传播的过程中,会记录下它感染的每一台计算机的ip地址、域名和感染事件,并将其发送给特定的服务器。赛门铁克拦截了这些日志的流向,将它们导向自己的“槽洞”并加以分析。他们发现病毒的主要感染对象都在伊朗境内,多达2万台,其他国家最多也就几百台感染。而其传播的源头则是伊朗的5家公司。其中一家Kala公司正是为铀浓缩项目打幌子的卡拉扬电力公司。
8月17日,赛门铁克公开了他们的研究结果:震网并不是什么间谍工具,而是专门用来实施物理破坏的数字武器。但是他们很谨慎,没有发布进一步的声明,没说震网病毒到底对PLC做了些什么。
消息发布5天之后,并没有在媒体上引起任何波澜。然而震网病毒发往槽流的流量突然消失。看来,一定是伊朗内部有人看到了他们发布的消息。为了防止攻击者或其他人继续通过远程方式感染计算机并造成损害,伊朗方面终于下令,切断了国内所有染毒计算机与指挥控制服务器之间的连接。
电脑美国国土安全部可不光干那些监视的活儿
然而,与此高度相关的西门子公司、德国国家计算机应急响应团队和美国国土安全部的工业控制系统网络应急响应团队(ICS-CERT)保持了沉默。
这让民间研究者非常愤怒,德国一个研究工业控制系统安全的3人小公司觉得赛门铁克专注于PC病毒,对于PLC并不熟悉所以没有得出进一步的结果。而他们的大客户正好是西门子公司,于是他们主动开始继续研究震网病毒。他们确定了震网病毒的攻击目标:西门子生产的两个型号的PLC。因为病毒的恶意配置清单非常独特,所以只会感染与其配置相同的PLC,也就是某个特定使用相同配置的生产工厂。而他们从自己的消息渠道了解到布什尔核电厂所采用的PLC型号正是S7-417。他们将这些发现公开给多家顶级媒体,然而并没有人回应他们。
赛门铁克的病毒专家被震网病毒的“载荷”难住了。因为PLC的使用的编程语言和计算机上的C语言完全不同,是一种使用STL语言编码编译的PL7汇编语言,然后再汇编成PLC可以执行的机器语言。经过费事的反编译,他们发现震网病毒注入PLC几千字节的代码瞬间膨胀为针对S7-315的4000行指令和针对S7-417的13000行指令。太复杂了!
赛门铁克在2010年11月12日公布了震网病毒针对S7-315型PLC的攻击方式。指出其目标仅限于特定型号的变频器,攻击范围非常有限。4天后,伊朗全面暂停了铀浓缩活动但并没有说明原因。当然,这其中的因果大家都看得非常清楚了。而此后的几天,伊朗的两名核专家同时遭遇谋杀,一死一伤。(中子运输专家马吉德·沙利亚里死亡,同位素分离专家法雷多·艾巴西轻伤)
这两起谋杀给民间病毒研究人员带来了极大的震撼。他们对于病毒制作者的模糊认识迅速清醒过来,他们已经陷入了巨大的危机:国家之间的较量不是民间力量能随意插手的。
研究核扩散问题的顶尖智电脑库科学与国际安全研究所(ISIS)也对这个病毒感兴趣。他们联络了赛门铁克的研究人员并详细了解了病毒的行为。根据ISIS所掌握的数据,震网病毒中设置的频率值1064hz恰好是伊朗IR-1离心机的最佳工作频率,而且是IR-1离心机所独有的。1410hz也恰好是IR-1离心机可承受的转速上限,再快点就会直接损毁。另一个针对S7-417型PLC所订的164台离心机规模设置,也恰好是伊朗铀浓缩工厂的机组构成数量,它的攻击目标就是排气阀门。
于是,震网病毒的攻击目标,总算是实锤了!那么,这场史无前例的网络大战中,美国的政府部门到底扮演了什么样的角色?震网病毒将给我们的社会带来怎样的影响?我们下回继续。
电脑