2008年8月12日 星期二

Svchost.exe

打開進程列表后你會發現一大堆不知用途的進程,究竟是系統進程還是木馬病毒?如果打開系統文件夾,一大堆奇奇怪怪名稱的文件,更是會把你弄得暈頭轉向。很多朋友因此而始終抱有一種未知的恐懼,認為木馬、黑客無處不在,即使是高手,也不能把這些陌生的系統文件說個明明白白。

一、Svchost.exe進程介紹

打開“工作管理員”觀察系統中的進程,發現Svchost.exe有時竟然有5個之多(見圖1),可以試試逐個結束這些進程,有的可結束,有的結束后還會再生,有的結束后系統會提示“系統即將關機,離關機還有60秒”。

系統中的Svchost.exe進程是正常系統進程,不是病毒,雖然系統中有多個Svchost.exe進程是正常的,但也不保證都是正常的。

Svchost.exe是NT核心作業系統(Windows2000/XP/2003都屬于NT核心作業系統)獨有的進程,“Svchost”其實就是 “ServiceHost”(服務宿主)的縮寫。微軟官方對它的定義是:Svchost.exe是從動態鏈接庫(DLL)中營運的服務的通用主機進程名稱,通俗講,它就是一個服務裝載器。

由於Windows 2000/XP系統服務越來越多,以EXE單獨進程的形式啟動所有服務會大大增加系統負擔,為節省系統資源,微軟將一些系統服務以動態鏈接庫(DLL)形式實現,而Svchost.exe就是用來裝載這些DLL文件以啟動系統服務的程式。

那為什麼系統進程列表中的Svchost.exe會有多個呢?微軟為了讓系統能更好地進行服務控制,就允許多個Svchost.exe進程同時營運,每個 Svchost.exe進程可以包含一組服務。打開註冊表[HKEY_LOCAL_MACHINE\Software\Microsoft\ WindowsNT\CurrentVersion\Svchost]主鍵,在窗口右側可以看到許多鍵值,這裡的每個鍵值都代表一組服務,鍵值數據則包含了該組服務下面營運的服務名稱列表,每組服務啟動時都會透過單獨的Svchost.exe進程來裝載。WindowsXP中默認共有六組服務(見圖2),其中imgsvc、NetworkService、rpcss、termsvcs四個組,它們都只有一個服務營運,這些服務啟動后的 Svchost.exe進程用戶名為“SYSTEM”。而LocalService和netsvcs組都啟動了多個服務,它們的Svchost.exe進程用戶名分別為“LOCAL SERVICE”和“NETWORD SERVICE”。

當然了,這六組服務通常並不都是啟動狀態的,根據系統啟動的服務不同,反映在系統進程列表中的Svchost.exe進程數量也是不同的, WindowsXP會有四個到六個Svchost.exe進程,而Windows 2000通常則會有兩個Svchost.exe進程。

小提示

點擊“開始→執行”,在對話框中輸入“CMD”返回,然後在打開的命令行窗口中輸入“Tasklist /svc”(不含引號)命令,可以更直觀地看到每個Svchost.exe進程裝載的服務名稱列表。

獲取每組服務的詳細訊息

如果想更進一步了解Svchost.exe裝載的這些服務都是什麼功能,可以記下鍵值數據中的服務名稱,例如“RpcSs”,接著打開註冊表的 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services],再打開下面的“RpcSs”子鍵,在右邊的“Description”鍵值中就可以看到該服務的描述,而在“ImagePath”鍵值數據中則可以看到這個服務的營運命令正是“% SystemRoot%\system32\svchost -krpcss”。而在“RpcSs”子鍵下還有一個“Parameters”(參數)子鍵,其右邊的“ServiceDll”鍵值數據“% SystemRoot%\system32\rpcss.dll”則表明了RpcSs服務啟動時調用的是系統目錄下的“Rpcss.dll”文件

