第74篇:美国APT网络攻击破坏伊朗核设施全过程复盘分析(震网病毒上篇)

news2025/1/11 2:35:44

6b63e9751559a89d629859511c1e07ad.png

 Part1 前言 

大家好,我是ABC_123。在上大学时,就曾听过美国NSA使用震网病毒(Stuxnet)攻击了物理隔离的伊朗核设施,病毒在传播过程中使用了多达4个windows系统的0day漏洞,最终导致上千台提纯浓缩铀离心机损坏,致使伊朗的核武器研发计划遇到重大挫折。“震网”病毒是世界上第一个能够实战破坏工业基础设施的病毒,打破了网络攻击无法破坏物理隔离的工控系统的神话,也标志着人类进入了网络战争时代。

最近几年,很多有关美国APT攻击物理隔离的伊朗核设施的官方资料公开,ABC_123对这些资料进行了深入研究,阅读了大约200多篇官方报告和权威分析报告,对这些资料进行归纳、分析和总结,把这个犹如科幻电影、好莱坞巨作一样的APT攻击案例重新梳理出来,对我们提升当下网络安全防护会有很多借鉴意义。ABC_123会写3到4篇文章,讲解美国NSA是如何一步步打穿伊朗核设施国家级物理隔离防护的。

建议大家把公众号“希潭实验室”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。操作方法:点击右上角的【...】,然后点击【设为星标】即可。

4219a7700da2fb351903b167bd725dd5.png

 Part2 分析过程 

  • 美国使用U盘病毒入侵伊朗核设施流程图

以下是ABC_123综合各种资料绘制的攻击流程图,接下来参考这个流程图把整个攻击过程简单描述一下,让大家对整个事件有个大致了解。

fae3ff48d02adba8ff70b7d926f8f3af.jpeg

  • 搭建仿真环境试验震网病毒

美国NSA在前期对伊朗核设施进行了长达数年的信息收集。通过各国情报组织,深入了解朗核设施的施工建设、内部工控系统SCADA的架构,包括所采用的工控软件Wincc Step7的版本号、提纯浓缩铀离心机数量等等。美国还截获了一批运往利比亚的离心机零部件,在美国橡树岭实验室搭建了一套伊朗核设施离心机工厂的仿真环境,用来测试震网病毒的实战效果。

7cf21f277c009ff79539b89e13409c0c.jpeg

  • 震网病毒0.500早期版本借助特工投放

震网病毒大约分为4个大版本,分别是0.500版本、1.001版本、1.100版本、1.101版本。早期Stuxnet 0.500版本是通过荷兰情报机构招募特工,伪装成工程师进入核设施工厂,将U盘插入目标主机进行传播的,后期则是通过网络攻击5家伊朗核设施供应商技术人员的电脑或U盘,间接将病毒带入核设施工厂的。

5302212dfa7cd16f201b6f10671791f1.jpeg

在具体的实战过程中,震网0.500版本主要是通过关闭提纯浓缩铀的离心机的泄压阀门,造成离心机超压爆炸,以此来损坏伊朗核设施,拖慢伊朗核武研发计划。震网病毒早期版本一旦感染目标主机,会潜伏大约30天左右,在此期间会进行全面检查,以确定各种阀门、压力传感器和其它部件是否与预期一致,然后监视其运行状态,同时把正常的值记录下来,在正式开始攻击的时候,将这些值回传给操作人员,误以为一切正常,同时还会破坏掉核设施工厂的安全警报系统。

震网病毒通过读取离心机在震动传感器的参数,确定离心机的受损害程度,并据此调整对离心机的攻击力度,避免离心机出现瞬时破坏性故障,以达到将其失效原因伪装成质量问题的目的,从而实现较为隐蔽的长期损坏离心机的目的

  • 震网1.x版本自动化入侵物理隔离工控系统内网

