Board logo

标题: [病毒查杀] Stuxnet病毒技术分析报告 [打印本页]

作者: shillan    时间: 2010-9-29 20:53     标题: Stuxnet病毒技术分析报告

worm.win32.stuxnet病毒分析
病毒名称:
worm.win32.stuxnet
病毒概述:
  这是一个可以通过微软ms10-046漏洞(lnk文件漏洞),ms10-061(打印服务漏洞),ms08-067等多种漏洞传播的恶性蠕虫病毒。另外该病毒还可以专门针对西门子的scada软件进行特定攻击,以获取其需要的信息。
技术细节:
传播方式:
1. 通过ms10-046漏洞传播
  病毒运行后会拷贝自身到移动存储上并命名为~wtr数字.tmp(动态库)和一个注入下列文件名的lnk文件组成:
copy of shortcut to .lnk
copy of copy of shortcut to .lnk
copy of copy of copy of shortcut to .lnk…
在存在ms10-046漏洞的机器上,只需浏览这些lnk,explorer.exe就会将~wtr数字.tmp加载起来。
2. 通过ms10-061漏洞传播
  该病毒还会利用打印机或打印机共享漏洞ms10-061漏洞传播。病毒会将自身拷贝到存在该漏洞的远程机器的%system%目录下,并利用wmi将其执行起来。
3. 通过共享文件夹传播
  该病毒还会试图将自身拷贝到局域网共享文件夹下,并命名为类似defrag(随机数字).tmp的名称。
4. 通过ms08-067漏洞传播
  该病毒还会利用ms08-067漏洞传播。
  病毒的主要功能以及大致流程:
  当用户浏览可移动存储上的copy of shortcut to .lnk文件后,explorer.exe会加载~wtr数字.tmp,然后病毒会加载自身的另一个名为~wtr数字.tmp的动态库。在加载该恶意dll时,病毒并没有通过普通的loadlibrary函数加载,为了隐藏自身模块,同时为了达到不释放文件来加载病毒模块的目的,它采取了一个特殊方式。病毒会首先hook ntdll的一些导出函数,然后,它会构造一个特殊的并不存在的文件名如kernel32.dll.aslr,然后以此为参数调用loadlibrary,正常情况下,该调用会失败因为该文件并不存在,但是因为病毒已经提前hook了ntdll,hook函数会监控对此类特殊文件名的打开操作。如果发现是自身构造的虚假文件名,则会重定向到其他位置,比如另一个文件或者通常情况下是一块已经被病毒解密过的内存,这样,外界看到的是一个常见的模块名比如kernel32,而实际上是病毒模块。这样病毒就达到了隐藏自身的目的。
  
  之后病毒会运行lsass.exe并修改程序的内存,然后释放如下文件:
%system%\drivers\mrxcls.sys
%system%\drivers\mrxnet.sys
%windir%\inf\oem6c.pnf
%windir%\inf\oem7a.pnf
%windir%\inf\mdmcpq3.pnf
%windir%\inf\mdmeric3.pnf
并在可移动存储上创建~wtr数字.tmp和copy of shortcut to .lnk等文件。
mrxcls.sys 和mrxnet.sys具有合法的数字签名。

  由于调用了lsass.exe这个系统进程做坏事,因此在中毒机器内会看到至少3个lsass.exe进程。(有两个是病毒启动的)

  然后病毒会将自身注入到services.exe,在services中,病毒会通过查找software\siemens\step7,software\siemens\wincc\setup等注册表项检测西门子软件。病毒还能禁用windows defender等杀毒软件的保护。

  病毒具有后门功能: 病毒会通过80端口连接远程服务器并发送请求http://[server_address]/index.php?data=[data]

其中服务器地址为:

www.*****mierfutbol.com

www.*****sfutbol.com

发送的数据包括:

1、windows版本信息

2、计算机名

3、网络组名称

4、是否安装了工控软件

5、网卡的ip地址


发送完毕数据后,病毒会等待服务器响应,之后病毒可以根据服务器的要求执行以下功能:
1、读文件
2、写文件
3、删除文件
4、创建进程
5、注入dll
6、加载dll并运行
7、更新配置信息
8、下载文件,解密并执行
rootkit隐藏功能:
  病毒具有良好的隐藏性。病毒会查找totalcmd.exe,wincmd.exe等进程,挂钩kernel32.dll的findfirstfilew,findnextfilew,findfirstfileexw,ntdll的ntquerydirectoryfile,zwquerydirectoryfile函数隐藏其释放的.lnk或者~wtr(数字).tmp文件。使得通过此类文件查找工具也无法找到他们。
  针对工控软件(scada)的攻击功能:
  病毒会利用siemens simatic wincc的默认密码安全绕过漏洞利用默认的用户名和密码并利用已经编写好的sql语句读取数据库数据。漏洞详情:http://it.slashdot.org/comments.pl?sid=1721020&cid=32920758
尝试从数据库中读取特定数据:
gracs\cc_tag.sav
gracs\cc_alg.sav
gracs\db_log.sav
gracs\cc_tlg7.sav
*.s7p
*.mcp
*.ldf
  
  目前的工控系统都包括一个可编程控制器,该控制器实际相当于一个小型的计算机系统,通过配置该系统,可以向控制器中写入新的控制逻辑,从而完成不同的功能。该控制器可以通过专门的软件连接到计算机,从计算机中可以编写工控程序并下载到工控系统中运行。
工控软件要进行控制和编程,需要通过西门子step 7软件来进行控制,该软件要通过使用内部的s7otbxdx.dll同设备进行通信,病毒通过替换此dll来截获所有与设备间的访问。病毒自身导出了所有原始s7dotbxdx.dll的功能,然后病毒将原始的s7otbxdx.dll重命名为s7otbxsx.dll,然后将自身命名为s7otbxdx.dll,病毒内部再加载s7otbxsx.dll,这样,如果是病毒感兴趣的访问,则病毒可以替换设备传入或者传出的结果,对于其他访问,病毒直接重定向到原始的s7otbxdx.dll。
  当向工控系统中写入控制代码时,病毒会修改写入的控制代码,从而感染工控系统。
  实际上,在内部,病毒一共hook了16个函数,分别是:
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. 禁用u盘的自动播放功能,防止插入u盘后就自动浏览文件夹导致中毒。另外u盘插入以后一定要使用杀毒软件右键扫描该u盘。最好禁止u盘的写入功能。
2. 及时更新微软操作系统的补丁,针对该病毒的防范要更新以下漏洞的补丁:ms08-067,ms10-046,ms10-061
3. 给本机设置一个足够复杂的密码,并尽量避免设置共享。如果一定要设置共享文件夹,尽量给该文件夹以只读权限。
4. 及时更新杀毒软件到最新,并保持监控各项开启。使用瑞星杀毒软件的用户无需升级,其木马行为防御功能即可防范此类病毒的未知变种。






欢迎光临 逐梦论坛 (http://temp2023.zhumeng.org/) Powered by Discuz! 7.2