大家好,我是ABC_123。关于震网病毒stuxnet我曾经写过3篇文章,详细介绍了震网病毒0.5版本借助人员社工的方式插入内网电脑、1.x版本震网病毒借助5家供应链公司实现自动化入侵物理隔绝的核工厂的案例分析。今天重新整理了一下当时的资料,还有一些零零散散的草稿部分没有写,今天就总结发出来吧。
前面我写了3篇文章,欢迎大家阅览:
第74篇:美国APT网络攻击破坏伊朗核设施全过程复盘分析(第1篇)
第75篇:美国APT供应链打穿伊朗物理隔离的核工厂案例分析(第2篇)
震网病毒内置了6个Windows系统漏洞及2个工控系统漏洞,包括4个Windows系统的0day漏洞、1个MS08-067的Nday漏洞、几个Windows本地提权漏洞。震网病毒在内网中的传播主要通过以下方式:MS08-067远程溢出漏洞和打印后台服务漏洞(MS10-061)用于获取周边主机权限;快捷方式文件解析漏洞(MS10-046)通过恶意LNK文件感染用户打开的文件夹;利用局域网共享等方式自动传播到网络中的其他主机。通过多种漏洞和传播手段,震网病毒能够高效地在内网中进行横向渗透,对目标网络进行全面感染。
1 快捷方式文件解析漏洞(MS10-046)。当用户打开包含恶意LNK文件的文件夹或浏览器窗口时,系统会尝试解析LNK文件中指定的图标路径。如果路径指向恶意DLL文件,系统会自动加载该DLL文件并执行恶意代码。即使用户未直接运行文件,仅打开文件夹即可触发病毒执行。
2 打印后台服务远程代码执行漏洞(MS10-061)。该漏洞允许攻击者通过网络中的打印后台服务执行恶意代码,主要用于局域网中的横向传播。
3 RPC远程溢出漏洞(MS08-067)。这是一个远程过程调用(RPC)漏洞,允许攻击者通过网络溢出目标主机的内存并获得系统权限。由于伊朗核设施的许多Windows主机未打补丁,这一漏洞被广泛利用以快速传播病毒。
4 任务计划程序权限提升漏洞(MS10-092)。攻击者可利用任务计划程序中的漏洞提升本地权限,获得更高的系统访问权限。
5 内核模式驱动程序权限提升漏洞(MS10-073)。该漏洞存在于Windows内核模式驱动程序中,允许攻击者提升权限至系统级别。
6 桌面墙纸系统参数本地权限提升漏洞(MS09-025)。这个漏洞曾短暂出现在震网病毒1.001版本中,利用Windows桌面墙纸的参数设置提升本地权限。但随着微软的更新补丁,该漏洞在后续版本的震网病毒中被移除。
在攻击工业控制系统的过程中,震网病毒还利用了德国西门子公司研发的 WinCC 和 Step 7 软件中的 0day 漏洞,具体包括以下两个工控系统漏洞:
1 WinCC默认密码漏洞(CVE-2010-2772)。WinCC 软件存在密码硬编码漏洞,每个数据库均使用默认的账号和密码。震网病毒利用该漏洞直接登录 WinCC 的数据库系统,随后执行以下操作:在数据库中新建表并将自身代码写入其中,创建存储过程,用于提取并执行恶意代码,在完成操作后删除存储过程以掩盖痕迹。通过此漏洞,震网病毒能够篡改工业控制系统中的数据和配置。
2 Step7软件dll劫持漏洞(CVE-2012-3015)。该漏洞影响范围包括SIMATIC WinCC 6.2和SIMATIC WinCC 7.0版本。由于Step 7软件在打开工程文件时存在DLL加载策略缺陷,震网病毒利用这一漏洞通过替换合法的s7otbxdx.dll文件,将其替换为恶意版本。恶意DLL执行以下操作:篡改WinCC下发给PLC的控制指令,使用类似中间人攻击的方式,劫持与PLC的通信,并间接控制PLC的操作逻辑,隐藏篡改后的指令,向操作员显示伪造的正常运行状态。
通过这两个工控漏洞,震网病毒能够在不被察觉的情况下对工业控制系统进行深度渗透,实现对PLC的恶意控制和数据篡改。
震网病毒的传播过程在细节上具有很高的技术复杂性。首先,当含有震网病毒的U盘插入目标电脑时,如果有用户浏览了U盘目录,便会触发快捷方式文件解析漏洞,进而启动震网病毒。如果目标计算机的Windows系统权限不够高,病毒会利用文章开头提到的两个0day提权漏洞来获取系统的最高管理员权限。震网病毒主要由6个文件组成:4个快捷方式文件和2个临时的DLL文件。
4个快捷方式文件:这些快捷方式文件利用了MS10-046的Lnk漏洞,因此会被用来触发震网病毒的启动,这些文件是为了兼容不同版本的Windows操作系统而设计的,它们确保在插入U盘时,无论操作系统版本如何,都能成功启动病毒。
1、Copy of Shortcut to.lnk
2、Copy of Copy of Shortcut to.lnk
3、Copy of Copy of Copy of Shortcut to.lnk
4、Copy of Copy of Copy of Copy of Shortcut to.lnk
2个临时的DLL文件:这两个文件分别是~WTR4141.tmp和~WTR4132.tmp。
~WTR4141.tmp:用于加载U盘上的病毒,并执行两个主要任务:加载~WTR4132.tmp(震网病毒的主程序);使用钩子技术修改kernel32.dll的API接口,并通过修改Explorer.exe的入口表来隐藏病毒文件。
~WTR4132.tmp:包含震网病毒的主要部分,在内存中解压并执行。
震网病毒会检查当前权限是否为管理员权限。如果不是,病毒会利用两个0day提权漏洞进行提权,分别是:Win32K.sys 中的Keyboard Layout漏洞,用于提升旧版本Windows系统(如Windows 2000和Windows XP)的权限;Windows Task Scheduler 漏洞,用于提升新版本Windows系统(如Windows Vista、7和Windows 2008)的权限。提权后,病毒会通过进程注入的方式,安装并激活自己。此外,病毒还会识别并攻击计算机中的反病毒程序,选择合适的进程进行注入。如果没有反病毒软件,病毒会选择注入lsass.exe进程。
震网病毒会在Windows目录安装6个文件,分别是4个加密文件和2个驱动文件。病毒将设备驱动安装在注册表中,并确保每次计算机启动时驱动都会运行。文件的典型形式如下:
C:\WINDOWS\inf\oem7A.PNF:加密的主DLL文件;
C:\WINDOWS\inf\oem6C.PNF:日志文件;
C:\WINDOWS\inf\mdmcpq3.PNF:震网病毒的配置文件;
C:\WINDOWS\inf\mdmeric3.PNF:一个包含90字节数据的文件;
C:\WINDOWS\system32\Drivers\mrxnet.sys:Rootkit驱动程序,用于隐藏文件;
C:\WINDOWS\system32\Drivers\mrxcls.sys:另一个Rootkit驱动程序。
这两个驱动程序mrxcls.sys和mrxnet.sys会被注册为系统服务,分别为 MRXCLS 和 MRXNET。它们利用 Rootkit 技术进行文件隐藏,并通过数字签名绕过杀毒软件的检测。mrxcls.sys 负责攻击并渗透 WinCC系统,将存储在 %Windir%\inf\oem7A.PNF 中的模块注入到 services.exe、S7tgtopx.exe 和 CCProjectMgr.exe 这3个与 WinCC 系统运行相关的进程中;mrxnet.sys 则通过修改内核调用来隐藏被拷贝到U盘上的快捷方式和DLL文件。
震网病毒还会启动一个RPC服务,开始与局域网中其他被感染的计算机进行信息交流,并通过P2P的方式,确保所有感染的机器都能自动升级到最新版本,将恶意代码加载到内存中执行。
震网病毒通过感染USB存储设备传播,并利用多个漏洞将恶意代码加载到内存中,伪装为正常系统文件。在感染的计算机上,震网病毒会搜索是否安装了西门子Step 7和WinCC软件。如果未找到这些目标环境,病毒会进入休眠状态;若发现目标环境,则开始执行攻击。
震网病毒主要针对s7otbxsx.dll文件进行篡改或替换。原本这个DLL文件负责在Step 7和WinCC之间实现与PLC的通信,包括将编译后的控制指令传输给PLC,并从PLC接收调试信息或状态数据。篡改后的恶意DLL文件具有类似“中间人攻击”的功能,具体包括:
修改PLC程序:在将控制指令写入PLC时,恶意DLL可以插入恶意字节码,同时欺骗Step 7的检查机制,使其未能检测到代码已被篡改。
拦截和修改指令:恶意DLL拦截从WinCC发往PLC的控制指令,篡改指令内容,从而实现对工业设备(如离心机)的恶意控制。
伪造运行状态:通过操控WinCC的显示界面,恶意DLL将伪造的正常运行状态呈现给操作员,误导技术人员,掩盖系统的异常行为。
通过这些手段,震网病毒能够精确地干扰目标工业设备的运行,同时不会影响非目标设备。震网病毒的高度隐蔽性和破坏性使其成为一项具有里程碑意义的网络攻击武器,能够在不被察觉的情况下造成严重破坏。
每个震网病毒在启动和传播过程中都会记录入侵的每台计算机的信息。安全专家通过收集全球数万个震网病毒样本,进行了综合分析,最终确定了震网病毒在全球范围内最初的5个感染地点。这5个地点都位于伊朗,而且都是位于核设施工厂的周边的设备承包商处。这些承包商负责工业控制系统的建设和维护工作,他们的技术人员会定期带着笔记本电脑和USB闪存设备进出核设施工厂。所以震网病毒是先感染这些技术人员的电脑,将病毒驻留在他们的计算机上,等待被带入纳坦兹核工厂后,病毒通过技术人员的计算机被间接传播到工厂内。
震网病毒的传播路径在反病毒专家的调查中并未遇到重大困难,因为震网病毒1.x系列版本会记录每台被感染计算机的IP地址、计算机名称、域名和感染时间,并将这些信息存入日志文件中。安全人员通过这些日志文件追溯感染源,最终定位到最早被感染的计算机。赛门铁克的工程师通过来自多家反病毒公司的3280个病毒样本,确认了最初感染的五家公司,它们都是伊朗核设施的承包商。百坡炯一家公司是同时被3个版本的震网病毒感染过。
直到2010年6月,白俄罗斯的安全公司VirusBlokAda接到伊朗客户报告,出现大规模的Windows系统蓝屏和重启问题。这一异常现象引起了安全专家的关注,他们发现了一种新的蠕虫病毒。在分析病毒源代码时,他们提取了其中的两个常见词,最终将其命名为“Stuxnet”。震网病毒的复杂性超乎想象。根据赛门铁克工程师的说法,通常他们只需几分钟就能大致了解一个病毒的代码,但震网病毒的样本却让他们花了整整一个月才揭开其攻击载荷部分以及运行目的的真面目。
2010年初,美国和以色列决定对伊朗的1000多台离心机进行攻击。以色列在未经美国NSA同意的情况下,修改了震网病毒的代码,加入了0day漏洞并改变了传播机制,使病毒本应潜伏的特性被破坏,反而增加了其传播功能。以色列还投放了修改版震网病毒,这导致病毒迅速失控,开始广泛传播,最终波及全球115个国家。
震网病毒原本设计为潜伏在伊朗的计算机控制系统中,直到其目标设备被激活。然而,由于一个编程错误,病毒错误地扩散到不支持的操作系统,如Windows 95和Windows 98,导致系统崩溃和蓝屏死机。这一错误暴露了震网病毒的存在,引起了安全专家的注意。研究人员发现,震网的开发者在代码中错误地将“and”与“or”交换,导致病毒在所有版本的Windows系统上执行,包括那些不受支持的旧系统。
伊朗的核设施在2010年前与外界隔离,因此并未怀疑离心机故障与病毒有关,反而认为是设备设计缺陷,解雇了多位科学家和工程师。然而,随着震网病毒的泄露和传播,全球安全专家开始分析它的传播方式,并发现病毒不仅影响了伊朗的核设施,还可能危及全球的电力设施。震网病毒的泄露和错误修改使得其危害极大,导致了前所未有的网络安全威胁。
1. 后续ABC_123会抽时间对stuxnet病毒的代码层面上的功能进行分析总结,敬请期待。
公众号专注于网络安全技术分享,包括APT事件分析、红队攻防、蓝队溯源、渗透测试、代码审计、网络安全培训等,99%原创,敬请关注。
Contact me: 0day123abc#gmail.com
(replace # with @)