深度:震网病毒的秘密(二)
新的震网病毒变种(译者注:“简单功能”版),与原始版完全不一样(译者注:“复杂功能”),与震网病毒原始版相比,它更简单且缺少隐蔽性。震网病毒的“简单功能”版用来攻击Natanz工厂中的离心机的驱动系统,该驱动系统用来控制转子的转速。(译者注:可以参照前文中的第二张图,“复杂功能”版用来攻击给离心机降压的保护系统,“简单功能”版用来直接攻击离心机的电机驱动系统)
与“复杂功能”版相比,震网病毒的“简单功能”版其传播方式也不同,这一病毒程序的早期版本必须安装在目标机上,最有可能是通过工程师站(译者注:几乎所有的自动化厂商的现场设备都会存在工程师站,工厂控制组态和设计均由工程师站来进行,任何自动化厂商的工程师站如果被入侵的话,以脚本小子的技术水平都可能会对工业现场的设备造成极大影响,可以说工程师站就相当于工厂控制系统的root账户)或者通过USB来感染西门子控制器的配置文件。换句话说,震网病毒的“简单版本”需要攻击者来故意传播。
震网病毒的新版本(译者注:“简单功能”版)可以自我复制,通过网络和USB来扩散到所有的计算机中,这些计算机不仅包含安装了西门子组态软件的PC,其他的也一样感染。(译者注:西门子控制系统的组态软件主要是WinCC,伊朗采用的就是WinCC,整个工业控制系统的网络中,安装了组态软件的PC通常是叫做工程师站,单纯监控类软件的叫做操作员站,当然还有存储数据的DataServer等等,因此一个工厂中的控制层网络中的PC数量可能在几十台,甚至更多。震网病毒的感染是将工厂网络中所有的PC都感染了。)这表明,攻击者已经不必通过具有访问权限的人员来直接进行病毒传播了,也不用直接访问由其他部门安装配置的离心机系统(译者注:因为病毒已经在控制层网络中扩散开了,现场的设备层离心机是接在了控制层网络中的,所以此时所有的离心机驱动都能够访问控制了。)。
更重要的是,震网病毒使用了之前并未被发现的微软Windows软件漏洞即“0day”漏洞,这些“0 day”漏洞在市场上价值数十万美元。新版本的震网病毒(“简单功能”版)盗用了数字签名,从而使得它看上去是一个合法的驱动程序,事实上最新版的Windows操作系统仍然会认为它合法。
这一切都表明,某个新组织开发了震网病毒(“简单功能”版),该病毒包含了宝贵了0 day漏洞和窃取的数字证书。相比之下,开发震网病毒(“复杂功能”版)用来实现对离心机进行压力攻击的团队是一群顶尖的工控系统安全专家和游离余IT信息安全之外的信息安全程序开发者(译者注:说白了,这些人就是专门搞工控系统信息安全的,包括程序开发者)。而用于提高离心机速度进行攻击的震网病毒(“简单功能”版),则指向了更大的范围和新的重点。如果震网病毒是美国开发的,根据已经公布的资料可知就是美国人开发的,这只有唯一的理论上的地点:位于马里兰州(MaryLand)米德堡(FortMeade)的美国国家安全局总部。
虽然以多个“0 day”为代价,新的震网病毒(“简单功能”版)与原始的震网病毒(“复杂功能”版)相比,更容易作为恶意程序被识别,因为它突然表现出的奇怪的和精密的行为。(译者注:肯定的,因为它恶意的调整离心机转速,工业现场的工程师一下就能发现系统出问题了。)相反,震网病毒的原始版(“复杂功能”版)则表现的更像是一个合法的软件,运行在位于Natanz工厂中的西门子控制器中,唯一怪异的地方在于它没有版权声明和许可条款。(译者注:工控厂商的软件,通常都会有版权声明的,大概说的就是这是哪家公司的软件,不可以拷贝等等。另外,病毒应该也能够运行在其他工厂的西门子控制器中。)而新的震网病毒(“简单功能”版)则包含了黑客们梦寐以求的大量的Exploit,甚至一些很牛的反病毒研究者都觉得它有些地方太强大,需要仔细的研究。
新的震网病毒(“简单功能”版)与原始版本(“复杂功能”版)相似,也采用了周期性攻击的策略,大概每个月攻击一次,但是触发攻击的条件要简单的多。在进行增加压力攻击(“复杂功能”版)时,需要检测过程变量,在某一特殊条件出现下,则触发攻击。(译者注:应该是根据过程变量的数据值,来判断是否进行攻击,个人猜测,该功能主要用来提升压力,程序的逻辑可能是判断当前运行的压力信息,当压力信息达到某一个期望值时,控制泄压阀关闭,从而使得压力进一步升高,从而起到攻击效果,如果系统当前运行的压力值不是很高的话,则不攻击,表现正常。),新的震网病毒(“简单功能”版)则要更直接。
新的攻击(“简单功能”版)主要是改变转子的转速。利用过程压力和转子的转速两种方法能够实现增加转子的内壁压力,其中通过增加转子转速来实现增加转子的内壁压力是比较容易的方法。显然震网病毒(“简单功能”版)采用了这一办法。通常IR-1型离心机的工作转速为63000转/分钟,震网病毒(“简单功能”版)对其提速了三分之一达到了84600转/分钟并运行了15分钟,接下来让离心机停下来达到120转/分钟(译者注:近乎停止,大家生活中接触到的电机通常在几千转的样子),然后再让他们全速运转,整个过程持续50分钟。(译者注:大家可以想象我们自己开的车,把油门踩到底,然后急刹车,然后再把油门踩到底…每个月这么折腾一次,每次50分钟的后果。)IR-1型离心机采用了超临界设计,意味着转子转速到达工作速度前已经超过了所谓的临界速度,每当转子速度超过这些临界速度时,会产生谐波,可能毁坏转子。(译者注:大学课程《电机拖动》有过这方面的介绍,不过我忘了,大概说的就是电机运转有一个安全区间,在此一切ok,在此区间外就不妙了。就像葛优说的,步子大了容易扯到蛋,电机速度太快也一样。),
如果在攻击时仅仅一个转子被毁坏,级联保护系统能够将毁坏的离心机隔离,并继续欲行其他的离心机。但是如果多个转子同时被毁坏(一个相当有可能的情况),伊朗的操作员就悲剧了,他们很诧异,为何如此多的离心机同时坏掉。库房里虽然有足够的离心机来更换,但是这让控制系统工程师无法解释这一问题而非常令人沮丧,可以把这些离心机看成幽灵机器(译者注:确实,离心机就像幽灵一样,统一挂掉。)
攻击可能被工业现场的员工认识到,通过他们的耳朵。(译者注:电机速度剧烈变化的时候,能够通过电机发出的声音判断出来。)。让164台离心机(或者更多)从63000转/分钟降到120转/分钟,然后在恢复到63000转/分钟,如果富有经验的员工在现场拿掉他们的保护耳机的话,是能够注意这一问题的。(译者注:工业现场噪音很大,特别是离心机这种,现场员工可能确实佩戴保护性的耳机,那样他们确实听不到离心机的诡异声响。)。这从另一个侧面说明,震网病毒(“简单功能”版)的开发者已经接受被现场操作员发现的风险。
关于震网病毒通过破坏大量离心机,从而明显降低了伊朗铀浓缩的产能的文章已经有很多。虽然那是毋庸置疑的,但是它并未表现出攻击者的意图。如果震网病毒导致了灾难性的后果,那么那就是个意外,而不是不是它的初衷。攻击者可以采取一击致命的措施,但是他们选择了持续周期性让其窒息的方式。震网病毒是一种低效率的武器,旨在降低伊朗的离心机的使用寿命,使得伊朗的控制系统表现的超出了他们的掌控。
此战略很难被发现,当震网病毒开发出来时,伊朗已经具备了量产IR-1型离心机的能力。在2010年夏天,当震网病毒大量爆发的时候,伊朗运行着4000台离心机,并且在库房中保存着另外5000台作为备用。一次性毁坏伊朗的操作设备并不能够损害伊朗的核战略,就像在1981年巴基斯坦发生的大地震,虽然严重的破坏了巴基斯坦的4000台离心机,但是并没有阻止巴基斯坦最终获得核武器。据我的估算,震网病毒延缓了伊朗的核项目两年,假使同时毁掉所有的离心机也不会产生如此大的延期。(译者注:也就说通过这种病毒手段破坏离心机比通过暴力破坏离心机的性价比还要高)
图为2008年至2010年Natanz工厂的离心机库存数据,伊朗始终保存着至少50%的备用离心机,也就是说同时摧毁运行中的离心机基本上不能阻止伊朗的核发展进程。(译者注:从图中可以看出在某一阶段09年底至10年底,伊朗的备用离心机数量超过了4000台,比运行中的离心机数量还多,如果一次性将运行中的离心机全部干掉,伊朗仍然有足够的离心机进行替换。)
低效率的震网病毒攻击方法提供了额外的附加值,它使得伊朗的工程师抓狂,并且使得他们再也不能有效的运行工厂(该工厂的设计是20世纪70年代窃取设计后,开始运行的)和他们过度的数字保护系统。与巴基斯坦的铀浓缩计划相比,人们会注意到一个重要的效率差异,巴基斯坦在其摇摇欲坠的经济背景下,仅用了短短两年的时间就完成了从零开始到低浓度的铀浓缩,并且没有采用最新的数字控制技术。而伊朗虽然借助了巴基斯坦核贩子A.Q. Khan的帮助并通过卖原油而积累了大量的资金,但是为了完成低浓度铀浓缩花费了超过10年的时间。如果伊朗的工程师不那么无能的话,他们应该在能在震网病毒入侵他们系统之前完成铀浓缩。(译者注:不是敌人太狡猾,而是我方太无能。)