安靖 楊義先 李忠獻(xiàn)
摘要:代碼混淆是惡意代碼隱藏自身的主要手段之一.本文提出了一種新的動(dòng)態(tài)檢測(cè)方法,能夠有效檢測(cè)混淆后的惡意代碼.該方法能夠利用ISR進(jìn)行動(dòng)態(tài)調(diào)試.在調(diào)試過程中通過對(duì)路徑條件的約束求解,驅(qū)動(dòng)惡意代碼執(zhí)行不同的路徑更深入地檢測(cè)隱藏惡意代碼.此外,對(duì)于需要讀取外部資源的惡意代碼,惡意行為往往需要結(jié)合外部資源才能檢測(cè).本文方法能夠準(zhǔn)確定位外部資源并結(jié)合原始惡意代碼進(jìn)行檢測(cè),提高檢測(cè)的準(zhǔn)確性.在原型系統(tǒng)的測(cè)試中,與12種殺毒軟件的橫向測(cè)試表明,該方法在對(duì)混淆惡意代碼檢測(cè)中能有效地降低漏報(bào)率.
關(guān)鍵詞:程序調(diào)試;惡意代碼檢測(cè);代碼混淆;路徑分析;動(dòng)態(tài)測(cè)試
中圖分類號(hào):TP309 文獻(xiàn)標(biāo)識(shí)碼:A
經(jīng)過多年研究,惡意軟件檢測(cè)領(lǐng)域發(fā)展出了多種有效的惡意軟件檢測(cè)方法.惡意軟件分析方面主要包括靜態(tài)分析和動(dòng)態(tài)分析兩大類方法;惡意軟件的歸類和檢測(cè)方面則主要采用基于特征,基于規(guī)范以及基于異常[1]三種方法.
基于特征的惡意軟件檢測(cè)主要將惡意軟件中特定的二進(jìn)制序列、字符串或者程序行為作為惡意軟件的主要特征,分析檢測(cè)對(duì)象后與已有的特征庫進(jìn)行匹配,來識(shí)別惡意軟件[2].劉巍偉等人提出綜合檢測(cè)程序行為來作為特征實(shí)現(xiàn)惡意軟件檢測(cè)[3].基于規(guī)范的惡意軟件檢測(cè)方法則首先整理系統(tǒng)的關(guān)鍵安全屬性得到安全規(guī)范.建立安全規(guī)范后,分析檢測(cè)對(duì)象,如果檢測(cè)對(duì)象的行為不滿足規(guī)范,則認(rèn)為檢測(cè)對(duì)象為惡意軟件.基于規(guī)范的惡意軟件檢測(cè)屬于白名單機(jī)制,相較于基于特征的惡意軟件檢測(cè)能夠更有效地檢測(cè)未知的惡意軟件[4],但誤報(bào)率較高.基于異常的惡意軟件檢測(cè)采用統(tǒng)計(jì)的方法得到正常程序的行為集合,檢測(cè)對(duì)象的行為與正常行為集合不同時(shí),認(rèn)為代碼有異常行為從而判定為惡意軟件.基于異常的惡意軟件檢測(cè)方法的誤報(bào)率相對(duì)基于規(guī)范的方法低,同時(shí)漏報(bào)率相對(duì)基于特征的方法高[5].
然而隨著惡意攻擊者的水平不斷提高,惡意代碼取代惡意軟件成為攻擊的主要手段.惡意代碼并不是完整的可執(zhí)行程序,而是二進(jìn)制代碼片段.惡意代碼相較于惡意軟件,能夠更容易地進(jìn)行代碼混淆,更方便地通過網(wǎng)絡(luò)傳輸,并能更好地與軟件或系統(tǒng)漏洞相結(jié)合.惡意攻擊者針對(duì)原有的安全防護(hù)技術(shù),針對(duì)性地對(duì)惡意代碼進(jìn)行偽裝.一方面,使用代碼混淆技術(shù)使得惡意代碼沒有固定特征[6];另一方面,攻擊靜態(tài)分析中關(guān)鍵的反匯編算法使其得到錯(cuò)誤結(jié)果.靜態(tài)惡意軟件分析需要首先將二進(jìn)制惡意軟件反匯編為中間表示,才能繼續(xù)分析.惡意軟件保護(hù)技術(shù)中的預(yù)防混淆技術(shù)能夠有效地針對(duì)反匯編算法進(jìn)行攻擊,使得反匯編出錯(cuò)[6].除此之外,分析經(jīng)過控制流混淆的惡意代碼,靜態(tài)分析有著較大的局限性[7].另一方面,研究人員提出了一系列新的動(dòng)態(tài)軟件分析技術(shù).部分研究人員提出利用純軟件虛擬機(jī)來對(duì)抗代碼混淆[8-9].另外一部分研究人員提出利用CPU的調(diào)試功能的方法,提升了動(dòng)態(tài)分析的效率[10-11].
本文在動(dòng)態(tài)分析方法的基礎(chǔ)上,提出了一種新的動(dòng)態(tài)惡意代碼檢測(cè)方法.該方法采用基于CPU調(diào)試功能的動(dòng)態(tài)檢測(cè)技術(shù),并利用路徑驅(qū)動(dòng)的分析方法提升了惡意代碼檢測(cè)的路徑覆蓋率,同時(shí)對(duì)程序I/O的檢測(cè),使得本文方法能夠有效加載外部資源,檢測(cè)分離式惡意代碼.本文按照以下方式組織,第1節(jié)介紹與本文相關(guān)的前人研究,第2節(jié)具體介
紹本文采用的動(dòng)態(tài)惡意代碼檢測(cè)方法,第3節(jié)給出并分析原型系統(tǒng)的實(shí)驗(yàn)結(jié)果,最后第4節(jié)進(jìn)行總結(jié).
1相關(guān)工作
在惡意代碼檢測(cè)領(lǐng)域中,研究人員主要采用靜態(tài)程序分析和動(dòng)態(tài)程序分析兩種方法來對(duì)惡意代碼進(jìn)行自動(dòng)化分析.其中靜態(tài)分析主要包括控制流分析、數(shù)據(jù)流分析、切片以及抽象解釋等多種分析方法.
由于惡意代碼一般為二進(jìn)制機(jī)器碼,靜態(tài)分析需要首先通過反匯編技術(shù)將其轉(zhuǎn)化為匯編語言再進(jìn)行深入分析.反匯編主要有線性掃描和遞歸掃描兩種算法[12],然而Linn等人指出通過在二進(jìn)制中插入垃圾指令,能夠有效地攻擊這兩種主流反匯編算法,使得反匯編結(jié)果錯(cuò)誤[6].與此同時(shí),結(jié)合了代碼混淆技術(shù)的惡意代碼隱藏技術(shù)也給靜態(tài)分析帶來了不小的挑戰(zhàn).控制流混淆能夠徹底改變惡意代碼的執(zhí)行流程,使得靜態(tài)惡意代碼檢測(cè)技術(shù)無法通過匹配控制流圖來實(shí)現(xiàn)檢測(cè).平展控制流混淆[13]是控制流混淆中較為常用的一種,平展控制流混淆將順序結(jié)構(gòu)的控制流圖扁平化,加入大量冗余塊來保護(hù)程序的真實(shí)執(zhí)行流程,如圖1.從圖中可以看出,代碼經(jīng)過混淆后各個(gè)節(jié)點(diǎn)的執(zhí)行順序無法直觀看出,需要分析派遣變量運(yùn)行時(shí)信息才能獲得.
動(dòng)態(tài)分析相較于靜態(tài)分析來說,由于需要實(shí)際執(zhí)行程序,往往能夠更準(zhǔn)確地得到程序的執(zhí)行流程.Michalis Polychronakis利用模擬執(zhí)行環(huán)境對(duì)惡意代碼變種進(jìn)行動(dòng)態(tài)調(diào)試,取得了很好的效果[14].在此之后,動(dòng)態(tài)的惡意代碼分析技術(shù)得到了全面發(fā)展,Dawn Song等人提出了基于該思想的惡意代碼分析平臺(tái)[8].這些動(dòng)態(tài)調(diào)試方法的共同特點(diǎn)都是通過Bochs/qemu等軟件模擬環(huán)境來執(zhí)行惡意代碼,并對(duì)其進(jìn)行分析.惡意攻擊者發(fā)現(xiàn)軟件模擬運(yùn)行環(huán)境無法完全模擬所有真實(shí)CPU指令,通過某些特定的指令能夠繞過模擬環(huán)境的檢測(cè)機(jī)制[15].為了解決這一問題,Yanick Fratantonio利用真實(shí)環(huán)境中CPU的陷阱標(biāo)志進(jìn)行單步調(diào)試.
動(dòng)態(tài)分析主要存在兩個(gè)主要問題,一是路徑覆蓋率低,二是執(zhí)行效率底.以上提到的動(dòng)態(tài)執(zhí)行方面采用多種方法提升了執(zhí)行效率,但是忽略了路徑覆蓋率.本文在修改ISR實(shí)現(xiàn)程序跟蹤的基礎(chǔ)上,通過對(duì)執(zhí)行路徑條件的跟蹤和約束求解,采用Concolic測(cè)試的分析思想[16],提高惡意代碼分析過程的路徑覆蓋率.
此外,在動(dòng)態(tài)分析過程中通過對(duì)系統(tǒng)I/O函數(shù)的檢測(cè)來更全面地定位獲取外部資源.對(duì)外部資源的定位與跟蹤能夠更好地分析一些分離式的惡意代碼.木馬下載器作為一種典型的分離式惡意代碼,只有在能夠通過網(wǎng)絡(luò)下載木馬資源的情況下才會(huì)運(yùn)行木馬并實(shí)施惡意行為.在外部資源無法加載的情況下,惡意代碼可以自動(dòng)退出或者自毀.因此,為了全面分析惡意代碼行為,必須能夠識(shí)別并下載外部資源.
2惡意代碼動(dòng)態(tài)檢測(cè)方法
本文提出的動(dòng)態(tài)惡意代碼分析框架主要包含3個(gè)主要部分:在Bochs基礎(chǔ)上通過修改中斷服務(wù)例程實(shí)現(xiàn)的ISR調(diào)試器;實(shí)現(xiàn)路徑驅(qū)動(dòng)測(cè)試的跟蹤模塊;惡意代碼特征分析模塊,如圖2所示.
在ISR調(diào)試器中,將CPU的EFLAGS寄存器中的TF標(biāo)志位置為1,并修改其中斷處理例程ISR 1來實(shí)現(xiàn)對(duì)惡意代碼的動(dòng)態(tài)跟蹤.跟蹤模塊則根據(jù)ISR調(diào)試器的輸出記錄惡意代碼執(zhí)行流程,將匯編語言轉(zhuǎn)化為更加適合分析的中間表示.此外,跟蹤模塊還具有兩個(gè)主要功能,一是利用Concolic思想驅(qū)動(dòng)惡意代碼的多次運(yùn)行,提高分析的路徑覆蓋率;二是定位包括文件讀取,網(wǎng)絡(luò)下載等系統(tǒng)I/O函數(shù)來自動(dòng)加載外部資源.特征分析模塊則根據(jù)系統(tǒng)調(diào)用序列來判斷、分類、記錄惡意代碼行為.
2.1路徑條件驅(qū)動(dòng)的檢測(cè)
在動(dòng)態(tài)跟蹤的基礎(chǔ)上,準(zhǔn)確地發(fā)掘可疑行為是惡意代碼檢測(cè)的關(guān)鍵.傳統(tǒng)動(dòng)態(tài)分析技術(shù)僅對(duì)惡意代碼的少數(shù)路徑進(jìn)行動(dòng)態(tài)分析,無法保證路徑覆蓋率.然而惡意攻擊者往往通過各種條件跳轉(zhuǎn)來隱藏惡意代碼中的攻擊行為.比如通過檢測(cè)自身父進(jìn)程來判斷運(yùn)行環(huán)境,只在特定的環(huán)境下實(shí)施惡意行為.針對(duì)這種手段,跟蹤模塊采用Concolic測(cè)試方法驅(qū)動(dòng)分析對(duì)象動(dòng)態(tài)執(zhí)行.首先根據(jù)ISR調(diào)試器的輸出得到分析對(duì)象當(dāng)前執(zhí)行路徑的約束條件,并對(duì)其進(jìn)行變換和約束求解得到新的目標(biāo)路徑和輸入.然后,跟蹤模塊驅(qū)動(dòng)分析對(duì)象執(zhí)行新的目標(biāo)路徑,避免重復(fù)執(zhí)行同一路徑造成冗余測(cè)試.Concolic分析算法如圖3所示.
算法中,跟蹤模塊監(jiān)控ISR調(diào)試器逐指令運(yùn)行分析對(duì)象.當(dāng)發(fā)生關(guān)鍵系統(tǒng)API調(diào)用時(shí),記錄API調(diào)用并分析是否需要加載外部資源.當(dāng)遇到條件分支語句時(shí),將其加入路徑約束條件表達(dá)式并調(diào)用update_branch_stack函數(shù)將該分支條件及其當(dāng)前值入棧.當(dāng)程序執(zhí)行完成時(shí),如果分支棧為空,則說明所有分支已經(jīng)遍歷,測(cè)試完成;否則取得棧頂未被遍歷的分支條件,對(duì)該分支條件取反并得到新的路徑條件,求解該路徑條件并繼續(xù)Concolic測(cè)試.
跟蹤模塊采用基于Concolic測(cè)試的惡意代碼檢測(cè)方法,能夠提高惡意代碼分析的路徑覆蓋率,更深入地挖掘疑似惡意代碼中的惡意行為特征,并將特征反饋到特征庫用于其他惡意代碼樣本的檢測(cè).
2.2外部資源定位與跟蹤
跟蹤模塊的另一個(gè)重要特點(diǎn)是在發(fā)現(xiàn)系統(tǒng)I/O API時(shí)能檢測(cè)并加載外部資源.許多惡意代碼作者為了方便惡意代碼通過網(wǎng)絡(luò)傳播或者捆綁漏洞,采用加載器加外部資源的方式制作惡意代碼.加載器體積小,能夠自動(dòng)通過網(wǎng)絡(luò)或者讀取文件的方式加載包含實(shí)際惡意行為的外部資源.在惡意代碼檢測(cè)的過程中如果僅僅對(duì)加載器進(jìn)行分析,可能無法發(fā)現(xiàn)惡意行為從而漏報(bào).因此,自動(dòng)檢測(cè)系統(tǒng)I/O加載分析對(duì)象的外部資源并進(jìn)行聯(lián)合分析能夠大大降低惡意代碼檢測(cè)的漏報(bào)率.本文的方法通過對(duì)文件、網(wǎng)絡(luò)、注冊(cè)表讀寫等多種I/O相關(guān)系統(tǒng)調(diào)用的HOOK和參數(shù)分析,實(shí)現(xiàn)準(zhǔn)確地定位、保存外部資源,并將其作為檢測(cè)的一部分進(jìn)行深入分析.根據(jù)系統(tǒng)調(diào)用的不同,外部資源可能以本地文件、網(wǎng)絡(luò)流、內(nèi)存數(shù)據(jù)等不同形式出現(xiàn).對(duì)于這些不同形式的外部資源,加載器會(huì)采取不同的加載方式.
PE文件:以PE文件形式存在的外部資源,可使用WinExec,CreateProcess等系統(tǒng)函數(shù)直接運(yùn)行.跟蹤模塊通過對(duì)這些系統(tǒng)調(diào)用的參數(shù)與外部資源路徑匹配,實(shí)現(xiàn)外部資源加載和執(zhí)行檢測(cè).隨后,跟蹤模塊會(huì)結(jié)合原分析對(duì)象的行為和外部資源的行為實(shí)現(xiàn)檢測(cè).
網(wǎng)絡(luò)流與內(nèi)存數(shù)據(jù):以這種形式存在的外部資源,加載器可以通過call,jmp等調(diào)用或跳轉(zhuǎn)直接跳入執(zhí)行.檢測(cè)系統(tǒng)通過目標(biāo)地址范圍匹配,標(biāo)識(shí)外部資源所在的內(nèi)存范圍,監(jiān)控跟蹤內(nèi)存執(zhí)行代碼情況,發(fā)現(xiàn)跳轉(zhuǎn)到外部資源后,跟蹤模塊結(jié)合原分析對(duì)象和外部資源的行為進(jìn)行分析檢測(cè).
外部資源的具體檢測(cè)流程如下:
步驟1:通過關(guān)鍵系統(tǒng)函數(shù)檢測(cè),實(shí)現(xiàn)外部資源的定位和標(biāo)識(shí);
步驟2:繼續(xù)運(yùn)行分析對(duì)象,檢測(cè)進(jìn)程運(yùn)行相關(guān)系統(tǒng)函數(shù)和函數(shù)調(diào)用、跳轉(zhuǎn)等指令;
步驟3:如果檢測(cè)到執(zhí)行、跳轉(zhuǎn)到外部資源,則結(jié)合原分析對(duì)象進(jìn)行綜合檢測(cè).
通過對(duì)外部資源的檢測(cè),系統(tǒng)能夠更準(zhǔn)確地檢測(cè)出分離式惡意代碼,并能夠更全面地提取分離式惡意代碼的惡意特征.
3實(shí)驗(yàn)與分析
為了證明本文方法的有效性,本節(jié)對(duì)原型系統(tǒng)進(jìn)行實(shí)驗(yàn).原型系統(tǒng)在一臺(tái)DELL T610服務(wù)器上運(yùn)行,操作系統(tǒng)為Win 7 x64版本.Bochs中運(yùn)行Windows XP,在Wildlist中選擇了一組樣本進(jìn)行測(cè)試.使用多款殺毒軟件對(duì)一組樣本進(jìn)行一次檢測(cè),然后VX Heavens[17]提供的多態(tài)變形工具對(duì)這組樣本進(jìn)行混淆處理,再進(jìn)行一次檢測(cè),對(duì)比兩次檢測(cè)的結(jié)果如表1所示.
在未經(jīng)過多態(tài)變形時(shí),所有殺毒軟件幾乎都能夠完全檢測(cè)出這些惡意代碼樣本,原型系統(tǒng)測(cè)試也取得了較為理想的結(jié)果.然而經(jīng)過多態(tài)變形工具處理之后,檢測(cè)情況發(fā)生了顯著變化.大部分殺毒軟件漏報(bào)率上升到了50%左右,甚至小部分漏報(bào)率超過了50%.原型系統(tǒng)的漏報(bào)率上升不大,僅上升到了19.67%.這是由于多態(tài)變形后,樣本的惡意特征被控制流混淆以及條件混淆隱藏很難被準(zhǔn)確檢測(cè).因此所有被測(cè)試的安全防護(hù)軟件的檢測(cè)率都發(fā)生了下降.由于原型系統(tǒng)采取了Concolic測(cè)試方法來分析樣本,路徑覆蓋率更高,同時(shí)能夠定位并加載外部資源,更有效地實(shí)現(xiàn)對(duì)變形后的惡意代碼的檢測(cè).
4總結(jié)與展望
本文提出了一種路徑條件驅(qū)動(dòng)的混淆惡意代碼檢測(cè)方法,該方法能夠有效地通過路徑條件遍歷,檢測(cè)出經(jīng)過混淆后被隱藏的惡意行為特征.經(jīng)過分析和實(shí)驗(yàn),該方法有如下特點(diǎn):一是能夠通過路徑條件的分析與約束求解,驅(qū)動(dòng)惡意代碼執(zhí)行更多的隱藏路徑,從而提高路徑覆蓋率,減少漏報(bào);二是檢測(cè)系統(tǒng)I/O函數(shù),自動(dòng)加載外部資源,實(shí)現(xiàn)了更全面地定位、檢測(cè)惡意代碼;最終準(zhǔn)確地挖掘系統(tǒng)調(diào)用序列作為惡意特征,形成特征庫供惡意代碼檢測(cè)使用.原型系統(tǒng)的實(shí)驗(yàn)證明了該方法的有效性.相較于原有的惡意代碼檢測(cè)方法,本文的方法能夠更準(zhǔn)確地識(shí)別惡意代碼特征.
參考文獻(xiàn)
[1]IDIKA N, MATHUR A P. A survey of malware detection techniques[R]. Purdue University, 2007: 48.
[2]王蕊, 馮登國, 楊軼,等. 基于語義的惡意代碼行為特征提取及檢測(cè)方法[J].軟件學(xué)報(bào), 2012, 23(2): 378-393.
[3]劉巍偉, 石勇, 郭煜,等. 一種基于綜合行為特征的惡意代碼識(shí)別方法[J]. 電子學(xué)報(bào), 2009, 37(4): 696-700.
[4]MASRI W, PODGURSKI A. Using dynamic information flow analysis to detect attacks against applications[C]//ACM SIGSOFT Software Engineering Notes. 2005, 30: 1-7.
[5]SEKAR R, BENDRE M, DHURJATI D, et al. A fast automatonbased method for detecting anomalous program behaviors[C]//Security and Privacy, 2001. S&P 2001. Proceedings. 2001 IEEE Symposium on. 2001: 144-155.
[6]LINN C, DEBRAY S. Obfuscation of executable code to improve resistance to static disassembly[C]//Proceedings of the 10th ACM conference on Computer and communications security. New York, USA: ACM, 2003: 290-299.
[7]MOSER A, KRUEGEL C, KIRDA E. Limits of static analysis for malware detection[C]//IEEE.2007: 421-430.
[8]SONG D, BRUMLEY D, YIN H, et al. BitBlaze: A new approach to computer security via binary analysis[J]. Information Systems Security, 2008: 1-25.
[9]武炳正, 武延軍, 賀也平. 基于虛擬機(jī)架構(gòu)的自修改代碼監(jiān)測(cè)技術(shù)[J]. 計(jì)算機(jī)工程與應(yīng)用, 2011, 47(11): 71-74.
[10]FRATANTONIO Y, KRUEGEL C, VIGNA G. Shellzer: a tool for the dynamic analysis of malicious shellcode[C]//Recent Advances in Intrusion Detection. 2011: 61-80.
[11]薛永嶺, 黃皓, 張博. 基于函數(shù)簽名的控制流監(jiān)控方法[J]. 計(jì)算機(jī)工程, 2009, 35(9): 133-135.
[12]馬金鑫, 忽朝儉, 李舟軍. 基于控制流精化的反匯編方法[J]. 清華大學(xué)學(xué)報(bào): 自然科學(xué)版, 2011, 51(10): 1345-1350.
[13]趙玉潔, 湯戰(zhàn)勇, 王妮,等. 代碼混淆算法有效性評(píng)估[J]. 軟件學(xué)報(bào), 2012, 23(3):700-711.
[14]POLYCHRONAKIS M, ANAGNOSTAKIS K G, MARKATOS E P. Emulationbased detection of nonselfcontained polymorphic shellcode[C]//Proceedings of the 10th International Conference on Recent Advances in Intrusion Detection. Berlin, Heidelberg: SpringerVerlag, 2007: 87-106.
[15]PALEARI R, MARTIGNONI L, ROGLIA G F, et al. A fistful of redpills: How to automatically generate procedures to detect CPU emulators[C]//Proceedings of the USENIX Workshop on Offensive Technologies (WOOT). 2009:41-86.
[16]濮方琍, 盧炎生. 基于并行Java程序動(dòng)態(tài)切片的Concolic測(cè)試[J]. 華中科技大學(xué)學(xué)報(bào):自然科學(xué)版, 2009, 37(10): 21-24.
[17]VX Heavens[EB/OL]. http://vx.netlux.org/index.html.