如果覺得透過註冊表查詢服務名稱了解其屬性不太方便,也可以使用“全能助手用Windows服務管理專家”(以下簡稱“服務管理專家”)來查詢,營運軟體后單擊“All Win32Services”分支,在右側服務列表中根據服務名稱索引即可快速找到要查詢的服務,單擊服務名稱,即可看到該服務的啟動命令以及調用的 DLL文件等相關訊息(見圖5)。同時軟體還專門設計了Svchost Group分支,可以快速查詢LocalService和netsvcs組中的服務詳細訊息。

二.危險的Svchost.exe進程

由於Svchost.exe進程的特殊性,它隱藏了真正營運的程式的名稱,在表面看到的只是Svchost.exe進程,這個特性同時也讓許多病毒、木馬有空可鑽,企圖以此迷惑我們。那么如何判斷系統中的多個Svchost.exe進程是否正常呢?下面針對這類病毒常用的幾種欺騙手法來進行分析。

騙局1:利用假冒Svchost.exe名稱的病毒程式

火眼金睛:這種模式營運的病毒並沒有直接利用真正的Svchost.exe進程,而是啟動了另外一個名稱同樣是Svchost.exe的病毒進程,由於這個假冒的病毒進程並沒有加載系統服務,它和真正的Svchost.exe進程是不同的,我們只需在命令行窗口中營運一下“Tasklist/svc”,如果看到哪個Svchost.exe進程后面提示的服務訊息是“暫缺”(見圖6),而不是一個具體的服務名,那么它就是病毒進程了,記下這個病毒進程對應的 PID數值(進程標識符),即可在任務管理器的進程列表中找到它,結束進程后,在C盤搜索Svchost.exe文件,也可以用第三方進程工具直接查看該進程的路徑,正常的Svchost.exe文件是位于%systemroot%\System32目錄中的,而假冒的Svchost.exe病毒或木馬文件則會在其他目錄,例如“w32.welchina.worm”病毒假冒的Svchost.exe就隱藏在Windows\System32\Wins目錄中,將其刪除,並徹底清除病毒的其他數據即可。

騙局2:一些高級病毒則採用類似系統服務啟動的模式,透過真正的Svchost.exe進程加載病毒程式,而Svchost.exe是透過註冊表數據來決定要裝載的服務列表的,所以病毒通常會在註冊表中採用以下方法進行加載:

‧添加一個新的服務組,在組裡添加病毒服務名

‧在現有的服務組裡直接添加病毒服務名

‧修改現有服務組裡的現有服務屬性,修改其“ServiceDll”鍵值指向病毒程式

判斷方法:病毒程式要透過真正的Svchost.exe進程加載,就必須要修改相關的註冊表數據,我們可以打開[HKEY_LOCAL_MACHINE\ Software\Microsoft\WindowsNT\CurrentVersion\Svchost],觀察有沒有增加新的服務組,同時要留意服務組中的服務列表,觀察有沒有可疑的服務名稱,通常來說,病毒不會在只有一個服務名稱的組中添加,往往會選擇LocalService和netsvcs這兩個加載服務較多的組,以干擾我們的分析,還有透過修改服務屬性指向病毒程式的,透過註冊表判斷起來都比較困難,這時我們可以利用前面介紹的服務管理專家,分別打開LocalService和netsvcs分支,逐個檢查右邊服務列表中的服務屬性,尤其要注意服務描述訊息全部為英文的,很可能是第三方安裝的服務,同時要結合它的文件描述、版本、公司等相關訊息,進行綜合判斷。例如這個名為PortLessBackDoor的木馬程式,我們在服務列表中可以看到它的服務描述為“IntranetServices”,而它的文件版本、公司、描述訊息更全部為空(見圖7),如果是微軟的系統服務程式是絕對不可能出現這種現象的。從啟動訊息“C:\WINDOWS\System32\svchost.exe -knetsvcs”中可以看出這是一款典型的利用Svchost.exe進程加載營運的木馬,知道了其原理,清除方法也很簡單了:先用服務管理專家停止該服務的營運,然後營運regedit.exe打開“註冊表編輯器”,刪除[HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Services\IPRIP]主鍵,重新啟動計算機,再刪除%systemroot%\System32目錄中的木馬源程式“svchostdll.dll”,透過按時間排序,又發現了時間完全相同的木馬安裝程式“PortlessInst.exe”,一並刪除即可。

沒有留言: