大家好,我是ABC_123。上一篇文章《第75篇:美国APT供应链打穿伊朗物理隔离的核工厂案例分析(第2篇)》讲述了美国APT如何用供应链方法实现自动化入侵伊朗物理隔离核工厂内网的,本期分享一下震网病毒究竟是以何种方式攻击离心机设备的。网上有大量关于震网病毒破坏离心机设备的报道,说法不一,有的说是震网病毒关闭了离心机的泄压阀门,导致超压爆炸;有的说是震网病毒使离心机急速旋转,一直转到离心机损毁;其实这些说法都不准确,真实过程远比这些说法复杂得多。ABC_123参考大量资料,在接下来的文章中,给大家一个相对准确的答案,相信会让大家感到震惊,要不然震网病毒怎么会被称为有史以来最复杂的病毒呢。
建议大家把公众号“希潭实验室”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。操作方法:点击右上角的【...】,然后点击【设为星标】即可。
这里ABC_123首先说明一下,震网0.500版本攻击离心机的过程要比震网病毒1.x版本复杂太多太多,目前各家出的官方报告说法都不统一,但是大体上还是一致的,所以我也是综合各家报告得出的一个结论;对于震网1.x版本的攻击过程,较为官方的英文报告给出的分析都差不多,所以相对比较准确一些。
核设施离心机架构与工作原理
为了使大家能看懂后面的文章,首先给大家描述一下离心机的原理,不用深究,看懂大概意思即可。高浓度的U-235可以用于制造核武器,伊朗科学家通过离心机高速旋转将U-235与U-238进行分离,大致原理如下:铀矿石首先经过一系列加工及化学反应,变成六氟化铀气体,在六氟化铀气体中含有U-235及U-238,U-235比U-238轻0.852%。为了提纯U-235,需要利用高速旋转的离心机产生惯性力,也称之为离心力,速度越快,惯性力越大,更重一点的U-238的六氟化铀气体会被甩到靠近外壁的地方,而较轻的U-235六氟化铀气体会更多聚集在靠近转轴的位置,将中心的铀气体抽出来,输入到下一台离心机,再次进行高速分离,可以得到更高纯度的U-235气体,剩余的贫化U-235分馏物,仍然含有部分U-235,为了充分利用原材料,会将其送回到上一层离心机重新分离,如此往复。
因此离心机都不是单独运行的,它往往是几百台串联在一起,形成离心机级联系统协同工作。每个离心机级联系统164台离心机,总共分为15层,每层放置的离心机数量各不相同。例如,第10层有24台离心机,第9层有20台离心机,第1层有2台离心机,其中1台是主用离心机,另外1台是备用离心机。每个级联系统都有多个辅助阀门,用于控制气体的进出和各层之间的流动。
每台离心机的顶部都有3个狭窄的管道,进气管道用于向离心机注入气体,成品管道用于将浓缩铀-235气体发送到更高层,而废气管道则用于向下层排放废弃的铀-238浓缩气体。每一台离心机有一个输入口和两个输出口,含有较多²³⁵UF₆较轻的气体进入下一台离心机,而较重的气体回到上一台机器继续分离,最后一台机器输出的就是²³⁵UF₆含量最高的气体。由此我们可以知道,离心机的转速越快,投入的离心机数量越多,就可以提取更高浓度的²³⁵UF₆。离心机通过高速旋转将六氟化铀气体分离成铀-235和铀-238,这个过程在一层又一层的离心机中进行,逐步提取高纯度的铀-235,并通过带有阀门的管道流出。
Part3 震网病毒0.500关闭离心机阀门过程
关于震网病毒0.500版本是如何关闭各种阀门的,ABC_123阅读了很多材料,目前说法不一,大致过程如下描述。
橡树岭实验室曾参与过曼哈顿计划,他们把那些退休的老员工重新招募过来,带领年轻人搭建与组装从利比亚缴获的离心机部件,然后在仿真的伊朗核设施工厂环境中,反复实验寻找微妙但具有灾难性影响的方法来损坏这些离心机。他们最终找到了关闭阀门的方法破坏离心机,按照这个方案,美国NSA研发了早期版本的"震网"病毒0.500,它的自动传播功能非常有限,只能通过替换西门子工控编程软件Step7的dll文件来传播,因此需要人工将病毒通过U盘插入目标工控系统主机中。
震网病毒0.5的潜伏与攻击初始阶段
当震网病毒0.5版本进入纳坦兹的离心机级联系统后,它将潜伏30天左右,在这段时间里,病毒会进行全面检查,以确定离心机级联系统各种阀门、压力传感器和其它部件是否与符合预期,并监视其运行状态。震网病毒0.5版本会以21秒为周期,记录级联保护系统的传感器记录的压力参数值数据。等到攻击开始时,震网病毒会按照21秒的循环将之前记录的正常运行状态数据回传给监控室的SCADA系统,使得主控室的屏幕一直显示一切正常的信息,误导操作人员以为一切正常。
同时,震网病毒0.5会破坏纳坦兹核设施工厂的安全告警系统,导致告警关闭。安全告警系统有两类装置,一是安装在每台离心机上的加速度传感器,用于监测离心机的振幅。另一类是安装在每个级联系统上的数十个压力传感器,用于监测级联系统各部分的压力。如果某台离心机出现故障,该系统会在毫秒级别做出反应,通过关闭泄压阀门来解决故障。
震网病毒持久隐蔽攻击离心机的方法
在整个攻击过程中,"震网"病毒通过关闭泄压阀门可以迅速损坏上百台离心机。然而,美国国家安全局(NSA)的病毒设计者为了实现持久的隐蔽攻击和破坏,并没有简单粗暴地关闭所有阀门以直接导致离心机超压损坏。相反,他们有选择地控制特定阀门的开关。"震网"病毒通过读取离心机的震动传感器参数来确定离心机的受损程度,并根据这些参数调整对离心机的攻击力度。这样做的目的是避免离心机出现瞬时的破坏性故障,以达到将其失效原因伪装成质量问题,实现较为隐蔽的长期损坏离心机设备的效果。这种精确控制的方法可以使攻击更加隐蔽,使操作人员难以察觉到恶意活动的存在,并延长攻击的持续时间。
震网病毒0.5对离心机的精确攻击流程
首先,病毒会进行复杂的随机运算,在每一层上选择需要关闭的阀门。例如,它可能会选择关闭第9层的20台离心机中的14台废弃管道阀门,关闭第8层的16台离心机中的13台废弃管道阀门,但不关闭第10层的气体注入阀门,这样六氟化铀气体会继续注入,但是气体却无法排出,这会导致离心机的压力不断上升。当时间满2小时或离心机压力达到初始值的5倍时,使离心机内部的压力增加到平常水平的5倍。这种增加的压力将导致更多的六氟化铀进入离心机,六氟化铀气体变得稠密,给转子带来更大的机械应力,增加对离心机管壁的应力,导致高速旋转的离心机失去稳定性,敲击离心机外壳,加速离心机的疲劳损坏,最终导致爆炸和损毁。
病毒进入下一阶段,病毒会打开除气体注入层附近的3个阀门(1个进气口,2个出气口)之外的一部分辅助阀门,这些阀门的选择是由内置的算法随机选择的。然后病毒进入3分钟的等待期,同时向操作人员发送之前记录的正常状态数据,随后进入7分钟的静默观察。
在攻击的最后阶段,病毒再次打开一组约25个阀门,使离心机的气体迅速进入冷却容器,完全变为废气。整个攻击过程持续2个小时结束后,震网病毒将跳转至启动部分,开始新一轮的循环。
整个攻击流程可以简单解释为:病毒选择关闭特定阀门,让气体进入但无法排出,导致离心机压力上升。然后,它打开其它阀门,使气体迅速排出,最终使离心机失效。这个过程会循环进行,持续对离心机进行隐蔽破坏。
由于特工并不能每次都能成功把带有震网病毒的U盘带入核设施工厂以内,美国政府要求修改震网病毒代码,以编程方式使其能够自动化传播到物理隔离的伊朗核设施的内部网络。为了避免伊朗方面怀疑,美国橡树岭实验室发明了一种新方法替代原有的关闭泄压阀门的方式。这种方法是通过改变离心机转速的方式破坏离心机,并改变了传播机制。传播机制的控制是非常微妙的,入侵性过强,会被伊朗方面发现,而入侵性不足则又无法进入被物理隔离的核设施工厂。
一旦“震网”病毒在内网中获取到工控系统的工作站主机权限,它不会立即发起攻击。相反,它会进行为期13天的侦查,每分钟记录一次PLC的正常运行状态信息,大约会记录110万次左右。当离心机工作了13天或核材料注满后,震网病毒将正式发起攻击。
以伊朗的IR-1型离心机为例,他的安全转速是1050转/秒,相当于音速300米/秒。首先,震网病毒会下发指令给PLC,将离心机转速提升3分之1,达到1410转/秒,这个转速恰好会导致离心机产生共振并导致以部分离心机损坏,震网病毒会控制离心机以这个转速持续运行15分钟。然后,转速恢复到1050转/秒的安全速度,继续运行26天左右。之后,震网病毒会下发指令给PLC,控制离心机转速降低至2转/秒,类似于陀螺效应,转速慢的时候会摇摆不定,这种状态会持续50分钟。在离心机转速逐步降低的过程中,会显著降低浓缩铀成品的纯度。然后再恢复到1050转/秒的正常转速。再过26天又重复一遍,这种攻击行为周期性循环多次,逐步对离心机造成破坏。
就好像我们的私家车开在高速公路上,从120公里/时的速度,突然降到1公里/时,反反复复地重复这个操作50分钟,每个月来这么一次,最终汽车的发动机肯定会寿命大大缩减。
在此期间,震网病毒会向控制系统发布之前记录的正常运转的信息,以迷惑监控人员,让他们认为离心机正常运转。此外,震网病毒会下发给PLC指令,控制离心机的旋转速度突然升高或突然降低,导致高速旋转的离心机发生异常震动和应力畸变,最终导致离心机爆炸损毁,并造成放射性铀元素的扩散和污染,严重阻碍伊朗的核武器研发计划。
当离心机受到攻击时,伊朗技术人员经过旁边可能会听到异常噪音,高速旋转会产生巨大的声响,类似喷气式引擎。然而,由于核设施工厂中数千台离心机同时运转,一般工程师都戴着保护性耳罩,无法辨别出故障的离心机。他们通常依靠查看工控系统的监视屏幕来判断离心机的运行状态,这也是为什么伊朗一直没有发现"震网"病毒的原因。
在后期,伊朗的技术人员发现越来越多的离心机转速异常和损坏,他们试图按下紧急停止按钮,但是震网病毒拦截了这些停止命令,使离心机没办法立即停止,继续运转直至爆炸损毁。
当震网病毒进入PLC的时候,它会使PLC的自动数字警报系统失效。如果程序员发现离心机设备有问题并想查看PLC指令是否有错误,震网病毒就会干预,阻止他们看到恶意代码,并拦截所有读取PLC代码段的请求,并向其提供减去恶意代码的正常代码。就算伊朗技术人员将PLC程序用新代码覆盖更新100次,震网病毒也会介入,把恶意指令代码反复感染100次。
Part5 未完待续
由于此APT事件过于复杂,篇幅有限,只能分章节给大家分享。后续ABC_123会继续介绍震网病毒本体的设计思路,以及一大批安全公司的技术人员如何花费数月时间,将整个事件抽丝剥茧,完整溯源出来的。
公众号专注于网络安全技术分享,包括APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,每周一篇,99%原创,敬请关注。
Contact me: 0day123abc#gmail.com(replace # with @)