劉 瀾, 高悅翔
(① 四川師范大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,四川 成都 610068;② 四川大學(xué) 計(jì)算機(jī)學(xué)院,四川 成都 610065)
隨著互聯(lián)網(wǎng)絡(luò)的快速發(fā)展,網(wǎng)絡(luò)安全問(wèn)題日益突出。計(jì)算機(jī)病毒、特洛伊木馬以及網(wǎng)絡(luò)蠕蟲(chóng)等惡意程序?qū)W(wǎng)絡(luò)安全構(gòu)成了巨大的威脅。其中特洛伊木馬的破壞最大,它能在高隱蔽性的狀態(tài)下竊取網(wǎng)民的隱私信息。
通常被感染木馬的計(jì)算機(jī)用戶并不知道自己的計(jì)算機(jī)已被感染。這是由于木馬程序具有很高的隱蔽性,它能在看似無(wú)任何異常的情況下,秘密操控遠(yuǎn)程主機(jī),進(jìn)行破壞活動(dòng)。本文主要針對(duì)木馬的隱藏技術(shù)展開(kāi)研究,揭示了木馬各種隱藏技術(shù)的實(shí)現(xiàn)原理和技術(shù)手段。
木馬程序隱藏通常指利用各種手段偽裝木馬程序,讓一般用戶無(wú)法從表面上直接識(shí)別出木馬程序。要達(dá)到這一目的可以通過(guò)程序捆綁的方式實(shí)現(xiàn)。
程序捆綁方式是將多個(gè)exe程序鏈接在一起組合成一個(gè)exe文件,當(dāng)運(yùn)行該exe文件時(shí),多個(gè)程序同時(shí)運(yùn)行。程序捆綁有多種方式,如將多個(gè)exe文件以資源形式組合到一個(gè)exe文件中或者利用專用的安裝打包工具將多個(gè)exe文件進(jìn)行組合,這也是許多程序捆綁流氓軟件的做法。
因此,木馬程序可以利用程序捆綁的方式,將自己和正常的exe文件進(jìn)行捆綁。當(dāng)雙擊運(yùn)行捆綁后的程序時(shí),正常的exe文件運(yùn)行了,而木馬程序也在后臺(tái)悄悄地運(yùn)行。
程序隱藏只能達(dá)到從表面上無(wú)法識(shí)別木馬程序的目的,但是可以通過(guò)任務(wù)管理器中發(fā)現(xiàn)木馬程序的蹤跡,這就需要木馬程序?qū)崿F(xiàn)進(jìn)程隱藏。
隱藏木馬程序的進(jìn)程顯示能防止用戶通過(guò)任務(wù)管理器查看到木馬程序的進(jìn)程,從而提高木馬程序的隱蔽性。目前,隱藏木馬進(jìn)程主要有如下兩種方式:
API攔截技術(shù)屬于進(jìn)程偽隱藏方式。它通過(guò)利用Hook技術(shù)監(jiān)控并截獲系統(tǒng)中某些程序?qū)M(jìn)程顯示的 API函數(shù)調(diào)用,然后修改函數(shù)返回的進(jìn)程信息,將自己從結(jié)果中刪除,導(dǎo)致任務(wù)管理器等工具無(wú)法顯示該木馬進(jìn)程。具體實(shí)現(xiàn)過(guò)程是,木馬程序建立一個(gè)后臺(tái)的系統(tǒng)鉤子(Hook),攔截PSAPI的 EnumProcessModules 等相關(guān)函數(shù)的調(diào)用,當(dāng)檢測(cè)到結(jié)果為該木馬程序的進(jìn)程ID(PID)的時(shí)候直接跳過(guò),這樣進(jìn)程信息中就不會(huì)包含該木馬程序的進(jìn)程,從而達(dá)到了隱藏木馬進(jìn)程的目的。
遠(yuǎn)程線程注入屬于進(jìn)程真隱藏方式。它主要是利用CreateRemoteThread函數(shù)在某一個(gè)目標(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ù)和啟動(dòng) DLL木馬。通過(guò)這種方式啟動(dòng)的 DLL木馬占用的是目標(biāo)進(jìn)程的地址空間,而且自身是作為目標(biāo)進(jìn)程的一個(gè)線程,所以它不會(huì)出現(xiàn)在進(jìn)程列表中。DLL木馬的實(shí)現(xiàn)過(guò)程是:
① 通過(guò)OpenProcess函數(shù)打開(kāi)目標(biāo)進(jìn)程;
② 計(jì)算DLL路徑名需要的地址空間并且根據(jù)計(jì)算結(jié)果調(diào)用 VirtualAllocEx函數(shù)在目標(biāo)進(jìn)程中申請(qǐng)一塊大小合適的內(nèi)存空間;
③ 調(diào)用WriteProcessMemory函數(shù)將DLL的路徑名寫(xiě)入申請(qǐng)到的內(nèi)存空間中;
④ 利用函數(shù)GetProcAddress計(jì)算LoadLibraryW的入口地址,并將 LoadLibraryW 的入口地址作為遠(yuǎn)程線程的入口地址;
⑤ 通過(guò)函數(shù) CreateRemoteThread在目標(biāo)進(jìn)程中創(chuàng)建遠(yuǎn)程線程。
通過(guò)以上步驟就可以實(shí)現(xiàn)遠(yuǎn)程線程注入啟動(dòng) DLL木馬,達(dá)到隱藏木馬進(jìn)程的目的。而且,遠(yuǎn)程線程注入方式與其他進(jìn)程隱藏技術(shù)相比,具有更強(qiáng)的隱蔽性和反查殺能力,增加了木馬的生存能力。
進(jìn)程隱藏可以進(jìn)一步加強(qiáng)其隱蔽性。但是仍然可以從通信連接的狀況中發(fā)現(xiàn)木馬程序的蹤跡。因此,很有必要實(shí)現(xiàn)木馬程序的通信隱藏。本文給出了以下兩種通信隱藏技術(shù)的實(shí)現(xiàn)思想。
木馬服務(wù)器端程序在運(yùn)行時(shí)會(huì)主動(dòng)打開(kāi)某一端口和客戶端程序進(jìn)行連接,從而降低了木馬程序的隱蔽性。木馬端口復(fù)用技術(shù)能避免這種缺點(diǎn),它讓木馬服務(wù)端程序共享其他網(wǎng)絡(luò)程序已打開(kāi)的端口和客戶端進(jìn)行連接,從而防止重新開(kāi)啟端口降低隱蔽性。
該技術(shù)的關(guān)鍵之處在于,木馬程序應(yīng)增設(shè)一個(gè)數(shù)據(jù)包轉(zhuǎn)交判斷模塊,該模塊控制主機(jī)對(duì)數(shù)據(jù)報(bào)的轉(zhuǎn)交選擇。當(dāng)主機(jī)收到目的端口與木馬所復(fù)用的端口一致的數(shù)據(jù)包時(shí),調(diào)用數(shù)據(jù)包轉(zhuǎn)交判斷模塊進(jìn)行判斷,若為木馬程序的數(shù)據(jù)包,將其轉(zhuǎn)發(fā)給木馬程序,否則,將其轉(zhuǎn)交給開(kāi)啟該端口的網(wǎng)絡(luò)程序,如圖1所示,圖1中模塊S=數(shù)據(jù)包轉(zhuǎn)交判斷模塊。