后期特工将U盘病毒带入核设施工厂内部越来越困难,美国政府要求NSA修改病毒代码,用编程手段实现自动化进入物理隔离的伊朗核设施内网,为了避免伊朗方面怀疑,必须使用新方法替代原有的替代原有的关闭泄压阀门的方式。于是震网病毒更新到了1.x系列版本,美国NSA想到了一个绝妙的方法将病毒传播进入物理隔离的内网,这大概是供应链攻击的早期的成功实践。

f36c3899327cb9b299f03d4b72bf9b29.jpeg

伊朗核设施有很多的供应商,这些供应商负责给伊朗核设施安装西门子工控系统软件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下发控制指令,从而控制泄压阀门开关、离心机转速、设备的运行停止等等,可以理解为获取了工程师站机器的权限,就可以控制工控设备运转。

d72c4defce8585d32c49a6801ec92195.jpeg

当“震网”病毒在内网中获取到工作站主机权限之后,不会立马开始攻击。它首先会进行为期13天的侦查,记录PLC的正常运行状态信息,每分钟记录一次,大概会记录110万次左右。一旦发现离心机工作13天了,或者注满核材料了之后,震网病毒就会正式发起攻击。

  • 工控系统一般的网络架构

接下来看如下这部分流程图,为了方便大家理解,ABC_123在图中标注了物理隔离的工控系统的网络层级结构。

工程站(Engineering Station):工程站用于配置和管理整个控制系统。它提供了一个集成的开发环境,可以进行项目配置、参数设置和逻辑编程。工程站通常由一台或多台计算机组成,运行STEP 7配置软件和其他辅助工具。主要的作用是用来设计自动化程序,并将程序上传到PLC上运行。

操作站(Operating Station):操作站用于监视和操作控制系统。它提供了直观的图形界面,显示过程变量、报警和操作控制元素。操作站通常由一台或多台计算机组成,运行WinCC可视化软件。

控制器(Controller):控制器是负责实际控制过程的设备。它接收传感器的输入信号并发送控制信号到执行器。控制器通常是Siemens S7系列的PLC,通过SIMATIC STEP 7软件进行编程。

0eccf34ccf322033fd74cc621aca5d55.jpeg

集中监控层:主要用于技术人员实时查看核设施工厂的离心机工作状况,这个层级上有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的界面,显示离心机处于正常的压力值状态,用来迷惑技术运维人员。

a79055c9d0c054bee0bdf31110b01b9b.png

在后期,伊朗的技术人员发现越来越多的离心机转速异常出现损坏的时候,曾尝试按下紧急停止按钮,但是震网病毒拦截了这些停止命令,使离心机没办法立即停止,一直运转到爆炸损毁。

  • 震网病毒不出网仍可进行更新

震网病毒可以不通过互联网完成对自身或者对整个局域网所有电脑的病毒版本进行更新升级,其内置了自动寻找新版本、更新旧版本的点对点P2P传输功能,在每台被感染的计算机上,会安装文件共享服务端和客户端,可称之为RPC服务。这样处于同一局域网的计算机可以相互通信,并比较各自的病毒版本,只要有一台计算机出现更高版本,就会立刻自动更新网内所有的低版本的病毒。也就是说,只要新版本的病毒进入局域网,就能迅速实现局域网内全部病毒的更新。

7308d0dd98695fc0b364527fc541310d.jpeg

 Part3 前期准备工作 

为了达成目标,美国APT组织做了大量的准备工作及信息收集工作。

  • 收集伊朗核设施工控系统相关资料

美国APT实施网络攻击时,特别注重与其它国家进行合作。在收集伊朗核设施工厂的工控系统资料方面,得到了很多国家的帮助:德国提供了西门子公司与伊朗核设施工控系统关于离心机相关的技术规范和知识;法国提供了伊朗核设施工厂相关的情报;英国的国家通信情报局也提供了伊朗情报;荷兰提供有关伊朗从欧洲采购非法核计划设备的活动的关键情报,以及有关离心机本身的信息。此外,荷兰的AIVD情报机构的黑客们通过渗透手段,获悉了伊朗核利比亚核计划的相关资料。

  • 入侵伊朗关基单位,获取情报数据

