透析Svchost.EXE進程清除木馬的最大後門
(來自http://hi.baidu.com/reyman/blog/item/0fd9815124e1ca19377abed9.html)
網上有很多關於Svchost.exe的討論,首先來看一下Svchost.exe的原理,工作方法,然後結合著名DLL木馬,實戰瞭解一下使用Svchost.exe進行啟動的木馬的清除。
Svchost.exe是NT核心系統非常重要的檔案,對於Windows 2000/XP來說,不可或缺。Svchost進程提供很多系統服務如:logical disk manager、remote procedure call(RPC)、dhcp client、Automatic Updates、Background Intelligent Transfer Service、COM+ Event System、Internet Connection Sharing、Network Connections、Portable Media Serial Number Service、Remote Access Auto Connection Manager、Remote Access Connection Manager、Removable Storage、Routing and Remote Access、System Event Notification、Telephony、Wireless Configuration等等。
對於服務中使用Svchost.exe載入了哪些動態連結程式庫,我們可以在服務中點擊上面列出的某個服務來看看。比如我們要看Automatic Updates服務,就可以在在它上面點擊滑鼠右鍵,看它的屬性。同樣情況下,如果讀者還想進一步瞭解其它的那些服務是怎樣使用Svchost.exe的,可以使用與上面相同的方法來觀察一下。
聰明的讀者一眼就可以看出,Svchost.exe對於系統來說是多麼的重要了。也正是因為Svchost.exe的重要性,所以病毒、木馬也想盡辦法來利用它,企圖利用它的特性來迷惑使用者,達到感染、入侵、破壞的目的。那麼應該如何判斷到底哪個是病毒進程呢?正常的Svchost.exe檔案應該存在於“C:\Windows\system32”目錄下,如果發現該檔案出現在其他目錄下就要小心了。另外,駭客們為了使用Svchost.exe達到進程欺騙的目的,有可能使用一些迷惑性的名字,如將字母o變成數字0(零),這樣程式的名稱就變成了svch0st.exe了,如果不注意觀察,很容易逃過普通使用者的眼睛。
通常情況下,為了確定我們的電腦中正在啟動並執行Svchost.exe是不是真正的系統的Svchost.exe,我們可以使用如下方法來查看。Svchost.exe檔案的調用路徑可以通過“電腦管理→系統工具→系統資訊→軟體環境→正在運行任務”來查看。
這裡僅舉一例來說明。假設Windows XP系統被“w32.welchia.worm”感染了。正常的Svchost檔案存在於“c:\Windows\system32”目錄下,如果發現該檔案出現在其他目錄下就要小心了。“w32.welchia.worm”病毒存在於“c:\Windows\system32wins”目錄中,通過使用上面說的方法就可很容易地查看到所有的Svchost進程的執行檔案路徑,一旦發現其執行路徑為不平常的位置就應該馬上進行檢測和處理。
現在我們已經搞清楚了一部分疑問,但是,我們還不知道哪個服務調用了哪個動態連結程式庫檔案,是不是沒有辦法呢?如果沒有地方可以找到,那麼Windows自己又是如何知道調用哪一個呢?大家知道,Windows將所有的系統資訊和應用程式資訊都儲存在了系統註冊表中,所以,我們可以在註冊表中找找看。
下面以Remote Procedure Call(RPC)服務為例,來看看Svchost進程是如何調用DLL檔案的。在Windiws中,開啟服務,然後開啟“Remote Procedure Call(RPC)”屬性對話方塊,可以看到Remote Procedure Call(RPC)服務的可執行檔的路徑為“C:\WINNT\system32\Svchost -k rpcss”,這說明Remote Procedure Call(RPC)服務是依靠Svchost調用“rpcss”參數來實現的,而參數的內容則是存放在系統註冊表中的。在運行對話方塊中輸入“regedit.exe”後斷行符號,開啟登錄編輯程式,找到“HKEY_LOCAL_MACHINE\System\currentcontrolset\services\ rpcss”項。然後,再在裡面找到類型為“reg_expand_sz”的“Imagepath”項,其索引值為“%SystemRoot%\system32\Svchost -k rpcss”(這就是在服務視窗中看到的服務啟動命令),另外在“parameters”子項中有個名為“ServiceDll”的鍵,其值為“%SystemRoot%\system32\rpcss.dll”,其中“rpcss.dll”就是Remote Procedure Call(RPC)服務要使用的動態連結程式庫檔案。這樣Svchost進程通過讀取“rpcss”服務註冊表資訊,就能啟動該服務了。
同樣情況下,如果有程式試圖蠻天過海,假借Svchost.exe來啟動自己的動態連結程式庫檔案(如將木馬作成動態連結程式庫檔案),那麼我們就可以從這裡找到DLL木馬的路徑,將它大白於天下。如果要瞭解每個Svchost進程到底提供了多少系統服務,可以在Windows 2000的命令提示字元視窗中輸入“tlist -s”命令來查看,該命令是Windows 2000 support tools提供的。不過,在這裡看到的效果跟服務裡面看到的是一樣的,只不過是DOS介面而已。小知識:在Windows xp下則使用“tasklist /svc”命令會收到同樣的效果。
下面,我們通過一個執行個體來看一下木馬程式是如何利用Svchost.exe進行啟動的。這裡,我選擇了PortLess BackDoor V1.2來做示範,這是一個使用Svchost.exe去啟動,平時不開連接埠,可以進行反串連的後門程式(和小榕的BITS是同一類型的後門)。為了看一下這個後門是如何利用Svchost.exe進行啟動的,我們在運行軟體之前,先給註冊表做一個快照,這裡我選擇了Regshot 1.61e5 final版本,並將初始快照集命名為1.hiv。然後我們將Portlessinst.exe和Svchostdll.dll(不要改名)上傳到系統目錄(%winnt%\system32目錄中)。
接下來,進入命令列,使用“Portlessinst.exe -install ActiveString Password”進行安裝,這裡的ActiveString就是串連那系統開啟的連接埠後輸入的驗證字串,這裡的密碼是使用正向串連你串連上後門開啟的連接埠時需要輸入的密碼。比如,我輸入如下:portlessinst.exe –install smiler wind_003 這樣就安裝上去了,我們來看一下註冊表裡的變化。將1.hiv裝載進Regshot中的1st shot,然後對當前的註冊表做2st shot的快照,然後使用compare進行比較,其比較的結果如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\PortLess\FdsnqbTsuni`: "tjnkbu" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\PortLess\Wfttphuc: "tofiXdo" HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\Security\Security:
01 00 14 80 A0 00 00 00 AC 00 00 00 14 00 00 00 30 00 00 00 02 00 1C
00 01 00 00 00 02 80 14 00 FF 01 0F 00 01 01 00 00 00 00 00 01 00 00
00 00 02 00 70 00 04 00 00 00 00 00 18 00 FD 01 02 00 01 01 00 00 00
00 00 05 12 00 00 00 63 00 6F 00 00 00 1C 00 FF 01 0F 00 01 02 00 00
00 00 00 05 20 00 00 00 20 02 00 00 6D 00 00 00 00 00 18 00 8D 01 02
00 01 01 00 00 00 00 00 05 0B 00 00 00 20 02 00 00 00 00 1C 00 FD 01
02 00 01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 6D 00 00 00 01
01 00 00 00 00 00 05 12 00 00 00 01 01 00 00 00 00 00 05 12 00 00 00
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\Parameters\ServiceDll:"C:\WINNT\system32\Svchostdll.dll"
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\Parameters\program:"SvchostDLL.exe"
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\Parameters\Interactive:0x00000000
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\Type:0x00000020 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\Start:0x00000002 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\ErrorControl: 0x00000001 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\ImagePath:"%SystemRoot%\System32\Svchost.exe -k netsvcs"
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\DisplayName: "Intranet Services" HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IPRIP\ObjectName: "LocalSystem" HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\Security\Security:
01 00 14 80 A0 00 00 00 AC 00 00 00 14 00 00 00 30 00 00 00 02 00 1C
00 01 00 00 00 02 80 14 00 FF 01 0F 00 01 01 00 00 00 00 00 01 00 00
00 00 02 00 70 00 04 00 00 00 00 00 18 00 FD 01 02 00 01 01 00 00 00
00 00 05 12 00 00 00 63 00 6F 00 00 00 1C 00 FF 01 0F 00 01 02 00 00
00 00 00 05 20 00 00 00 20 02 00 00 6D 00 00 00 00 00 18 00 8D 01 02
00 01 01 00 00 00 00 00 05 0B 00 00 00 20 02 00 00 00 00 1C 00 FD 01
02 00 01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 6D 00 00 00 01
01 00 00 00 00 00 05 12 00 00 00 01 01 00 00 00 00 00 05 12 00 00 00
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\Parameters\ServiceDll:"C:\WINNT\system32\Svchostdll.dll" HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\Parameters\program:"SvchostDLL.exe" HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\Parameters\Interactive:0x00000000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\Type: 0x00000020 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\Start: 0x00000002 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\ErrorControl: 0x00000001 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\ImagePath: "%SystemRoot%\System32\Svchost.exe -k netsvcs" HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\DisplayName: "Intranet Services" HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPRIP\ObjectName: "LocalSystem"
可以看出,PortLess BackDoor V1.2將自己註冊為了服務IPRIP,它使用的啟動參數是"%SystemRoot%\System32\Svchost.exe -k netsvcs",它使用的DLL檔案是"C:\WINNT\system32\Svchostdll.dll"。通過這裡,我們就可以找到PortLess,將它使用的服務禁止掉,然後將對應的DLL檔案刪除,並將註冊表中這些多出來的索引值幹掉,三下五除二就將Portless弄得一乾二淨!現在大家知道怎麼清理掉用Svchost載入的後門了吧?!