圖1 端口復(fù)用的數(shù)據(jù)包轉(zhuǎn)交過(guò)程
利用端口復(fù)用技術(shù)可以增強(qiáng)木馬的通信隱藏,但是對(duì)于某些設(shè)置得過(guò)嚴(yán)的防火墻和入侵檢測(cè)系統(tǒng),這種技術(shù)也會(huì)失去作用。因此,除了通信端口的隱藏之外,還應(yīng)該考慮數(shù)據(jù)包傳輸協(xié)議的隱藏。本文通過(guò)分析相關(guān)網(wǎng)絡(luò)協(xié)議,編寫(xiě)出了一款利用ICMP協(xié)議缺陷傳輸數(shù)據(jù)的木馬程序,這里給出該技術(shù)的關(guān)鍵實(shí)現(xiàn)思想。
通常網(wǎng)絡(luò)防火墻和入侵檢測(cè)系統(tǒng)等安全設(shè)備只檢查ICMP報(bào)文的首部,對(duì)數(shù)據(jù)部分不做處理。因此,可以將木馬程序的通信數(shù)據(jù)隱藏在ICMP報(bào)文格式的選項(xiàng)數(shù)據(jù)字段進(jìn)行傳送,如把服務(wù)端程序向客戶端程序傳輸?shù)臄?shù)據(jù)偽裝成回顯請(qǐng)求報(bào)文,而把客戶端程序向服務(wù)端程序傳輸?shù)臄?shù)據(jù)偽裝成回顯應(yīng)答報(bào)文[1]。這樣,就可以通過(guò) PINGPINGRESPONSE的方式在木馬服務(wù)端程序和客戶端程序之間建立起一個(gè)高效的秘密會(huì)話信道。利用ICMP協(xié)議傳輸數(shù)據(jù)還有一個(gè)很大的優(yōu)點(diǎn),即ICMP屬于IP層協(xié)議,它在傳輸數(shù)據(jù)時(shí)并不使用任何端口,從而具有更好的隱蔽性。
利用HTTP協(xié)議進(jìn)行木馬程序之間的數(shù)據(jù)傳輸同樣具有很高的隱蔽性。攻擊者可以將木馬客戶端程序使用的端口綁定到HTTP服務(wù)的端口(80)上。那么,當(dāng)木馬服務(wù)端程序向客戶端程序建立連接時(shí),目的端口就變成了 80端口,從而將該連接偽裝成HTTP服務(wù)連接以逃過(guò)防火墻的檢查。
實(shí)驗(yàn)測(cè)試表明,利用ICMP協(xié)議缺陷傳輸數(shù)據(jù)的木馬程序能夠很好地逃避網(wǎng)絡(luò)防火墻和入侵檢測(cè)系統(tǒng)的檢查,實(shí)現(xiàn)和控制端之間的通信。但是,采用該技術(shù)的木馬程序傳輸數(shù)據(jù)的效率和穩(wěn)定性還有待提高。
以上分析的各種木馬隱藏技術(shù)都只是建立在木馬程序?qū)崿F(xiàn)自身隱藏的基礎(chǔ)上。然而,目前網(wǎng)絡(luò)安全狀況表明,隨著反木馬技術(shù)的不斷提高,木馬程序僅靠自身或者某單一技術(shù)已無(wú)法實(shí)現(xiàn)高隱蔽性。因此,實(shí)現(xiàn)木馬的協(xié)同隱藏技術(shù)就顯得尤為重要。
木馬協(xié)同隱藏思想通常是綜合利用各種木馬隱藏技術(shù),通過(guò)木馬子程序或者木馬程序之間相互協(xié)作,實(shí)現(xiàn)更高的隱蔽性。木馬協(xié)同隱藏技術(shù)擺脫了傳統(tǒng)隱藏技術(shù)僅靠單一木馬、單一技術(shù)的方式,它能夠從宏觀整體出發(fā),設(shè)計(jì)更加強(qiáng)大的木馬協(xié)作隱藏模型。
Harold Thimbleby等人[2]提出了木馬程序的模型框架;張新宇等人[3]對(duì)木馬協(xié)同隱藏思想進(jìn)行了形式化描述,并通過(guò)驗(yàn)證知,當(dāng)系統(tǒng)引入主木馬和各個(gè)子木馬時(shí),協(xié)同隱藏模型可以使系統(tǒng)發(fā)生變化,顯現(xiàn)出不一致的特點(diǎn),因此證明了引入相關(guān)多個(gè)子木馬程序協(xié)助主木馬程序?qū)崿F(xiàn)協(xié)同隱藏的可行性;梅登華等人[4]將Multi-Agent技術(shù)與木馬技術(shù)結(jié)合,提出了基于Multi-Agent的木馬技術(shù);康治平等人[5]在木馬協(xié)同隱藏模型的基礎(chǔ)上提出了基于多線程和多對(duì)多的結(jié)構(gòu)。
本文根據(jù)Harold Thimbleby等人對(duì)木馬協(xié)同隱藏的形式化描述,提出了一種基于動(dòng)態(tài)星型結(jié)構(gòu)的木馬協(xié)同隱藏模型。該結(jié)構(gòu)主要思想如下,在某個(gè)區(qū)域內(nèi)各個(gè)木馬之間選取某一木馬為主木馬,并將該主木馬作為代理,各個(gè)子木馬通過(guò)它和控制端完成通信。主木馬負(fù)責(zé)協(xié)調(diào)并控制子木馬實(shí)現(xiàn)協(xié)同隱藏,同時(shí)各個(gè)子木馬需實(shí)現(xiàn)相關(guān)隱藏功能,共同構(gòu)建協(xié)同隱藏模型。為了保持該模型結(jié)構(gòu)以及實(shí)現(xiàn)動(dòng)態(tài)變化的特點(diǎn),主木馬角色應(yīng)在一段時(shí)間后由不同的子木馬隨機(jī)擔(dān)任,如圖2。

