本人使用的一台笔记本曾经由于安装软件不当而中木马,一般的清除方法均对其无效,后判明原来是木马驻留在Windows的Socket协议栈中。下面是清除方法。

本文中所提到的命令及其选项的使用方法请查阅相关资料。


环境

一台笔记本,操作系统为 Windows XP Pro,其IE使用局域网内的代理自动配置脚本(.pac)文件获取代理服务器地址。该脚本判断要访问的地址是否属于局域网,是则指示IE直接连接,否则指示IE通过特定的代理服务器连接 Internet。

症状

局域网内部网站正常连接,但试图访问Internet上的地址时却出现“该页面无法显示”的提示。

分析

打开Internet选项->连接,发现自动代理配置脚本的URL无误,而且通过此URL也可以下载到正确的代理配置脚本文件。而且同一局域网内使用该脚本的其他电脑可以正常连接 Internet。因此判断代理脚本没有问题。

为获得更详细的信息,我在此机器上执行了下面的脚本:

ipconfig /all > C:\result.txt
ping -n 1 www.google.com >> C:\result.txt
ping -n 1 proxy1.aaa.com >> C:\result.txt
ping -n 1 proxy2.aaa.com >> C:\result.txt
ping -n 1 proxy3.aaa.com >> C:\result.txt

其中,prox1-proxy3是从自动代理配置脚本中获得的代理服务器地址。此脚本用于检查该电脑上的 IP地址、DNS是否正确,以及到代理服务器的连接是否畅通。检测结果如下(省略无关内容):

Ethernet adapter 本地连接:

        Dhcp Enabled. . . . . . . . . . . : Yes
        IP Address. . . . . . . . . . . . : 10.1.15.75
        DNS Servers . . . . . . . . . . . : 10.1.13.7
                                            10.1.13.3
                                            10.1.12.30

Pinging www.l.google.com [???] with 32 bytes of data:

Request timed out.

Ping statistics for :
    Packets: Sent = 1, Received = 0, Lost = 1 (100% loss),

Pinging proxy1.aaa.com [???] with 32 bytes of data:

Reply from 10.1.13.7: bytes=32 time<1ms TTL=63

Ping statistics for ?:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

Pinging proxy2.aaa.com [???] with 32 bytes of data:

Reply from 10.1.12.30: bytes=32 time=5ms TTL=56

Ping statistics for ?:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 5ms, Maximum = 5ms, Average = 5ms

Pinging proxy3.aaa.com [???] with 32 bytes of data:

Reply from 10.1.11.250: bytes=32 time=4ms TTL=57

Ping statistics for ?:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 4ms, Maximum = 4ms, Average = 4ms

以上结果中,问号的地方实际显示为乱码。从上述结果可见,该电脑的IP地址、DNS正确无误,而且到代理服务器连接正常。随即设置IE不使用自动代理脚本,而是直接使用 proxy1.aaa.com,连接Internet成功。

但是上述结果中,本应当显示为域名的地方全都显示成了乱码。经询问,该用户在症状发生之前曾经运行过网上下载的程序,因此判断为病毒感染。

于是运行以下脚本以获得进一步的信息:

netstat -ano > c:\result2.txt
tasklist >> c:\result2.txt
net start >> c:\result2.txt
reg QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run >> c:\result2.txt
reg QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce >> c:\result2.txt
reg QUERY HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run >> c:\result2.txt
reg QUERY HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce >> c:\result2.txt

结果如下(省略无关信息):

Active Connections
  Proto  Local Address          Foreign Address        State           PID
  TCP                                                  LISTENING       1584
  TCP                                                  LISTENING       4
  TCP                                                  ESTABLISHED     352
  TCP                                                  ESTABLISHED     4
  TCP                                                  TIME_WAIT       0
  TCP                                                  ESTABLISHED     2628
  TCP                                                  SYN_SENT        2628
  TCP                                                  LISTENING       2196
  TCP                                                  TIME_WAIT       0
  TCP                                                  TIME_WAIT       0
  TCP                                                  LISTENING       2188
  TCP                                                  TIME_WAIT       0
  TCP                                                  TIME_WAIT       0
  TCP                                                  LISTENING       3576
  TCP                                                  ESTABLISHED     2056

图像名                       PID 会话名           会话#    内存使用
========================= ====== ================ ======== ============
System Idle Process            0 Console                 0         16 K
System                         4 Console                 0        236 K
smss.exe                     424 Console                 0        352 K
csrss.exe                    480 Console                 0      4,264 K
winlogon.exe                 504 Console                 0      3,948 K
services.exe                 548 Console                 0      2,844 K
lsass.exe                    560 Console                 0      1,624 K
ati2evxx.exe                 716 Console                 0      1,616 K
svchost.exe                  728 Console                 0      2,992 K
svchost.exe                  796 Console                 0      3,096 K
svchost.exe                  916 Console                 0      2,680 K
svchost.exe                 1028 Console                 0     21,132 K
spoolsv.exe                 1140 Console                 0      2,692 K
explorer.exe                1860 Console                 0     46,684 K
atiptaxx.exe                2044 Console                 0      2,496 K
tbmon.exe                    248 Console                 0      1,476 K
rundll32.exe                 356 Console                 0     15,996 K
rundll32.exe                 384 Console                 0      2,584 K
ctfmon.exe                   392 Console                 0      2,404 K
agntsrvc.exe                1316 Console                 0      4,148 K
cmd.exe                      312 Console                 0        720 K
alg.exe                     3576 Console                 0      2,148 K
conime.exe                  3824 Console                 0      3,912 K
iexplore.exe                2628 Console                 0     36,188 K
cmd.exe                     3496 Console                 0      1,664 K
tasklist.exe                1460 Console                 0      4,560 K
wmiprvse.exe                1252 Console                 0      5,740 K

