红色代码分析及清除
/ns/wz/comp/data/20020804033630.htm
红色代码分析及清除
邱腾・・yesky
序 言
CodeRed 蠕虫病毒未对中文视窗系统造成多大影响,不过近来的CodeRed II型可是专门针对中文系统的病毒,最新的 CodeRed.v3 蠕虫病毒继承了CodeRed II的大部分功能。
同样是有意针对中文Windosws操作系统的攻击性病毒,它与CodeRed II都将对简体中文/繁体中文Windows系统进行双倍的攻击。
别名:CodeRed.v3, CodeRed III, W32.Bady.C
微软已经发布了一个安全公告MS01-033:
http://www.microsoft.com/technet/security/bulletin/MS01-033.asp
同时提供了针对NT和2000系统的补丁:
Windows NT 4.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=30833
Windows 2000 Professional, Server and Advanced Server:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=30800
研究了一下其程序代码,现在已成功清除,分析结果及手动清除方法如下:
分 析
这个蠕虫的行为可以分为三部分:初始化、感染、繁殖、安装木马。
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(http://www.microsoft.com/technet/security/bulletin/MS00-052.asp)中所描述的漏洞,windows系统在执行可执行程序时,会先搜索系统盘根目录下面有没有同名的程序,如果有,就先执行该程序。因此,如果攻击者将"exploer.exe"木马放在系统盘根目录下面,就可能先于真正的"exploer.exe"被执行。当属于管理员组的用户交互地登录进入系统时,木马将被执行。如果您没有安装SP2或者MS00-052中的补丁,你就可能执行这个木马程序;否则,你不会执行这个木马。
清 除
―― 注:以下修复过程对 CodeRed II 型同样有效。
如果不幸中了此病毒,应该立即关闭所有 80 端口的 web 服务,避免病毒继续传播。
1.清除的 web 服务器中的两个后门文件:/msadc/root.exe , /scripts/root.exe
这两个文件的物理地址一般情况下默认为:
C:\inetpub\scripts\root.exe
C:\progra~1\common~1\system\MSADC\root.exe
2.清除本地硬盘中:c:\explorer.exe 和 d:\explorer.exe ,
先要杀掉进程explorer.exe,打开任务管理器,选择进程。检查是否进程中有两个 "exploer.exe".如果您找到两个"exploer.exe",说明木马已经在您的机器上运行了,在菜单中选择 查看 -> 选定列 -> 线程计数,按确定。这时您会发现显示框中增加了新的一列"线程数"。检查两个"exploer.exe", 显示线程数为"1"的"exploer.exe"就是木马程序。你应该结束这个进程。
之后,你就可以删除掉C:\exploer.exe和D:\exploer.exe了,这两个程序都设置了隐藏和只读属性。你需要设置"资源管理器"的 查看 -> 选项 -> 隐藏文件 为"显示所有文件"才能看到它们。
3.清除病毒在注册表中添加的项目:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\
删除键:SFCDisable 键值为:0FFFFFF9Dh或将键值改为 0
( 设置为0FFFFFF9Dh后,将在登陆时禁止系统文件检查 )
HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
键:Scripts 键值为:,,217 改为 ,,201
( 这个键默认就是被打开的,不过如果没有特别需要的话,可以关闭 )
( 因为很多漏洞都是利用了这个虚拟目录下的文件攻击的。 )
HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
键:msadc 键值为:,,217 改为 ,,201
( 同Scripts )
HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
删除键:c 键值为:c:\,,217
( 它将本地硬盘中的 C 盘在 web 中共享为 c )
HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
删除键:d 键值为:d:\,,217
( 它将本地硬盘中的 D 盘在 web 中共享为 d )
如果不删除注册表中的以上键,中毒服务器的本地硬盘 C、D 将被完全控制。
4.重新启动系统,以确保 CodeRed.v3 彻底清除。
如果要确保清除病毒后不再次被感染,就需要安装微软发布的补丁。