用Autoruns揪出流氓软件的驱动保护
一、为什么流氓软件总是删不掉?
文件删除不掉,或者流氓软件清除不了,或者删除了相关的文件,但是马上它又出现了。现在流氓软件为了保护自己,采的手段是五花八门,无所不用其极:进程保护,交叉感染,自启动,自我恢复,文件隐藏,进程注入,驱动保护。
到目前为止,所有流氓软件最终极、最有效的保护办法还是底层驱动级的保护,一般就是在drivers目录下增加一个或多个.sys文件(我也见过个用 rundll32来运行一个.dll作为驱动的),但本质上这个都会在Windows的HKLM\SYSTEM\CurrentControlSet\ Services\下建一个相关的,如CNNIC建立的就是HKLM\SYSTEM\CurrentControlSet\Services\ cdnprot,并且将启动级别做得很高,在安全模式下也会自动启动。这个底的驱动过滤所有的文件以及注册表操作,如果发现是对流氓软件自己的文件/注册表操作,就会直接返回一个true,如果发觉文件被删除,就通过备份或者网络来下载恢复。它们的保护措施已经做到这一级,普通用户根本没有办法删除相关的文件,一般都需要重启到DOS系统下去删文件。
这也是很多网友提的为什么文件删除不掉,或者删除了,重启之后,一会儿又出现了,阴魂不散的原因。下面我们的要做的,就是找出来这些氓软件的后台的驱动保护。
二、为什么找出驱动保护很困难?
Windows 的驱动文件一般位于system32\drivers目录下,以.sys文件方式存在,通过注册表的HKLM\SYSTEM\ CurrentControlSet\Services\的式来启动,有一部分属于服务的,可以在Windows的服务的MMC控制窗口里看到。但如果是驱动,则在这里看不到。Windows正式情况下,那个rivers目录下有200个左右的文件,如果偷偷往这个下面塞一个.sys文件,是很难发现的。象著名的3721这类cnsminkp.sys,CNNIC的dnprot.sys比较容易认识,但现在的很多软件的名字都是不固定的,或者是随机生成的,这样的辨识的难度就很大。我曾经用过的方式有:
1、通过保存文件列表,时常自己手工比较这两个文件,看前后差别多出来的文件肯定有问题
2、通过文件生成的日期。(这点流氓软件也想到了,日期也只能作为参考)
3、通过文件的属性里在的公司信息。早年还行,现在越来越多的流氓软件的驱动冒充是M$的,有的连英文单词都写错了。
4、通过文件夹监视工具。
上面这四种都有一定的缺陷,只能作为参考,都不是太好。并且现在有一些软件通过文件系统隐藏,这些驱动文件,通过资源管理器,根本连都看不到。
三、如何找出可疑驱动来?
难道没有更好的办法吗?有,应该有的,这个就是我们今天要介绍的主角:Autoruns
介绍:Autoruns是著名的sysinternals出品的一款小软件,它的主要功能是列出系统自启动的项目。通过它,你可以轻易查看到所有系统可能动的地方,非常的全面。跟流氓软件相关的是“Services(服务)”,“LSA Providers(LSA提供者)”、”Winsock Providers(Winsock提者)”,“Drivers(驱动)“。下面重点介绍Drivers这一部分的功能。
运行Autoruns之后,在它的“Options(选项)”菜单中有两项“Verifiy Code Signatures(验证代码签名)“Hide Signed Microsoft entries(隐藏已签名的微软项)“,把这两项都选中了。验证代码签名是指验证所有dirvers下的.sys文件的文件签名。Windows下的硬件有一签名的功能,它是为了保证所有的驱动文件是经过M$测试,符合HAL兼容性。隐藏已签名的微软项,就是把那些合法的隐藏起来。不然200多,会看着发晕的。
这样Autoruns就会检查所有已经注册成为驱动的项,并且检查所有的.sys的文件数字签名。所有假冒的或者没有通过代码签名的项,都会在这列出来。也就可以很容易判断这个驱动是不是有问题了。如果有问题的话,可能通过把里面相关的注册表键值删除,重启机器,这样驱动保就失效了,然后可以通过文件删除工具来删除其它的文件,完成最后的清理工作。
四、总结
最后再总结一下:
1、流氓软件删除不掉或者死灰复燃,很多时候是因为有驱动或服务保护
2、通过Autoruns找到这些可疑的驱动
3、通过删除相关驱动健值或者直接用文件粉碎器删除相关的.sys文件,重启驱动就无效
4、清理其它文件,完成善后工作。
以上方法通过各种测试是证明有效的,但不排除将来有更进一步的隐藏手段来躲避Autoruns的检查。但原理是一样的。不过是通过程序来减少作量。