“我想,我們應(yīng)該燒掉這個東西?!?000多年前,面對希臘人突然遺留在戰(zhàn)場廢墟上的這只巨大的木馬,特洛伊王國的小王子帕里斯對他的父王說。因為他有一種不安的感覺,這個突然出現(xiàn)的物體會帶來厄運。然而沒有人聽他的話,整個軍隊固執(zhí)的把這只龐然大物作為戰(zhàn)利品運回了城里。幾天后的夜里,藏在木馬里的希臘士兵從內(nèi)部打開了特洛伊那堅不可摧的城門——特洛伊因此淪陷。如果帕里斯仍有靈魂存在的話,他也許會苦苦思索這個問題:如果當(dāng)初我堅持把這個帶來厄運的東西焚燒掉,那么特洛伊將會是怎樣一種結(jié)局呢?
請允許我改編情感作家姜湯的一句話:“二十一世紀的網(wǎng)絡(luò)是木馬橫行的世界,人類在解決病毒戰(zhàn)爭之后,最大的困惑就是木馬后門的攻防難題?!?div style="height:15px;">
眾所周知,木馬(Trojan,或稱后門“BackDoor”)是一種危害巨大的程序,它們讓被害的計算機對著未知的入侵者敞開了大門,使得受害者的系統(tǒng)和數(shù)據(jù)暴露在混亂的網(wǎng)絡(luò)世界里。和病毒一樣,木馬也經(jīng)歷了好幾代的演變,使得它越藏越深,成為另一種難以揪除的寄生蟲。
——如果,我們趁早把木馬焚燒掉呢?
認識木馬
簡言之,信息領(lǐng)域的木馬,就是一種能潛伏在受害者計算機里,并且秘密開放一個甚至多個數(shù)據(jù)傳輸通道的遠程控制程序,它由兩部分組成:客戶端(Client)和服務(wù)器端(Server),客戶端也稱為控制端。木馬的傳播感染其實指的就是服務(wù)器端,入侵者必須通過各種手段把服務(wù)器端程序傳送給受害者運行,才能達到木馬傳播的目的。當(dāng)服務(wù)器端被受害者計算機執(zhí)行時,便將自己復(fù)制到系統(tǒng)目錄,并把運行代碼加入系統(tǒng)啟動時會自動調(diào)用的區(qū)域里,借以達到跟隨系統(tǒng)啟動而運行,這一區(qū)域通常稱為“啟動項”。當(dāng)木馬完成這部分操作后,便進入潛伏期——偷偷開放系統(tǒng)端口,等待入侵者連接。到此為止,木馬還只處于被特洛伊的市民拉入城內(nèi)的階段,是不會進行破壞行動的。
當(dāng)入侵者使用客戶端連接上木馬服務(wù)器端開放的端口后,特洛伊的城門就被打開了,到這里,木馬的噩夢才正式開始……
所以,在木馬屠城的軍號吹響之前,如果帕里斯及時點燃了這只龐然大物,特洛伊也許就不會消失——至少,它不會是被一只木馬給毀掉的。
阻止木馬進城——不同時期的木馬形態(tài)與相應(yīng)的系統(tǒng)保護
特洛伊被木馬計的前提是因為特洛伊人自己把藏有希臘士兵的木馬運進了城內(nèi),讓木馬計得以成功實施,換個角度,如果當(dāng)初特洛伊人任憑木馬擱在海灘上發(fā)霉發(fā)臭,或者直接焚燒了這只裝載著厄運的東西,那么“特洛伊木馬”將會被作為與“馬奇諾防線”同樣性質(zhì)的著名無效戰(zhàn)略而被列入史冊,而且后世可能再也不會采用這種攻擊手段。
但是希臘人的木馬計成功了,正如現(xiàn)在數(shù)以千計的現(xiàn)代網(wǎng)絡(luò)木馬計成功了一樣。現(xiàn)代的希臘人——入侵者積極使用各種手段讓現(xiàn)代的特洛伊人——受害者把那只木馬程序高高興興的領(lǐng)回家去。
早期的防病毒思想并不盛行,那時候的網(wǎng)民也比較單純,使用網(wǎng)絡(luò)防火墻的人也只有少數(shù),所以那時候的入侵者可以算是幸福的,他們只需要一點簡單的社會工程學(xué)手段就能把木馬程序傳輸給對方執(zhí)行,這一時期的木馬種植手段(如今的普遍稱謂為“下馬”)基本上不需要牽涉到技術(shù),也許唯一需要的技術(shù)就是如何配置和使用一個木馬,因為那時候木馬也還是個新產(chǎn)物而已。那時候的網(wǎng)民,只能依靠自己的判斷和技術(shù),才能免受或擺脫木馬之害。因此,當(dāng)木馬技術(shù)剛在國內(nèi)開始的時候,任意一個IP段都有可能存在超過40%的受害計算機開放著大門等待入侵者進攻,可以毫不夸張的說,那時候是木馬的第一黃金時期,唯一美中不足的制約條件就是當(dāng)時的網(wǎng)絡(luò)速度普遍太慢了。
隨著時間的流逝,木馬技術(shù)發(fā)展日益成熟,但網(wǎng)民的安全意識也普遍提高,更出現(xiàn)了初期的病毒防火墻概念,這個時期的入侵者必須掌握更高級的社會工程學(xué)手段和初期的入侵技術(shù)才能讓對方受害了,這時期的木馬雖然隱蔽性有了相對提高,但仍然是基于客戶端尋找連接服務(wù)器端的模式。由于出現(xiàn)了病毒防火墻,網(wǎng)民判斷和查殺木馬的效率大大提高,而且大部分人也知道“人心不古”了,不再輕易接收陌生人給的程序,使得木馬不再像上時期那樣肆無忌彈的橫行,但是因為病毒防火墻是個新興產(chǎn)物,仍然有相對多的人沒有安裝使用,以至于許多老舊的木馬依然可以橫行無忌。
再后來,隨著網(wǎng)絡(luò)防火墻技術(shù)誕生和病毒防火墻技術(shù)的成熟,木馬作者被迫緊跟著防病毒廠商的腳步更新他們的作品以避免馬兒過早“殉職”,同時由于網(wǎng)絡(luò)防火墻技術(shù)的出現(xiàn),讓計算機與網(wǎng)絡(luò)之間不再直接,尤其是網(wǎng)絡(luò)防火墻實現(xiàn)的“攔截外部數(shù)據(jù)連接請求”與“審核內(nèi)部程序訪問網(wǎng)絡(luò)請求”的策略,導(dǎo)致大部分木馬紛紛失效,這時期的木馬逐漸分裂成兩個派別:一種依然采用客戶端連接服務(wù)器端的方式,只是改為了其他傳輸途徑,如E-MAIL、FTP等,或者在內(nèi)部除掉網(wǎng)絡(luò)防火墻,以便自己暢通無阻;另一種則改變了入侵的思維,把“客戶端連接服務(wù)器端”變?yōu)椤胺?wù)器端連接客戶端”,再加上一點社會工程學(xué)技術(shù),從而突破了網(wǎng)絡(luò)防火墻的限制,也因此誕生了一種新的木馬技術(shù)——“反彈型”木馬。這一時期里,入侵者與受害者之間的戰(zhàn)爭終于提升到技術(shù)級別,若想保護自己,除了安裝網(wǎng)絡(luò)防火墻和病毒防火墻,以及接觸網(wǎng)絡(luò)攻防技術(shù)以外別無他法,這個“基礎(chǔ)互動”一直保持到今天的XP時代。
到了XP時代,網(wǎng)絡(luò)速度有了質(zhì)的飛躍,黑客攻防戰(zhàn)更是越來越多的浮上水面,因為系統(tǒng)變了,一個專門為網(wǎng)絡(luò)應(yīng)用而誕生的操作系統(tǒng),必定會存在與網(wǎng)絡(luò)有關(guān)的缺陷。沒錯,WinXP相對于Win9x的弱點就是它的網(wǎng)絡(luò)漏洞太多了,無論是利用MIME漏洞傳播的信件木馬,還是通過LSASS溢出而放下的木馬,都能在XP系統(tǒng)上分到一塊肉。你也許會說,Win9x同樣有許多漏洞,但是為什么它沒有XP的煩惱?這是因為Win9x的網(wǎng)絡(luò)功能太弱了,幾乎沒有什么系統(tǒng)組件需要依靠網(wǎng)絡(luò)運行!所以現(xiàn)在的用戶,除了使用網(wǎng)絡(luò)防火墻和病毒防火墻把自己包裹得嚴嚴實實以外,還要三天兩頭去微軟的系統(tǒng)更新站點安裝各種漏洞修復(fù)程序……
別讓士兵們下馬!——防止木馬啟動
話說藏在木馬里的希臘士兵入城以后,并沒有急著下馬屠城,而是待到夜深人靜之時,才出來打開了牢固的城門,為特洛伊的毀滅奏響了哀歌。而計算機內(nèi)部沒有人類社會的地理和時間關(guān)系,即使你的硬盤里現(xiàn)在就存放著100個木馬程序,它們也比特洛伊海灘上那只大木馬的處境好不到哪里去,因為對于操作系統(tǒng)來說,任何有害程序只要沒有運行,它就可以等同于那些未能下馬的士兵,一律視為無害。要讓系統(tǒng)變成特洛伊城的黑夜,唯一的方法只能是啟動木馬的服務(wù)器端,而啟動木馬的最簡單途徑,就是通過“啟動項”加載運行。
任何操作系統(tǒng)都會在啟動時自動運行一些程序,用以初始化系統(tǒng)環(huán)境或額外功能等,這些被允許跟隨系統(tǒng)啟動而運行的程序被放置在專門的區(qū)域里供系統(tǒng)啟動時加載運行,這些區(qū)域就是“啟動項”,不同的系統(tǒng)提供的“啟動項”數(shù)量也不同,對于Win9x來說,它提供了至少5個“啟動項”:DOS環(huán)境下的Autoexec.bat、Config.sys,Windows環(huán)境下的“啟動”程序組、注冊表的2個Run項和1個RunServices項,分別是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
到了2000/XP系統(tǒng)時代,DOS環(huán)境被取消,卻新增了一種稱之為“服務(wù)”的啟動區(qū)域,注冊表也在保持原項目不變的基礎(chǔ)上增加了2個“啟動項”:
項目 鍵名
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows AppInit_DLLs
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows run
這么多的啟動入口,木馬自然不會放過,于是我們經(jīng)常在一些計算機的啟動項里發(fā)現(xiàn)陌生的程序名,這時候就只能交由你或者病毒防火墻來判斷了,畢竟系統(tǒng)自身會在這里放置一些必要的初始化程序,還有一些正常工具,包括病毒防火墻和網(wǎng)絡(luò)防火墻,它們也必須通過啟動項來實現(xiàn)跟隨系統(tǒng)啟動。
此外還有一種不需要通過啟動項也能達到跟隨系統(tǒng)啟動的卑劣手法,那就是“系統(tǒng)路徑遍歷優(yōu)先級欺騙”,Windows系統(tǒng)搜尋一個不帶路徑信息的文件時遵循一種“從外到里”的規(guī)則,它會由系統(tǒng)所在盤符的根目錄開始向系統(tǒng)目錄深處遞進查找,而不是精確定位的,這就意味著,如果有兩個同樣名稱的文件分別放在C:\和C:\Windows下,Windows會執(zhí)行C:\下的程序,而不是C:\Windows下的。這樣的搜尋邏輯就給入侵者提供了一個機會,木馬可以把自己改為系統(tǒng)啟動時必定會調(diào)用的某個文件名,并復(fù)制到比原文件要淺一級以上的目錄里,Windows就會想當(dāng)然的執(zhí)行了木馬程序,系統(tǒng)的噩夢就此拉開序幕。這種手法常被用于“internat.exe”,因為無論哪個Windows版本的啟動項里,它都是沒有設(shè)置路徑的。
要提防這種占用啟動項而做到自動運行的木馬,用戶必須了解自己機器里所有正常的啟動項信息,才能知道木馬有沒有混進來。至于利用系統(tǒng)路徑漏洞的木馬,則只能靠用戶自己的細心了。
為什么它無法根除?——文件并聯(lián)型木馬的查殺
某些用戶經(jīng)常會很郁悶,自己明明已經(jīng)刪除了木馬文件和相應(yīng)的啟動項,可是不知道什么時候它自己又原封不動的回來了,這還不算,更悲慘的是有時候殺掉某個木馬后,系統(tǒng)也出了故障:所有應(yīng)用程序都打不開了。這時候,如果用戶對計算機技術(shù)的了解僅限于使用殺毒軟件,那可只能哭哭啼啼的重裝系統(tǒng)了!
為什么會這樣?難道這種木馬還惡意修改了系統(tǒng)核心?其實答案很簡單,因為這種木馬修改了應(yīng)用程序(EXE文件)的并聯(lián)方式。
什么是“并聯(lián)方式”呢?在Windows系統(tǒng)里,文件的打開操作是通過注冊表內(nèi)相應(yīng)鍵值指定的應(yīng)用程序來執(zhí)行的,這個部分位于注冊表的“HKEY_CLASSES_ROOT”主鍵內(nèi),當(dāng)系統(tǒng)收到一個文件名請求時,會以它的后綴名為依據(jù)在這里識別文件類型,進而調(diào)用相應(yīng)的程序打開。而應(yīng)用程序自身也被視為一個文件,它也屬于一種文件類型,同樣可以用其他方式開啟,只不過Windows設(shè)置它的調(diào)用程序為“"%1" %*”,讓系統(tǒng)內(nèi)核理解為“可執(zhí)行請求”,它就會為使用這種打開方式的文件創(chuàng)建進程,最終文件就被加載執(zhí)行了,如果有另外的程序更改了這個鍵值,Windows就會調(diào)用那個指定的文件來開啟它。一些木馬程序把EXE后綴名對應(yīng)的exefile類型的“打開方式”改成了“木馬程序 "%1" %*”,運行程序時系統(tǒng)就會先為“木馬程序”創(chuàng)建進程,把緊跟著的文件名作為參數(shù)傳遞給它執(zhí)行,于是在我們看來程序被正常啟動了。因為木馬程序被作為所有EXE文件的調(diào)用程序,使得它可以長期駐留內(nèi)存,每次都能恢復(fù)自身文件,所以在一般用戶看來,這個木馬就做到了“永生不死”。然而一旦木馬程序被刪除,Windows就會找不到相應(yīng)的調(diào)用程序,于是正常程序就無法執(zhí)行了,這就是所謂的“所有程序都無法運行”的情況來源,并不是木馬更改了系統(tǒng)核心,更沒必要因此重裝整個系統(tǒng)。
根除這種木馬的最簡單方法只需要查看EXE文件的打開方式被指向了什么程序,立即停止這個程序的進程,如果它還產(chǎn)生了其他木馬文件的話,也一起停止,然后在保持注冊表編輯器開啟著的情況下(否則你的所有程序都會打不開了)刪除掉所有木馬文件,把exefile的“打開方式”項(HKEY_CLASSES_ROOT\exefile\shell\open\command)改回原來的“”%1” %*”即可。
如果刪除木馬前忘記把并聯(lián)方式改回來,就會發(fā)現(xiàn)程序打不開了,這時候不要著急,如果你是Win9x用戶,請使用“外殼替換大法”:重啟后按F8進入啟動菜單選擇MS-DOS模式,把Explorer.exe隨便改個名字,再把REGEDIT.EXE改名為Explorer.exe,再次重啟后會發(fā)現(xiàn)進入Windows只剩下一個注冊表編輯器了,趕快把并聯(lián)方式改回來吧!重啟后別忘記恢復(fù)以前的Explorer.exe。
對于Win2000/XP用戶而言,這個操作更簡單了,只要在開機時按F8進入啟動菜單,選“命令提示符的安全模式”,系統(tǒng)就會自動調(diào)用命令提示符界面作為外殼,直接在里面輸入REGEDIT即可打開注冊表編輯器!XP用戶甚至不需要重啟,直接在“打開方式”里瀏覽到CMD.EXE就能打開“命令提示符”界面運行注冊表編輯器REGEDIT.EXE了。
偷梁換柱——追回被盜的系統(tǒng)文件
除了添加自己到啟動項、路徑欺騙和更改文件并聯(lián)以外,一般的木馬還有一種計倆可以使用,那就是替換系統(tǒng)文件。由于如今的操作系統(tǒng)都是由許多文件共同構(gòu)造的,并不是所有用戶都能明白系統(tǒng)文件夾里每個文件的作用,這就給了木馬可乘之機,它們盯上了系統(tǒng)里那些不會危害到系統(tǒng)正常運行而又經(jīng)常會被調(diào)用的程序文件,像輸入法指示程序internat.exe、讓動態(tài)鏈接庫可以像程序一樣運行的rundll32.exe等。木馬先把系統(tǒng)原來的文件改名成只有它們自己知道的一個偏僻文件名,再把自己改名成那個被替換的文件,這樣就完成了隱藏極深的感染工作,從此只要系統(tǒng)需要調(diào)用那個被替換的程序進行工作,木馬就能繼續(xù)駐留內(nèi)存了。那么文件被替換會不會導(dǎo)致系統(tǒng)異常呢?只要木馬沒有被刪除,就不會造成系統(tǒng)異常,因為木馬在作為原來的程序而被系統(tǒng)啟動時,會獲得一個由系統(tǒng)傳遞來的運行參數(shù),這就是系統(tǒng)要求該程序工作的關(guān)鍵所在,木馬會直接把這個參數(shù)傳遞給被改名的程序執(zhí)行,像接力比賽那樣完成數(shù)據(jù)操作,這樣在系統(tǒng)看來就是命令被正常執(zhí)行了,自然不會出現(xiàn)異常。但是也因為這樣的特性導(dǎo)致木馬被查殺后,系統(tǒng)的某些命令無法傳遞到本該執(zhí)行操作的程序中,反而讓系統(tǒng)出錯了。
要修復(fù)它其實很簡單,只要記住這個木馬的文件名,在刪除它之后再從系統(tǒng)光盤復(fù)制一個“原配”文件就可以了,如果沒有系統(tǒng)光盤,就必須通過工具追蹤木馬傳遞參數(shù)的目標(biāo)程序名,再把它改回來。
結(jié)束語
木馬的發(fā)展促進了安全技術(shù)的提高,而安全技術(shù)的提高又迫使木馬必須往更高的級別發(fā)展,到現(xiàn)在木馬已經(jīng)形成了多個派系的共存,偵測它們的方法也不能再像以前那樣簡單了,例如檢測異常端口的方法對于反彈木馬而言是無效的,它并不在本機開放端口;就算防火墻能阻止內(nèi)部未授權(quán)程序訪問網(wǎng)絡(luò),但那只能針對TCP/UDP協(xié)議的木馬,別忘記了還有ICMP后門的存在,防火墻通常不會阻止這類報文的。雖然ICMP協(xié)議的數(shù)據(jù)報文能完成的事情相對較少,但是對于一般的命令控制,它已經(jīng)足夠了……
木馬之戰(zhàn),何時才能停歇呢?