我们从两名网络管理员那里得知,他们管理的网络受到了大量数据包的攻击,攻击目标就是.ida网络漏洞。在查看了他们提供的系统日志之后,我们认定是有人在Internet上扩散了一种新型蠕虫,这种蠕虫可以快速地通过IIS web服务器得以在网络上扩散。
对.ida“红色代码”蠕虫的完整分析详尽地说明了这种蠕虫的功能和复制方式等众多细节。例如,这种蠕虫的最终目的似乎是对www.whitehouse.gov发起拒绝服务攻击。而且我们还发现,只有默认语言配置为美国英语的Windows NT/2000系统才会显示被篡改的网页(“Hacked by Chinese !”)。
我们认为这种蠕虫就是所谓的.ida“红色代码”蠕虫,这是因为,该蠕虫有些变体会把网页的内容篡改为“Hacked by Chinese”,而且也只有“红色代码”蠕虫和它如此相似,这就提醒我们顺其踪迹对这种蠕虫进行深入地研究。
解释
几星期前,.ida“红色代码”蠕虫经由.ida缓冲区溢出漏洞在因特网上的IIS Web服务器之间扩散。
下面是它感染一台有缺陷的Web服务器所采取的步骤。
1.在被感染的系统上设置蠕虫发作的初始环境。
2.蠕虫运行,产生100个线程
3.首先用99个线程扩散蠕虫(感染其他的Web服务器)。蠕虫通过创建随机的IP地址把自己扩散出去。不过,蠕虫所攻击的IP地址并不都具有很强的随机性。事实上,蠕虫似乎使用了一个静态的种子来产生新的IP地址供其发起针对性的攻击。因此这种蠕虫感染的每台计算机都将试图感染具有同一列表随机IP地址的主机。结果,因为按照随机IP地址的顺序在所有的IP地址之间传输的数据会被大量产生,所以蠕虫会反复感染系统而且在主机之间来回穿梭形成一种拒绝服务类型的效果。这种蠕虫能产生真正随机的IP地址,这样就可以让它更快地感染更多的系统。
4.第100个线程则检查蠕虫是否在设置默认语言为美国英语的Windows NT/2000系统上运行。
- 如果发现被感染系统配置的默认语言是美国英语,那么这种蠕虫就会接下来篡改被感染的系统站点。那意味……本地Web服务器的网页将被篡改成这样一条消息:Welcome to http://www.worm.com !, Hacked By Chinese! 这个被黑掉的网页消息将在Web服务器上“生存”10个小时左右的时间然后消失,并且,除非被感染的系统再次被另外的主机所感染,这个被篡改的页面就不再出现了。
- 如果系统语言不是美国英语Windows NT/2000系统,那么第100个蠕虫线程将去感染其他系统。
5.每一蠕虫线程都会检查c:/notworm
- 如果文件c:/notworm存在,蠕虫转为休眠。
- 如果该文件不存在,线程就继续感染更多的系统。
6.每个蠕虫线程都将检查被感染计算机的当前时间。
- 如果时间在20:00 UTC和23:59 UTC之间,那么蠕虫将继续使用这个线程攻击www.whitehouse.gov。在攻击中,被感染的系统将向www.whitehouse.gov的端口80发送100k字节的数据,结果就可能会产生对www.whitehouse.gov的拒绝服务攻击。
- 如果时间在20:00 UTC以下,这个蠕虫线程就会试着发现并且感染新的Web服务器。
在测试的时候,我们计算了一下,蠕虫在一天之内大约会感染50万左右的IP地址,并且这还是根据速度比较慢的网络所做的保守估计。
在写本文(7月18日下午6:49)的时候,已经有超过12000台左右的主机探查到了这种病毒。基本上也就意味着至少1万2千台主机被这种蠕虫感染了。
在测试的时候,我们发现有时蠕虫不能正确地被执行,结果就会不断地产生新线程直到被感染的主机崩溃为止。我们还没有找出出现这一问题的原因。
深入分析
以下是对蠕虫感染主机每一步骤的详细分析。对蠕虫的完整反编译和注释代码可以从这里获得。
我们用来进行这种详细分析的工具是:
IDA-交互式反汇编程序,可以从www.datarescue.com获得。IDA是一种高级的反汇编程序。
MS VC++ 调试环境-当蠕虫与IIS交互时,我们用它来监视蠕虫的修改部分。
在下面的分析引用中我们将主要引用这些反汇编的蠕虫代码。
为了能使您更容易理解这些尝试,我们把蠕虫的功能分成了3个部分:蠕虫核心功能、蠕虫篡改网页的功能和攻击www.whitehouse.gov的功能。
蠕虫核心功能
1.初始化感染目标(即存在.ida 攻击脆弱性并被蠕虫捕获的主机)。
当某台存在.ida攻击漏洞的Web服务器接收到一个特殊的HTTP请求时,初始化感染就开始了。这个特殊的HTTP请求包含了利用.ida 攻击并把这种蠕虫作为其负载的必要代码。
.ida溢出系统堆栈内存的时候代码看起来像下面这个样子:
<MORE 4E 00>
4E 00 4E 00 4E 00 4E 00
4E 00 4E 00 4E 00 4E 00
4E 00 4E 00 4E 00 4E 00
92 90 58 68 4E 00 4E 00
4E 00 4E 00 4E 00 4E 00
FA 00 00 00 90 90 58 68
D3 CB 01 78 90 90 58 68
D3 CB 01 78 90 90 58 68
D3 CB 01 78 90 90 90 90
90 81 C3 00 03 00 00 8B
1B 53 FF 53 78
EIP被msvcrt.dll内的一个地址0x7801CBD3覆盖。0x7801CBD3处的代码反汇编为:
call ebx
当EIP被call ebx覆盖时,程序会转回堆栈。堆栈内的代码就跳进了在最初HTTP请求内包含的蠕虫代码。
2.设置一些初始堆栈变量
CODEREF :seg000:000001D6 WORM
这时正在执行蠕虫的初始化代码。发生的第一件事情是蠕虫为自己使用而安装了一个新堆栈。新堆栈大小是218h字节,充满了CCh。蠕虫代码随后进一步初始化它的函数表。
蠕虫侧重于使用基于EBP堆栈的内存偏移系统。这意味着所有的变量都被当作EBP-X值被引用。在我们的网站上有一个叫做worm-ebp.txt的文件记录了蠕虫代码执行过程中的堆栈用途。
3.装载函数(创建“函数表”)
CODEREF :seg000:00000203 DataSetup
蠕虫代码做的第一事情是引用在EBP-198h的可利用代码的数据部分。然后蠕虫需要设置其内部函数表。函数表就是一种基于堆栈的表,用来存放函数地址。它可以让蠕虫在运行的时候生成函数地址(这就可以让蠕虫得到在更多系统上执行的机会)。
这种蠕虫所采用的技术叫做RVA(相对虚拟地址)查找。基本上这就意味着所有的函数,或具体地说就是GetProcAddress,都可以在IIS以内被找到。要了解RVA的更多细节请咨询专家或者阅读一些PE(便携式可执行文件,微软平台的可执行文件格式)文档或读完这种蠕虫的汇编代码。
简单地说,RVA技术用来得到GetProcAddress的地址。
GetProcAddress随后用来得到LoadLibraryA的地址。在这两个函数之间蠕虫可能需要的其他所有函数也很容易找到。蠕虫就用了这两个函数来装载以下的函数:
从kernel32.dll中装载:
GetSystemTime
CreateThread
CreateFileA
Sleep
GetSystemDefaultLangID
VirtualProtect
从infocomm.dll中装载:
TcpSockSend
从WS2_32.dll中装载:
socket
connect
send
recv
closesocket
最后蠕虫保存w3svc.dll的基地址,该地址以后就可能用来篡改被感染的网站。
4.检查蠕虫创造的线程数。
CODEREF :seg000:00000512 FUNC_LOAD_DONE
这里蠕虫似乎执行了一次WriteClient(ISAPI扩展API之一),并向发起攻击的蠕虫发送“GET”。这可能是告诉攻击蠕虫他们已经成功地感染了一台新主机。
接下来蠕虫代码会计算已经处于活动状态的蠕虫线程的总数。如果线程的数字是100则控制转向蠕虫篡改网页的功能。
如果线程的数字小于100,蠕虫则继续创造一个新线程。每个新增加的线程都是蠕虫的准确复制品(使用同样的代码)。
蠕虫现在继续执行下一步。
6.检查c:/notworm的存在
CODEREF :seg000:0000079D DO_THE_WORK
似乎这就是一种“赖氨酸缺乏症”的表现(在《侏罗记公园》里有其描写)。“赖氨酸缺乏症”是一种可以阻止恶性代码进一步传播的检查方式。
在这种情况下的“赖氨酸缺乏”就是对文件c:/notworm 的存在与否进行检查。如果这个文件存在,那么蠕虫将转向休眠。这样它就不再尝试对其他IP地址进行感染。
如果这个文件不存在,蠕虫就执行下一步骤。
7.检查被感染系统的时间(计算机时钟)
CODEREF :seg000:00000803 NOTWORM_NO
蠕虫现在检查被感染系统的本地时间。如果小时数大于 20:00 UTC则蠕虫会转到攻击www.whitehouse.gov功能的第一步。
如果时间不到20:00 UTC,蠕虫则将继续感染新系统。
8.感染一台新主机(向一个“随机”IP 地址的端口80发送.ida 蠕虫)。
在这时蠕虫会把自己重新发送给它能连接上80端口的任何IP地址。它多次采用send()函数,结果数据包的流量可能突破极限。在成功的结束发送工作之后,它关闭了socket并进到第 6步……结果无穷尽地重复这个循环过程。
蠕虫篡改网页功能
当蠕虫生成第一百个线程之后就调用这一功能。
1.检查本地系统的缺省语言是否是美国英语,然后进到蠕虫的核心功能的第6步
CODEREF :seg000:000005FE TOO_MANY_THREADS
蠕虫要做的第一件事情是得到本地的代码页。代码页指定了本地操作系统所采用的语言(比如美国英语、汉语、德语等等……)。然后它拿本地代码页比较0x409。0x409是美国英语系统代码页。如果被感染的系统就是美国英国系统,那么蠕虫篡改本地系统的网页。如果本地代码页不是美国英语,那么蠕虫线程就会进到蠕虫核心功能的第6步。
2.休眠两个小时。
CODEREF :seg000:00000636 IS_AMERICAN
蠕虫线程现在有两个小时的休息时间。我们觉得这是在让其他蠕虫线程在经由篡改被感染系统的网页而被发现之前扩大感染范围。
3.修改被感染系统内存中的网页。
CODEREF :seg000:0000064F HACK_PAGE
这种蠕虫采用了一种叫做“挂钩”的有趣的技术来有效地篡改被感染系统的网页。挂钩修改了内存的代码让其指向指向蠕虫提供的代码。在这种情况下,蠕虫修改w3svc.dll改变TcpSockSend函数的正常操作。TcpSockSend是w3svc.dll(IIS核心引擎)用来把信息发回给用户的函数。通过这一修改,如果用户向被感染主机请求一个网页,蠕虫就能改变写回到用户所用客户机的数据。
执行挂钩操作的时候,蠕虫首先把w3svc.dll内存的前4000h字节变成可写。在正常状态下 w3svc.dll的内存(而基本上也是所有dll映射的内存)都是只读的。但蠕虫使用了VirtualProtect函数把w3svc.dll的内存改成了可写,并把旧状态保存为一个堆栈变量。
然后,它使用保存的w3svc.dll的代码基地址(通过蠕虫核心功能中的第3步获得)作为起点寻找导入表(再请看PE头文档)查找TcpSockSend的地址。一旦找到TcpSockSend函数的地址,蠕虫随后就用体内的一个地址代替Tcpsocksend的实际地址。
现在,TcpSockSend的地址指向了蠕虫内的一个函数,这个函数的功能正是返回“Hacked by Chinese !”网页。该函数的CODEREF是seg000:00000C9A FAKE_TCPSOCKSEND 。
蠕虫的这个线程现在会休眠10个小时。在这10 小时期间,所有发送给被感染服务器的Web请求都会被返回“Hacked by chinese !”网页。
10小时以后线程复苏并把w3svc.dll返回到它原来的状态,包括重新保护内存。
这以后继续执行蠕虫核心功能的第6步。
攻击 www.whitehouse.gov 功能
我们注意到,蠕虫内的每个线程似乎迟早都会转向集中攻击www.whitehouse.gov。
1.创建socket并且连接到www.whitehouse.gov的80端口,发送100k字节的数据
CODEREF :seg000:000008AD WHITEHOUSE_SOCKET_SETUP
一开始,蠕虫将创建一个socket并与198.137.240.91的在80端口建立联接(www.whitehouse.gov/www1.whitehouse.gov)。
CODEREF :seg000:0000092F WHITEHOUSE_SOCKET_SEND
如果连接成功,蠕虫就创建一个循环,执行18000h单字节的send()到www.whitehouse.gov 。
CODEREF :seg000:00000972 WHITEHOUSE_SLEEP_LOOP
在18000h send()之后蠕虫会休眠大约4个半小时。它接着会再次重复攻击www.whitehouse.gov(转向攻击www.whitehouse.gov功能的第1步)。
附录
以下是和“红色代码”蠕虫相关的一些信息,其中包括了如何防止蠕虫,对蠕虫的评论以及消除对蠕虫的一些误解等。
怎么防止系统被.ida“红色代码”蠕虫感染?
可以从这里下载针对.ida漏洞的微软补丁。
蠕虫经由.ida 缺陷把自己扩散到新的脆弱系统。使用这个补丁将阻止你的服务器被感染。不过,因为蠕虫创造它的“随机”IP地址表进行攻击,你可能仍然会受到拒绝服务攻击的高流量所造成的影响。
我被这种蠕虫感染了,我该怎么办?
首先你必须访问微软的安全站点,照我们在上面所说的那样,下载并尽快安装.ida补丁程序。因为蠕虫在你重新启动服务器之前会驻留内存,所以在安装.ida补丁以后最好重新启动服务器。
我认为我被感染了,我怎么才能判断呢?
被感染的系统会出现负载显著增加(处理器/网络)的现象。系统还会显示有很多从随机IP地址发起的对系统80端口外部连接(或尝试)。你可以在MS-DOS提示行下用“netstat -an”命令查看。无论如何不能错过任何一个抓住它的机会……如果你的系统没有安装.ida补丁,请尽快安装它并且重新启动系统。
怎么设置IDS来检测这种特殊蠕虫?
以下是“红色代码”蠕虫攻击中发送的数据包一部分:
GET
/default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucbd3%u780
1%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u81
90%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.0?
把以上代码到你的IDS特征数据库内即可。
关于“红色代码”蠕虫有哪些误解?
1.它与worm.com建立联接。
这种蠕虫只是在初始HTTP GET请求HOST: header内以及美国英语系统显示的被篡改页面上指示www.worm.com。蠕虫并没有和www.worm.com建立联接。蠕虫完全独立运行以极高的效率 扩散并且感染系统。除非系统安装了.ida 补丁,否则这种蠕虫会因特网上到处撒野。
2.这种蠕虫利用了hsj的“proof of concept”.ida漏洞。
这种蠕虫没有利用hsj的“proof of concept”.ida漏洞。它所利用的代码并不具备蠕虫的功能。它只是简单地利用了几乎没有什么隐含功能的shell。这种蠕虫可以用来向管理员证明这种漏洞的危险性促使他们尽快安装补丁程序。
对.ida“红色代码”蠕虫的完整分析详尽地说明了这种蠕虫的功能和复制方式等众多细节。例如,这种蠕虫的最终目的似乎是对www.whitehouse.gov发起拒绝服务攻击。而且我们还发现,只有默认语言配置为美国英语的Windows NT/2000系统才会显示被篡改的网页(“Hacked by Chinese !”)。
我们认为这种蠕虫就是所谓的.ida“红色代码”蠕虫,这是因为,该蠕虫有些变体会把网页的内容篡改为“Hacked by Chinese”,而且也只有“红色代码”蠕虫和它如此相似,这就提醒我们顺其踪迹对这种蠕虫进行深入地研究。
解释
几星期前,.ida“红色代码”蠕虫经由.ida缓冲区溢出漏洞在因特网上的IIS Web服务器之间扩散。
下面是它感染一台有缺陷的Web服务器所采取的步骤。
1.在被感染的系统上设置蠕虫发作的初始环境。
2.蠕虫运行,产生100个线程
3.首先用99个线程扩散蠕虫(感染其他的Web服务器)。蠕虫通过创建随机的IP地址把自己扩散出去。不过,蠕虫所攻击的IP地址并不都具有很强的随机性。事实上,蠕虫似乎使用了一个静态的种子来产生新的IP地址供其发起针对性的攻击。因此这种蠕虫感染的每台计算机都将试图感染具有同一列表随机IP地址的主机。结果,因为按照随机IP地址的顺序在所有的IP地址之间传输的数据会被大量产生,所以蠕虫会反复感染系统而且在主机之间来回穿梭形成一种拒绝服务类型的效果。这种蠕虫能产生真正随机的IP地址,这样就可以让它更快地感染更多的系统。
4.第100个线程则检查蠕虫是否在设置默认语言为美国英语的Windows NT/2000系统上运行。
- 如果发现被感染系统配置的默认语言是美国英语,那么这种蠕虫就会接下来篡改被感染的系统站点。那意味……本地Web服务器的网页将被篡改成这样一条消息:Welcome to http://www.worm.com !, Hacked By Chinese! 这个被黑掉的网页消息将在Web服务器上“生存”10个小时左右的时间然后消失,并且,除非被感染的系统再次被另外的主机所感染,这个被篡改的页面就不再出现了。
- 如果系统语言不是美国英语Windows NT/2000系统,那么第100个蠕虫线程将去感染其他系统。
5.每一蠕虫线程都会检查c:/notworm
- 如果文件c:/notworm存在,蠕虫转为休眠。
- 如果该文件不存在,线程就继续感染更多的系统。
6.每个蠕虫线程都将检查被感染计算机的当前时间。
- 如果时间在20:00 UTC和23:59 UTC之间,那么蠕虫将继续使用这个线程攻击www.whitehouse.gov。在攻击中,被感染的系统将向www.whitehouse.gov的端口80发送100k字节的数据,结果就可能会产生对www.whitehouse.gov的拒绝服务攻击。
- 如果时间在20:00 UTC以下,这个蠕虫线程就会试着发现并且感染新的Web服务器。
在测试的时候,我们计算了一下,蠕虫在一天之内大约会感染50万左右的IP地址,并且这还是根据速度比较慢的网络所做的保守估计。
在写本文(7月18日下午6:49)的时候,已经有超过12000台左右的主机探查到了这种病毒。基本上也就意味着至少1万2千台主机被这种蠕虫感染了。
在测试的时候,我们发现有时蠕虫不能正确地被执行,结果就会不断地产生新线程直到被感染的主机崩溃为止。我们还没有找出出现这一问题的原因。
深入分析
以下是对蠕虫感染主机每一步骤的详细分析。对蠕虫的完整反编译和注释代码可以从这里获得。
我们用来进行这种详细分析的工具是:
IDA-交互式反汇编程序,可以从www.datarescue.com获得。IDA是一种高级的反汇编程序。
MS VC++ 调试环境-当蠕虫与IIS交互时,我们用它来监视蠕虫的修改部分。
在下面的分析引用中我们将主要引用这些反汇编的蠕虫代码。
为了能使您更容易理解这些尝试,我们把蠕虫的功能分成了3个部分:蠕虫核心功能、蠕虫篡改网页的功能和攻击www.whitehouse.gov的功能。
蠕虫核心功能
1.初始化感染目标(即存在.ida 攻击脆弱性并被蠕虫捕获的主机)。
当某台存在.ida攻击漏洞的Web服务器接收到一个特殊的HTTP请求时,初始化感染就开始了。这个特殊的HTTP请求包含了利用.ida 攻击并把这种蠕虫作为其负载的必要代码。
.ida溢出系统堆栈内存的时候代码看起来像下面这个样子:
<MORE 4E 00>
4E 00 4E 00 4E 00 4E 00
4E 00 4E 00 4E 00 4E 00
4E 00 4E 00 4E 00 4E 00
92 90 58 68 4E 00 4E 00
4E 00 4E 00 4E 00 4E 00
FA 00 00 00 90 90 58 68
D3 CB 01 78 90 90 58 68
D3 CB 01 78 90 90 58 68
D3 CB 01 78 90 90 90 90
90 81 C3 00 03 00 00 8B
1B 53 FF 53 78
EIP被msvcrt.dll内的一个地址0x7801CBD3覆盖。0x7801CBD3处的代码反汇编为:
call ebx
当EIP被call ebx覆盖时,程序会转回堆栈。堆栈内的代码就跳进了在最初HTTP请求内包含的蠕虫代码。
2.设置一些初始堆栈变量
CODEREF :seg000:000001D6 WORM
这时正在执行蠕虫的初始化代码。发生的第一件事情是蠕虫为自己使用而安装了一个新堆栈。新堆栈大小是218h字节,充满了CCh。蠕虫代码随后进一步初始化它的函数表。
蠕虫侧重于使用基于EBP堆栈的内存偏移系统。这意味着所有的变量都被当作EBP-X值被引用。在我们的网站上有一个叫做worm-ebp.txt的文件记录了蠕虫代码执行过程中的堆栈用途。
3.装载函数(创建“函数表”)
CODEREF :seg000:00000203 DataSetup
蠕虫代码做的第一事情是引用在EBP-198h的可利用代码的数据部分。然后蠕虫需要设置其内部函数表。函数表就是一种基于堆栈的表,用来存放函数地址。它可以让蠕虫在运行的时候生成函数地址(这就可以让蠕虫得到在更多系统上执行的机会)。
这种蠕虫所采用的技术叫做RVA(相对虚拟地址)查找。基本上这就意味着所有的函数,或具体地说就是GetProcAddress,都可以在IIS以内被找到。要了解RVA的更多细节请咨询专家或者阅读一些PE(便携式可执行文件,微软平台的可执行文件格式)文档或读完这种蠕虫的汇编代码。
简单地说,RVA技术用来得到GetProcAddress的地址。
GetProcAddress随后用来得到LoadLibraryA的地址。在这两个函数之间蠕虫可能需要的其他所有函数也很容易找到。蠕虫就用了这两个函数来装载以下的函数:
从kernel32.dll中装载:
GetSystemTime
CreateThread
CreateFileA
Sleep
GetSystemDefaultLangID
VirtualProtect
从infocomm.dll中装载:
TcpSockSend
从WS2_32.dll中装载:
socket
connect
send
recv
closesocket
最后蠕虫保存w3svc.dll的基地址,该地址以后就可能用来篡改被感染的网站。
4.检查蠕虫创造的线程数。
CODEREF :seg000:00000512 FUNC_LOAD_DONE
这里蠕虫似乎执行了一次WriteClient(ISAPI扩展API之一),并向发起攻击的蠕虫发送“GET”。这可能是告诉攻击蠕虫他们已经成功地感染了一台新主机。
接下来蠕虫代码会计算已经处于活动状态的蠕虫线程的总数。如果线程的数字是100则控制转向蠕虫篡改网页的功能。
如果线程的数字小于100,蠕虫则继续创造一个新线程。每个新增加的线程都是蠕虫的准确复制品(使用同样的代码)。
蠕虫现在继续执行下一步。
6.检查c:/notworm的存在
CODEREF :seg000:0000079D DO_THE_WORK
似乎这就是一种“赖氨酸缺乏症”的表现(在《侏罗记公园》里有其描写)。“赖氨酸缺乏症”是一种可以阻止恶性代码进一步传播的检查方式。
在这种情况下的“赖氨酸缺乏”就是对文件c:/notworm 的存在与否进行检查。如果这个文件存在,那么蠕虫将转向休眠。这样它就不再尝试对其他IP地址进行感染。
如果这个文件不存在,蠕虫就执行下一步骤。
7.检查被感染系统的时间(计算机时钟)
CODEREF :seg000:00000803 NOTWORM_NO
蠕虫现在检查被感染系统的本地时间。如果小时数大于 20:00 UTC则蠕虫会转到攻击www.whitehouse.gov功能的第一步。
如果时间不到20:00 UTC,蠕虫则将继续感染新系统。
8.感染一台新主机(向一个“随机”IP 地址的端口80发送.ida 蠕虫)。
在这时蠕虫会把自己重新发送给它能连接上80端口的任何IP地址。它多次采用send()函数,结果数据包的流量可能突破极限。在成功的结束发送工作之后,它关闭了socket并进到第 6步……结果无穷尽地重复这个循环过程。
蠕虫篡改网页功能
当蠕虫生成第一百个线程之后就调用这一功能。
1.检查本地系统的缺省语言是否是美国英语,然后进到蠕虫的核心功能的第6步
CODEREF :seg000:000005FE TOO_MANY_THREADS
蠕虫要做的第一件事情是得到本地的代码页。代码页指定了本地操作系统所采用的语言(比如美国英语、汉语、德语等等……)。然后它拿本地代码页比较0x409。0x409是美国英语系统代码页。如果被感染的系统就是美国英国系统,那么蠕虫篡改本地系统的网页。如果本地代码页不是美国英语,那么蠕虫线程就会进到蠕虫核心功能的第6步。
2.休眠两个小时。
CODEREF :seg000:00000636 IS_AMERICAN
蠕虫线程现在有两个小时的休息时间。我们觉得这是在让其他蠕虫线程在经由篡改被感染系统的网页而被发现之前扩大感染范围。
3.修改被感染系统内存中的网页。
CODEREF :seg000:0000064F HACK_PAGE
这种蠕虫采用了一种叫做“挂钩”的有趣的技术来有效地篡改被感染系统的网页。挂钩修改了内存的代码让其指向指向蠕虫提供的代码。在这种情况下,蠕虫修改w3svc.dll改变TcpSockSend函数的正常操作。TcpSockSend是w3svc.dll(IIS核心引擎)用来把信息发回给用户的函数。通过这一修改,如果用户向被感染主机请求一个网页,蠕虫就能改变写回到用户所用客户机的数据。
执行挂钩操作的时候,蠕虫首先把w3svc.dll内存的前4000h字节变成可写。在正常状态下 w3svc.dll的内存(而基本上也是所有dll映射的内存)都是只读的。但蠕虫使用了VirtualProtect函数把w3svc.dll的内存改成了可写,并把旧状态保存为一个堆栈变量。
然后,它使用保存的w3svc.dll的代码基地址(通过蠕虫核心功能中的第3步获得)作为起点寻找导入表(再请看PE头文档)查找TcpSockSend的地址。一旦找到TcpSockSend函数的地址,蠕虫随后就用体内的一个地址代替Tcpsocksend的实际地址。
现在,TcpSockSend的地址指向了蠕虫内的一个函数,这个函数的功能正是返回“Hacked by Chinese !”网页。该函数的CODEREF是seg000:00000C9A FAKE_TCPSOCKSEND 。
蠕虫的这个线程现在会休眠10个小时。在这10 小时期间,所有发送给被感染服务器的Web请求都会被返回“Hacked by chinese !”网页。
10小时以后线程复苏并把w3svc.dll返回到它原来的状态,包括重新保护内存。
这以后继续执行蠕虫核心功能的第6步。
攻击 www.whitehouse.gov 功能
我们注意到,蠕虫内的每个线程似乎迟早都会转向集中攻击www.whitehouse.gov。
1.创建socket并且连接到www.whitehouse.gov的80端口,发送100k字节的数据
CODEREF :seg000:000008AD WHITEHOUSE_SOCKET_SETUP
一开始,蠕虫将创建一个socket并与198.137.240.91的在80端口建立联接(www.whitehouse.gov/www1.whitehouse.gov)。
CODEREF :seg000:0000092F WHITEHOUSE_SOCKET_SEND
如果连接成功,蠕虫就创建一个循环,执行18000h单字节的send()到www.whitehouse.gov 。
CODEREF :seg000:00000972 WHITEHOUSE_SLEEP_LOOP
在18000h send()之后蠕虫会休眠大约4个半小时。它接着会再次重复攻击www.whitehouse.gov(转向攻击www.whitehouse.gov功能的第1步)。
附录
以下是和“红色代码”蠕虫相关的一些信息,其中包括了如何防止蠕虫,对蠕虫的评论以及消除对蠕虫的一些误解等。
怎么防止系统被.ida“红色代码”蠕虫感染?
可以从这里下载针对.ida漏洞的微软补丁。
蠕虫经由.ida 缺陷把自己扩散到新的脆弱系统。使用这个补丁将阻止你的服务器被感染。不过,因为蠕虫创造它的“随机”IP地址表进行攻击,你可能仍然会受到拒绝服务攻击的高流量所造成的影响。
我被这种蠕虫感染了,我该怎么办?
首先你必须访问微软的安全站点,照我们在上面所说的那样,下载并尽快安装.ida补丁程序。因为蠕虫在你重新启动服务器之前会驻留内存,所以在安装.ida补丁以后最好重新启动服务器。
我认为我被感染了,我怎么才能判断呢?
被感染的系统会出现负载显著增加(处理器/网络)的现象。系统还会显示有很多从随机IP地址发起的对系统80端口外部连接(或尝试)。你可以在MS-DOS提示行下用“netstat -an”命令查看。无论如何不能错过任何一个抓住它的机会……如果你的系统没有安装.ida补丁,请尽快安装它并且重新启动系统。
怎么设置IDS来检测这种特殊蠕虫?
以下是“红色代码”蠕虫攻击中发送的数据包一部分:
GET
/default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucbd3%u780
1%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u81
90%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.0?
把以上代码到你的IDS特征数据库内即可。
关于“红色代码”蠕虫有哪些误解?
1.它与worm.com建立联接。
这种蠕虫只是在初始HTTP GET请求HOST: header内以及美国英语系统显示的被篡改页面上指示www.worm.com。蠕虫并没有和www.worm.com建立联接。蠕虫完全独立运行以极高的效率 扩散并且感染系统。除非系统安装了.ida 补丁,否则这种蠕虫会因特网上到处撒野。
2.这种蠕虫利用了hsj的“proof of concept”.ida漏洞。
这种蠕虫没有利用hsj的“proof of concept”.ida漏洞。它所利用的代码并不具备蠕虫的功能。它只是简单地利用了几乎没有什么隐含功能的shell。这种蠕虫可以用来向管理员证明这种漏洞的危险性促使他们尽快安装补丁程序。