在基于NT內(nèi)核的Windows操作系統(tǒng)家族中,Svchost.exe是一個(gè)非常重要的進(jìn)程。很多病毒、木馬駐留系統(tǒng)與這個(gè)進(jìn)程密切相關(guān),因此深入了解該進(jìn)程是非常有必要的。本文主要介紹Svchost進(jìn)程的功能,以及與該進(jìn)程相關(guān)的知識(shí)。
Svchost進(jìn)程概述
微軟對(duì)“Svchost進(jìn)程”的定義是:Svchost.exe是從動(dòng)態(tài)鏈接庫(kù)(DLL)中運(yùn)行的服務(wù)的通用主機(jī)進(jìn)程名稱。Svchost.exe文件位于“%SystemRoot%System32”文件夾中。當(dāng)系統(tǒng)啟動(dòng)時(shí),Svchost將檢查注冊(cè)表中的服務(wù)部分,以構(gòu)建需要加載的服務(wù)列表。Svchost的多個(gè)實(shí)例可以同時(shí)運(yùn)行。每個(gè)Svchost會(huì)話可以包含一組服務(wù),以便根據(jù)Svchost的啟動(dòng)方式和位置的不同運(yùn)行不同的服務(wù),這樣可以更好地進(jìn)行控制且更加便于調(diào)試。
Svchost組是由注冊(cè)表[HKEY_LOCAL_MACHINE SoftwareMicrosoftWindows NTCurrentVersionSvchost]項(xiàng)來(lái)識(shí)別的。在這個(gè)注冊(cè)表項(xiàng)下的每個(gè)值都代表單獨(dú)的Svchost組,并在我們查看活動(dòng)進(jìn)程時(shí)作為單獨(dú)的實(shí)例顯示。這里的鍵值均為REG_MULTI_SZ類型的值,并且包含該Svchost組里運(yùn)行的服務(wù)名稱(如圖1)。
實(shí)際上,Svchost只是作為服務(wù)的宿主,本身并不實(shí)現(xiàn)什么功能。如果需要使用Svchost來(lái)啟動(dòng)某個(gè)DLL形式實(shí)現(xiàn)的服務(wù),該DLL的載體Loader指向Svchost,在啟動(dòng)服務(wù)的時(shí)候由Svchost調(diào)用該服務(wù)的DLL來(lái)實(shí)現(xiàn)啟動(dòng)的目的。使用Svchost啟動(dòng)某個(gè)服務(wù)的DLL文件是由注冊(cè)表中的參數(shù)來(lái)決定的,在需要啟動(dòng)服務(wù)的注冊(cè)表項(xiàng)下都有一個(gè)“Parameters”子項(xiàng),其中的“ServiceDll”鍵值表明該服務(wù)由哪個(gè)DLL文件負(fù)責(zé),并且這個(gè)DLL文件必須導(dǎo)出一個(gè)ServiceMain()函數(shù),為處理服務(wù)任務(wù)提供支持。
提示:不同版本的Windows系統(tǒng),存在不同數(shù)量的Svchost進(jìn)程。一般來(lái)說(shuō),Windows 2000有兩個(gè)Svchost進(jìn)程,而Windows XP則有四個(gè)或四個(gè)以上的Svchost進(jìn)程。
Svchost進(jìn)程實(shí)例講解
要想查看在Svchost中運(yùn)行服務(wù)的列表,可以在Windows XP命令提示符窗口中輸入“Tasklist /svc”命令后,回車執(zhí)行(如果使用的是Windows 2000,可用Support Tools提供的Tlist工具查看,命令為“Tlist -s”)。Tasklist命令顯示活動(dòng)進(jìn)程的列表,/svc命令開(kāi)關(guān)指定顯示每個(gè)進(jìn)程中活動(dòng)服務(wù)的列表。從圖中可以看到,Svchost進(jìn)程啟動(dòng)很多系統(tǒng)服務(wù),如:RpcSs(Remote Procedure Call)、Dhcp(DHCP Client)、Netman(Network Connections)服務(wù)等等(如圖2)。
這里我們以RpcSs服務(wù)為例,來(lái)具體了解一下Svchost進(jìn)程與服務(wù)的關(guān)系。運(yùn)行Regedit,打開(kāi)注冊(cè)表編輯器,依次展開(kāi)[HKEY_LOCAL_MACHINESYSTEM
CurrentControlSetServicesRpcSs ]分支,在“Parameters”子項(xiàng)中有個(gè)名為“ServiceDll”的鍵,其值為“%SystemRoot%system32 pcss.dll”。這表示系統(tǒng)啟動(dòng)RpcSs服務(wù)時(shí),調(diào)用“%SystemRoot%system32”目錄下的Rpcss.dll動(dòng)態(tài)鏈接庫(kù)文件。
接下來(lái),從控制面板中依次雙擊“管理工具→服務(wù)”,打開(kāi)服務(wù)控制臺(tái)。在右側(cè)窗格中雙擊“Remote Procedure Call(RPC)”服務(wù)項(xiàng),打開(kāi)其屬性對(duì)話框,可以看到RpcSs服務(wù)的可執(zhí)行文件的路徑為“C:Windowssystem32svchost -k rpcss”,這說(shuō)明RpcSs服務(wù)是依靠Svchost啟動(dòng)的,“-k rpcss”表示此服務(wù)包含在Svchost的Rpcss服務(wù)組中。
Svchost進(jìn)程木馬淺析
從前面的介紹我們已經(jīng)知道,在注冊(cè)表[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrent- VersionSvchost]分支中,存放著Svchost啟動(dòng)的組和組內(nèi)的各項(xiàng)服務(wù),很多木馬和病毒正是利用這一點(diǎn)來(lái)實(shí)現(xiàn)自動(dòng)加載的。它們通常的方法有:
·添加一個(gè)新的組,在組里添加服務(wù)名;
·在現(xiàn)有的組里添加服務(wù)名或者利用現(xiàn)有組一個(gè)未安裝的服務(wù);
·修改現(xiàn)有組里的服務(wù),將它的ServiceDll指向自己的DLL文件。
例如PortLess BackDoor就是一款典型的利用Svchost進(jìn)程加載的后門(mén)工具。那么對(duì)于像PortLess BackDoor這樣的木馬、病毒,該如何檢測(cè)并清除呢?以Windows XP為例,首先我們可以利用“進(jìn)程間諜”這樣的進(jìn)程工具查看Svchost進(jìn)程中的模塊信息(如圖3),并與之前的模塊信息比較,可以發(fā)現(xiàn)Svchost進(jìn)程中有一個(gè)可疑的DLL文件“SvchostDLL.dll”。同時(shí),在“管理工具→服務(wù)”列表中會(huì)看到一項(xiàng)新的服務(wù)“Intranet Services”(顯示名稱),此服務(wù)名稱為:Iprip,由Svchost啟動(dòng),“-k netsvcs”表示此服務(wù)包含在Netsvcs服務(wù)組中。
提示:在Windows 2000中,系統(tǒng)的Iprip服務(wù)偵聽(tīng)由使用Routing Information協(xié)議版本1(RIPv1)的路由器發(fā)送的路由更新信息,在服務(wù)列表中顯示的名稱為“RIP Listener”。
運(yùn)行Regedit,打開(kāi)注冊(cè)表編輯器,展開(kāi)[HKEY_LOCAL_MACHINESYSTEMCurrentControlSet
ServicesIPRIP]分支,查看其“Parameters”子項(xiàng),其中“ServiceDll”鍵值指向調(diào)用的DLL文件路徑和全稱,這正是后門(mén)的DLL文件。知道了這些,就可以動(dòng)手清除了:在服務(wù)列表用右鍵單擊“Intranet Services”服務(wù),從菜單中選擇“停止”,然后在上述注冊(cè)表分支中刪除“Iprip”項(xiàng)。重新啟動(dòng)計(jì)算機(jī),再按照“ServiceDll”鍵值提示的位置刪除后門(mén)程序主文件即可。最后需要提醒讀者的是,對(duì)注冊(cè)表進(jìn)行修改前,應(yīng)做好備份工作,以便出現(xiàn)錯(cuò)誤時(shí)能夠及時(shí)還原。


