劉 瀾, 高悅翔
(① 四川師范大學(xué) 計算機(jī)科學(xué)學(xué)院,四川 成都 610068;② 四川大學(xué) 計算機(jī)學(xué)院,四川 成都 610065)
隨著互聯(lián)網(wǎng)絡(luò)的快速發(fā)展,網(wǎng)絡(luò)安全問題日益突出。計算機(jī)病毒、特洛伊木馬以及網(wǎng)絡(luò)蠕蟲等惡意程序?qū)W(wǎng)絡(luò)安全構(gòu)成了巨大的威脅。其中特洛伊木馬的破壞最大,它能在高隱蔽性的狀態(tài)下竊取網(wǎng)民的隱私信息。
通常被感染木馬的計算機(jī)用戶并不知道自己的計算機(jī)已被感染。這是由于木馬程序具有很高的隱蔽性,它能在看似無任何異常的情況下,秘密操控遠(yuǎn)程主機(jī),進(jìn)行破壞活動。本文主要針對木馬的隱藏技術(shù)展開研究,揭示了木馬各種隱藏技術(shù)的實現(xiàn)原理和技術(shù)手段。
木馬程序隱藏通常指利用各種手段偽裝木馬程序,讓一般用戶無法從表面上直接識別出木馬程序。要達(dá)到這一目的可以通過程序捆綁的方式實現(xiàn)。
程序捆綁方式是將多個exe程序鏈接在一起組合成一個exe文件,當(dāng)運行該exe文件時,多個程序同時運行。程序捆綁有多種方式,如將多個exe文件以資源形式組合到一個exe文件中或者利用專用的安裝打包工具將多個exe文件進(jìn)行組合,這也是許多程序捆綁流氓軟件的做法。
因此,木馬程序可以利用程序捆綁的方式,將自己和正常的exe文件進(jìn)行捆綁。當(dāng)雙擊運行捆綁后的程序時,正常的exe文件運行了,而木馬程序也在后臺悄悄地運行。
程序隱藏只能達(dá)到從表面上無法識別木馬程序的目的,但是可以通過任務(wù)管理器中發(fā)現(xiàn)木馬程序的蹤跡,這就需要木馬程序?qū)崿F(xiàn)進(jìn)程隱藏。
隱藏木馬程序的進(jìn)程顯示能防止用戶通過任務(wù)管理器查看到木馬程序的進(jìn)程,從而提高木馬程序的隱蔽性。目前,隱藏木馬進(jìn)程主要有如下兩種方式:
API攔截技術(shù)屬于進(jìn)程偽隱藏方式。它通過利用Hook技術(shù)監(jiān)控并截獲系統(tǒng)中某些程序?qū)M(jìn)程顯示的 API函數(shù)調(diào)用,然后修改函數(shù)返回的進(jìn)程信息,將自己從結(jié)果中刪除,導(dǎo)致任務(wù)管理器等工具無法顯示該木馬進(jìn)程。具體實現(xiàn)過程是,木馬程序建立一個后臺的系統(tǒng)鉤子(Hook),攔截PSAPI的 EnumProcessModules 等相關(guān)函數(shù)的調(diào)用,當(dāng)檢測到結(jié)果為該木馬程序的進(jìn)程ID(PID)的時候直接跳過,這樣進(jìn)程信息中就不會包含該木馬程序的進(jìn)程,從而達(dá)到了隱藏木馬進(jìn)程的目的。
遠(yuǎn)程線程注入屬于進(jìn)程真隱藏方式。它主要是利用CreateRemoteThread函數(shù)在某一個目標(biāo)進(jìn)程中創(chuàng)建遠(yuǎn)程線程,共享目標(biāo)進(jìn)程的地址空間,并獲得目標(biāo)進(jìn)程的相關(guān)權(quán)限,從而修改目標(biāo)進(jìn)程內(nèi)部數(shù)據(jù)和啟動 DLL木馬。通過這種方式啟動的 DLL木馬占用的是目標(biāo)進(jìn)程的地址空間,而且自身是作為目標(biāo)進(jìn)程的一個線程,所以它不會出現(xiàn)在進(jìn)程列表中。DLL木馬的實現(xiàn)過程是:
① 通過OpenProcess函數(shù)打開目標(biāo)進(jìn)程;
② 計算DLL路徑名需要的地址空間并且根據(jù)計算結(jié)果調(diào)用 VirtualAllocEx函數(shù)在目標(biāo)進(jìn)程中申請一塊大小合適的內(nèi)存空間;
③ 調(diào)用WriteProcessMemory函數(shù)將DLL的路徑名寫入申請到的內(nèi)存空間中;
④ 利用函數(shù)GetProcAddress計算LoadLibraryW的入口地址,并將 LoadLibraryW 的入口地址作為遠(yuǎn)程線程的入口地址;
⑤ 通過函數(shù) CreateRemoteThread在目標(biāo)進(jìn)程中創(chuàng)建遠(yuǎn)程線程。
通過以上步驟就可以實現(xiàn)遠(yuǎn)程線程注入啟動 DLL木馬,達(dá)到隱藏木馬進(jìn)程的目的。而且,遠(yuǎn)程線程注入方式與其他進(jìn)程隱藏技術(shù)相比,具有更強的隱蔽性和反查殺能力,增加了木馬的生存能力。
進(jìn)程隱藏可以進(jìn)一步加強其隱蔽性。但是仍然可以從通信連接的狀況中發(fā)現(xiàn)木馬程序的蹤跡。因此,很有必要實現(xiàn)木馬程序的通信隱藏。本文給出了以下兩種通信隱藏技術(shù)的實現(xiàn)思想。
木馬服務(wù)器端程序在運行時會主動打開某一端口和客戶端程序進(jìn)行連接,從而降低了木馬程序的隱蔽性。木馬端口復(fù)用技術(shù)能避免這種缺點,它讓木馬服務(wù)端程序共享其他網(wǎng)絡(luò)程序已打開的端口和客戶端進(jìn)行連接,從而防止重新開啟端口降低隱蔽性。
該技術(shù)的關(guān)鍵之處在于,木馬程序應(yīng)增設(shè)一個數(shù)據(jù)包轉(zhuǎn)交判斷模塊,該模塊控制主機(jī)對數(shù)據(jù)報的轉(zhuǎn)交選擇。當(dāng)主機(jī)收到目的端口與木馬所復(fù)用的端口一致的數(shù)據(jù)包時,調(diào)用數(shù)據(jù)包轉(zhuǎn)交判斷模塊進(jìn)行判斷,若為木馬程序的數(shù)據(jù)包,將其轉(zhuǎn)發(fā)給木馬程序,否則,將其轉(zhuǎn)交給開啟該端口的網(wǎng)絡(luò)程序,如圖1所示,圖1中模塊S=數(shù)據(jù)包轉(zhuǎn)交判斷模塊。
圖1 端口復(fù)用的數(shù)據(jù)包轉(zhuǎn)交過程
利用端口復(fù)用技術(shù)可以增強木馬的通信隱藏,但是對于某些設(shè)置得過嚴(yán)的防火墻和入侵檢測系統(tǒng),這種技術(shù)也會失去作用。因此,除了通信端口的隱藏之外,還應(yīng)該考慮數(shù)據(jù)包傳輸協(xié)議的隱藏。本文通過分析相關(guān)網(wǎng)絡(luò)協(xié)議,編寫出了一款利用ICMP協(xié)議缺陷傳輸數(shù)據(jù)的木馬程序,這里給出該技術(shù)的關(guān)鍵實現(xiàn)思想。
通常網(wǎng)絡(luò)防火墻和入侵檢測系統(tǒng)等安全設(shè)備只檢查ICMP報文的首部,對數(shù)據(jù)部分不做處理。因此,可以將木馬程序的通信數(shù)據(jù)隱藏在ICMP報文格式的選項數(shù)據(jù)字段進(jìn)行傳送,如把服務(wù)端程序向客戶端程序傳輸?shù)臄?shù)據(jù)偽裝成回顯請求報文,而把客戶端程序向服務(wù)端程序傳輸?shù)臄?shù)據(jù)偽裝成回顯應(yīng)答報文[1]。這樣,就可以通過 PINGPINGRESPONSE的方式在木馬服務(wù)端程序和客戶端程序之間建立起一個高效的秘密會話信道。利用ICMP協(xié)議傳輸數(shù)據(jù)還有一個很大的優(yōu)點,即ICMP屬于IP層協(xié)議,它在傳輸數(shù)據(jù)時并不使用任何端口,從而具有更好的隱蔽性。
利用HTTP協(xié)議進(jìn)行木馬程序之間的數(shù)據(jù)傳輸同樣具有很高的隱蔽性。攻擊者可以將木馬客戶端程序使用的端口綁定到HTTP服務(wù)的端口(80)上。那么,當(dāng)木馬服務(wù)端程序向客戶端程序建立連接時,目的端口就變成了 80端口,從而將該連接偽裝成HTTP服務(wù)連接以逃過防火墻的檢查。
實驗測試表明,利用ICMP協(xié)議缺陷傳輸數(shù)據(jù)的木馬程序能夠很好地逃避網(wǎng)絡(luò)防火墻和入侵檢測系統(tǒng)的檢查,實現(xiàn)和控制端之間的通信。但是,采用該技術(shù)的木馬程序傳輸數(shù)據(jù)的效率和穩(wěn)定性還有待提高。
以上分析的各種木馬隱藏技術(shù)都只是建立在木馬程序?qū)崿F(xiàn)自身隱藏的基礎(chǔ)上。然而,目前網(wǎng)絡(luò)安全狀況表明,隨著反木馬技術(shù)的不斷提高,木馬程序僅靠自身或者某單一技術(shù)已無法實現(xiàn)高隱蔽性。因此,實現(xiàn)木馬的協(xié)同隱藏技術(shù)就顯得尤為重要。
木馬協(xié)同隱藏思想通常是綜合利用各種木馬隱藏技術(shù),通過木馬子程序或者木馬程序之間相互協(xié)作,實現(xiàn)更高的隱蔽性。木馬協(xié)同隱藏技術(shù)擺脫了傳統(tǒng)隱藏技術(shù)僅靠單一木馬、單一技術(shù)的方式,它能夠從宏觀整體出發(fā),設(shè)計更加強大的木馬協(xié)作隱藏模型。
Harold Thimbleby等人[2]提出了木馬程序的模型框架;張新宇等人[3]對木馬協(xié)同隱藏思想進(jìn)行了形式化描述,并通過驗證知,當(dāng)系統(tǒng)引入主木馬和各個子木馬時,協(xié)同隱藏模型可以使系統(tǒng)發(fā)生變化,顯現(xiàn)出不一致的特點,因此證明了引入相關(guān)多個子木馬程序協(xié)助主木馬程序?qū)崿F(xiàn)協(xié)同隱藏的可行性;梅登華等人[4]將Multi-Agent技術(shù)與木馬技術(shù)結(jié)合,提出了基于Multi-Agent的木馬技術(shù);康治平等人[5]在木馬協(xié)同隱藏模型的基礎(chǔ)上提出了基于多線程和多對多的結(jié)構(gòu)。
本文根據(jù)Harold Thimbleby等人對木馬協(xié)同隱藏的形式化描述,提出了一種基于動態(tài)星型結(jié)構(gòu)的木馬協(xié)同隱藏模型。該結(jié)構(gòu)主要思想如下,在某個區(qū)域內(nèi)各個木馬之間選取某一木馬為主木馬,并將該主木馬作為代理,各個子木馬通過它和控制端完成通信。主木馬負(fù)責(zé)協(xié)調(diào)并控制子木馬實現(xiàn)協(xié)同隱藏,同時各個子木馬需實現(xiàn)相關(guān)隱藏功能,共同構(gòu)建協(xié)同隱藏模型。為了保持該模型結(jié)構(gòu)以及實現(xiàn)動態(tài)變化的特點,主木馬角色應(yīng)在一段時間后由不同的子木馬隨機(jī)擔(dān)任,如圖2。
圖2 星型結(jié)構(gòu)隱藏模型
例如在局域網(wǎng)中構(gòu)建該模型的實現(xiàn)過程是:將木馬程序植入局域網(wǎng)內(nèi)某一主機(jī),并且使該木馬程序擔(dān)任主木馬角色,利用系統(tǒng)漏洞向網(wǎng)內(nèi)其他主機(jī)傳播木馬程序,然后自動構(gòu)建動態(tài)星型結(jié)構(gòu)木馬模型。為了使該模型能成功實現(xiàn),還必須完成如下功能:
① 主木馬應(yīng)構(gòu)建一個狀態(tài)信息表,記錄區(qū)域內(nèi)各子木馬狀態(tài)信息;
② 主木馬協(xié)調(diào)各子木馬的隱藏功能,實時檢測子木馬狀態(tài),一旦發(fā)現(xiàn)某一子木馬消失,應(yīng)立即通過系統(tǒng)漏洞重新注入木馬程序[4];
③ 子木馬通過主木馬和控制端通信,如果發(fā)生中斷,如主木馬主機(jī)關(guān)機(jī)或者主木馬程序被清除等,各子木馬應(yīng)重新選取出主木馬,新選取的主木馬替換原來主木馬角色,重新構(gòu)建狀態(tài)信息表;
④ 木馬程序啟動時,應(yīng)主動向網(wǎng)內(nèi)報告登記,如果該木馬發(fā)現(xiàn)自己是網(wǎng)內(nèi)第一個啟動的木馬程序,其應(yīng)擔(dān)任主木馬角色;
⑤ 主木馬程序應(yīng)設(shè)置一個計數(shù)器,記錄其控制的子木馬數(shù)量,防止由于子木馬數(shù)量過多,通信量過大,影響系統(tǒng)性能。
為了進(jìn)一步提高木馬協(xié)同隱藏的能力,還可以將其他隱藏技術(shù)融合到該隱藏模型中,如各木馬之間利用ICMP協(xié)議通信,實現(xiàn)端口復(fù)用技術(shù)等。
木馬程序采用動態(tài)星型結(jié)構(gòu)通信比采用普通方式通信具有更高的隱蔽性和生存周期。分析如下:
① 由于采用代理方式通信及動態(tài)變換主木馬角色,使得通信源地址實時變化,增加了追查控制端IP地址的難度;
② 主木馬實時檢測子木馬狀態(tài),并傳播木馬程序,只要該模型結(jié)構(gòu)中存在一個木馬,就能夠構(gòu)建出完整的協(xié)同隱藏模型,從而增加了木馬程序的生存時間;
③ 模型結(jié)構(gòu)中的木馬程序融合了各種隱藏技術(shù)實現(xiàn)協(xié)同隱藏,增強了整體隱藏能力;
④ 具有較高的程序擴(kuò)展性,可以通過主木馬實時更新各子木馬功能模塊;
⑤ 主木馬之間可以繼續(xù)構(gòu)建該動態(tài)星型結(jié)構(gòu)隱藏模型,實現(xiàn)多級化木馬隱藏模型。
該模型加強了木馬協(xié)同隱藏的能力,增加了木馬程序的生存時間,但也產(chǎn)生了一些相關(guān)問題,如增加了木馬通信結(jié)構(gòu)的復(fù)雜度,降低了通信過程的穩(wěn)定性,增加了網(wǎng)內(nèi)控制信息,易造成網(wǎng)絡(luò)阻塞、癱瘓等。總之,木馬隱藏技術(shù)正朝著復(fù)合、協(xié)同的方向發(fā)展,各種問題也會隨著技術(shù)的進(jìn)步逐步得以解決。
木馬隱藏技術(shù)研究是木馬程序研究的熱點問題之一。本文針對木馬隱藏技術(shù)進(jìn)行了較全面的分析,給出了木馬程序隱藏、進(jìn)程隱藏、通信隱藏以及協(xié)同隱藏等技術(shù)原理。通過從單一木馬程序隱藏技術(shù)到多木馬程序隱藏技術(shù)的研究,展現(xiàn)了木馬程序隱藏的關(guān)鍵性思路轉(zhuǎn)變。通過對木馬隱藏技術(shù)的分析研究, 可以加深對木馬隱藏技術(shù)的認(rèn)識, 提高木馬攻擊的防范意識,從而進(jìn)一步把握木馬隱藏技術(shù)的發(fā)展方向,以至于開發(fā)出更多針對木馬隱藏技術(shù)的反木馬工具。
[1] 張仁斌,李鋼,侯整風(fēng).計算機(jī)病毒與反病毒技術(shù)[M].北京:清華大學(xué)出版社,2006:300-316.
[2] Thimbleby H, Anderson S, Cairns P.A Framework for Modelling Trojans and Computer Virus Infection[J].The Computer Journal,1998,41(07):444-458.
[3] 張新宇,卿斯?jié)h,馬恒太,等.特洛伊木馬隱藏技術(shù)研究[J].北京:通信學(xué)報,2004,25(07):153-159.
[4] 梅登華,林耀通.基于 Multi-Agent的木馬模型設(shè)計[J].北京:電子技術(shù)應(yīng)用,2008,34(05):138-140.
[5] 康治平,向宏.特洛伊木馬隱藏技術(shù)研究及實踐[J].北京:計算機(jī)工程與應(yīng)用,2006,42(09):103-105.