2.进程伪装型后门的歼灭
最初的后门靠注册“系统服务”的方法在Win9x系统里隐藏自己的运行信息,到了NT架构里,这个方法失效了——NT家族自带的任务管理器(Task Manager,TaskMgr.exe)把所有普通进程都一视同仁的显示出来,连初级用户都能轻易发现后门运行的痕迹,于是后门制造者开始攻克心理学和障眼法,让后门进程在任务管理器里把自己标榜为“系统关键进程”,达到欺骗用户的目的。
我们都知道,任务管理器列出的众多进程里包含着一部分“关键进程”,它们是无法通过任务管理器中止的,而且许多文章也会提到相关进程名,久而久之,我们又养成一个习惯:查看进程信息时,只要看到熟悉甚至类似的进程名就忽略不计了,仅仅去寻找不熟悉的进程名,于是后门制造者就直接利用这个心理暗角配合路径遍历法则,让后门进程显示为“smss.exe”、“svchost.exe”、“lsass.exe”、“csrss.exe”、“winlogon.exe”等关键进程名就欺骗了用户和任务管理器。
在这种情况下,系统自己的任务管理器已经不能信任了,因为它遗漏了最重要的路径信息,后门就利用了这一点——它可以把自己伪装成svchost.exe放到Windows目录下,然后在注册表启动项里加上不带路径信息的“svchost.exe”信息,系统在根据目录遍历法则一层层深入寻找svchost.exe时会在Windows目录里发现并执行它,而真正的关键进程svchost.exe是在SYSTEM32里的,而且它也必须通过“服务管理器”(Service Control Manager,SCM)加载,于是任务管理器会显示多个svchost.exe进程,但是由于缺乏路径指示,我们根本不知道系统已经多了一个假的svchost.exe。即使我们发现了它是假的,也无法用任务管理器终止它的运行,因为任务管理器只是简单的判断了文件名就认为它是“关键进程”了,自然不会让你终止。类似的后门伪装文件名还有“SYSTEM\rundll32.exe”、“SYSTEM32\rundll.exe”(NT架构里根本没有rundll.exe这个程序)、“SYSTEM\services.exe”等,要发现并歼灭这些后门,除了要求我们对常见的系统关键进程有所了解以外,还需要第三方提供的扩展任务管理器协助,例如Windows优化大师携带的进程查看器,用它便可迅速发现路径不对的“假兄弟”。
其实最迅速的查找方法是运行“系统配置实用程序”(MSCONFIG.EXE),切换到“启动项”,如果在这里发现了“系统关键程序”的信息,那它一定是假的。
3.服务欺骗型后门的战役
Windows的任务管理器不可终止两种程序的运行:一种是关键进程,另一种是通过服务管理器SCM启动的系统服务程序(NT-Service),所以一部分后门制造者设法把后门做成服务形式,让SCM直接帮助启动服务进程,不再借用注册表启动项加载,这样即使是对注册表启动项有一定了解的用户也难以发现异常,而且就算他想终止任务管理器里显示的奇怪进程,也会被拒绝,如果用户对服务管理器的了解不深,那他将会在眼花缭乱的服务面前变得束手无策。
这时候,我们又需要请“系统配置实用程序”出山了,切换到“服务”选项卡,把“隐藏所有Microsoft服务”,这里就只显示非微软开发的普通服务程序列表了,包括服务欺骗型后门的服务项,一般它会包含欺骗性质的字符或者伪装成某厂商的服务名,如“Rising Virus Monitor”(瑞星监控)、“Macromedia License”等,记住这里显示的列表名称,接着运行“服务管理器”(Services.msc)找到对应的项目,看看属性里的文件和路径是不是真的,如果你并没有安装KAV、MCAFEE这些杀毒软件而SCM里却找到对应项目的话,它就是狡猾的后门没错了。一些间谍软件还会自作主张的把自己命名为“Windows Print Controller”,简直就是无视系统自身的“Print Spooler”服务。
找到这类后门后,不要急着终止它的运行,既然后门作者知道SCM能直接停止它们,就必然会做一些复活措施,所以我们必须先把后门服务的“启动类型”设置为“禁止”,然后重启一次确保后门程序无法跟随系统启动,这时候才能开始清理后门。其中文件的路径信息SCM已经提供给我们了,直接在磁盘上找到删除即可,但是服务项目不能直接用SCM删除,要删除这个残留的服务项,首先要对系统服务有个最初的概念。
官方对系统服务的定义如下:
在NT架构系统中,服务是指执行指定系统功能的程序、例程或进程,以便支持其他程序,尤其是底层(接近硬件)程序。通过网络提供服务时,服务可以在Active Directory中发布,从而促进了以服务为中心的管理和使用。服务是一种应用程序类型,它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能,例如客户端/服务器应用程序、Web服务器、数据库服务器以及其他基于服务器的应用程序。 既然服务自身也是独立出来的程序,它就必须有一个加载的入口,我们可以把这个入口理解为第二个启动项,这个入口是由SCM负责的,无论是什么身份的用户进入系统,SCM启动服务的位置都固定在注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services分支里,所以只要找这个分支就可以发现所有服务——也许你会说,这里显示的名字似乎都毫无意义,我怎么知道哪个是我正在找的?其实很简单,我们回到SCM,查看一个服务的属性,例如“DNS Client”服务,它的属性里写着“显示名称:DNS Client 服务名称:Dnscache”,现在回到注册表分支,查找“Dnscache”,就会看到它是CurrentControlSet \Services\Dnscache,这就是我们在SCM里看到的“DNS Client”服务,如果你删除掉“Dnscache”项目,那么整个“DNS Client”服务也就消失了。以此类推,很快就可以清理掉服务欺骗型后门。
|