目前網絡上最猖獗的病毒估計非木馬程序莫數了,2005年木馬程序的攻擊性也有了很大的加強,在進程隱藏方面,做了較大的改動,不再采用獨立的EXE可執行文件形式,而是改為內核嵌入方式、遠程線程插入技術、掛接PSAPI等,這些木馬也是目前最難對付的。本期就教你查找和清除線程插入式木馬。
一、通過自動運行機制查木馬
一說到查找木馬,許多人馬上就會想到通過木馬的啟動項來尋找“蛛絲馬跡”,具體的地方一般有以下幾處:
1)注冊表啟動項
在“開始/運行”中輸入“regedit.exe”打開注冊表編輯器,依次展開[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\]和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\],查看下面所有以Run開頭的項,其下是否有新增的和可疑的鍵值,也可以通過鍵值所指向的文件路徑來判斷,是新安裝的軟件還是木馬程序。
另外[HKEY_LOCAL_MACHINE\Software\classes\exefile\shell\open\command\]鍵值也可能用來加載木馬,比如把鍵值修改為“X:\windows\system\ABC.exe %1%”。
2)系統服務
有些木馬是通過添加服務項來實現自啟動的,大家可以打開注冊表編輯器,在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Runservices]下查找可疑鍵值,並在[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\]下查看的可疑主鍵。
然後禁用或刪除木馬添加的服務項:在“運行”中輸入“Services.msc”打開服務設置窗口,裡面顯示了系統中所有的服務項及其狀態、啟動類型和登錄性質等信息。找到木馬所啟動的服務,雙擊打開它,把啟動類型改為“已禁用”,確定後退出。也可以通過注冊表進行修改,依次展開“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\服務顯示名稱”鍵,在右邊窗格中找到二進制值“Start”,修改它的數值數,“2”表示自動,“3”表示手動,而“4”表示已禁用。當然最好直接刪除整個主鍵,平時可以通過注冊表導出功能,,備份這些鍵值以便隨時對照。
3)開始菜單啟動組
現在的木馬大多不再通過啟動菜單進行隨機啟動,但是也不可掉以輕心。如果發現在“開始/程序/啟動”中有新增的項,可以右擊它選擇“查找目標”到文件的目錄下查看一下,如果文件路徑為系統目錄就要多加小心了。也可以在注冊表中直接查看,它的位置為[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders],鍵名為Startup。
4)系統INI文件Win.ini和System.ini
系統INI文件Win.ini和System.ini裡也是木馬喜歡隱蔽的場所。選擇“開始/運行”,輸入“msconfig”調出系統配置實用程序,檢查Win.ini的[Windows]小節下的load和run字段後面有沒有什麼可疑程序,一般情況下“=”後面是空白的;還有在System.ini的[boot]小節中的Shell=Explorer.exe後面也要進行檢查。
5)批處理文件
如果你使用的是Win9X系統,C盤根目錄下“AUTOEXEC.BAT”和WINDOWS目錄下的“WinStart.bat”兩個批處理文件也要看一下,裡面的命令一般由安裝的軟件自動生成,在系統默認會將它們自動加載。在批處理文件語句前加上“echo off”,啟動時就只顯示命令的執行結果,而不顯示命令的本身;如果再在前面加一個“@”字符就不會出現任何提示,以前的很多木馬都通過此方法運行。
二、通過文件對比查木馬
最近新出現的一種木馬。它的主程序成功加載後,會將自身做為線程插入到系統進程SPOOLSV.EXE中,然後刪除系統目錄中的病毒文件和病毒在注冊表中的啟動項,以使反病毒軟件和用戶難以查覺,然後它會監視用戶是否在進行關機和重啟等操作,如果有,它就在系統關閉之前重新創建病毒文件和注冊表啟動項。下面的幾招可以讓它現出原形(下面均以Win XP系統為例):
1)對照備份的常用進程
大家平時可以先備份一份進程列表,以便隨時進行對比查找可疑進程。方法如下:開機後在進行其他操作之前即開始備份,這樣可以防止其他程序加載進程。在運行中輸入“cmd”,然後輸入“tasklist /svc >X:\processlist.txt”(提示:不包括引號,參數前要留空格,後面為文件保存路徑)回車。這個命令可以顯示應用程序和本地或遠程系統上運行的相關任務/進程的列表。輸入“tasklist /?”可以顯示該命令的其它參數。
2)對照備份的系統DLL文件列表
對於沒有獨立進程的DLL木馬怎麼辦嗎?既然木馬打的是DLL文件的主意,我們可以從這些文件下手,一般系統DLL文件都保存在system32文件夾下,我們可以對該目錄下的DLL文件名等信息作一個列表,打開命令行窗口,利用CD命令進入system32目錄,然後輸入“dir *.dll>X:\listdll.txt”敲回車,這樣所有的DLL文件名都被記錄到listdll.txt文件中。日後如果懷疑有木馬侵入,可以再利用上面的方法備份一份文件列表“listdll2.txt”,然後利用“UltraEdit”等文本編輯工具進行對比;或者在命令行窗口進入文件保存目錄,輸入“fc listdll.txt listdll2.txt”,這樣就可以輕松發現那些發生更改和新增的DLL文件,進而判斷是否為木馬文件。
3)對照已加載模塊
頻繁安裝軟件會使system32目錄中的文件發生較大變化,這時可以利用對照已加載模塊的方法來縮小查找范圍。在“開始/運行”中輸入“msinfo32.exe”打開 “系統信息”,展開“軟件環境/加載的模塊”,然後選擇“文件/導出”把它備份成文本文件,需要時再備份一個進行對比即可。
4)查看可疑端口
所有的木馬只要進行連接,接收/發送數據則必然會打開端口,DLL木馬也不例外,這裡我們使用netstat命令查看開啟的端口。我們在命令行窗口中輸入“netstat -an”顯示出顯示所有的連接和偵聽端口。Proto是指連接使用的協議名稱,Local Address是本地計算機的IP地址和連接正在使用的端口號,Foreign Address是連接該端口的遠程計算機的IP地址和端口號,State則是表明TCP連接的狀態。Windows XP所帶的netstat命令比以前的版本多了一個-O參數,使用這個參數就可以把端口與進程對應起來。輸入“netstat /?”可以顯示該命令的其它參數。
接著我們可以通過分析所打開的端口,將范圍縮小到具體的進程上,然後使用進程分析軟件,例如“Windows優化大師”目錄下的WinProcess.exe程序,來查找嵌入其中的木馬程序。有些木馬會通過端口劫持或者端口重用的方法來進行通信的,一般它們會選擇139、80等常用端口,所以大家分析時要多加注意。也可以利用網絡嗅探軟件(如:Commview)來了解打開的端口到底在傳輸些什麼數據。