張 茹,黃福鴻,劉建毅,祝 鋒
(北京郵電大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院, 北京 100876)(*通信作者電子郵箱937714569@qq.com)
木馬技術(shù)[1]一種常用的網(wǎng)絡(luò)攻擊技術(shù),由于其本身的技術(shù)優(yōu)勢及利益驅(qū)動得到了廣泛的應(yīng)用。木馬在滲透到受控端系統(tǒng)內(nèi)部后可以建立一個(gè)穩(wěn)固的內(nèi)部攻擊點(diǎn),為后續(xù)進(jìn)一步的攻擊提供一個(gè)暢通無阻的安全通道,再由里及外、內(nèi)外結(jié)合,往往可以收到更好的攻擊效果。隨著黑客技術(shù)不斷發(fā)展,新型木馬和變種木馬不斷涌現(xiàn),深入研究各式各樣的木馬才能相應(yīng)地進(jìn)行防御,對保障國家網(wǎng)絡(luò)安全具有重要意義[2]。從1986年第一個(gè)真正意義上的木馬誕生到現(xiàn)在,木馬不斷更新?lián)Q代,攻擊方式也發(fā)生了巨大的變化。最新的木馬研究已從惡意的木馬程序擴(kuò)展到基于集成電路的硬件木馬[3]研究,但比起已經(jīng)全面發(fā)展了多年的軟件木馬,硬件木馬尚處于起步階段。木馬表面形態(tài)千變?nèi)f化、各不相同,但總結(jié)其實(shí)質(zhì),所有木馬程序都包含三個(gè)階段:植入木馬、加載運(yùn)行木馬和數(shù)據(jù)回傳。
木馬植入是指利用各種途徑使木馬程序進(jìn)入到目標(biāo)主機(jī)。常用的植入手段有:社會工程學(xué)欺騙用戶下載執(zhí)行捆綁了木馬的正常文件;利用系統(tǒng)或者瀏覽器漏洞進(jìn)行網(wǎng)頁掛馬,從而下載木馬JS腳本進(jìn)行植入;將木馬程序偽裝成非可執(zhí)行文件圖標(biāo)。文獻(xiàn)[4]展示了一種在WMV格式的視頻媒體文件中嵌入惡意鏈接,當(dāng)播放此WMV格式視頻時(shí)鏈接到偽裝成DRM(Digital Rights Management)驗(yàn)證的第三方掛馬網(wǎng)站,從而實(shí)現(xiàn)種馬的方法。
第二個(gè)階段是運(yùn)行加載木馬程序,建立與目標(biāo)主機(jī)的通信通道和遠(yuǎn)程控制權(quán),延長木馬生命期。木馬程序需要對本身進(jìn)行偽裝或者隱藏,常見的運(yùn)行階段的木馬隱藏技術(shù)有:啟動隱藏、文件隱藏以及進(jìn)程隱藏。文獻(xiàn)[5]提出了一種巧妙的啟動隱藏方法:關(guān)機(jī)時(shí),修改注冊表中系統(tǒng)自動加載運(yùn)行項(xiàng),實(shí)現(xiàn)木馬開機(jī)啟動;開機(jī)時(shí),木馬程序啟動成功后則恢復(fù)修改。測試表明該方法可以避開注冊表監(jiān)視工具Regsn、RegShot等的檢測。新一代木馬已經(jīng)實(shí)現(xiàn)DLL模塊化和遠(yuǎn)程線程插入技術(shù),即利用進(jìn)程的線程調(diào)用函數(shù)LoadLibrary加載具有完整功能的DLL模塊,實(shí)現(xiàn)木馬植入[6-7]。
木馬千方百計(jì)隱藏自身盜取數(shù)據(jù)的目的在于回傳數(shù)據(jù)。數(shù)據(jù)回傳階段常常用到端口隱藏、隱蔽通信等隱藏技術(shù)。計(jì)算機(jī)的端口多達(dá)256×256個(gè),早期木馬植入后一般駐留在高端口。隨著端口復(fù)用技術(shù)的出現(xiàn),木馬程序利用系統(tǒng)已開放的常用端口如23、80端口實(shí)現(xiàn)通信[8]。有的木馬程序使用TCP/IP協(xié)議族中的其他協(xié)議如ICMP來進(jìn)行數(shù)據(jù)和命令傳輸,由于ICMP是IP層的協(xié)議,在傳輸數(shù)據(jù)時(shí)并不使用端口,隱蔽性能更好。反彈端口[9]是木馬等間諜軟件一種常用的通信隱蔽方式,相對于服務(wù)器端的防火墻而言,從內(nèi)向外發(fā)起的連接是不被防火墻監(jiān)聽的,可輕易穿透防火墻和避過入侵檢測系統(tǒng)等安全機(jī)制的檢測,具有很強(qiáng)的隱蔽性。除了反彈端口進(jìn)行隱蔽通信外,對通信信道進(jìn)行隱藏也可有效防止防火墻查殺,維持木馬通信周期。TCP/IP協(xié)議中Option域、傳輸數(shù)據(jù)時(shí)不常用的域、傳輸數(shù)據(jù)時(shí)強(qiáng)制填充的域等都可以用來建立隱蔽信道。
木馬程序通過各種隱藏手段隱匿在計(jì)算機(jī)之中盜取各種重要數(shù)據(jù),因此為了保護(hù)信息安全應(yīng)運(yùn)而生地出現(xiàn)了多種先進(jìn)的木馬檢測技術(shù)。兩種比較主流的木馬檢測技術(shù)有基于特征碼檢測技術(shù)和基于主機(jī)行為的主動防御技術(shù)。
基于特征碼檢測技術(shù)[10]通常是對木馬程序的特征碼進(jìn)行掃描提取,并對比匹配病毒庫中已有的木馬特征碼,以此判斷文件是否為木馬。基于特征碼檢測技術(shù)目前應(yīng)用最為廣泛、實(shí)用,對已知惡意代碼檢測準(zhǔn)確度非常高;然而它無法檢測出新品種木馬,具有嚴(yán)重滯后性,其檢測能力受到了新的挑戰(zhàn)。
木馬程序通常有異于正常程序的危險(xiǎn)行為,如對注冊表鍵值的修改、遠(yuǎn)程進(jìn)程的注入、特定API函數(shù)的調(diào)用等?;谥鳈C(jī)行為的主動防御技術(shù)[11-12]正是以程序的行為作為判斷的關(guān)鍵依據(jù),通過實(shí)時(shí)監(jiān)控程序的行為、檢測程序的異常行為進(jìn)而發(fā)現(xiàn)隱蔽在系統(tǒng)中的木馬。文獻(xiàn)[13]通過分析注冊表修改、文件系統(tǒng)修改、端口啟動、進(jìn)程創(chuàng)建、系統(tǒng)服務(wù)修改以及鍵盤記錄、屏幕捕獲等行為特征,結(jié)合啟發(fā)式檢測技術(shù)來檢測以上行為是否為木馬程序的行為。該方法的缺點(diǎn)是會把未知的操作列為非法操作,導(dǎo)致誤報(bào)率較高;而且實(shí)時(shí)監(jiān)控文件操作、注冊表更改會大量消耗系統(tǒng)資源,引起計(jì)算機(jī)卡頓,影響其他程序的正常運(yùn)行。
社交網(wǎng)絡(luò)[14]具有用戶數(shù)量眾多、媒介多元化、大數(shù)據(jù)量、信息開放的特點(diǎn),這為木馬病毒等惡意代碼傳播提供了新途徑。信息隱藏作為主要的安全通信手段,在隱私保護(hù)中發(fā)揮了重要作用[15-16]。近年來,隱藏載體的研究從主流圖像文件等擴(kuò)展到網(wǎng)絡(luò)上常見的音頻、視頻、文本等主流多媒體文件[17]。文獻(xiàn)[18]利用漢字的數(shù)學(xué)表達(dá)式,提出一種無載體的文本信息隱藏方法;周琳娜等[19]概述了近年來基于二值圖像的信息隱藏研究成果, 并對研究成果的魯棒性和隱藏容量等問題作了簡要的比較與總結(jié);文獻(xiàn)[20]利用廣播信道中包含的大量音頻信息,提出了一種時(shí)頻調(diào)制的音頻信息隱藏算法,在經(jīng)過FM廣播信道后可保持96%以上的信息恢復(fù)率。視頻信息隱藏尚處于初級階段,經(jīng)典的視頻隱藏算法是邊界匹配法。文獻(xiàn)[21]采用直方圖平移技術(shù)將每個(gè)宏塊的運(yùn)動矢量嵌入到相鄰宏塊的量化離散余弦變換(Discrete Cosine Transform, DCT)系數(shù)中,克服了最低有效位(Least Significant Bit, LSB)替換技術(shù)對載體宏塊的解碼重構(gòu)質(zhì)量造成的不可逆損失,實(shí)現(xiàn)了可逆信息隱藏。新的網(wǎng)絡(luò)壞境下,信息隱藏的形態(tài)不斷發(fā)生變化,出現(xiàn)了適用于特定載體類型的半構(gòu)造式信息隱藏、完全構(gòu)造式信息隱藏和行為信息隱藏的基本形式。代表性隱藏方法有紋理合成信息隱藏、Marbling信息隱藏和指紋構(gòu)造信息隱藏等[22]。
當(dāng)前社交網(wǎng)絡(luò)影響并改變了互聯(lián)網(wǎng)的通信結(jié)構(gòu),信息傳播從C/S架構(gòu)一家獨(dú)大轉(zhuǎn)向C/S、B/S、P2P架構(gòu)共存。P2P通信網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)都是對等的,沒有傳統(tǒng)的服務(wù)器與客戶端的角色,極大地提高了網(wǎng)絡(luò)的隱蔽性及可擴(kuò)展性。風(fēng)靡全球的即時(shí)通信應(yīng)用如MSN Message、微信、QQ等大量采用了P2P技術(shù),用戶可以在線實(shí)時(shí)交流語音、文本、視頻、圖像等多媒體數(shù)據(jù)。無孔不入的黑客極可能利用信息隱藏技術(shù)在多媒體數(shù)據(jù)中植入木馬進(jìn)行海量傳播,從而為隱私泄露提供新的載體和途徑。
現(xiàn)有的基于圖片的木馬攻擊如Stegosploit,Graftor木馬等,僅是利用圖片來掛載相應(yīng)的木馬程序或惡意DLL,在注入木馬時(shí)直接將惡意代碼注入圖片中,并未用到信息隱藏技術(shù),很容易被檢測到木馬特征,在穿透審計(jì)的能力上明顯不足。其他利用了信息隱藏技術(shù)的木馬如Stegoloader,將木馬隱寫在圖片中,待系統(tǒng)檢測木馬結(jié)束后再進(jìn)行釋放。該方法需要依靠惡意程序的傳播,僅僅將信息隱藏在隱藏木馬時(shí)使用,而在木馬運(yùn)行后數(shù)據(jù)的回傳與傳統(tǒng)木馬回傳數(shù)據(jù)的方式類似,依然無法有效地穿透審計(jì)。這些木馬工具采用的都是端對端的C/S架構(gòu)通信,受害目標(biāo)和黑客之間直接相連,且回傳的信息都是公開的,易暴露傳輸內(nèi)容并被取證,控制端容易被溯源。因此,本文提出了一種利用信息隱藏來同時(shí)保護(hù)木馬注入和信息回傳的方法。借助隱寫術(shù)將木馬程序隱藏到圖像中,以一種非可執(zhí)行文件的形式突破現(xiàn)有防火墻的攔截入侵到目標(biāo)主機(jī);滲透成功后,盜取的數(shù)據(jù)同樣采用信息隱藏算法隱藏到JPEG載體圖像。本文的木馬并不主動進(jìn)行端對端回傳數(shù)據(jù),而是建立在木馬集成的自動發(fā)博客腳本將載密多媒體文件上傳至社交網(wǎng)絡(luò)的基礎(chǔ)上,同時(shí)社交應(yīng)用使用頻繁的受害者也較大可能主動外傳數(shù)據(jù)。攻擊者與受害者不存在直接的通信連接,利用了隱寫術(shù)的特點(diǎn)來隱藏整個(gè)通信過程。因此實(shí)現(xiàn)了對目標(biāo)用戶、指定數(shù)據(jù)進(jìn)行數(shù)據(jù)采集和盜取的一種隱蔽性更好、透明性更高的,防追蹤性能更好的信息盜取方案。同時(shí),本文利用的JPEG圖像隱藏算法,不僅嵌入量較大,同時(shí)通信也較隱蔽,具有一定的抗取證作用,能降低木馬通信暴露的機(jī)率。
JPEG圖像是一種在網(wǎng)絡(luò)圖像傳送過程中流行且被廣泛使用的圖像文件格式,也是信息隱藏算法最實(shí)用的隱寫載體之一。JPEG圖像隱寫方案一般是將信息嵌入到載體圖像的DCT系數(shù)上。典型JPEG圖像隱寫算法有Jsteg、F5、OutGuess、MME等[23-25]。
STC(Syndrome-Trellis Codes)框架使圖像信息隱藏研究大為改觀,目前主流信息隱藏方法大都是利用STC編碼并合理設(shè)計(jì)失真函數(shù),保證對載體的改變量最小[26-27]。文獻(xiàn)[28]結(jié)合STC編碼并據(jù)DCT系數(shù)大小關(guān)系設(shè)計(jì)失真函數(shù),設(shè)計(jì)了使用nsF5修改方式的單層嵌入方法以及使用加減一修改方式的雙層嵌入方法,實(shí)驗(yàn)表明,單層嵌入方法安全性比nsF5高,雙層嵌入方法比nsF5抵抗檢測的能力更強(qiáng)。JPEG圖像格式采用的是有損壓縮,質(zhì)量因子不同時(shí)圖像顯示出的效果會有差異,攻擊者難以判斷圖像中的異常是較低的質(zhì)量因子還是嵌入隱藏信息所導(dǎo)致,不易引起懷疑。
私鑰隱寫系統(tǒng)是借用密碼學(xué)技術(shù)對秘密信息先加密、再隱藏。其定義如下,對于一個(gè)六元組:
Σ=〈C,M,K,S,DK,EK〉
(1)
其中:C是所有可能載體對象的集合,M是所有可能秘密消息的集合,K是所有可能密鑰的集合。嵌入函數(shù)是:
EK:C×M×K→S
(2)
提取函數(shù)是:
DK:S×K→M
(3)
若滿足性質(zhì):對所有m∈M,c∈C和k∈K,恒有:DK(EK(c,m,k),k)=m,則稱該六元組為私鑰隱寫系統(tǒng)。本文使用混沌序列實(shí)現(xiàn)私鑰隱寫系統(tǒng)。Logistic混沌映射源于人口統(tǒng)計(jì)的動力學(xué)系統(tǒng),其系統(tǒng)方程如下:
Xk+1=μ*xk(1-xk)
(4)
可以看出此系統(tǒng)方程為非線性迭代形式,當(dāng)3.569 94<μ<4且0 En=Mn⊕Xn (5) 其中:Mn為明文序列,Xn為混沌序列,En為密文序列。 JPEG圖像大容量隱寫算法主要包括兩部分:JPEG圖像隱寫算法和JPEG圖像提取算法部分。基于JPEG圖像大容量隱寫算法包括四個(gè)模塊: JPEG圖像解碼模塊、秘密信息讀取模塊、隱寫模塊和載密JPEG圖像文件生成模塊。具體模塊關(guān)系如圖1所示。 圖1 JPEG圖像嵌入算法模塊 JPEG文件解碼模塊首先讀取M*N大小的JPEG圖片文件,調(diào)用libjpeg庫的接口函數(shù)讀取量化后的DCT系數(shù),并將讀取的DCT系數(shù)存儲在臨時(shí)文件中,核心函數(shù)如下: 1)void jpeg_create_decompress(&srcinfo) 功能描述:初始化解碼對象。 輸入?yún)?shù):srcinfo表示JPEG解碼結(jié)構(gòu)體。輸出參數(shù):無。 2)void jpeg_stdio_src(&srcinfo, input_file) 功能描述:初始化源數(shù)據(jù)。 輸入?yún)?shù):srcinfo表示JPEG解碼結(jié)構(gòu)體;input_file表示待解碼文件指針。輸出參數(shù):無。 3)void jpeg_read_header(&srcinfo, TRUE) 功能描述:讀取jpeg文件的頭信息 輸入?yún)?shù):srcinfo表示JPEG解碼結(jié)構(gòu)體;TRUE表是否需要圖片。輸出參數(shù):無 4)(jvirt_barray_ptr *) jpeg_read_coefficients(&srcinfo) 函數(shù)名:jpeg_read_coefficients 功能描述:讀取圖片DCT系數(shù)。 輸入?yún)?shù):srcinfo表示JPEG解碼結(jié)構(gòu)體。輸出參數(shù):結(jié)構(gòu)體指針。 秘密信息讀取模塊讀取到DCT塊的個(gè)數(shù)為NDCT=?M/8」*?N/8」,進(jìn)而確定圖像隱藏容量與待嵌入的秘密信息相比,判斷其大小是否可以實(shí)現(xiàn)隱藏。秘密信息長度嵌入到圖片DCT系數(shù)的LSB中,圖片的前64個(gè)字節(jié)用于隱藏秘密信息長度,在提取秘密信息時(shí)可以正確得到秘密信息的大小。 隱寫模塊將掃描秘密信息以確定隱藏秘密信息中的哪個(gè)字節(jié)的哪個(gè)比特位,然后利用偽隨機(jī)數(shù)生成器生成隨機(jī)數(shù)來確定對哪個(gè)位置的DCT系數(shù)進(jìn)行嵌入,最后將秘密信息的比特位替換該DCT系數(shù)的最低比特位以完成秘密信息的嵌入,核心函數(shù)如下: 1)void setRangeAndSeed(unsigned long seed_1,unsigned long range_1) 功能描述:通過用戶輸入密碼作為種子,各分組DCT數(shù)作為隨機(jī)數(shù)產(chǎn)生范圍,得到隨機(jī)數(shù)確定DCT系數(shù)嵌入位置。 輸入?yún)?shù):seed_1表示隨機(jī)數(shù)產(chǎn)生數(shù)種子,這里將用戶輸入密碼作為種子;range_1表示隨機(jī)數(shù)產(chǎn)生范圍,這里為將DCT系數(shù)分組后,每組中DCT系數(shù)的數(shù)量;輸出參數(shù):無。 2)unsigned long nextRandom() 功能描述:前一次產(chǎn)生的偽隨機(jī)數(shù)作為參數(shù)輸入到該函數(shù),產(chǎn)生另一個(gè)隨機(jī)數(shù)。 輸入?yún)?shù):class RandomGenerator中的變量。輸出參數(shù):偽隨機(jī)數(shù)。 3)int getBitNo (bitno) 功能描述:通過掃描秘密文件,確定隱藏哪個(gè)字節(jié)的哪個(gè)比特位,并且返回該比特位的值。 輸入?yún)?shù):bitno表示對應(yīng)秘密文件的比特?cái)?shù)。輸出參數(shù):要隱藏秘密信息的比特位值。 載密JPEG圖像生成模塊的主要功能是將被替換的DCT系數(shù)隱寫成載密JPEG圖像文件,其主要函數(shù)如下: 1)void jpeg_create_compress(&dstinfo) 功能描述:分配和初始化jpeg壓縮對象。 輸入?yún)?shù):dstinfo表示jpeg壓縮結(jié)構(gòu)體。輸出參數(shù):無。 2)void jpeg_write_coefficients(&dstinfo,src_coef_arrays) 功能描述:分配和初始化jpeg壓縮對象。 輸入?yún)?shù):dstinfo表示jpeg壓縮結(jié)構(gòu)體;src_coef_arrays表示替換后的DCT系數(shù)。輸出參數(shù):無。 基于JPEG提取算法包括兩個(gè)模塊:JPEG圖片解碼模塊和秘密信息提取模塊。具體模塊關(guān)系如圖2所示。 圖2 JPEG圖像提取算法模塊 JPEG文件解碼模塊首先讀取JPEG圖片文件,調(diào)用libjpeg庫的接口函數(shù)讀取量化后的DCT系數(shù),并將讀取的DCT系數(shù)存儲在臨時(shí)文件中,主要函數(shù)見1.2.2節(jié)的JPEG隱寫算法介紹。秘密信息提取模塊通過讀取載密圖像前64個(gè)字節(jié)DCT系數(shù)的最低比特位得到秘密信息文件的長度,并且通過偽隨機(jī)數(shù)產(chǎn)生器確定提取信息的位置,將該位置處的DCT系數(shù)的最低比特位提取出來寫入文件生成秘密信息文件,核心函數(shù)如下: 函數(shù)名:int putBitNo(int n,int value)。 功能描述:將載密DCT系數(shù)中提取出的秘密信息比特寫入文件。 輸入?yún)?shù):n表示對應(yīng)秘密文件的比特?cái)?shù);value表示載密DCT系數(shù)提取出的秘密信息比特。輸出參數(shù):載密DCT系數(shù)提取出的秘密信息比特。 本文的信息隱藏算法是基于JPEG圖像的DCT變換域設(shè)計(jì)的LSB隱寫算法,不需要對JPEG圖像進(jìn)行深度解碼,計(jì)算復(fù)雜度低。為對比隱寫前后的載體圖像的相似程度,客觀評價(jià)標(biāo)準(zhǔn)以峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)為衡量,計(jì)算公式如下。 具體測試數(shù)據(jù)見表1,本文算法的PSNR值均高于文獻(xiàn)[29]的經(jīng)典隱藏算法,同時(shí)均不小于40 dB,高于理想圖像視覺質(zhì)量要求的40 dB。從人眼視覺效果上看,兩種圖像沒有明顯區(qū)別,不可感知性好。同時(shí)本文算法在保證不影響載體質(zhì)量的前提下,嵌入容量大。以600×800像素、垂直水平采樣因子為(1∶1∶1)的圖片為例,圖片解碼后量化后的DCT系數(shù)的個(gè)數(shù)為100×75×64×3,理想情況下每個(gè)DCT系數(shù)都可隱藏?cái)?shù)據(jù),最大的嵌入容量為100×75×64×3/8/1024,約為175 KB。由于滿嵌時(shí)不可感知性下降,實(shí)驗(yàn)過程中,嵌入容量約為50 KB(約為有效數(shù)據(jù)的30%)時(shí)可保證不可感知性,因此本文算法具有透明性好、隱藏容量較大等優(yōu)點(diǎn)。通過stegodetect軟件對隱寫后的圖片進(jìn)行隱寫檢測,檢出率約為3%,實(shí)驗(yàn)驗(yàn)證可以抵抗結(jié)構(gòu)檢測和掛接檢測,有實(shí)用價(jià)值,可用于滿足于本文設(shè)計(jì)的木馬程序隱蔽通信。 表1 對比算法針對不同載密圖像在不同信息嵌入量下的PSNR比較 基于信息隱藏的木馬通信模型的示意圖如圖3所示:木馬攻擊方使用信息隱藏算法將木馬程序隱寫到JPEG圖像中,并上傳到網(wǎng)絡(luò)Web服務(wù)器;用戶使用社交網(wǎng)絡(luò)時(shí)被誘使點(diǎn)擊掛馬網(wǎng)頁,隱藏有木馬程序的圖像和木馬提取程序被投放到主機(jī);一旦提取程序得以運(yùn)行,木馬被提取釋放到主機(jī)并進(jìn)行一系列的隱藏自身操作之后開始上線工作。木馬盜取的用戶私密數(shù)據(jù)仍然使用信息隱藏算法隱寫到圖像文件中,木馬集成的自動發(fā)博客腳本將載密多媒體文件上傳至社交網(wǎng)絡(luò);同時(shí)受害者也較大概率將此類隱寫了私人信息的照片通過社交網(wǎng)絡(luò)如QQ分享給其他眾多好友,受害者與好友都十分可能上傳照片到公開的微信朋友圈、微博等,這無疑加大了泄密的可能性。黑客通過公開渠道獲取載密圖像提取出秘密信息。 圖3 基于信息隱藏的木馬通信模型 結(jié)合信息隱藏技術(shù)和木馬技術(shù)各自的特點(diǎn),以實(shí)現(xiàn)數(shù)據(jù)采集為目的,發(fā)揮信息隱藏技術(shù)透明性高、不易被防火墻攔截的特點(diǎn),設(shè)計(jì)了基于信息隱藏的木馬軟件。圖4展示了完整的基于信息隱藏的木馬通信模型的工作流程。 圖4 基于信息隱藏的木馬通信模型的流程 具體實(shí)現(xiàn)過程如下: 1)木馬預(yù)處理:將木馬DLL程序采用一維混沌加密算法加密成密文,混沌系統(tǒng)參數(shù)作為密鑰。采用信息隱藏算法將保存所有木馬功能的DLL文件植入到JPEG圖片中,嵌入隱藏的DLL文件后,JPEG圖片的外觀和功能保持不變。 2)誘導(dǎo)及植入木馬:將嵌入了木馬DLL程序的載體圖像上傳到搭建好的Web服務(wù)器,同時(shí)木馬提取程序的可執(zhí)行文件、可執(zhí)行木馬注入程序以普通文件格式上傳到Web服務(wù)器;誘導(dǎo)用戶訪問Web服務(wù)器對應(yīng)的掛馬網(wǎng)站,相關(guān)文件被下載到用戶主機(jī)。 3)木馬文件隱藏:木馬程序從帶有木馬的網(wǎng)站下載在到本地后,將會在本地存在兩個(gè)文件:一個(gè)可執(zhí)行文件用于木馬功能模塊的啟動,一個(gè)DLL文件保存有所有的木馬功能。將這兩個(gè)文件隱藏起來,可以大大增加木馬的潛伏性和生存期。文件的隱藏方式有多種,本文采用靈活輕便的更改文件屬性加修改注冊表的方式實(shí)現(xiàn)文件的隱藏。Windows操作系統(tǒng)中存在大量的支持系統(tǒng)運(yùn)行的文件,通常情況下,用戶很少查看和修改這些文件,系統(tǒng)默認(rèn)將這些文件設(shè)置為隱藏屬性并設(shè)置為不顯示隱藏文件。利用這個(gè)系統(tǒng)的默認(rèn)特性,將木馬的兩個(gè)文件設(shè)置為隱藏屬性,并修改注冊表項(xiàng):HKEY_LOCAL_MACHINESoftwareMicrosoftwindowsCurrentVersio-nexplorerAdvancedFolderHiddenSHOWALL的checkvalue鍵值便可以達(dá)到隱藏文件的目的。 4)木馬激活:瀏覽器調(diào)用js腳本將木馬提取程序運(yùn)行,之后根據(jù)嵌入位置等參數(shù)使用信息隱藏提取算法得到DLL文件并注入到正常的進(jìn)程之中。本文選取遠(yuǎn)程線程注入的方法來實(shí)現(xiàn)隱藏進(jìn)程。遠(yuǎn)程線程注入技術(shù)是通過特殊的內(nèi)核編程手段,打破進(jìn)程的界限來訪問另一個(gè)進(jìn)程的地址空間。在指定的進(jìn)程中創(chuàng)建一個(gè)遠(yuǎn)程線程,該線程可以訪問進(jìn)程的地址空間,在已有進(jìn)程的內(nèi)存空間里加載DLL文件。DLL并非可執(zhí)行文件,只有通過進(jìn)程調(diào)用才能夠啟用,所以進(jìn)程列表中不會出現(xiàn)DLL的痕跡,不容易被發(fā)現(xiàn)。 線程注入過程的原理是采用Win32 API函數(shù)WriteProcessMemory和CreateRemoteThread將DLL的代碼直接復(fù)制到遠(yuǎn)程進(jìn)程空間,并用CreateRemoteThread執(zhí)行它。CreateRemoteThread函數(shù)建立一個(gè)遠(yuǎn)程線程,調(diào)用LoadLibrary函數(shù)來加載指定的DLL。CreateRemoteThread函數(shù)使用方法如下: 功能描述:建立遠(yuǎn)程線程。 輸入?yún)?shù):THandle表示遠(yuǎn)程進(jìn)程的句柄;Pointer表示線程安全描述字;DWORD表示線程棧大小,以字節(jié)表示;TFNThreadStartRoutine表示一個(gè)TFNThreadStartRoutine類型的指針,指向在遠(yuǎn)程進(jìn)程中執(zhí)行的函數(shù)地址;Pointer表示傳入?yún)?shù)的指針;DWORD表示創(chuàng)建線程的其他標(biāo)志。輸出參數(shù):無。 在Windows系統(tǒng)下,每個(gè)進(jìn)程都擁有自己的地址空間,各個(gè)進(jìn)程之間都是相互獨(dú)立的,要在遠(yuǎn)程進(jìn)程的內(nèi)存空間里申請一塊內(nèi)存空間寫入需要注入的DLL的路徑,需要用到的API函數(shù)有: ①OpenProcess,功能是打開目標(biāo)進(jìn)程,得到目標(biāo)進(jìn)程的操作權(quán)限; ②VirtualAllocEx,功能是用于在目標(biāo)進(jìn)程內(nèi)存空間中申請內(nèi)存空間以寫入DLL的文件名; ③WriteProcessMemory,功能是往申請到的空間中寫入DLL的文件名。 有了以上介紹的關(guān)鍵Windows API函數(shù),通過以下流程即可實(shí)現(xiàn)遠(yuǎn)程線程注入: ①調(diào)整權(quán)限,使程序可以訪問其他進(jìn)程的內(nèi)存空間(EnableDebugPriv); ②得到遠(yuǎn)程進(jìn)程的HANDLE(OpenProcess); ③在遠(yuǎn)程進(jìn)程中為要注入的數(shù)據(jù)分配內(nèi)存(VirtualAllocEx); ④將注入DLL復(fù)制到本進(jìn)程,實(shí)現(xiàn)函數(shù)DLL裝載過程(MapInjectFile); ⑤把DLL資源復(fù)制到分配的內(nèi)存中(WriteProcessMemory); ⑥用CreateRemoteThread啟動遠(yuǎn)程的線程。 實(shí)現(xiàn)線程注入后,木馬程序訪問系統(tǒng)注冊表,修改系統(tǒng)啟動加載項(xiàng),將木馬程序的路徑和名稱添加到啟動自動運(yùn)行程序的列表中。用戶下次啟動系統(tǒng)時(shí)將啟動加載項(xiàng)列表,木馬程序?qū)⒆詣舆\(yùn)行,此時(shí)木馬程序就完成了植入過程。 5)數(shù)據(jù)獲取及回傳:木馬程序每次都隨系統(tǒng)自動運(yùn)行,不斷通過后臺進(jìn)程獲取本地文檔和數(shù)據(jù),隨后利用大容量信息隱藏算法將這些分片數(shù)據(jù)隱藏到圖片中,接著運(yùn)行自動發(fā)微博功能將載體圖像上傳至社交網(wǎng)絡(luò);攻擊者從公開的社交網(wǎng)絡(luò)渠道獲取載密圖像,使用隱藏信息提取算法還原秘密數(shù)據(jù),最終實(shí)現(xiàn)文件和數(shù)據(jù)信息回傳到木馬控制端。 木馬程序運(yùn)行在Windows XP操作系統(tǒng)下,使用一臺計(jì)算機(jī)運(yùn)行Tomcat搭建輕量級掛馬網(wǎng)頁服務(wù)器,控制端程序運(yùn)行在Windows XP、Windows 7操作系統(tǒng)下均可。各個(gè)工具及網(wǎng)絡(luò)的部署關(guān)系如圖5所示。 圖5 網(wǎng)絡(luò)環(huán)境部署 測試分三步執(zhí)行:先在局域網(wǎng)中部署一個(gè)小型網(wǎng)站作為掛馬網(wǎng)站,并上載隱藏了木馬的JPEG圖像等資源文件,用戶打開掛馬網(wǎng)站的鏈接,模擬實(shí)現(xiàn)掛馬過程以真實(shí)反映互聯(lián)網(wǎng)中的網(wǎng)頁掛馬的攻擊方式;木馬程序在目標(biāo)機(jī)器中啟動后自動掃描目標(biāo)文件夾下的秘密數(shù)據(jù),本文以DOC文件為測試文件,在本地使用JPEG隱藏算法將秘密數(shù)據(jù)隱寫到JPEG圖像文件中,通過社交網(wǎng)絡(luò)回傳至控制端;最后控制端發(fā)現(xiàn)木馬上線并接收數(shù)據(jù)(控制端界面如圖6),然后進(jìn)行數(shù)據(jù)的提取、恢復(fù)。 圖6 木馬控制端界面 木馬程序總文件大小為36 kb,inject.exe是啟動程序,troDLL主功能模塊大小148 kb。在分別安裝360殺毒、360安全衛(wèi)士、金山衛(wèi)士和騰訊電腦管家殺毒軟件情況下,除360殺毒、360安全衛(wèi)士外,其他軟件沒有對程序報(bào)警和攔截、控制端程序可收到木馬主機(jī)的IP地址,說明木馬程序可在金山衛(wèi)士和騰訊電腦管家相應(yīng)版本下實(shí)現(xiàn)免殺功能并成功運(yùn)行。查看主機(jī)注冊表信息,無明顯帶有“inject”字樣的注冊表項(xiàng);查看系統(tǒng)C盤、D盤、system32文件夾,沒有查看到木馬程序的文件;使用任務(wù)管理器查看系統(tǒng)運(yùn)行中的進(jìn)程,沒有查看到木馬進(jìn)程。如圖7所示,觀察木馬運(yùn)行整個(gè)過程中CPU利用率波動情況,沒有觀察到持續(xù)性超過30%。 本文提出的新型木馬在植入與加載階段運(yùn)用了典型木馬技術(shù),因此在引言中提到的已有成熟的木馬檢技術(shù)如基于動態(tài)行為、靜態(tài)特征相結(jié)合的木馬檢測方法在一定程度上能夠識別本文木馬的抗檢測對抗技術(shù)。然而本文的新型木馬有效地利用了隱寫術(shù)的特點(diǎn)來隱藏整個(gè)通信過程,現(xiàn)有的基于木馬回傳階段的如端口檢測、過濾分析網(wǎng)絡(luò)通信流量監(jiān)測等機(jī)制無法識別到這樣的通信渠道。計(jì)算機(jī)自身對信息管理本質(zhì)上是完全不設(shè)防的,無論是用戶還是木馬都可以擁有絕大多數(shù)文件的讀寫復(fù)制等訪問權(quán)限,本文的木馬就是通過掃描用戶的私人多媒體數(shù)據(jù),從而給了木馬可乘之機(jī)。因此,對多媒體文件、文件夾進(jìn)行加密、設(shè)置讀寫權(quán)限等是一個(gè)有效防范方法,可以在一定程度上降低本文的木馬對數(shù)據(jù)進(jìn)行盜取的機(jī)率。 圖7 木馬運(yùn)行過程CPU利用率波動圖 以往的木馬通常采用端對端的通信方式,受害目標(biāo)和黑客之間直接相連,且回傳的信息都是公開的,易暴露傳輸內(nèi)容,控制端容易被溯源。本文結(jié)合信息隱藏技術(shù)與木馬技術(shù)兩者的優(yōu)勢設(shè)計(jì)了一種基于信息隱藏的木馬植入途徑。該方法以JPEG圖像為載體進(jìn)行信息隱藏,實(shí)驗(yàn)結(jié)果顯示該方式具有較大的隱藏容量,而且保持了良好的透明性;將木馬技術(shù)與信息隱藏技術(shù)相結(jié)合,將木馬程序隱寫到JPEG圖像中進(jìn)行投放,以一種非可執(zhí)行文件的形式突破現(xiàn)有防火墻的攔截入侵到目標(biāo)主機(jī),木馬盜取的數(shù)據(jù)經(jīng)過加密后隱藏到多媒體圖像當(dāng)中,能提高木馬抗取證性能;新型木馬有效地利用了信息隱藏技術(shù)的優(yōu)勢來盜取數(shù)據(jù),并通過社交網(wǎng)絡(luò)多媒體共享行為實(shí)現(xiàn)木馬程序隱蔽通信,使木馬具有相當(dāng)好的通信隱蔽性與防追蹤性能,能有效對抗已有的木馬檢測技術(shù);最后通過分析指出,在社交網(wǎng)絡(luò)如微信、QQ等即時(shí)通信中,如果此類型木馬被利用,則可能造成用戶隱私泄露,并提出了一些檢測防范思路,以便更好地防范木馬的滲透和攻擊。1.2.2 JPEG圖像嵌入算法
1.2.3 JPEG圖像提取算法
1.3 算法性能分析
2 基于信息隱藏的木馬通信模型
2.1 通信模型流程
2.2 通信模型實(shí)現(xiàn)
3 實(shí)驗(yàn)與分析
3.1 實(shí)驗(yàn)
3.2 測試結(jié)果及性能分析
3.3 新型木馬的檢測和防范方法分析
4 結(jié)語