現在的木馬種類繁多,而且有些木馬十分頑固,根本沒法殺干淨。有什麼方法能有效的防止木馬和清除它們的方法嗎?
你所說的木馬,也就是一種能潛伏在受害者計算機裡,並且秘密開放一個甚至多個數據傳輸通道的遠程控制程序,一般由兩部分組成:客戶端(Client)和服務器端(Server),客戶端也稱為控制端。
木馬的傳播感染其實指的就是服務器端,入侵者必須通過各種手段把服務器端程序傳送給受害者運行,才能達到木馬傳播的目的。當服務器端被受害者計算機執行時,便將自身復制到系統目錄,並把運行代碼加入系統啟動時會自動調用的區域裡,借以達到跟隨系統啟動而運行,這一區域通常稱為“啟動項”。當木馬完成這部分操作後,便進入潛伏期——偷偷開放系統端口,等待入侵者連接。
阻止木馬運行——查殺更徹底
任何操作系統都會在啟動時自動運行一些程序,用以初始化系統環境或額外功能等,這些被允許跟隨系統啟動而運行的程序被放置在專門的區域裡供系統啟動時加載運行,這些區域就是“啟動項”,不同的系統提供的“啟動項”數量也不同,對於Win9x來說,它提供了至少5個“啟動項”:DOS環境下的Autoexec.bat、Config.sys,Windows環境下的“啟動”程序組、注冊表的2個Run項和1個RunServices項,分別是:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunServices
到了2000/XP系統時代,DOS環境被取消,卻新增了一種稱之為“服務”的啟動區域,注冊表也在保持原項目不變的基礎上增加了2個“啟動項”:
項目 鍵名
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindows AppInit_DLLs
HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows run
這麼多的啟動入口,木馬自然不會放過,於是我們經常在一些計算機的啟動項裡發現陌生的程序名,這時候就只能交由你或者病毒防火牆來判斷了,畢竟系統自身會在這裡放置一些必要的初始化程序,還有一些正常工具,包括病毒防火牆和網絡防火牆,它們也必須通過啟動項來實現跟隨系統啟動。
此外還有一種不需要通過啟動項也能達到跟隨系統啟動的卑劣手法,那就是“系統路徑遍歷優先級欺騙”,Windows系統搜尋一個不帶路徑信息的文件時遵循一種“從外到裡”的規則,它會由系統所在盤符的根目錄開始向系統目錄深處遞進查找,而不是精確定位的,這就意味著,如果有兩個同樣名稱的文件分別放在C:和C:Windows下,Windows會執行C:下的程序,而不是C:Windows下的。這樣的搜尋邏輯就給入侵者提供了一個機會,木馬可以把自己改為系統啟動時必定會調用的某個文件名,並復制到比原文件要淺一級以上的目錄裡,Windows就會想當然的執行了木馬程序,系統的噩夢就此拉開序幕。這種手法常被用於“internat.exe”,因為無論哪個Windows版本的啟動項裡,它都是沒有設置路徑的。
要提防這種占用啟動項而做到自動運行的木馬,用戶必須了解自己機器裡所有正常的啟動項信息,才能知道木馬有沒有混進來。至於利用系統路徑漏洞的木馬,則只能靠用戶自己的細心了。
根除木馬——文件並聯型木馬的查殺
某些用戶經常會很郁悶,自己明明已經刪除了木馬文件和相應的啟動項,可是不知道什麼時候它自己又原封不動的回來了,這還不算,更悲慘的是有時候殺掉某個木馬後,系統也出了故障:所有應用程序都打不開了。這時候,如果用戶對計算機技術的了解僅限於使用殺毒軟件,那可只能哭哭啼啼的重裝系統了!
為什麼會這樣?難道這種木馬還惡意修改了系統核心?其實答案很簡單,因為這種木馬修改了應用程序(EXE文件)的並聯方式。
什麼是“並聯方式”呢?在Windows系統裡,文件的打開操作是通過注冊表內相應鍵值指定的應用程序來執行的,這個部分位於注冊表的“HKEY_CLASSES_ROOT”主鍵內,當系統收到一個文件名請求時,會以它的後綴名為依據在這裡識別文件類型,進而調用相應的程序打開。而應用程序自身也被視為一個文件,它也屬於一種文件類型,同樣可以用其他方式開啟,只不過Windows設置它的調用程序為“"%1" %*”,讓系統內核理解為“可執行請求”,它就會為使用這種打開方式的文件創建進程,最終文件就被加載執行了,如果有另外的程序更改了這個鍵值,Windows就會調用那個指定的文件來開啟它。一些木馬程序把EXE後綴名對應的exefile類型的“打開方式”改成了“木馬程序 "%1" %*”,運行程序時系統就會先為“木馬程序”創建進程,把緊跟著的文件名作為參數傳遞給它執行,於是在我們看來程序被正常啟動了。因為木馬程序被作為所有EXE文件的調用程序,使得它可以長期駐留內存,每次都能恢復自身文件,所以在一般用戶看來,這個木馬就做到了“永生不死”。然而一旦木馬程序被刪除,Windows就會找不到相應的調用程序,於是正常程序就無法執行了,這就是所謂的“所有程序都無法運行”的情況來源,並不是木馬更改了系統核心,更沒必要因此重裝整個系統。
根除這種木馬的最簡單方法只需要查看EXE文件的打開方式被指向了什麼程序,立即停止這個程序的進程,如果它還產生了其他木馬文件的話,也一起停止,然後在保持注冊表編輯器開啟著的情況下(否則你的所有程序都會打不開了)刪除掉所有木馬文件,把exefile的“打開方式”項(HKEY_CLASSES_ROOTexefileshellopencommand)改回原來的“”%1” %*”即可。
如果刪除木馬前忘記把並聯方式改回來,就會發現程序打不開了,這時候不要著急,如果你是Win9x用戶,請使用“外殼替換大法”:重啟後按F8進入啟動菜單選擇MS-DOS模式,把Explorer.exe隨便改個名字,再把REGEDIT.EXE改名為Explorer.exe,再次重啟後會發現進入Windows只剩下一個注冊表編輯器了,趕快把並聯方式改回來吧!重啟後別忘記恢復以前的Explorer.exe。
對於Win2000/XP用戶而言,這個操作更簡單了,只要在開機時按F8進入啟動菜單,選“命令提示符的安全模式”,系統就會自動調用命令提示符界面作為外殼,直接在裡面輸入REGEDIT即可打開注冊表編輯器!XP用戶甚至不需要重啟,直接在“打開方式”裡浏覽到CMD.EXE就能打開“命令提示符”界面運行注冊表編輯器REGEDIT.EXE了。