圖2 星型結(jié)構(gòu)隱藏模型
例如在局域網(wǎng)中構(gòu)建該模型的實(shí)現(xiàn)過(guò)程是:將木馬程序植入局域網(wǎng)內(nèi)某一主機(jī),并且使該木馬程序擔(dān)任主木馬角色,利用系統(tǒng)漏洞向網(wǎng)內(nèi)其他主機(jī)傳播木馬程序,然后自動(dòng)構(gòu)建動(dòng)態(tài)星型結(jié)構(gòu)木馬模型。為了使該模型能成功實(shí)現(xiàn),還必須完成如下功能:
① 主木馬應(yīng)構(gòu)建一個(gè)狀態(tài)信息表,記錄區(qū)域內(nèi)各子木馬狀態(tài)信息;
② 主木馬協(xié)調(diào)各子木馬的隱藏功能,實(shí)時(shí)檢測(cè)子木馬狀態(tài),一旦發(fā)現(xiàn)某一子木馬消失,應(yīng)立即通過(guò)系統(tǒng)漏洞重新注入木馬程序[4];
③ 子木馬通過(guò)主木馬和控制端通信,如果發(fā)生中斷,如主木馬主機(jī)關(guān)機(jī)或者主木馬程序被清除等,各子木馬應(yīng)重新選取出主木馬,新選取的主木馬替換原來(lái)主木馬角色,重新構(gòu)建狀態(tài)信息表;
④ 木馬程序啟動(dòng)時(shí),應(yīng)主動(dòng)向網(wǎng)內(nèi)報(bào)告登記,如果該木馬發(fā)現(xiàn)自己是網(wǎng)內(nèi)第一個(gè)啟動(dòng)的木馬程序,其應(yīng)擔(dān)任主木馬角色;
⑤ 主木馬程序應(yīng)設(shè)置一個(gè)計(jì)數(shù)器,記錄其控制的子木馬數(shù)量,防止由于子木馬數(shù)量過(guò)多,通信量過(guò)大,影響系統(tǒng)性能。
為了進(jìn)一步提高木馬協(xié)同隱藏的能力,還可以將其他隱藏技術(shù)融合到該隱藏模型中,如各木馬之間利用ICMP協(xié)議通信,實(shí)現(xiàn)端口復(fù)用技術(shù)等。
木馬程序采用動(dòng)態(tài)星型結(jié)構(gòu)通信比采用普通方式通信具有更高的隱蔽性和生存周期。分析如下:
① 由于采用代理方式通信及動(dòng)態(tài)變換主木馬角色,使得通信源地址實(shí)時(shí)變化,增加了追查控制端IP地址的難度;
② 主木馬實(shí)時(shí)檢測(cè)子木馬狀態(tài),并傳播木馬程序,只要該模型結(jié)構(gòu)中存在一個(gè)木馬,就能夠構(gòu)建出完整的協(xié)同隱藏模型,從而增加了木馬程序的生存時(shí)間;
③ 模型結(jié)構(gòu)中的木馬程序融合了各種隱藏技術(shù)實(shí)現(xiàn)協(xié)同隱藏,增強(qiáng)了整體隱藏能力;
④ 具有較高的程序擴(kuò)展性,可以通過(guò)主木馬實(shí)時(shí)更新各子木馬功能模塊;
⑤ 主木馬之間可以繼續(xù)構(gòu)建該動(dòng)態(tài)星型結(jié)構(gòu)隱藏模型,實(shí)現(xiàn)多級(jí)化木馬隱藏模型。
該模型加強(qiáng)了木馬協(xié)同隱藏的能力,增加了木馬程序的生存時(shí)間,但也產(chǎn)生了一些相關(guān)問(wèn)題,如增加了木馬通信結(jié)構(gòu)的復(fù)雜度,降低了通信過(guò)程的穩(wěn)定性,增加了網(wǎng)內(nèi)控制信息,易造成網(wǎng)絡(luò)阻塞、癱瘓等。總之,木馬隱藏技術(shù)正朝著復(fù)合、協(xié)同的方向發(fā)展,各種問(wèn)題也會(huì)隨著技術(shù)的進(jìn)步逐步得以解決。
木馬隱藏技術(shù)研究是木馬程序研究的熱點(diǎn)問(wèn)題之一。本文針對(duì)木馬隱藏技術(shù)進(jìn)行了較全面的分析,給出了木馬程序隱藏、進(jìn)程隱藏、通信隱藏以及協(xié)同隱藏等技術(shù)原理。通過(guò)從單一木馬程序隱藏技術(shù)到多木馬程序隱藏技術(shù)的研究,展現(xiàn)了木馬程序隱藏的關(guān)鍵性思路轉(zhuǎn)變。通過(guò)對(duì)木馬隱藏技術(shù)的分析研究, 可以加深對(duì)木馬隱藏技術(shù)的認(rèn)識(shí), 提高木馬攻擊的防范意識(shí),從而進(jìn)一步把握木馬隱藏技術(shù)的發(fā)展方向,以至于開(kāi)發(fā)出更多針對(duì)木馬隱藏技術(shù)的反木馬工具。
[1] 張仁斌,李鋼,侯整風(fēng).計(jì)算機(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é)報(bào),2004,25(07):153-159.
[4] 梅登華,林耀通.基于 Multi-Agent的木馬模型設(shè)計(jì)[J].北京:電子技術(shù)應(yīng)用,2008,34(05):138-140.
[5] 康治平,向宏.特洛伊木馬隱藏技術(shù)研究及實(shí)踐[J].北京:計(jì)算機(jī)工程與應(yīng)用,2006,42(09):103-105.