Svchost工作行程揭秘
在基於NT內核的Windows操作系統家族中,Svchost.exe是一個非常重要的工作行程。很多病毒、木馬駐留系統與這個工作行程密切相關,因此深入瞭解該工作行程是非常有必要的。本文主要介紹
Svchost工作行程的功能,以及與該工作行程相關的知識。
Svchost工作行程概述
微軟對「
Svchost工作行程」的定義是:
Svchost.exe是從動態鏈接庫(DLL)中執行的服務的通用主機工作行程名稱。
Svchost.exe文件位於「%SystemRoot%\System32」資料夾中。當系統啟動時,
Svchost將檢查註冊表中的服務部分,以構建需要載入的服務列表。
Svchost的多個實例可以同時執行。每個
Svchost會話可以包含一組服務,以便根據
Svchost的啟動方式和位置的不同執行不同的服務,這樣可以更好地進行控制且更加便於除錯。
Svchost組是由註冊表[HKEY_LOCAL_MACHINE\ Software\Microsoft\Windows NT\CurrentVersion\Svchost]項來識別的。在這個註冊表項下的每個值都代表單獨的
Svchost組,並在我們檢視活動工作行程時作為單獨的實例顯示。這裡的鍵值均為REG_MULTI_SZ類型的值,並且包含該
Svchost組裡執行的服務名稱(如圖1)。
圖1 註冊表中的
Svchost
實際上,
Svchost只是作為服務的宿主,本身並不實現什麼功能。如果需要使用
Svchost來啟動某個DLL形式實現的服務,該DLL的載體Loader指向
Svchost,在啟動服務的時候由
Svchost呼叫該服務的DLL來實現啟動的目的。使用
Svchost啟動某個服務的DLL文件是由註冊表中的參數來決定的,在需要啟動服務的註冊表項下都有一個「Parameters」子項,其中的「ServiceDll」鍵值表明該服務由哪個DLL文件負責,並且這個DLL文件必須匯出一個ServiceMain()函數,為處理服務任務提供支持。
提示:不同版本的Windows系統,存在不同數量的
Svchost工作行程。一般來說,Windows 2000有兩個
Svchost工作行程,而Windows XP則有四個或四個以上的
Svchost工作行程。
Svchost工作行程實例講解
要想檢視在
Svchost中執行服務的列表,可以在Windows XP命令提示字元視窗中輸入「Tasklist /svc」命令後,Enter鍵執行(如果使用的是Windows 2000,可用Support Tools提供的Tlist工具檢視,命令為「Tlist -s」)。Tasklist命令顯示活動工作行程的列表,/svc命令開關指定顯示每個工作行程中活動服務的列表。從圖中可以看到,
Svchost工作行程啟動很多系統服務,如:RpcSs(Remote Procedure Call)、Dhcp(DHCP Client)、Netman(Network Connections)服務等等(如圖2)。
圖2
Svchost的服務列表
這裡我們以RpcSs服務為例,來具體瞭解一下
Svchost工作行程與服務的關係。執行Regedit,打開註冊表編輯器,依次展開[HKEY_LOCAL_MACHINE\SYSTEM\
CurrentControlSet\Services\RpcSs ]分支,在「Parameters」子項中有個名為「ServiceDll」的鍵,其值為「%SystemRoot%\system32\rpcss.dll」。這表示系統啟動RpcSs服務時,呼叫「%SystemRoot%\system32」目錄下的Rpcss.dll動態鏈接庫文件。
接下來,從控制台中依次雙擊「管理工具→服務」,打開服務控制台。在右側視窗內中雙擊「Remote Procedure Call(RPC)」服務項,打開其內容交談視窗,可以看到RpcSs服務的可執行文件的路徑為「C:\Windows\system32\svchost -k rpcss」,這說明RpcSs服務是依靠
Svchost啟動的,「-k rpcss」表示此服務包含在
Svchost的Rpcss服務組中。
Svchost工作行程木馬淺析
從前面的介紹我們已經知道,在註冊表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current- Version\Svchost]分支中,存放著
Svchost啟動的組和組內的各項服務,很多木馬和病毒正是利用這一點來實現自動載入的。它們通常的方法有:
· 新增一個新的組,在組裡新增服務名;
· 在現有的組裡新增服務名或者利用現有組一個未安裝的服務;
· 修改現有組裡的服務,將它的ServiceDll指向自己的DLL文件。
例如PortLess BackDoor就是一款典型的利用
Svchost工作行程載入的後門工具。那麼對於像PortLess BackDoor這樣的木馬、病毒,該如何檢測並清除呢?以Windows XP為例,首先我們可以利用「工作行程間諜」這樣的工作行程工具檢視
Svchost工作行程中的模塊訊息(如圖3),並與之前的模塊訊息比較,可以發現
Svchost工作行程中有一個可疑的DLL文件「SvchostDLL.dll」。同時,在「管理工具→服務」列表中會看到一項新的服務「Intranet Services」(顯示名稱),此服務名稱為:Iprip,由
Svchost啟動,「-k netsvcs」表示此服務包含在Netsvcs服務組中。
圖3
Svchost工作行程中的模塊訊息
提示:在Windows 2000中,系統的Iprip服務偵聽由使用Routing Information協議版本1(RIPv1)的路由器發送的路由更新訊息,在服務列表中顯示的名稱為「RIP Listener」。
執行Regedit,打開註冊表編輯器,展開[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
Services\IPRIP]分支,檢視其「Parameters」子項,其中「ServiceDll」鍵值指向呼叫的DLL文件路徑和全稱,這正是後門的DLL文件。知道了這些,就可以動手清除了:在服務列表用右鍵單擊「Intranet Services」服務,從表菜單中選擇「停止」,然後在上述註冊表分支中刪除「Iprip」項。重新啟動電腦,再按照「ServiceDll」鍵值提示的位置刪除後門程式主文件即可。最後需要提醒讀者的是,對註冊表進行修改前,應做好備份工作,以便出現錯誤時能夠及時還原。