随着计算机的发展,木马技术也在不停的发展,以冰河为首的老一代经典木马已经开始慢慢消失在经典木马行列中,取而代之的则是新一代的嵌入式木马,也就是通常所说的dll型注入式木马,其运用了动态嵌入技术,动态嵌入最常见的是最常见的是钩子、API以及远程线程技术,而现在大多数的嵌入式木马都是运用远程线程技术把自己本身挂在一个正常的系统进程中,通常这一类木马清除起来比较困难。 嵌入式木马之迷 那到底什么是嵌入式dll型木马呢?DLL的代码和其他程序几乎没什么两样,仅仅是接口和启动模式不同,只要改动一下代码入口,DLL就变成一个独立的程序了。当然,DLL文件是没有程序逻辑的,这里并不是说DLL=EXE,不过,依然可以把DLL看做缺少了main入口的EXE,DLL带的各个功能函数可以看作一个程序的几个函数模块。DLL木马就是把一个实现了木马功能的代码,加上一些特殊代码写成DLL文件,导出相关的API,在别人看来,这只是一个普通的DLL,但是这个DLL却携带了完整的木马功能,而dll木马的标准执行入口为dllmain,dllmain包含了木马的运行代码,或者其指向木马的执行模块,在dll木马中通过在另一个进程中创建远程线程(RemoteThread)的方法进入那个进程的内存地址空间被称为“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,这就是嵌入式dll木马。
因此黑客通常把dll木马注入到一些系统关键进程,如嵌入到ie浏览器,Explorer.exe中,来达到更好的启动和隐蔽自身的目的。如今除了专门的dll木马外,还有许多优秀的木马也可以选择生成一般的exe木马和dll木马2种类型,来提供给用户各种需要,其中的典型的木马是黑洞和灰鸽子,这2款经典之作就支持这2种服务端的生成,其生成的dll木马服务端的稳定性也相当出色,各大杀毒产商都将其列入重点查杀对象。
揪出嵌入式木马
在了解了嵌入式木马的工作原理后,我们应该如何来及时发现和清除这一类木马呢?不管是传统木马还是嵌入式木马,首先我们要了解木马的藏身之地,同传统木马一样system32同样也是嵌入式木马最喜爱的藏身之所,根据这个特点我们在安装好系统和必要的应用程序后,对该目录下的exe文件和dll文件做一个记录,运行CMD--转换目录到system32--dir *.exe>exe.txt & dir*.dll>dll.txt,这样所有的EXE和DLL文件的名称都被分别记录到exe.txt和dllback.txt中。
如果系统在以后的使用中出现异常而用传统的方法查不出来的时候,我们就要考虑是不是嵌入式木马在捣乱了,此时我们再次运行CMD--转换目录到system32--dir *.exe>exe1.txt & dir*.dll>dll1.txt将system32下的exe和dll文件分别再记录到exe1.txt和dll1.txt中,接下来我们就可以对2次记录的文件进行比较了,来判断是否存在嵌入式木马,方法如下:运行CMD--fc exe.txt exe1.txt>change.txt & fc dll.txt dll1.txt>change.txt,其含义为用fc命令比较exe和dll的2次记录文件,并将结果输出到change.txt中。这时我们就可以从change.txt中发现发生变化的exe和dll文件以及多出来的exe和dll文件,最后我们查看这些文件的创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马修改了。
如果有的话,在没有把握的情况下就把dll文件先删除到回收站中,以便误删以后还能文件还原,如果重新启动后系统没有任何异常,我们就可以彻底删除此dll文件了。但同时由于有的进程调用的DLL文件非常多,使得靠我们自己去一个一个去核对变的不太现实,所以此时我们可以借助一些工具来帮助我们缩小范围,其中NT进程/内存模块查看器ps.exe就是一款很不错的工具,用命令ps.exe /a /m >usedll.txt将系统目前正在调用的所有DLL文件名称保存到usedll.txt中,然后再用fc dll.txt usedll.txt>changenow.txt把比较结果输出到changenow.txt中,这样我们就能大大的缩小查找范围。同时端口也是值得我们重视的一部分,我们可以用进程端口查看工具Fport.exe来查看与端口对应的进程,一般木马开放的是高端口(但也不排除其使用了端口转发和复用技术)样还可以将范围缩小到具体的进程,然后结合Procedump.exe这款脱壳工具来查看此进程调用的dll文件,再利用上面介绍的文件比较法来比较,从而使得查找DLL木马变的更容易。针对端口我们还可以使用嗅探的方法来嗅探端口所传输的数据,如果数据异常则,再使用Fport来找出端口所对应进程然后再重复以上步骤。
实战文件对比法
以上讲了这么多方法来揪出嵌入式木马,也许大家看着这些操作无从做起,以下我将给出文件对比的主要步骤。
◆应用环境◆
Windows2000 pro,d:/test文件夹的对比
◆实战流程◆
步骤一:进入d盘test文件夹,对test文件夹下内容进行记录,运行CMD--转换目录到d:/test--dir *.exe>exe.txt & dir *.dll>dll.txt,如下图所示:
这样我们就会在d:/test下生成exe和dll两个记事本文件,内容分别如下: exe.txt文件:
驱动器 D 中的卷是 娱乐
卷的序列号是 6078-F043
D:\test 的目录
2005-12-04 11:59a 26,772,480 dx81setup.exe2005-12-04 11:59a 473,600 g5setup解码.exe 2 个文件 27,246,080 字节0 个目录 505,454,592 可用字节
dll.txt文件: 驱动器 D 中的卷是 娱乐 卷的序列号是 6078-F043
D:\test 的目录
2005-03-31 02:52a 36,924 php5apache.dll2005-03-31 02:52a 36,925 php5apache2.dll2005-03-31 02:52a 53,314 php5apache_hooks.dll 3 个文件 127,163 字节 0 个目录 505,454,592 可用字节
步骤二:我向test文件夹中拷贝几个exe和dll文件进去,再次重复步骤一,得到exe1.txt和dll1.txt两个文件,同样他们位于test文件夹中。
步骤三:比较exe.txt和exe1.txt文件以及dll.txt和dll1.txt文件,运行CMD--fc exe.txt exe1.txt>change.txt & fc dll.txt dll1.txt>change.txt,如下图所示:
对比后得到changedll.txt和changeexe.txt两个文件内容如下:
changedll.txt:
正在比较文件 dll.txt 和 DLL1.TXT
***** dll.txt
2005-03-31 02:52a 36,924 php5apache.dll***** DLL1.TXT
2005-03-31 02:52a 417,792 fdftk.dll2005-03-31 02:52a 90,112 fribidi.dll2005-03-31 02:52a 346,624 gds32.dll2005-03-31 02:52a 36,924 php5apache.dll*****
***** dll.txt2005-03-31 02:52a 53,314 php5apache_hooks.dll 3 个文件 127,163 字节 0 个目录 505,454,592 可用字节***** DLL1.TXT2005-03-31 02:52a 53,314 php5apache_hooks.dll 6 个文件 981,691 字节 0 个目录 475,787,264 可用字节*****
其中我们只需看上面我加粗的部分,这部分内容为增加的文件。加粗部分上面一段dll.txt内容只显示一行信息2005-03-31 02:52a 36,924 php5apache.dll,其他文件内容信息省略了,这一行内容就代表了dll.txt中的内容,而加粗这部分DLL1.TXT中的2005-03-31 02:52a 36,924 php5apache.dll就代表了dll.txt中所有内容,剩下的就是我加粗了的文件了,即增加了的文件。
changeexe.txt:
正在比较文件 exe.txt 和 EXE1.TXT
***** exe.txt2005-12-04 11:59a 473,600 g5setup解码.exe 2 个文件 27,246,080 字节 0 个目录 505,454,592 可用字节***** EXE1.TXT2005-12-04 11:59a 473,600 g5setup解码.exe2005-12-04 12:02p 13,058,048 mpsetup.exe2004-10-30 09:11a 11,761,184 RealPlayer10-5GOLD_cn.EXE2005-12-04 12:02p 3,963,392 Winamp278cn_DFX_Blue.EXE 5 个文件 56,028,704 字节 0 个目录 475,787,264 可用字节*****
以上增加了的内容为:
2005-12-04 12:02p 13,058,048 mpsetup.exe2004-10-30 09:11a 11,761,184 RealPlayer10-5GOLD_cn.EXE2005-12-04 12:02p 3,963,392 Winamp278cn_DFX_Blue.EXE
步骤四:判断以上增加的内容是否是自己,曾经安装在test文件夹中的exe或者dll文件,如果不是则删除即可。
结束语
总而言之要查杀这类嵌入式木马最有效的办法就是文件对比法,除了上面介绍的一些缩小查找范围的办法外,用户还可以自己再发挥想象把范围缩至最小,从而更加准确的查杀此类嵌入式木马,让嵌入式木马在我们面前无法遁形。