一、初识DLL木马
首先了解一下DLL文件,DLL(Dynamic Link Library)是系统中的动态链接库文件,DLL文件本身并不能够运行,需要应用程序来调用。当程序运行时,Windows将其装入内存中,并寻找文件中出现的动态链接库文件。对于每个动态链接,Windows都会装入指定的DLL文件并把它映射到相应虚拟地址空间中。DLL木马实际就是把一段实现了木马功能的代码加上一些特殊代码写成DLL文件。DLL文件运行时是插入到应用程序的内存模块当中,所以DLL文件无法删除。
下面以一个实例说明DLL文件的运行,单击“开始→运行”并输入“rundll32.exe netplwiz.dll,UsersRunDll”,回车后会看到一个用户账户设置窗口,打开进程列表发现系统新增一个“rundll32.exe”进程,但是并不会发现DLL之类的进程,“netplwiz.dll,UsersRunDll”就是通过“rundll32.exe”来调用的,如果这是一个DLL木马,那么它启动后新增的进程就是正常的“rundll32.exe”,一般用户也不会将“rundll32.exe”中止或删除,而木马此时却可以在后台悄悄地“作恶”。
小提示
当然除了用“rundll32.exe”作为载体外,DLL木马还可以通过动态嵌入技术,通过任意一个系统进程进行加载。
二、查杀方法
前面介绍了DLL文件自身并不能运行,它必须通过其它程序调用才能“作恶”,主要有以下两种途径:
1.通过Rundl32l.exe启动的木马
木马运行如上所述,系统启动后若发现加载了“rundll32.exe”进程,那很可能就是中招了。不过系统也会调用“rundll32.exe”来加载正常的DLL文件,主要看加载的是什么DLL文件,因为木马大多是通过注册表键值来自启动。首先检查那些常见的自启动键值,如“3721”就是通过DLL文件来启动的,虽然它并不是木马,但是它的自启动和运行方式可以借鉴。它在注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下,新添了一个“CnsMin”的键值,启动命令是“Rundll32.exe E:\WINDOWS\DOWNLO~1\CnsMin.dll,Rundll32”(如图1)。这样每次启动系统后“CnsMin.dll”都会被Rundll32.exe调用,而在进程列表出现的则是Rundl32.exe。此类DLL木马的运行过程大多如此,查杀方法是:首先将“rundll32.exe”进程终止,接着查找注册表各启动键值,从启动命令的路径中找到相应的DLL文件并删除即可。
图1 注册表
2. 嵌入式木马
运用Rundl32l.exe调用的木马,很容易被用户发现并查杀。为了提高“马儿”的成活率,网上出现了动态嵌入式木马,它是将木马代码嵌入到正在运行的进程中。理论上来说,在Windows中的每个进程都有自己的私有内存空间,别的进程是不允许对这个私有空间进行操作的,但实际上,动态嵌入式木马就是通过嵌入进程来“作恶”的。虽然编写这种动态式嵌入木马有一定的技术难度,但是很多“雷锋”式的制马高手将此类木马随意放在网上,初学者下载这种木马后只要按提示选择嵌入进程就可以轻松生成木马,把客户端发送到对方电脑并运行后,动态嵌入式木马就可以在我们的电脑“安家落户”了,这也是众多用户中招的原因。下面以查杀“winlogon.exe”进程木马为例,介绍一下查杀技巧。
①.查看连接
不管是何种类型的木马,它要“作恶”肯定要通过本地端口与外部电脑连接,只要查看本机开放端口和连接情况,一般就可以找出木马客户端。查看端口和连接可用“netstat”命令(格式:nestat –a –o),不过这个命令并不能看到发起连接的进程。这里推荐大家使用“CurrPorts 汉化版”,它是一款免费的网络连接检测工具,除了能够列出所有TCP/IP和UDP连接外,还可以列出打开端口的应用程序,并提供终止程序功能。运行“CurrPorts”后,会发现“winlogon.exe”已被一远程地址连接,打开的端口是6666、6671、6669、6672。“winlogon.exe”是Windows NT的用户登陆程序,这个进程是管理用户登录和退出的,它在用户按下CTRL+ALT+DEL时就激活了,显示安全对话框。正常情况下,这个进程是不会向外发起连接的,若“winlogon.exe”发起连接,则是中了嵌入“winlogon.exe”进程的DLL木马,在“CurrPorts”中选中进程,依次将连接中断(如图2),需要注意的是不要选择“终止打开选中端口的进程”,否则电脑会自动重启。
图2 将连接中断
小知识:端口状态参数含义
LISTENING表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接,只有TCP协议的服务端口才能处于LISTENING状态。
ESTABLISHED的意思是建立连接,表示两台机器正在通信。
TIME_WAIT的意思是结束了这次连接。说明端口曾经有过访问,但访问结束了。
SYN_SENT是本机向其它计算机发出的连接请求,一般这个状态存在的时间很短。
②.分析
既然是插入进程的DLL木马,通过查看“winlogon.exe”进程加载DLL模块应该可以找出“真凶”。查看模块利用免费软件“prcmgrWindows进程管理器”,运行软件后选中进程并切换到“进程模块”选项卡,接着单击“导出列表”,将加载列表导出为TXT文件(如图3)。
图3 将加载列表导出为TXT文件
小提示
若木马插入到“Explorer”、“Iexplorer.exe”等进程中,由于启动的应用程序不同,则加载的DLL模块也是不同的,为便于比较最好关闭所有不必要的程序再进行导出。
③.查找木马
用上文的方法到另一台电脑中同样导出“winlogon.exe”进程加载的DLL模块文件,用记事本打开这两个文件比较,可以看到中招电脑上进程模块比正常电脑多出14个(如图4),现在一一比较将相同模块文件删除后,顺利找到多出的14个DLL文件,经查看文件属性获知,“e:\windows\rundll.dll”为非微软“制造”,它就是DLL木马。
图4 可以看到中招电脑上进程模块比正常电脑多出14个
小提示
如果是系统正常的DLL文件,文件属性中都会有一个“版本”标签,公司名称为“Microsoft Corporation”,创建日期是“2001年9月5日,:13:00”,可根据这一特性来判断是否为木马文件。如本例的“rundll.dll”木马,创建日期“2004年11月13日, :11:59”,修改日期则是“2001年9月5日, :13:00”,也就是说还没创建文件时就被修改了,显然是非法文件!
④.删除木马(设置系统权限)
由于“winlogon.exe”是系统关键进程无法终止,所以也无法直接删除“rundll.dll”,这里使用系统权限设置来禁止“winlogon.exe”的调用。打开“我的电脑”,单击“工具→文件夹选项→查看”,然后在“高级设置”选项下去除“简单文件共享(推荐)”前的小勾;随后找到“rundll.dll”右击选择“属性”命令,点击“安全”标签,接着单击“高级”项,在弹出的窗口清除“从父项继承那些可以应用到子对象的权限项目,包括那些在此明确定义的项目”复选框,最后单击删除,去除所有继承的权限(如图5),依次单击“确定”后退出,这样系统中就没有任何进程可以调用“rundll.dll”,重启后重新勾选“从父项继承那些可以应用到子对象的权限项目权限”,然后将其删除。
图5 去除所有继承的权限
小提示
上述权限操作仅对采用NTFS分区的系统有效,对于采用FAT32分区的系统,可以重启后进入纯DOS将木马文件删除。如果加载DLL木马的进程可以被终止,如嵌入“Explorer.exe”木马,只要将进程终止,然后找到文件将它删除即可。
⑤.修复自启动
DLL木马会通过注册表键值进行自启动,查看自启动菜单推荐大家使用“Autoruns8.13汉化版”,它也是一款免费工具,可以查看系统所有启动项目。运行后单击“登录”,可以看到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run]下,有一“Windows服务”启动项极为可疑(加载的是“E:\WINDOWS\msagent\msymrj.com”),右击选择“转到具体位置”(如图6)。此时程序将直接打开注册表,随后将该键值删除,至此DLL木马顺利被查杀。那么“msymrj.com”与“rundll”木马究竟是什么关系?这其实是一对守护进程,用于守护嵌入“winlogon.exe”进程的木马,如果发现被插入的进程被终止,立刻重新启动该进程。不过本例的“winlogon.exe”进程如果被终止,系统会重新启动,它也帮不上什么忙了。
图6 转到具体位置
小提示
很多DLL木马被终止后立刻又会复活,就是由于有守护进程的存在,只有把守护进程“掐死”后,才能终止木马的运行。
三、总结经验
嵌入式木马作为一种“科技含量”较高的木马,用一般方法不易发现,查杀也有一定的难度,我们只要根据上述流程进行查杀,还是可以将其全部“消灭”。总结一下查杀步骤:首先用“CurrPorts”查看本机开放端口和连接并终止非法连接,找到发起连接进程,接着用“prcmgrWindows进程管理器”找出DLL木马,然后将木马文件删除,最后通过“Autoruns”修复注册表即可。