已经启动以下 Windows 服务:

   Application Layer Gateway Service
   Ati HotKey Poller
   Automatic Updates
   COM+ Event System
   Cryptographic Services
   DCOM Server Process Launcher
   DHCP Client
   Distributed Link Tracking Client
   DNS Client
   Error Reporting Service
   Event Log
   Help and Support
   IPSEC Services
   Logical Disk Manager
   Net Logon
   Plug and Play
   Pointsec
   Pointsec update agent
   Print Spooler
   Protected Storage
   Remote Access Connection Manager
   Remote Procedure Call (RPC)
   Remote Registry
   Secondary Logon
   Security Accounts Manager
   Server
   Shell Hardware Detection
   SoundMAX Agent Service
   SSDP Discovery Service
   System Event Notification
   System Restore Service
   Task Scheduler
   TCP/IP NetBIOS Helper
   Telephony
   Terminal Services
   Themes
   WebClient
   Windows Audio
   Windows Firewall/Internet Connection Sharing (ICS)
   Windows Management Instrumentation
   Windows Time
   Wireless Zero Configuration
   Workstation

命令成功完成。

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    ATIModeChange	REG_SZ	Ati2mdxx.exe
    ATIPTA	REG_SZ	C:\Program Files\ATI Technologies\ATI Control Panel\atiptaxx.exe
    MSPY2002	REG_SZ	C:\WINDOWS\System32\IME\PINTLGNT\ImScInst.exe /SYNC
    mscfs	REG_SZ	RUNDLL32 C:\WINDOWS\system32\msibm\cfsys.dll,cfs
    spoolsv	REG_SZ	C:\WINDOWS\system32\spoolsv\spoolsv.exe -printer
    RichMedia	REG_SZ	C:\WINDOWS\system32\Rundll32.exe  "C:\PROGRA~1\HBClient\hbhelper.dll",WaitWindows

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\OptionalComponents

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    ctfmon.exe	REG_SZ	C:\WINDOWS\system32\ctfmon.exe
    MsnMsgr	REG_SZ	"C:\Program Files\MSN Messenger\MsnMsgr.Exe" /background

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

上面列出结果中我省略了大量的信息,但是从那台电脑上生成的结果中我得到了以下的结论:

  • 未发现异常端口监听;
  • 未发现异常进程;
  • 未发现异常服务。

但是也同时发现了几点异常状况:

  • netstat 的结果中,IP地址未显示。
  • ping 的结果中,域名显示成乱码。
  • 注册表中 Run 下面有三个异常项:mscfs,spoolsv,RichMedia。

因此定下结论,确实是病毒,准确地说是木马。上网查了一下资料,原来最后一个RichMedia启动项中的 hbhelper.dll 是一款叫做很棒小秘书的软件,名列十大流氓软件之八。

第一次清除

知道了病毒的弱点之后就好办多了,首先启动到安全模式下,删除掉注册表 Run 下面的 mscfs、spoolsv、RichMedia 三项,然后删除对应的可执行文件,再以正常模式启动,查看注册表的Run下面,被删除的三个主键没有自动生成,即认为清除成功。

死灰复燃

第二天发现,不能连接Internet的故障依旧。再次收集系统信息,发现状况如下:

  • netstat 的结果中,IP地址未显示。
  • ping 的结果中,域名显示成乱码。
  • 注册表中 Run 下,RichMedia 项自动生成了。

看样子,mscfs和spoolsv这两个病毒被清除掉了,而hbhelper.dll这个病毒生命力很顽强,死灰复燃了。

昨天业已清除了注册表的 Run,也确认没有异常服务,于是我想到了IE的插件,IE插件虽然不是系统启动时自动运行,但是基本上任何人启动电脑都要打开IE的,因此也成了一个病毒藏身的好地方。于是检查IE的插件,发现了一个名为 HBObject Class的插件。索性从注册表中将该插件清除,然后删掉相关文件,再于整个注册表中检索HBObject和hbhelper.dll并全部删除之。重新启动计算机,奇怪的是病毒再次复活了。

无意之中在 C:\Windows\system32 下面发现了一个名为 hap.log 的文件:

