美国APT网络攻击破坏伊朗核设施全过程复盘分析(震网病毒上篇)
Part1 前言
大家好,我是ABC_123。在上大学时,就曾听过美国NSA使用震网病毒(Stuxnet)攻击了物理隔离的伊朗核设施,病毒在传播过程中使用了多达4个windows系统的0day漏洞,最终导致上千台提纯浓缩铀离心机损坏,致使伊朗的核武器研发计划遇到重大挫折。“震网”病毒是世界上第一个能够实战破坏工业基础设施的病毒,打破了网络攻击无法破坏物理隔离的工控系统的神话,也标志着人类进入了网络战争时代。
最近几年,很多有关美国APT攻击物理隔离的伊朗核设施的官方资料公开,ABC_123对这些资料进行了深入研究,阅读了大约200多篇官方报告和权威分析报告,对这些资料进行归纳、分析和总结,把这个犹如科幻电影、好莱坞巨作一样的APT攻击案例重新梳理出来,对我们提升当下网络安全防护会有很多借鉴意义。ABC_123会写3到4篇文章,讲解美国NSA是如何一步步打穿伊朗核设施国家级物理隔离防护的。
建议大家把公众号“希潭实验室”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。操作方法:点击右上角的【...】,然后点击【设为星标】即可。
Part2 分析过程
美国使用U盘病毒入侵伊朗核设施流程图
以下是ABC_123综合各种资料绘制的攻击流程图,接下来参考这个流程图把整个攻击过程简单描述一下,让大家对整个事件有个大致了解。
搭建仿真环境试验震网病毒
美国NSA在前期对伊朗核设施进行了长达数年的信息收集。通过各国情报组织,深入了解朗核设施的施工建设、内部工控系统SCADA的架构,包括所采用的工控软件Wincc Step7的版本号、提纯浓缩铀离心机数量等等。美国还截获了一批运往利比亚的离心机零部件,在美国橡树岭实验室搭建了一套伊朗核设施离心机工厂的仿真环境,用来测试震网病毒的实战效果。
震网病毒0.500早期版本借助特工投放
震网病毒大约分为4个大版本,分别是0.500版本、1.001版本、1.100版本、1.101版本。早期Stuxnet 0.500版本是通过荷兰情报机构招募特工,伪装成工程师进入核设施工厂,将U盘插入目标主机进行传播的,后期则是通过网络攻击5家伊朗核设施供应商技术人员的电脑或U盘,间接将病毒带入核设施工厂的。
在具体的实战过程中,震网0.500版本主要是通过关闭提纯浓缩铀的离心机的泄压阀门,造成离心机超压爆炸,以此来损坏伊朗核设施,拖慢伊朗核武研发计划。震网病毒早期版本一旦感染目标主机,会潜伏大约30天左右,在此期间会进行全面检查,以确定各种阀门、压力传感器和其它部件是否与预期一致,然后监视其运行状态,同时把正常的值记录下来,在正式开始攻击的时候,将这些值回传给操作人员,误以为一切正常,同时还会破坏掉核设施工厂的安全警报系统。
震网病毒通过读取离心机在震动传感器的参数,确定离心机的受损害程度,并据此调整对离心机的攻击力度,避免离心机出现瞬时破坏性故障,以达到将其失效原因伪装成质量问题的目的,从而实现较为隐蔽的长期损坏离心机的目的。
震网1.x版本自动化入侵物理隔离工控系统内网
后期特工将U盘病毒带入核设施工厂内部越来越困难,美国政府要求NSA修改病毒代码,用编程手段实现自动化进入物理隔离的伊朗核设施内网,为了避免伊朗方面怀疑,必须使用新方法替代原有的替代原有的关闭泄压阀门的方式。于是震网病毒更新到了1.x系列版本,美国NSA想到了一个绝妙的方法将病毒传播进入物理隔离的内网,这大概是供应链攻击的早期的成功实践。
伊朗核设施有很多的供应商,这些供应商负责给伊朗核设施安装西门子工控系统软件Wincc、Step7等等,或者对核设施工厂的一些设备进行维修维护,因此这些供应商的技术人员可以携带电脑或者笔记本进入伊朗核设施内部。美国挑选了与伊朗核设施工厂联系最为密切的5个供应商公司,通过网络攻击手段,入侵这5家公司的内部网络,将病毒植入这些技术人员的电脑或U盘中。传播机制是非常微妙的,入侵性太强,会扩散很快被发现,入侵性不强,无法进入物理隔离的核设施工厂。
当这些技术人员进入核设施工厂内部进行设备维护插入U盘或者将电脑接入物理隔离内网时,这些U盘病毒会通过Autorun方式或者Windows快捷方式文件解析漏洞MS10-046将病毒复制到伊朗核设施电脑中,然后这些病毒会自动化攻击内网其它主机,通过MS08-067远程溢出漏洞、打印机后台程序服务漏洞(MS10-061)、局域网共享等在内网进行横向传播,一旦感染计算机之后,会通过务计划程序权限提升漏洞(MS10-092)、内核模式驱动程序权限提升漏洞(MS10-073)两个Windows提权0day漏洞提升到windows系统最高权限。
震网病毒的感染目标
震网病毒并不是漫无目的的肆意传播,震网病毒在进行内网自动化横向过程中的主要目的之一,就是寻找SCADA工控体系的工程师站机器,也就是安装了Wincc和Step7工控软件的机器,这种主机可以为PLC下发控制指令,从而控制泄压阀门开关、离心机转速、设备的运行停止等等,可以理解为获取了工程师站机器的权限,就可以控制工控设备运转。
当“震网”病毒在内网中获取到工作站主机权限之后,不会立马开始攻击。它首先会进行为期13天的侦查,记录PLC的正常运行状态信息,每分钟记录一次,大概会记录110万次左右。一旦发现离心机工作13天了,或者注满核材料了之后,震网病毒就会正式发起攻击。
工控系统一般的网络架构
接下来看如下这部分流程图,为了方便大家理解,ABC_123在图中标注了物理隔离的工控系统的网络层级结构。
工程站(Engineering Station):工程站用于配置和管理整个控制系统。它提供了一个集成的开发环境,可以进行项目配置、参数设置和逻辑编程。工程站通常由一台或多台计算机组成,运行STEP 7配置软件和其他辅助工具。主要的作用是用来设计自动化程序,并将程序上传到PLC上运行。
操作站(Operating Station):操作站用于监视和操作控制系统。它提供了直观的图形界面,显示过程变量、报警和操作控制元素。操作站通常由一台或多台计算机组成,运行WinCC可视化软件。
控制器(Controller):控制器是负责实际控制过程的设备。它接收传感器的输入信号并发送控制信号到执行器。控制器通常是Siemens S7系列的PLC,通过SIMATIC STEP 7软件进行编程。
集中监控层:主要用于技术人员实时查看核设施工厂的离心机工作状况,这个层级上有HMI监控大屏幕可以实时观看,有实时数据库、历史数据库可以查看,也有告警服务器或者报表服务器,还会有MES制造执行系统,用于管理和控制制造过程中的实时操作。
现场监控层:西门子控制系统的组态软件主要是WinCC,伊朗采用的就是WinCC,整个工业控制系统的网络中,安装了组态软件的PC通常是叫做工程师站,单纯监控类软件的叫做操作员站,当然还有存储数据的DataServer等等。工程师站上面一般安装有Wincc监控软件,平时在工控系统看到的各种漂亮的类似于卡通动画的那种工控运行状态图,你可以理解为这些就是Wincc的软件界面,此外工程师站上面还有装有Step7编程软件(STEP 7是西门子PLC的编程软件),技术人员就是通过Step7软件编写代码植入PLC(可以理解为工控系统的小型电脑)进行运行,然后PLC(小电脑)通过改变变频器的电流,实现对离心机的转速控制。
震网病毒修改工控指令方式
震网病毒首先会查询两个注册表键来判断主机中是否安装了这两款软件HKLM\SOFTWARE\SIEMENS\WinCC\Setup和HKLM\SOFTWARE\SIEMENS\STEP7,如果没有安装工控软件,会进入休眠状态,如果发现了安装有wincc、step7工控软件的电脑,软件所对应的PLC必须是S7-315和S7-417这两个型号,震网病毒才会攻击,因此没有工控软件的电脑会作为传播的载体和攻击的跳板。
Wincc的Step7编程软件使用库文件s7otbxsx.dll来和PLC通信,向PLC下发指令。震网病毒会解包出一个恶意的s7otbxsx.dll文件,替换原有的文件,实现类似于中间人一样的拦截并修改WinCC的显示参数和下发参数,从而修改发送给PLC的指令,从而实现对离心机转发的各种控制。同时,震网病毒会控制WinCC的界面,显示离心机处于正常的压力值状态,用来迷惑技术运维人员。
在后期,伊朗的技术人员发现越来越多的离心机转速异常出现损坏的时候,曾尝试按下紧急停止按钮,但是震网病毒拦截了这些停止命令,使离心机没办法立即停止,一直运转到爆炸损毁。
震网病毒不出网仍可进行更新
震网病毒可以不通过互联网完成对自身或者对整个局域网所有电脑的病毒版本进行更新升级,其内置了自动寻找新版本、更新旧版本的点对点P2P传输功能,在每台被感染的计算机上,会安装文件共享服务端和客户端,可称之为RPC服务。这样处于同一局域网的计算机可以相互通信,并比较各自的病毒版本,只要有一台计算机出现更高版本,就会立刻自动更新网内所有的低版本的病毒。也就是说,只要新版本的病毒进入局域网,就能迅速实现局域网内全部病毒的更新。
Part3 前期准备工作
为了达成目标,美国APT组织做了大量的准备工作及信息收集工作。
收集伊朗核设施工控系统相关资料
美国APT实施网络攻击时,特别注重与其它国家进行合作。在收集伊朗核设施工厂的工控系统资料方面,得到了很多国家的帮助:德国提供了西门子公司与伊朗核设施工控系统关于离心机相关的技术规范和知识;法国提供了伊朗核设施工厂相关的情报;英国的国家通信情报局也提供了伊朗情报;荷兰提供有关伊朗从欧洲采购非法核计划设备的活动的关键情报,以及有关离心机本身的信息。此外,荷兰的AIVD情报机构的黑客们通过渗透手段,获悉了伊朗核利比亚核计划的相关资料。
入侵伊朗关基单位,获取情报数据
在震网病毒攻击伊朗核设施之前,美国政府的网军经历了超过4年的准备,完全渗透了伊朗的基础工业机构,包括设备生产商、供应商、软件开发商等,从中获取了大量的情报数据。早在2000年的时候,荷兰国家安全情报局AIVD的黑客们入侵了伊朗一个重要国防组织的电子邮件系统,他们从中获取了很多有关伊朗核计划的敏感信息。
搭建伊朗核工业的仿真环境,用于试验病毒
英国和美国情报部门截获了一艘载有数千台前往利比亚的离心机部件的船只,这些离心机与伊朗从巴基斯坦核弹之父那里获取的在纳坦兹核设施工厂使用的离心机是同种型号的,美国政府扣押了这些离心机部件。一年之后,结合在利比亚没收的离心机和核设施资料,美国花费数月时间,将这些部件重新组装,结合前期获取的关于伊朗核计划的情报,搭建了一套类似于伊朗核设施工厂的仿真环境,并进行了各种攻击变量的测试。这套仿真环境,使美国方面完整研究与模拟了伊朗核工业体系,在后期震网病毒研发过程中,成了测试震网病毒功能的绝佳环境,同样在以色列的迪莫纳也搭建了一套仿真环境。
策反伊朗核工程师
人是网络战中最薄弱的环节。早期的震网病毒必须依赖于人工投放的方式,突破物理隔离。荷兰的情报机构在美国CIA中情局和以色列摩萨德的要求下,成立了一家公司,但是公司成立存在问题,引起了伊朗方面的怀疑,因此未能进入纳坦兹核设施工厂。后来在以色列的帮助下,成立了第2家公司,并且荷兰方面联系到了一个伊朗核工程师,并将它成功策反,去现场收集了很多系统的配置信息,几个月的时间已经进入了好几次了,为震网病毒的成功实施提供了充足的信息支持,后续将带有震网病毒的U盘插入物理隔离的内网主机上。
派特工偷走2家公司的数字认证证书
美国为了保证震网病毒绕过所有杀软的查杀,从台湾的瑞昱半导体公司RealTek半导体公司与智微科技JMicron技术公司那里,通过特工偷走了数字签名证书,并用于签名震网病毒。这两家公司位于同一工业园区,物理位置相隔很近,他们的数字证书的看管是非常严格的,必须通过好几道门、好几道验证、正对着摄像头、需要提供指纹和视网膜识别才能获取到,它并不是放在联网的电脑上,因此需要人力去渗透的,后续普遍说法怀疑是派特工通过物理渗透的方式把证书给偷出来了。
渗透5家伊朗核设施供应商
震网病毒后续更新到了1.x系列,为了让震网病毒自动化进入伊朗核设施,攻击者挑选了5家伊朗的承包商公司进行网络攻击,这5家公司都有员工经常出入伊朗核设施工厂内部,通过投放新版本震网病毒,感染这5家供应商员工的U盘,在技术人员不知情的情况下,将震网病毒通过U盘带入伊朗核设施工厂内部,并开始自动化横向渗透传播。根据震网病毒日志发现,第一个被攻击的公司是弗拉德(Foolad)科技的公司,一周之后,第二个被攻击的公司是百坡炯(Behpajooh)公司,这家公司主要任务是将采掘出的铀矿转化为铀化物气体,作为Natanz铀浓缩的原料,曾为一家伊斯法罕的钢铁厂安装过西门子S7-400型PLC,配套的Step 7和WinCC软件以及现场总线通信模块。
伊朗总统视察核设施电视画面泄密
如下图所示,在2008年,伊朗总统内贾德在纳坦兹的铀浓缩厂控制室观看SCADA,屏幕上的两个黑点显示出当前的离心机有问题,已被隔离使用,但是对整个工艺流程还在正常运行。在这段录像中,很多关于工控系统包括离心机的型号等机密信息都被泄露了,包括SCADA系统(数据采集与监视控制系统)屏幕、工厂配置情况、6组离心机,每组164个离心机,很多护卫内贾德总统的人等等,他身后的一名科学家几个月后被暗杀。
Part4 未完待续
由于此APT事件过于复杂,篇幅有限。关于震网病毒研发历程、震网病毒早期版本如何控制泄压阀关闭、震网病毒后期版本如何控制离心机转速、震网病毒的入侵流程、震网病毒因何原因失控等等谜题,ABC_123会在后续几篇文章详细讲解。