在 NT 核心 Windows 系列中,Svchost.exe 是極關鍵的進程。眾多病毒、木馬利用其特性駐留系統,深入了解其運作機制對安全防護至關重要。本文詳細剖析 Svchost 功能、服務載入原理、實例分析與木馬偽裝偵測清除實戰。
微軟定義:Svchost.exe 是從動態連結庫(DLL)執行服務的通用宿主進程。檔案位於 %SystemRoot%\System32。開機時檢查登錄表服務區段,建構需載入服務清單。可同時運行多個實例,每個會話包含一組服務,依啟動方式與位置區隔,便於控管與除錯。
Svchost 群組由登錄表 [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost] 識別。每個值代表獨立 Svchost 群組,對應任務管理員中的單一實例。鍵值型別為 REG_MULTI_SZ,包含該群組運行的服務名稱(圖1)。

圖1 登錄表中的 Svchost 群組定義
本質上,Svchost 僅作服務宿主,不具體功能。需以 Svchost 啟動 DLL 形式服務時,該 DLL 的載入器指向 Svchost,啟動時由 Svchost 呼叫 DLL 實現。使用哪個 DLL 由服務登錄項下 Parameters 子項的 ServiceDll 鍵值決定,該 DLL 必須匯出 ServiceMain() 函式支援服務任務處理。
提示:不同 Windows 版本 Svchost 數量不同。Win 2000 通常 2 個,XP 則 4 個以上。
查看 Svchost 內運行服務清單:XP 命令提示字元輸入 Tasklist /svc(Win 2000 用 Tlist -s)。可見 Svchost 啟動 RpcSs(RPC)、Dhcp、Netman 等核心服務(圖2)。

圖2 Svchost 服務清單
以 RpcSs 為例:登錄表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs\Parameters] 中 ServiceDll = %SystemRoot%\system32\rpcss.dll。服務管理單元中 RpcSs 可執行檔路徑為 C:\Windows\system32\svchost -k rpcss,證明其依賴 Svchost 啟動,-k rpcss 表示屬於 Rpcss 服務群組。

圖3 Svchost 進程模組資訊
木馬常利用 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost] 實現自動載入,手法包括:
ServiceDll 指向自身 DLL。以 PortLess BackDoor 為例,偵測清除步驟(XP 環境):
SvchostDLL.dll。Iprip,由 Svchost 啟動(-k netsvcs)。Win 2000 中正規 Iprip 顯示名為「RIP Listener」。[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\Parameters] 中 ServiceDll 指向後門 DLL 路徑。IPRIP 項 → 重開機 → 依 ServiceDll 路徑刪除後門主程式。重要提醒:修改登錄表前務必備份,以便出錯時還原。