2006-01-24 10:04:53  广告类型为网址广告
2006-01-24 10:04:53  开始发送广告请求 :http://www.topwork.aaa.com
2006-01-24 10:04:53  广告请求URL : /hap/adserver.aspx?version=1.1.3.1.0.0&mac=00-01-23-33-34-34&userid=&
  advertid=&unadvertid=&distributorid=100192&requesttype=1&requestflag=3&charset=GB2312&domain=www.topwork.
  aaa.com&word=www.topwork.aaa.com
2006-01-24 10:05:14  Server返回错误
2006-01-24 10:11:51  BHO截获的URL:about:blank
2006-01-24 10:11:51  Top-level Window object, so document has been loaded!
2006-01-24 10:12:48  BHO截获的URL:http://login.passport.net/uilogin.srf?lc=1234&id=2
2006-01-24 10:12:48  广告类型为网址广告
2006-01-24 10:12:48  开始发送广告请求 :http://login.passport.net/uilogin.srf?lc=1234&id=2
2006-01-24 10:12:48  广告请求URL : /hap/adserver.aspx?version=1.1.3.1.0.0&mac=00-01-23-33-34-34&userid=&
  advertid=&unadvertid=&distributorid=100192&requesttype=1&requestflag=3&charset=GB2312&domain=login.passport.
  net&word=login.passport.net
2006-01-24 10:12:48  Top-level Window object, so document has been loaded!
2006-01-24 10:12:49  Server返回没有广告 : null
2006-01-24 10:14:27  BHO截获的URL:about:blank
2006-01-24 10:14:27  Top-level Window object, so document has been loaded!
2006-01-24 10:15:13  BHO截获的URL:http://www.google.co.jp/
2006-01-24 10:15:13  广告类型为网址广告
2006-01-24 10:15:13  开始发送广告请求 :http://www.google.co.jp/
2006-01-24 10:15:13  广告请求URL : /hap/adserver.aspx?version=1.1.3.1.0.0&mac=00-01-23-33-34-34&userid=&
  advertid=&unadvertid=&distributorid=100192&requesttype=1&requestflag=3&charset=GB2312&domain=www.google.co.jp
  &word=www.google.co.jp
2006-01-24 10:15:13  Top-level Window object, so document has been loaded!
2006-01-24 10:15:15  Server返回没有广告 : null

原来如此!我突然明白为什么不能上网了。很明显上面这个文件是很棒小秘书在生成广告时进行的动作的日志。从上述日志可以判断,该软件截获用户输入的地址,然后将该地址发送到广告服务器上,判断该地址今天是否已经插入过广告,如果未插入,则获取广告,并插入到用户访问的网站的回复中。而这台电脑使用的是自动代理配置脚本,因此IE访问的第一个地址一定是该脚本。于是很棒小秘书就将广告代码插入到了代理脚本中。因为代理脚本是用javascript写成,被无缘无故插入一段广告代码之后显然会造成语法错误,因此IE就无法通过该脚本获取正确的代理地址,因此造成Internet无法访问而局域网访问正常的故障。

但是尽管如此,该“小蜜”究竟藏身何处,却是百思不得其解。

攻城利器

一个星期之后继续调查该“小蜜”的事迹,偶然发现很多人都在使用一个名为hijackthis的软件来检查机器。搜索hijackthis,原来这是一个检查病毒藏身地的软件,它会搜索进程、服务、注册表等,找出异常选项。于是马上下载了该软件对电脑进行扫描。扫描的结果中除了注册表和IE插件的异常之外,还发现了这样一个异常:

O10 - Unknown file in Winsock LSP: c:\windows\system32\hbmter.dll
O10 - Unknown file in Winsock LSP: c:\windows\system32\hbmter.dll

Winsock LSP是什么?查了一下得知,Winsock LSP就是Winsock的协议栈,由一系列的网络函数组成。原来如此!协议栈也是系统开机必须要运行的程序,将病毒藏身于此,可以保证每次开机都会被执行。而安全模式是不启动网络的,因此在安全模式下病毒不会启动以免现身。

第二次清除

这次清除就有目标了。首先启动到安全模式下,打开注册表编辑器,首先清除掉Run和IE插件中的各个与该小蜜有关的项目。然后开始对LSP开刀,打开 HKLM\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries,发现该主键下共有19个子键,名为0000000001-0000000019。打开0000000001,然后双击其中的 PackedCatalogItem 键值,发现其内容果然为 c:\windows\system32\hbmter.dll。于是删除 000000000001 主键。然后打开 000000000002,确认 PackedCatalogItem 键值,为c:\windows\system32\hbmter.dll,于是删除 000000000002。然后将 000000000003 重命名为 000000000001,000000000004 重命名为 000000000002,以此类推。最后将 HKLM\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9 主键下的 Num_Catalog_Entries 由 13 (十六进制的19)修改为 11。最后重新启动。

重新启动之后,netstat可以看到IP了,ping可以看到域名了,IE也能正常上网了。

总结

这次病毒清除的经历我又知道了一个新的病毒藏身地点:Winsock LSP。而且通过hijackthis这个软件可以轻松地检查电脑的异常,值得推荐。