Stuxnet感染流程.doc_第1页
Stuxnet感染流程.doc_第2页
Stuxnet感染流程.doc_第3页
Stuxnet感染流程.doc_第4页
Stuxnet感染流程.doc_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Stuxnet的感染流程2011年11月【百科名片】Stuxnet蠕虫病毒(超级工厂病毒)是世界上首个专门针对工业控制系统编写的破坏性病毒,能够利用对windows系统和西门子SIMATIC WinCC系统的7个漏洞进行攻击。特别是针对西门子公司的SIMATIC WinCC监控与数据采集 (SCADA) 系统进行攻击,由于该系统在我国的多个重要行业应用广泛,被用来进行钢铁、电力、能源、化工等重要行业的人机交互与监控。 传播途径:该病毒主要通过U盘和局域网进行传播。历史“贡献”:曾造成伊朗核电站推迟发电。 2010-09-25,进入中国。【技术分析报告】Worm/Stuxnet利用多种Windows系统漏洞进行传播,试图攻击西门子SIMATIC WinCC监控与数据采集(SCADA)系统。西门子SIMATIC WinCC SCADA系统用于工业控制领域,一旦运行该系统的服务器感染了Worm/Stuxnet,工业控制指令和数据等信息可能被病毒拦截、窃取或修改。此外,该蠕虫还会从互联网进行更新和接收黑客命令,使感染主机被黑客远程完全控制,成为“僵尸计算机”。下面是详细技术分析报告。 一、传播途径 1.利用Windows Shell快捷方式漏洞(MS10-046)和U盘传播 U盘传播是Worm/Stuxnet主要传播途径之一。病毒会在移动存储设备的根目录下创建如下病毒文件: WTR4132.tmp WTR4141.tmp 同时,还会创建下列快捷方式文件,指向WTR4141.tmp文件: Copy of Shortcut to.lnk Copy of Copy of Shortcut to.lnk Copy of Copy of Copy of Shortcut to.lnk Copy of Copy of Copy of Copy of Shortcut to.lnk 在没有安装MS10-046补丁的Windows系统中上使用被感染的U盘时,只需在资源管理器中访问U盘根目录,即会自动加载病毒模块WTR4141.tmp,WTR4141.tmp进而加载WTR4132.tmp,造成系统感染。 2.利用MS10-061漏洞和WBEM传播 病毒会利用Windows Spooler漏洞(MS10-061),攻击局域网上开启了“文件和打印机共享”的机器。被成功攻陷的计算机上会生成2个病毒文件: %SystemDir%winsta.exe %SystemDir%wbemmofsysnullevnt.mof %SystemDir%wbemmofsysnullevnt.mof将会在某时刻自动执行%SystemDir%winsta.exe(即病毒文件),造成感染。 3.利用共享文件夹传播 病毒扫描局域网机器的默认共享C$和admin$,并尝试在远程计算机上创建病毒文件: DEFRAG.TMP 文件创建成功后,病毒会再远程创建一个计划任务,来定时启动病毒体。 4.利用MS08-067漏洞传播 病毒向存在MS08-067漏洞的远程计算机发送恶意RPC请求,一旦攻击成功,即可完全控制被攻击计算机,进行感染。二、隐藏自身 1.用户层隐藏 病毒文件WTR4141.tmp从U盘被加载后,对下列系统API进行Hook: FindFirstFileW FindNextFileW FindFirstFileExW NtQueryDirectoryFile ZwQueryDirectoryFile 企图隐藏病毒在U盘上的病毒文件。用户使用Windows资源管理器或其他使用用户层API查看文件目录的工具,都无法看到病毒文件的存在。 2.驱动层隐藏 病毒释放出文件系统过滤驱动mrxnet.sys,从内核层面对病毒文件进行隐藏。驱动层隐藏在功能目的上,与上述用户层隐藏是一致的。 Worm/Stuxnet会为mrxnet.sys创建一个系统服务,服务名为MRXNET,每次系统启动时自动加载。三、攻击西门子SIMATIC WinCC SCADA系统 Mrxcls.sys是病毒释放出来的另一个驱动程序,病毒也为它建立了一个名为MRXCLS的服务,负责在Windows启动时自动加载该驱动。 Mrxcls.sys将会向名称为services.exe,S7tgtopx.exe,CCProjectMgr.exe的进程中注入并执行病毒代码。S7tgtopx.exe和CCProjectMgr.exe都是与西门子系统相关的进程。被注入的代码寻找名为“s7otbxsx.dll”的模块,并尝试hook该模块中的下列API函数: s7_event s7ag_bub_cycl_read_create s7ag_bub_read_var s7ag_bub_write_var s7ag_link_in s7ag_read_szl s7ag_test s7blk_delete s7blk_findfirst s7blk_findnext s7blk_read s7blk_write s7db_close s7db_open s7ag_bub_read_var_seg s7ag_bub_write_var_seg 四、从互联网更新和接收黑客命令 病毒尝试访问下面域名,进行自身更新和接收黑客命令, 五、防范措施 1.安装Windows安全更新 特别是MS08-067,MS10-046,MS10-061这三个补丁一定要安装。 2.关闭默认共享C$和admin$ 可用下面命令行实现: net share admin$ /del net share c$ /del 3.屏蔽病毒域名 可手工修改%SystemDir%driversetchosts文件,加入下列两行: 4.安装杀毒软件防护 安装杀毒软件,及时升级病毒库,开启实时防护功能,即可有效查杀防御Worm/Stuxnet蠕虫家族。2010年9月29日,我们还将在Virus Bulletin 会议上发布一篇包含W32.Stuxnet详尽技术细节的论文。同时我们也注意到,最近非常多的人开始对Stuxnet感染系统且不易检测的事情表示关注。 由于Stuxnet针对某个特定的工业生产控制系统进行攻击,而这些行为不会在测试环境中出现,因此在测试环境下观察到的病毒行为不全面,很可能产生误导。事实上,运行后,Stuxnet会立即尝试进入一个可编程逻辑控制器(PLC) 的数据块DB890。这个数据块其实是Stuxnet自己加的,并不属于目标系统本身。Stuxnet 会监测并向这个模块里写入数据,以根据情况和需求实时改变PLC的流程。 在这篇博客里,我们会深入探讨Stuxnet的PLC感染方式和Rootkit功能,特别是以下几个方面:它如何选择作为攻击目标的工业生产控制系统; 感染PLC代码块的方法; 注入PLC的恶意代码; 在被感染Windows机器中的PLC Rootkit代码。 这四点我们会分开讲,因为用来实现这些目的的代码差异很大。 Stuxnet的目的是通过修改PLC来改变工业生产控制系统的行为,包括拦截发送给PLC的读/写请求,以此判断系统是否为潜在的攻击目标;修改现有的PLC代码块,并往PLC中写入新的代码块;利用Rootkit功能隐藏PLC感染,躲避PLC管理员或程序员的检测。这些任务之间差别很大,比如,在被感染的Windows 机器中隐藏感染代码使用的是标准的C/C+ 代码,而Stuxnet 试图在工业生产控制系统及PLC中执行的恶意代码则是用MC7字节码写的。MC7 是PLC 环境中运行的一种汇编语言,并常用STL 进行编写。 在讨论Stuxnet攻击PLC的技术之前,让我们先来看看PLC是如何访问和编写的。要进入PLC, 首先需要安装特殊的软件;Stuxnet 会专门针对编写PLC某些模块的WinCC/Step 7软件进行攻击。安装这些软件后,程序员可以通过数据线连接PLC,以访问其中的内容,重新配置PLC,下载程序至PLC,或调试之前加载的代码。一旦PLC被配置和编译后,Windows机器就可以断开和PLC的联系了,PLC会自行运行。为了使您有一个更直观的感受,下图显示了在实际操作中,实验室里一些基本的设备配置: 下面的截图显示了Step7 STL编译器中Stuxnet恶意代码的一部分。其中,编写Stuxnet功能代码块的MC7代码的开始部分是可视的;下面显示的代码来自于反汇编后的FC1873模块。 Step 7 软件使用库文件s7otbxdx.dll 来和PLC通信。当Step7 程序准备进入PLC时,它会调用该DLL文件中不同的例程。例如,如果一个代码块需要用Step 7从PLC中读出,那么,例程s7blk_read就会被调用到。s7otbxdx.dll中的代码会进入PLC, 读出其中的代码,并把它传回Step 7程序,如下图所示: 现在让我们看看当Stuxnet是如何进入PLC的。运行后,Stuxnet会将原始的s7otbxdx.dll文件重命名为s7otbxsx.dll。然后,它将用自身取代原始的DLL文件。现在,Stuxnet就可以拦截任何来自其他软件的访问PLC的命令。 被Stuxnet修改后的s7otbxdx.dll 文件保留了原来的导出表,导出函数为109个,这就令Stuxnet可以应付所有相同的请求。大部分导出命令会转发给真正的DLL,即重命名后的s7otbxsx.dll,并不会出现什么难对付的状况;事实上,109种导出形式中的93种都会照这样处理。然而,真正的“诡计”使用在剩下的16种导出命令中。这16种导出不会被简单的转发,而是被改动后的DLL 拦截了。被拦截的导出命令为在PLC中读、写、定位代码块的例程。通过拦截这些请求,Stuxnet 可以在PLC 管理员没有察觉的情况下,修改发送至PLC 或从PLC返回的数据。同时,通过利用这些例程,Stuxnet 可以将恶意代码隐藏在PLC 中。 为了更好的了解Stuxnet 如何进入和感染PLC,我们先来看看各种类型的数据。PLC 会处理由管理员加载到PLC的代码和数据。这里,我们将简要介绍一下最常见的模块和他们的功能:数据模块(DB)包含了程序相关的数据,比如数字,结构等。 系统数据模块(SDB) 包含了PLC 的配置信息; 它们是根据连接到PLC 的硬件模块的数量/种类设立的。 组织模块(OB) 是程序的入口。他们由CPU 循环执行。针对Stuxnet, 有两个特别需要的OB: OB1 是PLC 程序的入口。它没有特别的时间要求,总是循环执行。 OB35 是一个标准的“看门狗”模块,系统会每100ms执行一次。这个功能可能包含了所有用于监控紧要输入的逻辑,以达到立即响应,执行功能的目的。 功能模块(FC)都是标准的代码快。它们包含了会被PLC 执行的代码。一般说来,OB1模块会引用至少一个FC 模块。 下面的部分会详细讲述之前提到的威胁的四大方面。1. 如何选择需要感染的PLC。 Stuxnet会根据目标系统的特点,使用不同的代码来感染PLC。 一个感染的序列包括了许多PLC 模块(代码模块和数据模块),用以注入PLC来改变目标PLC 的行为。这个威胁包括了三个感染序列。其中两个非常相似,功能也相同,我们将其命名为序列A和B。第三个序列我们命名为序列C。Stuxnet通过验证“指纹”来判断系统是否为计划攻击的目标。它会检查:PLC种类/家族:只有CPU 6ES7-417 和6ES7-315-2 会被感染。 系统数据模块:SDB 会被解析;根据他们包含的数据,感染进程会选择A,B或其它感染方式开始行动。当解析SDB 时,代码会搜索这两个值是否存在- 7050h and 9500h;然后根据这两个数值的出现次数,选择序列A 或B 中的一种来感染PLC。 代码还会在SDB 模块的50h 子集中搜索字节序2C CB 00 01, 这个字节序反映了通信处理器CP 342-5 (用作Profibus-DP) 是否存在。 而选择序列C进行感染的条件则由其他因素构成。2. 感染方法 Stuxnet使用“代码插入”的感染方式。当Stuxnet 感染OB1时,它会执行以下行为: 增加原始模块的大小; 在模块开头写入恶意代码; 在恶意代码后插入原始的OB1 代码。 Stuxnet也会用类似于感染OB1的方式感染OB35。它会用自身来取代标准的协同处理器DP_RECV 代码块,然后在Profibus (一个标准的用作分布式I/O的工业网络总线) 中挂钩网络通信。 利用A/B方法的感染步骤如下:检查PLC 类型;该类型必须为S7/315-2; 检查SDB 模块,判断应该写入序列A 或B 中的哪一个; 找到DP_RECV,将其复制到FC1869,并用Stuxnet嵌入的一个恶意拷贝将其取代; 在序列中写入恶意模块(总共20个),由Stuxnet 嵌入; 感染OB1,令恶意代码可以在新的周期开始时执行; 感染OB35, 它将扮演“看门狗”的角色。 3. 感染代码 被注入OB1 功能的代码是用来感染序列A 和B的。这些序列包含了以下模块:代码块:FC1865 至FC1874, FC1876 至FC1880 (注意:FC1869并非Stuxnet的一部分,而是PLC的DP_RECV模块的一个拷贝); 数据模块:DB888 至DB891。 序列A 和B 用DP_RECV 挂钩模块来拦截Profibus 中的数据包,并根据在这些模块中找到的数值,来构造其他的数据包并发送出去。这由一个复杂的状态机控制(状态机被建立在上面提到的FC 模块中)。这个状态机可部分受控于数据块DB890 中的DLL。 在某些条件下,序列C会被写入一个PLC。这个序列比A和B包含更多的模块:FC6055 至FC6084; DB8062, DB8063; DB8061, DB8064 至DB8070 (在运行中产生)。 序列C主要为了将I/O信息读写入PLC的内存文件映射的I/O 区域,以及外围设备的I/O。 程序A/B 的控制流如下图所示,在之前的Step7 编辑器的截图中也有部分显示(数据模块F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论