CodeRed 蠕虫未对中文视窗系统造成多大影响,不过近来的 CodeRed II 型是专门针对中文系统的,最新的 CodeRed.v3 蠕虫则继承了 CodeRed II 的大部分功能。
同样是有意针对中文 Windosws 操作系统的攻击性病毒,CodeRed III 与 CodeRed II 都将对简体中文/繁体中文 Windows 系统进行双倍的攻击。
别名:CodeRed.v3,CodeRed III,W32.Bady.C。
微软已经发布了一个安全公告MS01-033,同时提供了针对NT和2000系统的补丁:Windows NT 4.0、Windows 2000 Professional,Server and Advanced Server。
以下是具体的分析内容。请注意,此分析内容只供研究使用,不得用于其它用途!否则后果自负!
这个蠕虫的行为可以分为四部分:初始化、感染、繁殖、安装木马。
1.初始化
当一个 WEB 服务器感染此病毒后,它首先将初始化:
(1) 确定 Kernel32.dll 动态链接库中 ISS 服务器的服务进程地址。
(2) 查找调用 API 函数 GetProcAddress 以使用以下 API 函数:
LoadLibraryA
CreateThread
..
..
GetSystemTime
(3) 加载 WS2_32.dll 库使用socket closesocket SAGetLastError 等函数。
(4) 从 USER32.DLL 中调用 ExitWindowsEx 以重新启动系统。
2.感染
(1) 蠕虫设置一个跳转表,以便得到所有需要的函数地址。
(2) 获得当前主机的IP地址,以便在后面的繁殖步骤中处理子网掩码时使用。
(3) 检查系统语言是否中文 (台湾或中华人民共和国版本)。
(4) 检查是否已经执行过了,如已执行则跳至繁殖步骤。
(5) 检查“CodeRedII” atom是否已被放置。这个步骤可以确保此主机不会被重复感染。(如已放置,则进入永久休眠状态。)
(6) 如上一检查没有发现中没有发现“CodeRedII” atom,则增加一个“CodeRedII” atom。(用来表示此主机已经被感染。)
(7) 对于非中文系统,将工作线程数目定为300。如果是中文系统,则设置为600。
(8) 蠕虫开始产生一个新的线程跳到第一步去执行。蠕虫会根据上一步骤中设定的线程。(数目产生新线程。这些线程都会跳至繁殖步骤去执行。)
(9) 调用木马功能。
(10) 如果是非中文系统,休眠1天;如果是中文系统,休眠2天。
(11) 重起系统。这会清除内存中驻留的蠕虫,只留下后门和explorer.exe木马。
3.繁殖
(1) 设置IP_STORAGE变量。保证不会重复感染本主机。
(2) 休眠64h毫秒。
(3) 获取本地系统时间。蠕虫会检查当前时间是不是小于2002年或月份小于10月。如果日期超出了上述条件,蠕虫会重启系统。这使蠕虫的传播不会超过10月1日。
(4) 设置SockAddr_in变量,获取攻击主机IP时会使用这个变量。
(5) 设置Socket套接字。蠕虫调用socket()函数,产生一个套接字,并设置该套接字为非阻塞模式。这可以加速连接速度。
(6) 产生下一要攻击主机的IP并发起连接。如果连接成功,将跳到“设置套接字为阻塞模式”步骤。
(7) 调用select()。如果没有返回句柄,则跳到最后一步。
(8) 设置套接字为阻塞模式。 这是因为连接已经建立,没有必要再使用非阻塞模式。
(9) 向该套接字发送一份蠕虫的拷贝。
(10) 执行recv调用。
(11) 关闭套接字,返回第一步。
繁殖中的 IP 地址分析:
这个蠕虫的独特之处在于它选择下一个要连接的主机IP的方法。它首先在1到254的范围内随机生成4个字节(防止IP地址为一个0或255)。然后,随机从这些字节中取出一个字节,然后与7做与操作('AND'),产生一个0 - 7之间的随机数。然后根据这个随机数从一个地址掩码表中取出相应的掩码,实际掩码在内存中的位置是反向存储的。
这个表可以决定随机生成的IP地址有多少会被使用。例如,如果生成一个随机数5,则根据上面的掩码表,新的地址应该一半为随机地址一半为旧IP地址。比如如目前受害者IP地址是192.168.1.1,随机产生的IP可能是 01.23.45.67,则新的攻击地址可能为192.168.45.67。
其结果就是新的被攻击IP会有八分之三的机率(5,6,7)在当前机器IP所在的B类地址范围内产生,有八分之四的机率(1,2,3,4)在A类范围内产生,另八分之一的机率是随机IP地址(0)。
蠕虫如果发现产生的IP是127.x.x.x或者是224.x.x.x或者与当前IP相同,它就会重新产生一个新的IP。
很多情况下,与被感染的主机在同一或相近网段内的主机也使用相同的系统。因此,蠕虫使用这种机制就会大大增加感染的成功率。
4.安装木马
(1) 获取%SYSTEM%系统目录。例如C:\WINNT\SYSTEM32
(2) 将cmd.exe加到系统目录字符串的末尾,例如C:\WINNT\SYSTEM32\cmd.exe
(3) 将驱动器盘符设置为C:
(4) 将cmd.exe拷贝到 驱动器盘符:\inetpub\scripts\root.exe
(5) 将cmd.exe拷贝到 驱动器盘符:\progra~1\common~1\system\MSADC\root.exe
(6) 创建“驱动器盘符:\explorer.exe”
(7) 往“驱动器盘符:\explorer.exe”中写入二进制代码。
(8) 关闭“驱动器盘符:\explorer.exe”
(9) 将驱动器盘符改为D,重复从第四步开始的操作
(10) 回到“1.感染”阶段的最后一步,开始休眠。
安装木马的详细分析:
蠕虫创建的“explorer.exe”是一个木马,它的主要工作方式与 CodeRed II 基本相同:获取本地windows目录,执行真正的“explorer.exe”,进入下面的死循环。
while(1)
{
设置"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SFCDisable"
为 0FFFFFF9Dh, 禁止系统文件保护检查
设置"SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\Scripts"
为 ,,217
设置"SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\msadc"
为 ,,217
设置"SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\c"
为c:\,,217
设置"SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\d"
为d:\,,217
休眠10分钟
}
蠕虫通过修改上面的注册表增加了两个虚拟web目录(/c和/d),并将其分别映射到C:\和D:\。这使得即使用户删除了root.exe,只要“explorer.exe”木马仍在运行,攻击者仍然可以利用这两个虚拟目录来远程访问您的系统。例如:
http://TARGET/scripts/root.exe?/c+command (如果root.exe还存在)
http://TARGET/msadcs/root.exe?/c+command
http://TARGET/c/winnt/system32/cmd.exe?/c+command (如果root.exe已经被删除)
http://TARGET/c/inetpub/scripts/root.exe?/c+command
http://TARGET/c/progra~1/common~1/system/MSADC/root.exe?/c+command
蠕虫将“explorer.exe”木马放在“C:\”和“D:\”的根目录下面,这是想利用微软安全公告MS00-052中所描述的漏洞,windows系统在执行可执行程序时,会先搜索系统盘根目录下面有没有同名的程序,如果有,就先执行该程序。因此,如果攻击者将“exploer.exe”木马放在系统盘根目录下面,就可能先于真正的“exploer.exe”被执行。当属于管理员组的用户交互地登录进入系统时,木马将被执行。如果您没有安装SP2或者MS00-052中的补丁,您就可能执行这个木马程序;否则,您不会执行这个木马。 |