在震网病毒攻击伊朗核设施之前,美国政府的网军经历了超过4年的准备,完全渗透了伊朗的基础工业机构,包括设备生产商、供应商、软件开发商等,从中获取了大量的情报数据。早在2000年的时候,荷兰国家安全情报局AIVD的黑客们入侵了伊朗一个重要国防组织的电子邮件系统,他们从中获取了很多有关伊朗核计划的敏感信息。

  • 搭建伊朗核工业的仿真环境,用于试验病毒

英国和美国情报部门截获了一艘载有数千台前往利比亚的离心机部件的船只,这些离心机与伊朗从巴基斯坦核弹之父那里获取的在纳坦兹核设施工厂使用的离心机是同种型号的,美国政府扣押了这些离心机部件。一年之后,结合在利比亚没收的离心机和核设施资料,美国花费数月时间,将这些部件重新组装,结合前期获取的关于伊朗核计划的情报,搭建了一套类似于伊朗核设施工厂的仿真环境,并进行了各种攻击变量的测试。这套仿真环境,使美国方面完整研究与模拟了伊朗核工业体系,在后期震网病毒研发过程中,成了测试震网病毒功能的绝佳环境,同样在以色列的迪莫纳也搭建了一套仿真环境。

  • 策反伊朗核工程师

人是网络战中最薄弱的环节。早期的震网病毒必须依赖于人工投放的方式,突破物理隔离。荷兰的情报机构在美国CIA中情局和以色列摩萨德的要求下,成立了一家公司,但是公司成立存在问题,引起了伊朗方面的怀疑,因此未能进入纳坦兹核设施工厂。后来在以色列的帮助下,成立了第2家公司,并且荷兰方面联系到了一个伊朗核工程师,并将它成功策反,去现场收集了很多系统的配置信息,几个月的时间已经进入了好几次了,为震网病毒的成功实施提供了充足的信息支持,后续将带有震网病毒的U盘插入物理隔离的内网主机上

  • 派特工偷走2家公司的数字认证证书

美国为了保证震网病毒绕过所有杀软的查杀,从台湾的瑞昱半导体公司RealTek半导体公司与智微科技JMicron技术公司那里,通过特工偷走了数字签名证书,并用于签名震网病毒。这两家公司位于同一工业园区,物理位置相隔很近,他们的数字证书的看管是非常严格的,必须通过好几道门、好几道验证、正对着摄像头、需要提供指纹和视网膜识别才能获取到,它并不是放在联网的电脑上,因此需要人力去渗透的,后续普遍说法怀疑是派特工通过物理渗透的方式把证书给偷出来了。

d6c74dd680ddf8a7325539150b65abf9.png

  • 渗透5家伊朗核设施供应商

震网病毒后续更新到了1.x系列,为了让震网病毒自动化进入伊朗核设施,攻击者挑选了5家伊朗的承包商公司进行网络攻击,这5家公司都有员工经常出入伊朗核设施工厂内部,通过投放新版本震网病毒,感染这5家供应商员工的U盘,在技术人员不知情的情况下,将震网病毒通过U盘带入伊朗核设施工厂内部,并开始自动化横向渗透传播。根据震网病毒日志发现,第一个被攻击的公司是弗拉德(Foolad)科技的公司,一周之后,第二个被攻击的公司是百坡炯(Behpajooh)公司,这家公司主要任务是将采掘出的铀矿转化为铀化物气体,作为Natanz铀浓缩的原料,曾为一家伊斯法罕的钢铁厂安装过西门子S7-400型PLC,配套的Step 7和WinCC软件以及现场总线通信模块。

7ea3872a6ca6dd6eaf9cda71aaf11d8e.png

  • 伊朗总统视察核设施电视画面泄密

如下图所示,在2008年,伊朗总统内贾德在纳坦兹的铀浓缩厂控制室观看SCADA,屏幕上的两个黑点显示出当前的离心机有问题,已被隔离使用,但是对整个工艺流程还在正常运行。在这段录像中,很多关于工控系统包括离心机的型号等机密信息都被泄露了,包括SCADA系统(数据采集与监视控制系统)屏幕、工厂配置情况、6组离心机,每组164个离心机,很多护卫内贾德总统的人等等,他身后的一名科学家几个月后被暗杀。

