|
描述 :
事实上这是一种全新的蠕虫。它使用了第一代红色代码蠕虫所利用的同类系统缺陷(.ida漏洞),然而,第二代蠕虫和第一代蠕虫的具体行为完全不同。因此,这种第二代蠕虫并不是第一代红色代码蠕虫的变体,而是一种全新的蠕虫。
这种新版本蠕虫就象原来的红色代码蠕虫一样,仅仅利用了Windows 2000 Web服务器的缺陷,它重写了Windows2000、NT4.0等系统的EIP,最终获得了某些系统函数的代码偏移地址,而这些被控制的地址和第1类蠕虫所控制的并不一样,所以新蠕虫的功能只是摧毁系统而不是感染系统和扩散自身。
本文就是对红色代码II(即红色代码版本2.0)的分析。分析报告分成3个部分:1、感染,2、繁殖,3、特洛伊木马。您可以在IDA中装载蠕虫的二进制代码,然后根据本文的介绍逐段阅读代码对其进行分析。
为了检查您的系统是否已经被感染,您可以查找系统中是否存在文件c:explorer.exe或d:explorer.exe。您还可以检查您的IIS脚本文件夹和msadc文件夹查看文件root.exe是否存在。如果这些文件确实存在,那么您的系统很可能被这种蠕虫感染了。注意:以前的sadminunicode蠕虫也会把cmd.exe重命名为root.exe,对此您要稍加留意。
请在此处下载分析报告和全部反汇编代码文件。 用于防范红色代码蠕虫的补丁同样适用于新蠕虫。您可以从此处获得微软的安全补丁程序。
感染
A.蠕虫首先设置一个函数表以便它能得到需要的函数。
seg000:000001D0
B.然后蠕虫继续得到它的本地IP地址。这个地址以后用来处理子网掩码(复制)并且保证蠕虫不再重新感染本地系统。
seg000:000001D5
C.接着,蠕虫获得本地系统的语言信息,查看本地系统是否配置为中文。
seg000:000001F9
D.现在蠕虫检查它在以前是否被执行过,如果曾被执行,蠕虫就继续进行自我复制(参看复制部分)。 seg000:0000021A
E.接下来,蠕虫会查看红色代码II原子是否已经填写(GlobalFindAtomA)。这一功能可以让蠕虫保证不再重新感染本地系统。如果原子存在,蠕虫就会进入永久休眠状态。
seg000:00000240
F.蠕虫增加一个红色代码II原子。这一功能让蠕虫检查系统是否已经被蠕虫感染了。
seg000:0000027D
G.现在蠕虫针对非中文系统将它的线程数设置为300。如果系统默认语言是中文则把线程数设为600。 seg000:00000286
H.蠕虫产生一个线程,该线程的执行从A步骤重新开始。蠕虫将根据在G步骤被设置的数字产生线程。每个新线程都是复制线程。 seg000:000002BA I.蠕虫启用特洛伊木马功能。您可以在以下的特洛伊木马部分找到对特洛伊木马机制的分析。
seg000:000002C4 K.如果本地系统不是中文系统则蠕虫休眠1天,否则休眠2天。 seg000:000002DA L.重新启动 Windows。
seg000:000002E1
复制
该功能负责扩散蠕虫。 seg000:000002EB A.设置本地IP_STORAGE变量。该变量用于蠕虫复制功能同时保证不会重新感染本地系统。 seg000:000002EB B.休眠64h毫秒。 seg000:000002F1 C.得到本地的系统时间。蠕虫会检查系统年份是否不到2002或者月份不到10。如果日期不在上述范围之内,蠕虫就重新启动本地系统。这样蠕虫的传播就基本上限制在了10月1日。 seg000:000002FD D.设置SockAddr_in。引用GET_IP。 seg000:0000031A E.设置socket:执行socket()函数,保存句柄,然后把它设置为非阻塞socket(这对connect()函数的调用速度来说非常重要) seg000:00000337
F.连接到与远程主机,如果连接成功就转到H。 seg000:00000357 以下就是蠕虫产生IP地址供其建立连接的过程:
GET_IP: CODE XREF: sub_1C4+168p
call GET_OCTET load 4th octet (由于字节顺序的缘故这里执行一个反序操作) mov bh,al call GET_OCTET get 3rd octet mov bl,al shl ebx,10h shift bx to the top of ebx call GET_OCTET get 2nd octet mov bh,al call GET_OCTET 1st mov bl,al call GEN_OCTET get first octet and eax,7 and it by 7 call CHECK_ADDR_MASK ecx has eip
对每个八位组,程序在1和254之间产生一个伪随机字节,接下来就会得到一个范围在1和254之间的随机八位组,其掩码是7,蠕虫用这个最后的字节产生第1个八位组。最重要的位是CHECK_ADDR_MASK。
详细数据记录如下: dd 0FFFFFFFFh 0 - 地址掩码 dd 0FFFFFF00h 1 dd 0FFFFFF00h 2 dd 0FFFFFF00h 3 dd 0FFFFFF00h 4 dd 0FFFF0000h 5 dd 0FFFF0000h 6 dd 0FFFF0000h 7
这个掩码用于本地系统的IP地址,并且匹配蠕虫所产生的IP地址。这样就产生了一个新的IP地址,其0、1或2字节数据原本是本地IP地址一部分。
例如,蠕虫会耗费1/8的时间来产生不在本地IP地址范围以内的随机IP地址。会用掉1/2的时间在本地IP地址的同一A类地址范围扩散,在其3/8的时间内,它将在本地IP地址的B类地址范围以内扩散。
我们还注意到,如果蠕虫产生的IP地址形如127.x.x.x、224.x.x.x或者和本地系统的IP地址一样,那么蠕虫将跳过这类IP地址并产生一个新的IP地址供其感染。
和以前出现的红色代码蠕虫相比,新型蠕虫产生IP地址的方式可以让它更快地发现更多的IIS Web服务器。这种新蠕虫还会在网络上产生大量的数据流量。
G.选择获得句柄,如果没有返回句柄就转到K。
seg000:000003B6
H.把socket设为阻塞。
seg000:000003C5
I.发送蠕虫的拷贝。
seg000:000003E4
J.执行recv函数。实际上并没有什么真正的用途。
seg000:000003FC
K.关闭socket循环到A。
特洛伊木马 在这部分蠕虫会把root.exe(root.exe就是cmd.exe)转储到msadc和脚本并在本地驱动器上创建一个特洛伊木马。
seg000:00000804
A.获得系统目录(比如c:winntsystem32)
seg000:00000810
B.在系统目录之后附加cmd(c:winntsystem32cmd.exe)
seg000:00000828
C.设驱动器盘符为c:
seg000:0000082D
D.把cmd.exe拷贝到/scripts/root.exe(实际路径是:驱动器盘符:inetpubscripts
oot.exe)
seg000:00000831
E.把cmd.exe拷贝到/msadc/root.exe(实际路径是:驱动器盘符:progra~1common~1systemMSADC
oot.exe)
seg000:00000863
F.对explorer.exe初始化
seg000:000008A2
G.创建Drive/explorer.exe(drive指的是c和d)
seg000:00000E83
H.蠕虫现在写explorer.exe。蠕虫体内的部分二进制代码将写到explorer.exe。蠕虫有这么一个特性:如果嵌入字节是0xFC,它就会被20h0x00字节代替而不是由通常的字节替代。要了解这方面的更详细情况请参看Explorer.exe特洛伊部分。还有,NT的工作方式是:某一个用户登录到本地系统的时候就必须装载explorer.exe(桌面、任务条等等……),然而NT首先会在主驱动器路径c:下面寻找explorer.exe,这就意味着,当下一次用户登录的时候装载的实际上是被改写的explorer.exe……。
seg000:00000EC8
I.关闭explorer.exe。
seg000:00000ED5
J.把驱动器盘符改到D,然后蠕虫返回到D。之后回到感染过程的k步。
seg000:00000EDD
Explorer.exe特洛伊木马 explorer.exe木马过程概述:
1.获得本地系统目录。
2.在本地系统目录下执行explorer.exe。
3.蠕虫进入以下循环:
while(1) { set SOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSFCDisableto 0FFFFFF9Dh, which basically disables system file protection. set SYSTEMCurrentControlSetServicesW3SVCParametersVirtualRootsScripts to ,,217 set SYSTEMCurrentControlSetServicesW3SVCParametersVirtualRootsmsadc to ,,217 Set SYSTEMCurrentControlSetServicesW3SVCParametersVirtualRootsc to c:,,217 Set SYSTEMCurrentControlSetServicesW3SVCParametersVirtualRootsd to d:,,217 sleep for 10 minutes }
以上的代码会创建一个虚拟web路径(/c和/d),路径把/c映射到c:,/d映射到d:。蠕虫的作者设计的这个功能等于在系统上开了一个后门,所以,即便您把root.exe(cmd.exe)从您的/scripts文件夹中删除了攻击者也使用/c和/d虚拟根目录威胁您的系统。其发起的攻击如下所示:
http://IpAddress/c/inetpub/scripts/root.exe?/c+dir(如果root.exe还在)
或者:
http://IpAddress/c/winnt/system32/cmd.exe?/c+dir,这里dir可能是攻击者打算执行的任意命令。
只要这个特洛伊木马在运行,攻击者就能够远程访问您的服务器。
|