第五回:真假难辨的SVCHOST
网络安全
危险等级:★★★★
曾经案例:“冲击波杀手”蠕虫运行时,将在%System%\wins目录下生成自身的拷贝,并使用这个生成的拷贝建立一个名为“WINS Client”的服务。同时一个名为TFTPD.EXE也会被复制到%System%\wins文件夹中,命名为SVCHOST.EXE,并使用这个文件建立一个名为“Network Connections Sharing”的服务。通过在系统中建立上述两项服务,在系统重新启动时触发恶意程序运行。
繁杂的Svchost进程
新的一天,悟空一行人早早就来到教室,心想最近听了谭教授的讲解之后,自己对系统进程的了解又加深了很多,今天谭教授又会给我们讲解什么内容?谭教授来到教室,问道:“唐僧,在经过了四节课的讲解学习后,有什么发现没有?”。唐僧回答道:“贫僧听了您的课程后,的确受益匪浅啊!不过我最近发现一个问题,不管是Windows 2000系统还是Windows XP系统,在它们的进程中都有很多个Svchost.exe进程。我上网一查询,有的网友说是系统进程,有的又说是计算机病毒。他们到底谁对谁错啊?”。
谭教授道:“Svchost.exe是Windows XP系统的一个核心进程。但是Svchost.exe不只是出现在Windows XP系统中,在使用NT内核的Windows系统中都会有Svchost.exe存在。一般情况下Svchost.exe进程在Windows 2000中的数目为2个,在Windows XP中的数目为4个或4个以上,在Windows 2003中就会更多。所以当你看到多个Svchost.exe进程时,很难判断它是不是计算机病毒。”
小知识:Svchost.exe是NT内核操作系统(Windows 2000/XP/2003都属于NT内核操作系统)独有的进程,“Svchost”其实就是“Service Host”(服务宿主)的缩写。它本身并不能给用户提供任何服务,微软官方对它的定义是:Svchost.exe是从动态链接库(DLL)中运行的服务的通用主机进程名称,是专门为系统启动各种服务的,Svchost.exe进程可以同时启动多个服务。
揭秘Svchost.exe
悟空接着问道:“Svchost.exe是如何启动系统服务的?Svchost.exe启动某服务时,又是如何知道应该调用哪个动态链接库?”教授解释说:“系统服务都是以动态链接库形式实现的,它们把可执行程序指向Svchost.exe,因此Svchost.exe只要调用某个动态链接库,即可启动对应的服务。由于系统服务在注册表中都设置了相关参数,Svchost.exe通过读取某服务在注册表中的信息,就可知道应该调用哪个动态链接库,从而启动该服务。”
教授继续说道:“下面我们以Svchost.exe启动Telephony服务为例,介绍其启动服务的方法。在Windows XP系统的开始菜单中点击‘运行’命令,在弹出的窗口中输入‘services.msc’命令。接着在弹出的服务编辑器中找到Telephony服务并双击打开它,从弹出的服务属性对话框中可以看到Telephony服务的‘可执行文件的路径’为C:\WINDOWS\System32\Svchost.exe -k netsvcs,说明Telephony服务是依靠Svchost.exe调用netsvcs参数来实现的,而参数的内容则是存放在系统注册表中的。”
谭教授一边操作着,一边讲解:“运行REGEDIT命令,打开注册表编辑器,接着找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TapiSrv项,接着找到类型为‘REG_EXPAND_SZ’的键ImagePath,其键值为%SystemRoot%\System32\Svchost.exe -k netsvcs(这就是在服务窗口中看到的服务启动命令)。另外在Parameters子项中有个名为ServiceDll的键,其值为‘%SystemRoot%\System32\tapisrv.dll’,其中‘tapisrv.dll’就是Telephony服务要使用的动态链接库文件(图1)。这样Svchost进程通过读取Telephony服务注册表信息,就能启动该服务了。”

真金不怕火炼
八戒不耐烦地问道:“教授,你今天讲了这么多,怎么没有说到Svchost.exe的危害啊?”教授微微一笑道:“由于Svchost.exe进程可以启动各种服务,因此病毒、木马也经常伪装成系统的DLL文件,使用Svchost.exe来调用它们,从而让病毒、木马进入内存中运行,并且最终感染系统和控制电脑。”
唐僧接着问道:“那么我们如何从众多的Svchost.exe进程中分辨出哪些是危险的呢?”“首先我们运行‘任务管理器’,由于Svchost.exe是系统进程,是由系统本身进行加载的(图2)。所以如果在‘进程’标签的‘用户名’选项中查看到某个Svchost.exe进程是由当前用户加载的话,那么这个进程一定有问题的。其实从Svchost.exe进程的路径也可以分辨,正常的Svchost.exe应该在C:\Windows\system32目录下。如果你发现其路径在其他目录下,同样也是有问题的。”

教授顿了一下,接着说道:“当然也有病毒采用线程插入技术将本身插入到正常的Svchost.exe进程中,这时需要可以使用《木马辅助查找器》来查看该进程的线程,以而发现病毒、木马的‘蛛丝马迹’。如果发现了,在命令提示符窗口执行‘TASKKILL’命令来杀掉可疑的Svchost进程。”
随着课程的深入,悟空们感到时间过得越来越快,这不下课铃声又响起了。下节课谭教授将为大家讲解系统中一个常见的高危程序——cmd.exe。