1fab7c603b126bf42b4e47d4a62a2419.png

9140a3ea325b4244eb949945cde4349b.png

 Part4 未完待续 

由于此APT事件过于复杂,篇幅有限。关于震网病毒研发历程、震网病毒早期版本如何控制泄压阀关闭、震网病毒后期版本如何控制离心机转速、震网病毒的入侵流程、震网病毒因何原因失控等等谜题,ABC_123会在后续几篇文章详细讲解。

1ceda268d06ff55f0bfc6676eeb66f75.png

公众号专注于网络安全技术分享,包括APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,每周一篇,99%原创,敬请关注。

Contact me: 0day123abc#gmail.com(replace # with @)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么 Elasticsearch 中高基数字段上的聚合是一个坏主意以及如何优化它

Elasticsearch 是分布式搜索和分析引擎,是满足搜索和聚合需求的最受欢迎的选择。 Elasticsearch 提供了 2 种数据类型来存储字符串值: Text:- 在存储到倒排索引之前对这些内容进行分析,并针对全文搜索进行优化。 文本字段不允许…

C 风格文件输入/输出---有格式输入/输出--(std::scanf, std::fscanf, std::sscanf)

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 有格式输入/输出 从 stdin、文件流或缓冲区读取有格式输入 s…

电脑文件删除没有在回收站怎么恢复?可以参考这些方法

“不慎删除了辛苦搜集的资料&#xff0c;可是在回收站里却找不到它们。这可真是让人困扰。恳请大神能否伸出援手&#xff0c;帮我解决这个问题&#xff1f;” ——在使用电脑的过程中&#xff0c;我们常常会不小心删除一些重要的文件&#xff0c;而这些文件并未进入回收站&…

Spring中加密工具类DigestUtils和BCryptPasswordEncoder

spring中的加密工具类DigestUtils Spring中自带了一个加密工具类&#xff0c;所在的位置的是org.springframework.util.DigestUtils&#xff0c;在spring-core模块中。 该工具类中默认只提供了MD5加密相关的静态方法&#xff0c;同时还有一些获取其他加密算法的私有方法&#…

pdf拆分成多个文件的方法以及注意事项

PDF是一种非常流行的文件格式&#xff0c;但有时候我们需要将一个大的PDF文件拆分成多个小的文件&#xff0c;以便于管理和分享。本文将介绍一些拆分PDF文件的方法以及需要注意的事项。 AdobeAcrobat是一款专业的PDF编辑软件&#xff0c;可以轻松地拆分PDF文件。以下是使用Adob…

读取XML的几种方式

一、为什么使用XML 1、便于不同应用程序之间通信。 2、便于不同平台之间通信。 3、便于不同平台之间数据共享。 二、Dom读取 xml文件内容 <?xml version"1.0" encoding"UTF-8"?> <bookstore><book id"1"><name>冰…

Java | 线程的生命周期和安全

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; &#x1f334;线程的生命周期 sleep方法会让线程睡眠&#xff0c;睡眠时间到了之后&#xff0c;立马就会执行下面的代码吗&#xff1f; 答&#xff1a;不会&am…

OSM最新电力数据(2023年9月1日数据)转换总结及与三个月前转换结果对比

sm包含种类繁多&#xff0c;我们这里是只以刚转换的电力设备为例抛砖引玉的进行说明。 首先先看一下转换结果大概368个文件&#xff0c;大约92种类型。当然其中有同一类设备的点、线、面类型&#xff01; 这种带增强的文件&#xff0c;是我在基础规则之外增加的提取规则。是为…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 六)

AppStorage&#xff1a;应用全局的UI状态存储 AppStorage是应用全局的UI状态存储&#xff0c;是和应用的进程绑定的&#xff0c;由UI框架在应用程序启动时创建&#xff0c;为应用程序UI状态属性提供中央存储。 和LocalStorage不同的是&#xff0c;LocalStorage是页面级的&…

