陳共龍
摘 要:隨著全球信息化的不斷推進(jìn),整個世界越來越被連成一個整體,威脅計算機(jī)系統(tǒng)安全的領(lǐng)域也越來越廣泛,其中以惡意代碼最為嚴(yán)重。而隨著計算機(jī)系統(tǒng)安全攻擊與防御技術(shù)的不斷較量,惡意代碼的攻擊手法、攻擊形式也越來越趨于隱秘化、復(fù)雜化。因此,有必要對當(dāng)下的惡意代碼分析技術(shù)進(jìn)行總結(jié),從中發(fā)現(xiàn)新的發(fā)展方向,以應(yīng)對不斷變化的惡意代碼形勢。
關(guān)鍵詞:惡意代碼;靜態(tài)分析;動態(tài)分析
Abstract:With the advancement of global informationization, the whole world is increasingly tending together as a whole, the realm of threat to the computer system security is becoming more and more widely, of which the malicious code is the most influential. And with the constantly battle between the computer system security attack and defense technologies, the attacks technique and the form of attack of malicious code are more and more tend to be secret, complicated. Therefore, it is necessary to summarize the current malicious code analysis technology to find a new development direction, in response to the changing situation of malicious code.
Key words:malicious code;static analysis;dynamic analysis
隨著全球信息化進(jìn)程的不斷推進(jìn),網(wǎng)絡(luò)開放性的不斷增強(qiáng),網(wǎng)絡(luò)應(yīng)用系統(tǒng)涉及領(lǐng)域的擴(kuò)展,計算機(jī)所面臨的威脅也越來越廣泛了,其中惡意代碼對計算機(jī)安全的威脅是最為嚴(yán)重的[1]。惡意代碼是一類在不被察覺的情況下嵌入代碼到另一段程序中,以達(dá)到破壞計算機(jī)系統(tǒng)數(shù)據(jù)、破壞數(shù)據(jù)的安全性和完整性、影響用戶心理的程序。惡意代碼的分類主要有計算機(jī)病毒、網(wǎng)絡(luò)蠕蟲、特洛伊木馬、后門等。目前惡意代碼的技術(shù)手段日益豐富,如多態(tài)、代碼混淆等,但與此同時,與惡意代碼之矛對立的惡意代碼分析之盾也有了巨大的進(jìn)步。
本文分析研究了當(dāng)前主流的惡意代碼分析技術(shù)及其進(jìn)展,首先對惡意代碼分析技術(shù)進(jìn)行了概述,接著從靜態(tài)分析和動態(tài)分析的角度,對不同的分析技術(shù)進(jìn)行了研究和比對,最后對本文進(jìn)行了總結(jié)。
1 惡意代碼分析技術(shù)概述
惡意代碼分析器借助某種惡意代碼分析方法,判斷程序是否有惡意行為。
現(xiàn)假定D=
分析器M分析程序X,得出分析結(jié)果。若R=Y,則該程序為惡意程序;反之,該程序為非惡意程序。雖然COHEN[2]已經(jīng)證明了任意一個程序是否包含惡意行為是不可判定的,但是我們?nèi)匀荒軌蚋鶕?jù)惡意代碼在傳播過程中的特性,來判定程序是否為惡意程序。
惡意代碼分析技術(shù)的分類方法有兩種。一種是按照分析目標(biāo)的差別分類:基于主機(jī)和基于網(wǎng)絡(luò)?;谥鳈C(jī)分析的方式包括基于特征碼簽名、基于校檢和、啟發(fā)式數(shù)據(jù)挖掘方法;基于網(wǎng)絡(luò)分析的方式有基于Deep packet Inspection和基于HoneyPot方式[3]。另一種是按照分析時是否執(zhí)行代碼分類:靜態(tài)分析和動態(tài)分析。靜態(tài)分析方法是指在不執(zhí)行二進(jìn)制程序情況下進(jìn)行分析的方法,如二進(jìn)制統(tǒng)計分析、反編譯、反匯編等;動態(tài)分析方法是指在目標(biāo)程序執(zhí)行的情況下,通過分析調(diào)用的函數(shù)等確定目標(biāo)程序執(zhí)行的過程,匹配特征函數(shù)序列庫,從而判定目標(biāo)程序是否為惡意代碼。
本文主要依據(jù)后者對惡意代碼分析技術(shù)進(jìn)行分類。
2 靜態(tài)分析技術(shù)
2.1 特征碼掃描技術(shù)
特征碼掃描技術(shù)是惡意代碼掃描技術(shù)的一種,它是傳統(tǒng)殺毒軟件的主要利器。特征碼掃描技術(shù)主要依賴的數(shù)據(jù)集是特征碼數(shù)據(jù)庫,該數(shù)據(jù)集是通過函數(shù)運(yùn)算或者從程序直接提取的唯一標(biāo)志。特征碼的線性結(jié)構(gòu)可以表示成:Sig(I)=
目前的基于傳統(tǒng)特征碼掃描改進(jìn)的技術(shù),在提高檢測變種、未知惡意代碼方面也有了不錯的提高。假定特征向量F=<相似代碼特征S,行為特征M,系統(tǒng)函數(shù)集合A>,則在原來簡單的特征碼基礎(chǔ)上,使用這三個特征來表征一類惡意代碼的特征,以達(dá)到縮小特征庫規(guī)模,快速檢測惡意代碼,特別是變種代碼的目的[1]。除了同一類型的惡意代碼具有實現(xiàn)模式的相似性以外,不同類型的惡意代碼也具有作為其編程實現(xiàn)的重要屬性,即字符空間關(guān)系的獨特特征。利用這個特征,能夠為未知惡意代碼的自動分析提供很好的基礎(chǔ)[6]。
2.2 啟發(fā)式掃描技術(shù)
啟發(fā)式指的是“運(yùn)用某種方式或方法去判定事物的知識和技能”或“自我發(fā)現(xiàn)的能力”。啟發(fā)式掃描技術(shù)是基于定義的掃描技術(shù)和給定的判定規(guī)則,檢測程序中是否存在可疑功能,并判定惡意代碼的掃描方法[7-8]。
啟發(fā)式掃描技術(shù)在某種意義上是基于專家系統(tǒng)產(chǎn)生的,由于正常程序和惡意程序在執(zhí)行上的不同,熟練的匯編級程序員能夠迅速的發(fā)現(xiàn)這類非正常的程序。常見的異常表現(xiàn)有使用非常規(guī)指令、存在花指令、解密循環(huán)代碼、調(diào)用未導(dǎo)出的API等[9]。其衍生思路可以用于惡意軟件的取證分析,以軟件為實現(xiàn)反取證目的使用的技術(shù)程度來作為判定惡意軟件的指標(biāo),即反取證的行為越多,越可能是惡意軟件。這個方法被Murray[10]靈活的運(yùn)用于分析惡意軟件的反取證行為。
2.3 文件完整性分析技術(shù)
基于文件完整性的分析技術(shù)是指,通過使用某種單向散列算法,如MD5、SHA1、CRC32、Xerox等,計算系統(tǒng)動態(tài)鏈接庫函數(shù)的哈希值,與在干凈的系統(tǒng)環(huán)境下計算的哈希值進(jìn)行比對。如果有變化,則可以判斷該文件很可能被惡意代碼修改了,該系統(tǒng)很可能已經(jīng)不再安全。
這個思想早在1999年Cohen的一篇論文中就已經(jīng)提出過,當(dāng)時展現(xiàn)出來的優(yōu)勢是,以散列值的變化作為判斷惡意代碼感染的依據(jù),容易實現(xiàn)且保護(hù)能力較強(qiáng)。但其問題也十分明顯。某些正常程序會在更新的時候?qū)ψ约哼M(jìn)行修改,根據(jù)這種方式進(jìn)行的檢測必定會產(chǎn)生不小的誤判問題[9]。
在之后的完整性分析技術(shù)研究中,都對Cohen的思想進(jìn)行了較好的改進(jìn)。如果對系統(tǒng)中所有文件都進(jìn)行哈希值檢測,必定會對系統(tǒng)造成巨大的開銷,用戶友好性和用戶體驗度必將極大的降低。為了解決這個問題,新的研究中只分析系統(tǒng)中關(guān)鍵部分的動態(tài)鏈接庫文件,這些庫文件在系統(tǒng)中往往是不會改變的。當(dāng)惡意代碼制造者試圖修改系統(tǒng)庫函數(shù)時,用戶通過計算其哈希值并進(jìn)行校驗,就能立刻檢測出惡意代碼,同時也在一定程度上降低了修改自身函數(shù)的正常程序的誤判[2]。
系統(tǒng)庫函數(shù)的簽名(即單向散列哈希值)是保存在系統(tǒng)的數(shù)據(jù)庫中,數(shù)據(jù)庫如果不加強(qiáng)保密工作,也會成為黑客入侵的重點。一種簡單的保護(hù)簽名的方法,是將簽名存儲在只讀介質(zhì)的數(shù)據(jù)庫中。但這種方法對于用戶來說,是十分不方便管理與維護(hù)的。另一種比較容易想到的方法是對數(shù)據(jù)庫進(jìn)行加密,但是每次取出、放回簽名的解密、加密過程又會增加系統(tǒng)開銷[11]。
可見,基于文件完整性的分析技術(shù)的優(yōu)勢和缺陷是十分明顯的。因此,在使用基于文件完整性的分析技術(shù)時,應(yīng)當(dāng)根據(jù)使用的對象以及環(huán)境需求來選擇分析技術(shù)。
3 動態(tài)分析技術(shù)
3.1 代碼仿真分析技術(shù)
在惡意代碼運(yùn)行時追蹤惡意代碼的行為,能夠高效的捕捉到異常行為。這種方法允許在真實環(huán)境中運(yùn)行,但是一旦惡意代碼失控,將會感染真實主機(jī),造成不必要的損失。因此,使用代碼仿真分析技術(shù)模擬真實環(huán)境,將是一個非常好的選擇。
目前,已經(jīng)出現(xiàn)了一些惡意代碼仿真分析工具。開源虛擬機(jī)bochs是一個全系統(tǒng)仿真的虛擬機(jī),模擬Intel X86架構(gòu)的CPU以及計算機(jī)的其他設(shè)備,其良好的代碼設(shè)計十分適合進(jìn)行二次開發(fā),如增加指令記錄功能等,并能在一定程度上抵抗反調(diào)試技術(shù)[12]。Sandboxie[13]允許系統(tǒng)在“沙盤環(huán)境”中運(yùn)行瀏覽器或者其他的程序,它是基于系統(tǒng)局部進(jìn)行的保護(hù),僅僅是幾個危險的程序在沙盤中運(yùn)行,其他一切規(guī)則都正常運(yùn)行。BSA是基于Sandboxie的惡意代碼分析工具,它能夠捕獲Sandboxie中的注冊表修改、文件修改、API調(diào)用、訪問網(wǎng)絡(luò)的行為,并能自動的進(jìn)行惡意代碼分析。
3.2 行為監(jiān)控分析技術(shù)
行為監(jiān)控分析技術(shù)是通過監(jiān)控、記錄目標(biāo)程序的各種類型的行為,根據(jù)其對系統(tǒng)產(chǎn)生的負(fù)面影響的程度來判定其是否為惡意代碼。
行為監(jiān)控分析技術(shù)按照分析的行為類型可以分為網(wǎng)絡(luò)行為分析和主機(jī)行為分析。
網(wǎng)絡(luò)行為分析是通過分析目標(biāo)程序在網(wǎng)絡(luò)中的通信行為來判定其惡意性的。傳統(tǒng)的網(wǎng)絡(luò)通信行為分析的方法是深度包檢測技術(shù),即從網(wǎng)絡(luò)層和傳輸層兩個層面分析惡意代碼行為,并提取能夠有效描述惡意代碼行為的四個特征,用正則表達(dá)式匹配攻擊模式檢測木馬程序,從而識別出惡意代碼,但是當(dāng)網(wǎng)絡(luò)流量數(shù)據(jù)巨大的時候,無法及時分析出結(jié)果[14-15]。因此,一種新的分析系統(tǒng)應(yīng)運(yùn)而生,該系統(tǒng)使分析系統(tǒng)的前端主機(jī)能夠在不重組數(shù)據(jù)包的情況下,就分析出數(shù)據(jù)包是否為惡意代碼,從而提高了分析效率[16]。
主機(jī)行為分析是依據(jù)惡意程序的惡意行為,如API調(diào)用序列、參數(shù)的依賴輪廓等,來對目標(biāo)程序進(jìn)行判斷[17]。運(yùn)用的比較好的模型,是通過組合對應(yīng)權(quán)限下用戶可能的操作構(gòu)建的攻擊樹模型,在基礎(chǔ)的攻擊樹模型上增加危害權(quán)值、攻擊樹文本圖等元素,并結(jié)合代碼仿真技術(shù)中的虛擬機(jī)運(yùn)行技術(shù),解決了傳統(tǒng)攻擊樹模型行為差異性描述不準(zhǔn)確、危害量化不合理等問題,從而提供更為高效的惡意代碼分析結(jié)果[18-20]。
3.3 可執(zhí)行路徑分析技術(shù)
基于可行路徑的分析技術(shù)有兩種應(yīng)用思路:一種是結(jié)合靜態(tài)分析中的完整性校驗技術(shù),對內(nèi)核級惡意代碼在內(nèi)存中的執(zhí)行路徑進(jìn)行完整性校驗;另一種是為了對惡意代碼進(jìn)行更為完整的功能分析,遍歷惡意代碼所有可能的執(zhí)行路徑。
內(nèi)核級惡意代碼實現(xiàn)靜默修改系統(tǒng)的執(zhí)行路徑,一般是通過修改系統(tǒng)庫函數(shù)的返回值、修改系統(tǒng)庫函數(shù)表的轉(zhuǎn)向等手法來實現(xiàn)。一旦內(nèi)核級惡意代碼拿到了系統(tǒng)內(nèi)核的控制權(quán),那么對于應(yīng)用層上的任何用戶軟件,包括應(yīng)用層的殺毒軟件都將會造成巨大的威脅。此時的殺毒軟件將形同虛設(shè),被內(nèi)核級惡意代碼玩弄于鼓掌之中,系統(tǒng)將永遠(yuǎn)不會返回一個真實的值,此時的系統(tǒng)也已然成為了惡意代碼的傀儡。通過分析發(fā)現(xiàn),惡意代碼不管使用何種隱藏手法,其最終必將運(yùn)行于內(nèi)存中。其中,系統(tǒng)庫函數(shù)在內(nèi)存中執(zhí)行的指令順序、指令數(shù)都是固定的,通過計算正常的系統(tǒng)庫函數(shù)內(nèi)存指令的哈希值,并與被測系統(tǒng)庫函數(shù)內(nèi)存指令哈希值進(jìn)行比對,一旦發(fā)現(xiàn)兩者不同,就可以立即判定系統(tǒng)被惡意代碼修改了,應(yīng)當(dāng)及時采取措施[11]。
為了更為完善的分析惡意代碼的功能,經(jīng)常會借助多路徑分析的方法。其基本思想是,通過修改變量或者系統(tǒng)環(huán)境,以實現(xiàn)代碼不同的執(zhí)行路徑?,F(xiàn)有的基于代碼覆蓋的多路徑分析方法中,通過標(biāo)記已經(jīng)執(zhí)行過的路徑以減少重復(fù)遍歷,提高了分析的執(zhí)行效率;對于傳統(tǒng)多路徑分析無法比較好的解決循環(huán)的問題,現(xiàn)有的分析方法中對循環(huán)的語句結(jié)構(gòu)設(shè)定了一個時間界限,防止了循環(huán)語句在某些情況下陷入死循環(huán)的問題[21]。
4 總結(jié)
從本文的分析比較中,可以發(fā)現(xiàn),惡意代碼的分析技術(shù)有基于特征碼的、基于啟發(fā)式的、基于代碼仿真的和基于行為監(jiān)控的。除了本文描述的幾種方法外,還有動靜態(tài)分析相結(jié)合的雙重惡意代碼檢測技術(shù)、程序語義的邏輯分析技術(shù)、基于社會計算的分析技術(shù)等。相信在惡意代碼分析這個活躍的領(lǐng)域中,將會源源不斷的有新的技術(shù)被挖掘與應(yīng)用進(jìn)來。
[參考文獻(xiàn)]
[1]陳娟英,范明鈺,王光衛(wèi).一種基于親緣性的惡意代碼分析方法[J].信息安全技術(shù),2014(1).
[2]COHEN,F(xiàn):Computational aspects of computer viruses[J].Computer&Security.Volume 8,Issue 4,June 1989,pp.297-298.
[3]秦軍m張海鵬m蘇志和m林巧明.一種基于二維行為特征的惡意代碼識別方法[J].計算機(jī)技術(shù)與發(fā)展,2013(6).
[4]王海峰.基于智能特征碼的反病毒引擎設(shè)計[J].計算機(jī)工程,2010(3).
[5]單長虹.殺毒軟件編程精華[J].黑客防線,2004(03S).
[6]李鵬m王汝傳m武寧.基于空間關(guān)系特征的未知惡意代碼自動檢測技術(shù)研究[J].計算機(jī)研究與發(fā)展,2012(5).
[7]Symantec:Understanding heuristics:Symantecs Bloodhound technology[Z].Symantec White Paper Series,Volume XXXIV,1997.
[8]曾憲偉,張智軍,張志.基于虛擬機(jī)的啟發(fā)式掃描反病毒技術(shù)[J].計算機(jī)應(yīng)用與軟件,2005(9).
[9]奚琪,王清賢,曾勇軍.惡意代碼檢測技術(shù)綜述[C].計算機(jī)研究新進(jìn)展——河南省計算機(jī)學(xué)會2010年學(xué)術(shù)年會論文集,2010.
[10]Murray Brand.Malware Forensics:Discovery of the Intent of Deception[J].Journal of Digital Forensics,Security&Law;2010,Vol.5 Issue 4,pp.31.
[11]齊琪.基于內(nèi)存完整性的木馬檢測技術(shù)[D].華中科技大學(xué),2006.
[12]鄧超國,谷大武,李卷孺,孫明.一種基于全系統(tǒng)仿真和指令流分析的二進(jìn)制代碼分析方法[J].計算機(jī)應(yīng)用研究,2011(4).
[13]http://www.sandboxie.com/,http://bsa.isoftware.nl/,last visited at 2014-3-9.
[14]蔡洪民,伍乃騏,滕少華.分布式木馬檢測系統(tǒng)設(shè)計實現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2012(5).
[15]李世淙,云曉春,張永錚.一種基于分層聚類方法的木馬通信行為檢測模型[J].計算機(jī)研究與發(fā)展,2012(2).
[16]舒胤明,范明鈺,王光衛(wèi).一種新的惡意代碼檢測方法[J].計算機(jī)安全,2013(9).
[17]苗啟廣,王蘊(yùn),曹瑩,劉文闖.面向最小行為的惡意程序檢測研究[J].系統(tǒng)工程與電子技術(shù),2012(4).
[18]謝樂川,袁平.改進(jìn)攻擊樹的惡意代碼檢測方法[J].計算機(jī)工程與設(shè)計,2013(5).
[19]溫志淵,翟健宏,徐徑山,歐陽建國.基于攻擊行為樹的惡意代碼檢測平臺[J].信息網(wǎng)絡(luò)安全,2013(9).
[20]姜政偉,王曉箴,劉寶旭.基于最小攻擊樹的UEFI惡意行為檢測模型[J].計算機(jī)工程與應(yīng)用,2012(32).
[21]王祥根,司端鋒,馮登國,蘇璞睿.基于代碼覆蓋的惡意代碼多路徑分析方法[J].電子學(xué)報.2009(4).