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