SG-Former实战:使用SG-Former实现图像分类任务(一)

摘要 SG-Former是一种新型的Transformer模型&#xff0c;它被提出以降低视觉Transformer的计算成本&#xff0c;同时保持其优秀的性能表现。计算成本的降低使得SG-Former能够更有效地处理大规模的特征映射&#xff0c;从而提高了模型的效率和全局感知能力。 SG-Former的核心思…

算法综合篇专题三:二分法

"寻一颗&#xff0c;未萌的渺小啊&#xff0c;随着青翠未来&#xff0c;升入辽阔云霄~" 现在你有一个"升序"数组&#xff0c;想让你在这个数组里完成查找数字n&#xff0c;在这个数组内的下标&#xff0c;你可以怎么做&#xff1f;这也许是不少友子们初遇…

内存卡中毒了格式化能解决吗?这样清除病毒更有效

内存卡被广泛应用于手机、相机、MP3等数码产品&#xff0c;并且可以存储各种媒体文件&#xff0c;如视频、图片等。然而&#xff0c;在我们使用过程中&#xff0c;您是否因内存卡格式化而导致重要数据丢失感到困扰。对于“内存卡中毒了格式化能解决吗&#xff1f;“的疑惑&…

用于非线性多载波卫星信道的多输入多输出符号速率信号数字预失真器DPD(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【LeetCode刷题篇零】一些基础算法知识和前置技能(下)

数组常用技巧 使用数组代替Map 使用另一个数组来统计每个数字出现的次数&#xff0c;数组的下标作为key, 数组的值作为value&#xff0c; 将数字作为数组的下标索引&#xff0c;数组里的值存储该数字出现的次数&#xff0c;原理有点类似桶排序中使用的计数数组。 比如这里如…

tensorboard可视化文件:events.out.tfevents.

跑了一个开源代码&#xff0c;跑完之后看到生成的文件夹里&#xff0c;出现了events.out.thevents.xxx的格式文件&#xff0c;比较好奇&#xff0c;进行了一番学习~   首先说明文件作用&#xff1a;用于tensorboard显示的可视化文件 使用方法 首先要安装tensorboard&#x…

mvn打包:依赖包和启动包分离

简述 依赖插件&#xff1a; maven-jar-plugin maven-assembly-plugin项目目录结构 assembly.xml <assembly xmlns"http://maven.apache.org/ASSEMBLY/2.1.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

zookeeper可视化界面zkui

获取zkui github地址&#xff1a;https://github.com/DeemOpen/zkui 可以使用客户端clone&#xff0c;我这里直接下载zip 解压 编译 如果将包下载到了linux&#xff0c;需要在linux中编译&#xff0c;我的linux没有maven&#xff0c;所以在window编译好&#xff0c;然后复制…

Win10显卡驱动安装失败怎么办

在更新Win10系统的过程中&#xff0c;显卡驱动也要跟着更新&#xff0c;近期有小伙伴反映在安装的过程中显示Win10显卡驱动安装失败&#xff0c;这是怎么回事&#xff0c;遇到这种问题应该怎么解决呢&#xff0c;下面小编就给大家详细介绍一下Win10显卡驱动安装失败的解决方法&…

一文说清mmap内存映射底层原理(以LCD中的Framebuffer为例)

一文说清mmap内存映射底层原理 【目录】 一、宏观解释内存映射 二、进程虚拟地址空间 三、虚拟内存区域描述符 四、内存映射的实现 五、mmap在Framebuffer中的应用 前几天的一场面试中&#xff0c;面试官问&#xff1a;为什么可以通过mmap直接操作LCD&#xff1f; 当…

上海亚商投顾:沪指放量反弹 医药、AI概念股集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数早间震荡反弹&#xff0c;午后集体拉升涨超1%&#xff0c;深成指一度涨超1.5%&#xff0c;随后涨幅略…