伊朗位于纳兹坦的浓缩铀工厂
月初,美国总统特朗普宣布退出伊核协议,在世界范围内引起轩然大波。然而回望当初,作为拥有初级核工业家底也不缺资源的伊朗,当年为什么会放弃提炼浓缩铀,同意伊核协议?是因为他们突然想开了要维护世界和平还是他们觉得不需要核武器也能安心生存?没人知道个所以然。但随着2010年一个计算机病毒的发现,我们才能揭开这背后的奥秘。
危机再起
2006年,内贾德总统宣布启动核计划,伊朗核危机重新爆发。
伊朗浓缩铀工厂所使用的离心机是通过走私获得的一款法国1960年代末的产品。伊朗以此为基础制造了自己的IR-1离心机,但由于加工精度不足,只能以比原版离心机低的速度运转,也不能承受太大的气体压力,生产效率只有原版的一半,他还很容易坏,每年都得更换10%的机器。好在还算便宜,伊朗人可以大规模的生产这种离心机。
挨个串联起来的离心机,其外壳材料为铝
由于离心机需要多台串联为一组工作,而且生产过程中不能出一点岔子,伊朗人设计了一些安全机制来保证这些不靠谱的离心机就算出问题了也不影响生产。首先是给每个离心机安装隔离阀门,可以把出问题的离心机隔离出来更换,但是这将导致整组的离心机气压升高而更容易导致损坏。所以他们还给每一组离心机设置一个排气阀以避免气压过高。这套安全系统由西门子公司提供的S7系列工业控制器操纵。
整座工厂建设完成后完全隔绝外网运行。然而系统运行了没多久,就出现了离心机频繁损坏的问题。期初伊朗人并不在意:本来这些产品质量就不怎么样。但是渐渐地发现问题严重起来了,监控画面上的各项参数都运行良好,但是离心机的损坏率就是居高不下,铀浓缩生产进度仅为设计值的一半左右。到底哪里出问题了?
内贾德视察铀浓缩工厂的照片,从众人的表情看来情况很不乐观。
美以视角
2006年的小布什政府深陷反恐战争的泥潭。阿富汗和伊拉克闹得焦头烂额,伊朗这时候宣布恢复浓缩铀无疑是火上浇油。以色列第一个站出来反对,饱受生存困扰的犹太人不能容忍一个敌对的国家掌握核武器,否则他们将被轻易从地图上抹去。
首选的行动方式当然是像当年的伊拉克一样,直接炸毁对方的核设施。然而美国人不愿意被以色列拖入新的战争泥潭,否决了武力打击的计划。而经济制裁对于伊朗而言也早就是虱子多了不怕痒,毫无压力。想要破坏伊朗的核设施,只能另想它法。
1981年6月7日,色列列空袭伊拉克核反应堆
这时候中情局建议小布什给伊朗的核工厂弄点病毒,给他们制造些麻烦,拖延时间以利于解决问题,并拉上犹太人一起干,让他们打消空袭的念头。以色列听说很上心,立马送来摩萨德搞到的伊朗核工厂设计图!于是计划大改,从制造点小麻烦升级成干扰整个工厂的运作。
美国和以色列的情报安全部门按图纸还原了伊朗核工厂进行模拟攻击,电脑专家、核物理专家和工程专家积极配合,完成了病毒武器的开发。
最强病毒
这个病毒在日后被称作“STUXNET”震网病毒,病毒一口气使用了4个零日漏洞(就是从未公开,操作系统提供商所不知道也无法防范的漏洞)以确保病毒植入系统。在黑客市场,这种类型的漏洞一个就价值数十万美元,通常一次只会使用一个。病毒研究人员表示,震网病毒的开发者只能是国家级的队伍,拥有极其雄厚的资金和人才实力。
震网病毒到底有多强?他的大小超过500k,而通常的恶意代码文件一般不超过几十k,震网病毒比以往的病毒要复杂得多,它将30多个dll和其他组件层层打包加密,还包括一个超过400个设置项目的配置文件。震网病毒在被发现之前成功拖延了伊朗铀浓缩计划长达两年之久,比直接摧毁整个工厂产生的拖延效果还要好。而且伊朗人在这期间完全搞不明白是怎么一回事。
让我们来看看这个病毒是如何工作和被发现的。看看人类历史上首次国家之间的“黑客战争”是怎样进行的。
大手笔的入侵行动
通常而言,病毒分为两个部分:导弹(missile portion)和载荷(payload)。前者负责病毒的传播和潜伏,后者则负责窃取和破坏活动。
先说“导弹”部分。由于工厂内部控制网络和外界是物理隔离的,只能通过U盘来传播,而伊朗浓缩铀工厂又不是那么好混进去的,最好是让伊朗人自己把病毒带进去。该怎么办呢?
和通常利用Autorun(U盘自动运行)执行代码的普通U盘病毒不同,震网病毒使用的是4个恶意.lnk文件构成的漏洞利用程序来传播(每一个文件对应不同版本的操作系统)。
在Windows系统中,.lnk文件负责渲染文件图标,当我们插入U盘时系统就会自动扫描其中的.lnk文件以显示U盘中的各种文件。震网病毒利用了这一点,在这时候秘密的将恶意文件送入计算机。从而绕过了大家都熟知的“关掉autorun防病毒”操作。此外他还嵌入系统,使杀毒软件看不到病毒的文件名。如果杀软要扫描U盘,木马就修改扫描命令并返回一个正常的扫描结果。
除了利用.lnk漏洞潜入系统之外(漏洞1),震网病毒还利用Windows键盘文件中的漏洞非法获得System权限(漏洞2),利用Windows打印缓冲功能漏洞,实现病毒在共享打印机的各台计算机之间的传播(漏洞3)。
西门子生产的PLC
震网病毒的目标是西门子的S7-315和S7-417这两个型号的PLC(可编程逻辑控制器,广泛用于控制工业生产和基础设施配置)。于是它在感染计算机之后就开始寻找电脑内是否安装有西门子SIMATIC Step 7或SIMATIC WINCC软件,如果病毒没有找到这些软件时就什么都不做。
找到目标后,震网病毒利用Step 7软件中的漏洞突破后台权限并感染数据库,于是所有使用这个软件连接数据库的工程师所使用的电脑和U盘都将被感染。加上之前提到过的3个,震网病毒一口气使用了4个零日漏洞,说明设计者一方面手中握有大量尚未公开的系统漏洞,一方面为了震网病毒高速大范围传播完全不惜工本,这不是民间黑客可以做到的。
这样一来,通过利用Windows系统和西门子工业控制数据库的漏洞,震网病毒将所有可能接触到的相关系统的工程人员和他们的U盘电脑都变成了运送者。只需要感染一台电脑或者网络,比如说西门子公司或者他们PLC客户或者别的相关人员所用的机器,就可以让病毒进入伊朗的铀浓缩工厂。
震网病毒的版本升级
震网除了利用零日漏洞进行传播之外,还有8种不同的感染方法。并且会自动寻找网络中的新版本进行更新,不需要连接外网,只要内网中有一台机器插入了带新版本的U盘,全内网计算机上的震网病毒都会自动更新。
躲避系统和杀软的监测
系统在安装没有安全证书的程序时会弹窗提示。那么病毒进入系统后,是如何在没有任何提示的情况下完成驱动安装的呢?而震网病毒拥有瑞昱公司(常见的声卡网卡供应商)的合法签名。他们驱动的数字签名处于微软系统的白名单之列。微软以这个伪装的驱动文件名mrxnet.sys将这个病毒命名为Stuxnet,即“震网”。此外,瑞昱公司旁边的智微科技(JMicron Technology USB和SATA驱动和桥接芯片供应商)的数字签名也被盗用了。以至于反病毒研究者一开始还以为这个病毒是大陆做的。
震网病毒进入计算机后的21天内,开始感染插入计算机的所有USB存储设备,并运行其主文件,将巨大的dll文件解开。
一般而言,操作系统打开、读取或者保存文件的代码都是保存在系统.dll文件(动态链接库)中的,这也是杀毒软件经常扫描的地方。而震网病毒则是将恶意代码直接调入内存。当然,一些历害的病毒也会这么做,只不过他们还会让系统加载硬盘上其他文件中的代码,这就会被杀毒软件发现。
然而震网病毒更加高明:他把所需的代码存放在虚拟文件中,还重写了系统的API(应用程序调用系统函数的接口)将自己藏了进去,每当系统有程序需要访问这些API时就会将震网的代码调入内存。如果杀毒软件检查这些API的时候,却只能看到“空文件”。震网病毒在运行时,还会把自己的代码替换进另一个正在运行的进程A里,在将A被换下来代码放到进程B去。
由于震网病毒只在内存中运行,并同时判断CPU负载情况,只有在轻载时他才运行以避免拖累系统速度而被发现异常。计算机关机之后这些代码就会消失,下次开机时病毒重新启动。
那么,震网病毒是怎么进行破坏的?又是怎么被发现的?我们下期接着说。