焚燒係統裏的木馬 教你徹底清除木馬病毒

 
 “我想,我們應該燒掉這個東西。”3000多年前,麵對希臘人突然遺留在戰場廢墟上的這隻巨大的木馬,特洛伊王國的小王子帕裏斯對他的父王說。因為他有一種不安的感覺,這個突然出現的物體會帶來厄運。然而沒有人聽他的話,整個軍隊固執的把這隻龐然大物作為戰利品運回了城裏。幾天後的夜裏,藏在木馬裏的希臘士兵從內部打開了特洛伊那堅不可摧的城門——特洛伊因此淪陷。如果帕裏斯仍有靈魂存在的話,他也許會苦苦思索這個問題:如果當初我堅持把這個帶來厄運的東西焚燒掉,那麽特洛伊將會是怎樣一種結局呢?請允許我改編情感作家薑湯的一句話:“二十一世紀的網絡是木馬橫行的世界,人類在解決病毒戰爭之後,最大的困惑就是木馬後門的攻防難題。”眾所周知,木馬(Trojan,或稱後門“BackDoor”)是一種危害巨大的程序,它們讓被害的計算機對著未知的入侵者敞開了大門,使得受害者的係統和數據暴露在混亂的網絡世界裏。和病毒一樣,木馬也經曆了好幾代的演變,使得它越藏越深,成為另一種難以揪除的寄生蟲。——如果,我們趁早把木馬焚燒掉呢?

  認識木馬

  簡言之,信息領域的木馬,就是一種能潛伏在受害者計算機裏,並且秘密開放一個甚至多個數據傳輸通道的遠程控製程序,它由兩部分組成:客戶端(Client)和服務器端(Server),客戶端也稱為控製端。木馬的傳播感染其實指的就是服務器端,入侵者必須通過各種手段把服務器端程序傳送給受害者運行,才能達到木馬傳播的目的。當服務器端被受害者計算機執行時,便將自己複製到係統目錄,並把運行代碼加入係統啟動時會自動調用的區域裏,借以達到跟隨係統啟動而運行,這一區域通常稱為“啟動項”。當木馬完成這部分操作後,便進入潛伏期——偷偷開放係統端口,等待入侵者連接。到此為止,木馬還隻處於被特洛伊的市民拉入城內的階段,是不會進行破壞行動的。當入侵者使用客戶端連接上木馬服務器端開放的端口後,特洛伊的城門就被打開了,到這裏,木馬的噩夢才正式開始……所以,在木馬屠城的軍號吹響之前,如果帕裏斯及時點燃了這隻龐然大物,特洛伊也許就不會消失——至少,它不會是被一隻木馬給毀掉的。

  阻止木馬進城——不同時期的木馬形態與相應的係統保護

  特洛伊被木馬計的前提是因為特洛伊人自己把藏有希臘士兵的木馬運進了城內,讓木馬計得以成功實施,換個角度,如果當初特洛伊人任憑木馬擱在海灘上發黴發臭,或者直接焚燒了這隻裝載著厄運的東西,那麽“特洛伊木馬”將會被作為與“馬奇諾防線”同樣性質的著名無效戰略而被列入史冊,而且後世可能再也不會采用這種攻擊手段。但是希臘人的木馬計成功了,正如現在數以千計的現代網絡木馬計成功了一樣。現代的希臘人——入侵者積極使用各種手段讓現代的特洛伊人——受害者把那隻木馬程序高高興興的領回家去。早期的防病毒思想並不盛行,那時候的網民也比較單純,使用網絡防火牆的人也隻有少數,所以那時候的入侵者可以算是幸福的,他們隻需要一點簡單的社會工程學手段就能把木馬程序傳輸給對方執行,這一時期的木馬種植手段(如今的普遍稱謂為“下馬”)基本上不需要牽涉到技術,也許唯一需要的技術就是如何配置和使用一個木馬,因為那時候木馬也還是個新產物而已。那時候的網民,隻能依靠自己的判斷和技術,才能免受或擺脫木馬之害。

  因此,當木馬技術剛在國內開始的時候,任意一個IP段都有可能存在超過40%的受害計算機開放著大門等待入侵者進攻,可以毫不誇張的說,那時候是木馬的第一黃金時期,唯一美中不足的製約條件就是當時的網絡速度普遍太慢了。隨著時間的流逝,木馬技術發展日益成熟,但網民的安全意識也普遍提高,更出現了初期的病毒防火牆概念,這個時期的入侵者必須掌握更高級的社會工程學手段和初期的入侵技術才能讓對方受害了,這時期的木馬雖然隱蔽性有了相對提高,但仍然是基於客戶端尋找連接服務器端的模式。由於出現了病毒防火牆,網民判斷和查殺木馬的效率大大提高,而且大部分人也知道“人心不古”了,不再輕易接收陌生人給的程序,使得木馬不再像上時期那樣肆無忌彈的橫行,但是因為病毒防火牆是個新興產物,仍然有相對多的人沒有安裝使用,以至於許多老舊的木馬依然可以橫行無忌。再後來,隨著網絡防火牆技術誕生和病毒防火牆技術的成熟,木馬作者被迫緊跟著防病毒廠商的腳步更新他們的作品以避免馬兒過早“殉職”,同時由於網絡防火牆技術的出現,讓計算機與網絡之間不再直接,尤其是網絡防火牆實現的“攔截外部數據連接請求”與“審核內部程序訪問網絡請求”的策略,導致大部分木馬紛紛失效,這時期的木馬逐漸分裂成兩個派別:一種依然采用客戶端連接服務器端的方式,隻是改為了其他傳輸途徑,如E-MAIL、FTP等,或者在內部除掉網絡防火牆,以便自己暢通無阻;另一種則改變了入侵的思維,把“客戶端連接服務器端”變為“服務器端連接客戶端”,再加上一點社會工程學技術,從而突破了網絡防火牆的限製,也因此誕生了一種新的木馬技術——“反彈型”木馬。

  這一時期裏,入侵者與受害者之間的戰爭終於提升到技術級別,若想保護自己,除了安裝網絡防火牆和病毒防火牆,以及接觸網絡攻防技術以外別無他法,這個“基礎互動”一直保持到今天的XP時代。到了XP時代,網絡速度有了質的飛躍,黑客攻防戰更是越來越多的浮上水麵,因為係統變了,一個專門為網絡應用而誕生的操作係統,必定會存在與網絡有關的缺陷。沒錯,WinXP相對於Win9x的弱點就是它的網絡漏洞太多了,無論是利用MIME漏洞傳播的信件木馬,還是通過LSASS溢出而放下的木馬,都能在XP係統上分到一塊肉。你也許會說,Win9x同樣有許多漏洞,但是為什麽它沒有XP的煩惱?這是因為Win9x的網絡功能太弱了,幾乎沒有什麽係統組件需要依靠網絡運行!所以現在的用戶,除了使用網絡防火牆和病毒防火牆把自己包裹得嚴嚴實實以外,還要三天兩頭去微軟的係統更新站點安裝各種漏洞修複程序……

 別讓士兵們下馬!——防止木馬啟動
  話說藏在木馬裏的希臘士兵入城以後,並沒有急著下馬屠城,而是待到夜深人靜之時,才出來打開了牢固的城門,為特洛伊的毀滅奏響了哀歌。而計算機內部沒有人類社會的地理和時間關係,即使你的硬盤裏現在就存放著100個木馬程序,它們也比特洛伊海灘上那隻大木馬的處境好不到哪裏去,因為對於操作係統來說,任何有害程序隻要沒有運行,它就可以等同於那些未能下馬的士兵,一律視為無害。要讓係統變成特洛伊城的黑夜,唯一的方法隻能是啟動木馬的服務器端,而啟動木馬的最簡單途徑,就是通過“啟動項”加載運行。任何操作係統都會在啟動時自動運行一些程序,用以初始化係統環境或額外功能等,這些被允許跟隨係統啟動而運行的程序被放置在專門的區域裏供係統啟動時加載運行,這些區域就是“啟動項”,不同的係統提供的“啟動項”數量也不同,對於Win9x來說,它提供了至少5個“啟動項”:DOS環境下的Autoexec.bat、Config.sys,Windows環境下的“啟動”程序組、注冊表的2個Run項和1個RunServices項,到了2000/XP係統時代,DOS環境被取消,卻新增了一種稱之為“服務”的啟動區域,這麽多的啟動入口,木馬自然不會放過,於是我們經常在一些計算機的啟動項裏發現陌生的程序名,這時候就隻能交由你或者病毒防火牆來判斷了,畢竟係統自身會在這裏放置一些必要的初始化程序,還有一些正常工具,包括病毒防火牆和網絡防火牆,它們也必須通過啟動項來實現跟隨係統啟動。

  此外還有一種不需要通過啟動項也能達到跟隨係統啟動的卑劣手法,那就是“係統路徑遍曆優先級欺騙”,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_ROOT\exefile\shell\open\command)改回原來的“”%1” %*”即可。

  如果刪除木馬前忘記把並聯方式改回來,就會發現程序打不開了,這時候不要著急,如果你是Win9x用戶,請使用“外殼替換大法”:重啟後按F8進入啟動菜單選擇MS-DOS模式,把Explorer.exe隨便改個名字,再把REGEDIT.EXE改名為Explorer.exe,再次重啟後會發現進入Windows隻剩下一個注冊表編輯器了,趕快把並聯方式改回來吧!重啟後別忘記恢複以前的Explorer.exe。對於Win2000/XP用戶而言,這個操作更簡單了,隻要在開機時按F8進入啟動菜單,選“命令提示符的安全模式”,係統就會自動調用命令提示符界麵作為外殼,直接在裏麵輸入REGEDIT即可打開注冊表編輯器!XP用戶甚至不需要重啟,直接在“打開方式”裏瀏覽到CMD.EXE就能打開“命令提示符”界麵運行注冊表編輯器REGEDIT.EXE了。

  偷梁換柱——追回被盜的係統文件

  除了添加自己到啟動項、路徑欺騙和更改文件並聯以外,一般的木馬還有一種計倆可以使用,那就是替換係統文件。由於如今的操作係統都是由許多文件共同構造的,並不是所有用戶都能明白係統文件夾裏每個文件的作用,這就給了木馬可乘之機,它們盯上了係統裏那些不會危害到係統正常運行而又經常會被調用的程序文件,像輸入法指示程序internat.exe、讓動態鏈接庫可以像程序一樣運行的rundll32.exe等。木馬先把係統原來的文件改名成隻有它們自己知道的一個偏僻文件名,再把自己改名成那個被替換的文件,這樣就完成了隱藏極深的感染工作,從此隻要係統需要調用那個被替換的程序進行工作,木馬就能繼續駐留內存了。那麽文件被替換會不會導致係統異常呢?隻要木馬沒有被刪除,就不會造成係統異常,因為木馬在作為原來的程序而被係統啟動時,會獲得一個由係統傳遞來的運行參數,這就是係統要求該程序工作的關鍵所在,木馬會直接把這個參數傳遞給被改名的程序執行,像接力比賽那樣完成數據操作,這樣在係統看來就是命令被正常執行了,自然不會出現異常。但是也因為這樣的特性導致木馬被查殺後,係統的某些命令無法傳遞到本該執行操作的程序中,反而讓係統出錯了。

  要修複它其實很簡單,隻要記住這個木馬的文件名,在刪除它之後再從係統光盤複製一個“原配”文件就可以了,如果沒有係統光盤,就必須通過工具追蹤木馬傳遞參數的目標程序名,再把它改回來。

  結束語

  木馬的發展促進了安全技術的提高,而安全技術的提高又迫使木馬必須往更高的級別發展,到現在木馬已經形成了多個派係的共存,偵測它們的方法也不能再像以前那樣簡單了,例如檢測異常端口的方法對於反彈木馬而言是無效的,它並不在本機開放端口;就算防火牆能阻止內部未授權程序訪問網絡,但那隻能針對TCP/UDP協議的木馬,別忘記了還有ICMP後門的存在,防火牆通常不會阻止這類報文的。雖然ICMP協議的數據報文能完成的事情相對較少,但是對於一般的命令控製,它已經足夠了……
請您先登陸,再發跟帖!