李程瑜 齊玉東 孫明瑋 丁海強(qiáng)
(海軍航空工程學(xué)院 煙臺(tái) 264001)
隨著計(jì)算機(jī)、網(wǎng)絡(luò)、信息等技術(shù)的飛速發(fā)展,人類社會(huì)已經(jīng)進(jìn)入信息化時(shí)代。信息化帶給人們極大便捷的同時(shí),也帶來了隱私泄露等信息安全問題,其中惡意代碼對信息安全構(gòu)成的威脅最為嚴(yán)重。惡意代碼指故意編制或設(shè)置的、對網(wǎng)絡(luò)或系統(tǒng)會(huì)產(chǎn)生威脅或潛在威脅的計(jì)算機(jī)代碼。隨著網(wǎng)絡(luò)技術(shù)高速發(fā)展,惡意代碼[1]傳播方式也在迅速地演化,從引導(dǎo)區(qū)傳播,到郵件傳播、網(wǎng)絡(luò)傳播,發(fā)作和流行時(shí)間越來越短。然而相比于惡意代碼的發(fā)展,解決惡意代碼問題的技術(shù)手段缺乏實(shí)時(shí)性和敏銳性。為解決這一問題以及更好地了解惡意代碼的行為,本文提出了綜合性的惡意代碼行為分析平臺(tái)。
惡意代碼(惡意代碼是對病毒、木馬、蠕蟲以及僵尸程序等的統(tǒng)稱,在本文中暫只考慮Windows平臺(tái)下的惡意代碼)是黑客們實(shí)施入侵、維持入侵的基礎(chǔ)。傳統(tǒng)研究人員通過對惡意代碼進(jìn)行反匯編,在匯編代碼層次上,對惡意代碼展開詳細(xì)分析。但這有兩個(gè)前提條件:一是具備深厚的匯編技術(shù)基礎(chǔ);二是分析效率要足以應(yīng)付惡意代碼的不斷更新和變異。但在惡意代碼普遍加殼、變種不斷涌現(xiàn)的情況下,上述兩個(gè)條件都很難滿足。
自動(dòng)惡意代碼行為分析方法[2]提供了一種新的視角來分析惡意代碼,它不再對惡意代碼本身實(shí)行靜態(tài)解析,而是讓惡意代碼運(yùn)行在一個(gè)可控環(huán)境中,通過對惡意代碼所觸發(fā)的行為[3]來認(rèn)識惡意代碼。更為重要的是,這種分析可在無人工干預(yù)的情況下自動(dòng)化進(jìn)行,通稱這種可控的環(huán)境為沙箱[4](Sandbox)。類似的系統(tǒng)有:CWSandbox Anubis、Norman、ThreatExpert等。但這些系統(tǒng)只提供單個(gè)惡意代碼的分析功能[5],對惡意代碼的大小、類型具有限制。經(jīng)研究,由于部分沙箱工具沒有解釋其實(shí)現(xiàn)原理和技術(shù)框架,在對P2P僵尸程序樣本進(jìn)行分析時(shí),很多工具并不能有效提供分析報(bào)告。同時(shí),研究者也不可能有耐心使用瀏覽器完成數(shù)百上千次惡意代碼的提交,并在郵箱中等待報(bào)告。這些系統(tǒng)并沒有提供源代碼或者安裝程序來實(shí)現(xiàn)自行部署,故需要一種替代方案基于本地,自行部署惡意代碼行為分析系統(tǒng),并根據(jù)需求隨時(shí)調(diào)整分析過程。
最早由Raymond W.Lo提出針對惡意代碼的靜態(tài)代碼檢測方法[6]:通過提取惡意代碼靜態(tài)代碼中帶有惡意行為趨向的標(biāo)示來檢測其他樣本。該方法被Christodorescu、Preda等擴(kuò)展為基于語義的惡意代碼檢測方法[7]。與此相反的是,Szor、Popov等提出利用混淆(obfuscation)技術(shù)[8]來應(yīng)對靜態(tài)代碼檢測的方法已在目前惡意代碼發(fā)展中得到不斷深入應(yīng)用,惡意代碼加殼和加密均屬其常見類別。Royal,Martignoni等為了解決加殼帶來的阻礙,通過一種半動(dòng)態(tài)半靜態(tài)方法執(zhí)行分析。其基本思想在于將惡意代碼進(jìn)行動(dòng)態(tài)調(diào)試執(zhí)行,當(dāng)樣本執(zhí)行到完成外殼步驟時(shí),開始對惡意代碼進(jìn)行靜態(tài)分析,繞開復(fù)雜脫殼工作。盡管這些方法構(gòu)造精巧,但靜態(tài)分析的效率和健壯性問題仍不能得到有效解決。故基于惡意代碼行為的動(dòng)態(tài)分析方法開始涌現(xiàn),“代碼可隱,行為難隱”成為其基本前提。
先 后 出 現(xiàn) 的 Anubis,BitBlaze,Norman,CWSandbox等沙盒系統(tǒng),均可將惡意代碼執(zhí)行在精心構(gòu)造的虛擬環(huán)境中,通過技術(shù)手段獲取惡意代碼行為蹤跡。但CWSandbox等以網(wǎng)頁形式應(yīng)用且不開源,無法讓研究者離線獨(dú)立運(yùn)行。故本文提出一種優(yōu)化方案:以開源形式實(shí)現(xiàn)CWSandbox對惡意代碼行為分析功能?;诖耍疚脑O(shè)計(jì)并實(shí)現(xiàn)了綜合性惡意代碼行為分析平臺(tái),在以下幾個(gè)方面做了積極地探索:
1)針對開源軟件 Cuckoo Sandbox[9]在分析處理惡意代碼時(shí)存在API監(jiān)控種類較少、難以統(tǒng)計(jì)等不足,對其進(jìn)行了針對性的改進(jìn)開發(fā)。通過重新編譯DLL添加監(jiān)控的API函數(shù)種類,擴(kuò)展了對惡意代碼的分析范圍。
2)本作品應(yīng)用虛擬機(jī)技術(shù)架設(shè)“沙箱”,構(gòu)建惡意代碼行為監(jiān)控環(huán)境。經(jīng)過課題組測試,發(fā)現(xiàn)當(dāng)惡意行為發(fā)現(xiàn)軟件運(yùn)行環(huán)境和惡意代碼監(jiān)控環(huán)境一致時(shí),存在不安全性和未知性。故此提出在Linux系統(tǒng)下應(yīng)用加載Windows系統(tǒng)的虛擬機(jī)構(gòu)建“沙箱”,為惡意代碼分析提供了一個(gè)安全、可控環(huán)境,并使作品軟件程序更加輕量級。
3)惡意代碼都有數(shù)個(gè)進(jìn)程,分析其行為時(shí)每個(gè)進(jìn)程各產(chǎn)生一組API調(diào)用[10]子序列,該類型分析報(bào)告包含惡意代碼特征過于抽象,不利于后續(xù)研究展開。故此,本作品提出了整合API調(diào)用序列、統(tǒng)計(jì)API調(diào)用次數(shù)算法。對同一惡意代碼所有進(jìn)程的API調(diào)用子序列按其第一個(gè)API調(diào)用時(shí)間先后順序排序整合,并統(tǒng)計(jì)每個(gè)API調(diào)用次數(shù),生成總體報(bào)告。該算法從統(tǒng)計(jì)角度提取了惡意代碼部分特征,為敏感API選取提供了參考依據(jù)。
本平臺(tái)擬實(shí)現(xiàn)對各類惡意代碼行為的分析,具體方案設(shè)計(jì)如圖1所示。
圖1 模塊化設(shè)計(jì)結(jié)構(gòu)圖
1)虛擬機(jī):構(gòu)建惡意代碼行為監(jiān)測環(huán)境;
2)惡意代碼行為分析:實(shí)現(xiàn)惡意代碼行為監(jiān)測、跟蹤和捕獲功能;
3)報(bào)告生成模塊:合并API調(diào)用子序列,生成行為分析報(bào)告;
4)API調(diào)用次數(shù)統(tǒng)計(jì)模塊:統(tǒng)計(jì)惡意代碼調(diào)用API函數(shù)次數(shù)。
為實(shí)現(xiàn)監(jiān)測、分析多種惡意代碼功能,本平臺(tái)融合沙箱技術(shù)、API Hook技術(shù)、DLL編寫技術(shù)、注入技術(shù)等,成功構(gòu)建綜合性惡意代碼分析平臺(tái)。其原理及關(guān)鍵處理過程如下所述。
1)沙箱技術(shù):本平臺(tái)基于沙箱(這里的沙箱采用虛擬機(jī)實(shí)現(xiàn))技術(shù),構(gòu)建惡意代碼的動(dòng)態(tài)行為分析平臺(tái)。沙箱是一種按照安全策略限制程序行為的執(zhí)行環(huán)境。沙箱技術(shù)指根據(jù)系統(tǒng)中每一個(gè)可執(zhí)行程序的訪問資源及其系統(tǒng)賦予的權(quán)限,建立應(yīng)用程序“沙箱”,限制惡意代碼運(yùn)行。每個(gè)應(yīng)用程序都運(yùn)行在自己的“沙箱”中,不會(huì)對其它程序的運(yùn)行產(chǎn)生影響。同樣,操作系統(tǒng)與驅(qū)動(dòng)程序也存活在自己的“沙箱”之中,故這些程序也不會(huì)影響其正常運(yùn)行。針對每個(gè)應(yīng)用程序,沙箱均準(zhǔn)備了一個(gè)配置文件,限制該文件能夠訪問的資源與系統(tǒng)賦予的權(quán)限。這些策略允許選擇系統(tǒng)管理應(yīng)用程序的方式:應(yīng)用程序既可被“限制運(yùn)行”,也可被“禁止運(yùn)行”。通過在“沙箱”中執(zhí)行不受信任的代碼與腳本,系統(tǒng)可以限制甚至防止惡意代碼對系統(tǒng)完整的破壞。
2)API Hook[11]技術(shù):所有程序的啟動(dòng)都要調(diào)用API函數(shù),包括惡意代碼在內(nèi)。API Hook技術(shù)是一種用于改變API執(zhí)行結(jié)果的技術(shù)。本平臺(tái)利用API Hook技術(shù),對惡意代碼API函數(shù)調(diào)用進(jìn)行捕獲,進(jìn)而改變系統(tǒng)API的原有功能。
3)DLL 編寫、注入技術(shù)[12]:DLL(Dynamic Link Library)是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼數(shù)據(jù)庫,不是可執(zhí)行文件。它提供了一種方法,使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。DLL注入將一個(gè)DLL放進(jìn)某進(jìn)程的地址空間,使其成為該進(jìn)程的一部分。
平臺(tái)在 VS2010、gcc for windows、gdb for windows和mingw下開發(fā)完成。主要工作體現(xiàn)在以下兩方面:
1)編寫DLL函數(shù)增添API函數(shù)種類。
要增加監(jiān)控的API函數(shù),需對API Hook實(shí)現(xiàn)過程有一定了解。本平臺(tái)利用mingw編寫cuckoomon.dll用以完成API Hook的主要流程,如圖2所示。為方便更新,設(shè)計(jì)并編譯一個(gè)通用組件chook.dll負(fù)責(zé)具體API函數(shù)指針的保存、轉(zhuǎn)移和返回,在cuckoomon.dll中嵌套調(diào)用[13]。
2)獲取API調(diào)用總序列、統(tǒng)計(jì)API調(diào)用次數(shù)。
把每個(gè)進(jìn)程API調(diào)用子序列提出后作為整體,按照每個(gè)子序列中第一個(gè)函數(shù)的調(diào)用時(shí)間點(diǎn)進(jìn)行排序,合并形成總序列。在此基礎(chǔ)上建立統(tǒng)計(jì)報(bào)告對API調(diào)用次數(shù)進(jìn)行統(tǒng)計(jì),整合所有API函數(shù)調(diào)用次數(shù)情況,并與其他惡意代碼分析平臺(tái)相互比對,驗(yàn)證本平臺(tái)實(shí)用性,如圖3所示。
圖3 API調(diào)用次數(shù)統(tǒng)計(jì)流程圖
本平臺(tái)總體軟件實(shí)現(xiàn)步驟如下:
第1步,判斷是否安裝Linux操作系統(tǒng),安裝則跳過此步;未安裝則建議安裝兼容性好、內(nèi)核穩(wěn)定的通用發(fā)行版本ubuntu。
第2步,在Linux系統(tǒng)下加載綜合性惡意代碼分析模塊。
第3步,在Linux系統(tǒng)里加載裝有XP的虛擬機(jī)。完成后將可疑文件(常為惡意代碼)導(dǎo)入虛擬機(jī)中,對其監(jiān)測分析,得到分析結(jié)果并生成分析結(jié)果報(bào)告。如圖4所示。
本平臺(tái)擬從三個(gè)方面進(jìn)行效能測試和功能性測試。
實(shí)驗(yàn)1:在惡意代碼分析平臺(tái)中注入已知API調(diào)用序列的惡意代碼,測試分析平臺(tái)的試用性與正確性。
實(shí)驗(yàn)2:與CWSandbox對比。CWSandbox分析功能較為全面,故將本平臺(tái)生成的分析報(bào)告從API調(diào)用序列報(bào)告之間的幾何距離和API調(diào)用數(shù)目兩方面與CWSandbox所得報(bào)告相比較,通過比較結(jié)果檢測本平臺(tái)分析功能的完備性。
實(shí)驗(yàn)3:監(jiān)測新增API函數(shù)、統(tǒng)計(jì)API調(diào)用次數(shù)。本平臺(tái)將對某惡意代碼調(diào)用的每一個(gè)API函數(shù)次數(shù)進(jìn)行統(tǒng)計(jì),由多至少排列。該實(shí)驗(yàn)從統(tǒng)計(jì)學(xué)角度提取了部分特征并判斷本平臺(tái)擴(kuò)展的監(jiān)控種類實(shí)用性大小。
為了能更好檢驗(yàn)本平臺(tái)的惡意代碼行為分析功能,選用從德國蜜罐[14]組織獲取的3131個(gè)惡意代碼為實(shí)例數(shù)據(jù)集(可從網(wǎng)站www.mlsec.org/Malheur/獲得),這些惡意代碼經(jīng)6個(gè)獨(dú)立的反病毒廠商分析,共分為24個(gè)類別,共包含41個(gè)僵尸程序變種,具體如圖4所示。
圖4 惡意代碼數(shù)據(jù)類
1)實(shí)驗(yàn)1:惡意代碼行為分析準(zhǔn)確性檢驗(yàn)。用分析平臺(tái)對上述已知類型的惡意代碼進(jìn)行跟蹤檢測,生成惡意代碼特征分析報(bào)告。報(bào)告顯示數(shù)據(jù)與預(yù)期客觀數(shù)據(jù)基本保持一致,一定程度上客觀、準(zhǔn)確地反應(yīng)了惡意代碼某些數(shù)據(jù)與特性,說明本平臺(tái)具有對普遍惡意代碼的跟蹤分析能力。
2)實(shí)驗(yàn)2:與CWSandbox對比。在此實(shí)驗(yàn)中,主要統(tǒng)計(jì)本平臺(tái)和CWSandbox對惡意代碼數(shù)據(jù)集分析結(jié)果中11個(gè)重要系統(tǒng)行為類別的API調(diào)用數(shù)目,如圖5所示(每一類中的第一列對應(yīng)CWSandbox,第二列對應(yīng)本平臺(tái))。由圖5可知多數(shù)類別中本平臺(tái)所獲取的數(shù)目、對應(yīng)統(tǒng)計(jì)結(jié)果大小分布與CWSandbox基本保持一致。
3)實(shí)驗(yàn)3:監(jiān)測新增API函數(shù)、統(tǒng)計(jì)API調(diào)用次數(shù)。應(yīng)用本平臺(tái)對某惡意代碼進(jìn)行檢測分析,生成行為分析報(bào)告,對本平臺(tái)新增API監(jiān)控函數(shù)進(jìn)行標(biāo)記。記錄該惡意代碼所有進(jìn)程的API調(diào)用序列,并統(tǒng)計(jì)每個(gè)API調(diào)用次數(shù),按照由多至少順序排列,如表1所示。
圖5 API調(diào)用數(shù)目對比圖
表1 某惡意代碼API調(diào)用次數(shù)統(tǒng)計(jì)表
由數(shù)據(jù)可看出,本平臺(tái)新增API函數(shù)調(diào)用次數(shù)均排列于統(tǒng)計(jì)表前列,證明本平臺(tái)擴(kuò)展的API監(jiān)控種類具有實(shí)用性。
本文設(shè)計(jì)實(shí)現(xiàn)的綜合性惡意代碼分析平臺(tái)有效克服了傳統(tǒng)分析平臺(tái)[15]的局限性、模糊性,在惡意代碼分析的深度和廣度上均有擴(kuò)展,主要具有以下優(yōu)點(diǎn):
1)以開源為宗旨,在Linux系統(tǒng)下進(jìn)行平臺(tái)開發(fā)和實(shí)現(xiàn)。運(yùn)行形式為命令行,使平臺(tái)軟件程序更加輕量級。
2)采用在Linux系統(tǒng)下應(yīng)用Windows虛擬機(jī)構(gòu)建“沙箱”技術(shù),為惡意代碼分析提供安全、可控環(huán)境。
3)核心函數(shù)以DLL形式編譯、存儲(chǔ),便于開源代碼的改進(jìn)、更新和維護(hù)。
本平臺(tái)為用戶提供了一個(gè)完備動(dòng)態(tài)行為分析綜合解決方案。根據(jù)監(jiān)控對象和目的,可靈活調(diào)整設(shè)置、改造沙箱技術(shù)并捕獲API函數(shù)種類。本平臺(tái)針對性強(qiáng)、可操性強(qiáng)、覆蓋范圍廣,具有良好的實(shí)用性和適用性。