查看單個文章
舊 2006-07-15, 02:52 PM   #9 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

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)。
http://www.pconline.com.cn/pcedu/soft/st/winxp/0409/pic/040907svchost01.gif
圖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)。
http://www.pconline.com.cn/pcedu/soft/st/winxp/0409/pic/040907svchost02.gif
圖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服務組中。
http://www.pconline.com.cn/pcedu/soft/st/winxp/0409/pic/040907svchost03.gif
圖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」鍵值提示的位置刪除後門程式主文件即可。最後需要提醒讀者的是,對註冊表進行修改前,應做好備份工作,以便出現錯誤時能夠及時還原。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次