專利名稱:一種惡意代碼檢測方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于語義的惡意代碼檢測方法,可以完整地刻畫基于函數(shù)調(diào)用的攻擊 行為,并有效地識(shí)別二進(jìn)制可疑程序中的惡意行為。屬于互聯(lián)網(wǎng)安全技術(shù)領(lǐng)域。
背景技術(shù):
隨著網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的快速發(fā)展,惡意代碼的種類、傳播速度、感染數(shù)量和影響范 圍都在逐漸增強(qiáng)。惡意代碼已經(jīng)成為威脅互聯(lián)網(wǎng)安全和計(jì)算機(jī)系統(tǒng)安全的重要因素,對(duì)惡 意代碼的分析和檢測是所有安全策略中的重要環(huán)節(jié)。傳統(tǒng)的最為廣泛使用的惡意代碼檢測技術(shù)是基于特征碼的檢測技術(shù)。它提取惡意代碼 中某個(gè)二進(jìn)制片斷作為該惡意代碼的"指紋",當(dāng)反病毒軟件掃描文件時(shí),將當(dāng)前的文件 與病毒特征碼庫進(jìn)行對(duì)比,通過字串匹配方式判斷是否有文件片段與已知樣本吻合,從而 完成對(duì)目標(biāo)系統(tǒng)進(jìn)行檢測和防護(hù)的目的。但是這種方法不能識(shí)別特征未知的惡意代碼,而且新病毒的特征碼或"指紋"的發(fā)布 永遠(yuǎn)落后于病毒的傳播。而且由于不同的語法表達(dá)可能有相同的語義,因而傳統(tǒng)的指紋匹 配檢測方式很容易被繞過,傳統(tǒng)的檢測方法也不能識(shí)別同一個(gè)惡意代碼的多態(tài)或變形。為了解決基于特征碼檢測的方法所存在的這些問題,本發(fā)明采用基于語義的惡意代碼 分析方法。所謂語義,是指高于語法層次的對(duì)語言的理解,它抽象的反映了語言的含義。 與之不同的是,語法更注重于語言的組織與實(shí)現(xiàn)。因此,同一個(gè)語義可能有不同的語法表 達(dá)方式來表達(dá)?;谡Z義的方法使用抽象語義來分析并刻畫程序的行為。這樣,只需要記錄惡意行為 的語義層次的特征,那么通過語法層次上修改代碼但是保持語義的新的惡意代碼仍然能夠 被檢測出來。而且未知的軟件如果有代碼片段具有惡意行為的語義特征,那么可以認(rèn)為它 是惡意軟件。從而,基于語義的檢測方法,可以對(duì)抗對(duì)語法層次上代碼的修改和檢測未知 的惡意軟件。本發(fā)明采用有窮狀態(tài)自動(dòng)機(jī)來刻畫惡意代碼的抽象語義。有窮狀態(tài)自動(dòng)機(jī)(Finite States Automata, FSA)是一個(gè)五元組(Q, A, S , ql, F),其中 Q表示狀態(tài)集,并且是非空有限集合;A表示輸入字母表,是所有可能的輸入字母的集合; S表示一個(gè)狀態(tài)轉(zhuǎn)移函數(shù),定義域是QXA,值域是Q,也就是說,任意的當(dāng)前狀態(tài),接 受任意一個(gè)輸入字母,根據(jù)狀態(tài)轉(zhuǎn)移函數(shù)可以到達(dá)另外一個(gè)狀態(tài)或者停機(jī)(當(dāng)當(dāng)前沒有輸 入字母了或者狀態(tài)轉(zhuǎn)移函數(shù)對(duì)當(dāng)前狀態(tài)以及輸入字母無定義時(shí)停機(jī));ql表示狀態(tài)集Q 中一個(gè)特定的元素,稱為初始狀態(tài);F表示Q的一個(gè)子集,稱為接受狀態(tài)集。準(zhǔn)確的描述 可以參考《可計(jì)算性與計(jì)算復(fù)雜性導(dǎo)引》(第二版),張立昂著,北京大學(xué)出版社,2004 年7月,93頁。對(duì)于一組給定的輸入字母,從初始狀態(tài)ql開始,根據(jù)狀態(tài)轉(zhuǎn)移函數(shù),最后停機(jī)在某 一狀態(tài)。那么根據(jù)這個(gè)自動(dòng)機(jī),可以判斷一個(gè)輸入字符串(輸入字母序列)最終能否到達(dá) 接收狀態(tài)。所有能到達(dá)接收狀態(tài)的輸入字符串稱為該有窮狀態(tài)自動(dòng)機(jī)接受的語言。非形式 化的說,自動(dòng)機(jī)的作用就是描述了不同狀態(tài)之間轉(zhuǎn)換的過程,能夠判斷一個(gè)給定的輸入串 能否從一個(gè)初始狀態(tài)到達(dá)一些特定的狀態(tài)。任何一個(gè)有窮狀態(tài)自動(dòng)機(jī)都可以用一個(gè)有向圖來表示,其中只需要把狀態(tài)當(dāng)作節(jié)點(diǎn), 把輸入字母當(dāng)作邊, 一個(gè)狀態(tài)轉(zhuǎn)移就得到從一個(gè)節(jié)點(diǎn)到另一個(gè)節(jié)點(diǎn)的邊。本發(fā)明另外使用下推自動(dòng)機(jī)來刻畫待檢測程序的抽象語義。下推自動(dòng)機(jī)(PDA)是一個(gè)7元組(Q, A, Q, S, ql, X0, F)。其中,Q表示非 空有窮的狀態(tài)集;A表示輸入字母表;Q表示棧字母表;S表示函數(shù)(或狀態(tài)轉(zhuǎn)移函數(shù)), 定義域是QX (AU e ) XQ,值域是QXQf (Q*代表?xiàng)W帜副鞶所組成的字符串), 也就是說,從任意的當(dāng)前狀態(tài),接受一個(gè)輸入字母或O個(gè)輸入字母(e代表空的),以及 當(dāng)前棧頂字母,該動(dòng)作函數(shù)就可以更改當(dāng)前狀態(tài),同時(shí)把棧頂?shù)淖帜父臑橐粋€(gè)字符串; ql表示初始狀態(tài);XO表示初始的棧頂字母;F表示狀態(tài)集Q的一個(gè)子集,稱為接受狀態(tài) 集。準(zhǔn)確的描述可以參考《可計(jì)算性與計(jì)算復(fù)雜性導(dǎo)引》(第二版),張立昂著,北京大 學(xué)出版社,2004年7月,121頁。對(duì)于一組給定的輸入字母,從初始狀態(tài)ql開始,根據(jù)狀態(tài)轉(zhuǎn)移函數(shù),最后停機(jī)在某 一狀態(tài)。那么,根據(jù)這個(gè)下推自動(dòng)機(jī),可以判斷一個(gè)輸入字符串最終能否到達(dá)接收狀態(tài)。 所有能到達(dá)接收狀態(tài)的輸入字符串稱為該下推自動(dòng)機(jī)接受的語言。非形式化的說,下推自 動(dòng)機(jī)是在有窮狀態(tài)機(jī)上加一個(gè)"先進(jìn)后出"的棧。與有窮狀態(tài)自動(dòng)機(jī)不同的是,下推自動(dòng)機(jī)有一個(gè)棧,這個(gè)棧可以很好的模擬真實(shí)程序執(zhí)行時(shí)的??臻g,從而實(shí)現(xiàn)真實(shí)程序中函數(shù)調(diào)用、嵌套等復(fù)雜的控制結(jié)構(gòu)。因而,把程序 的可能狀態(tài)作為狀態(tài)集Q,把所有動(dòng)作作為輸入字母集A,把相應(yīng)的函數(shù)調(diào)用、嵌套等用 棧實(shí)現(xiàn),就能用一個(gè)下推自動(dòng)機(jī)描述程序的全局狀態(tài)空間。發(fā)明內(nèi)容本發(fā)明的目的在于提供一種基于語義的惡意代碼檢測方法。為了實(shí)現(xiàn)上述技術(shù)目標(biāo),本發(fā)明方法提出了一種描述規(guī)則,能夠有效的描述基于函數(shù) 調(diào)用的惡意行為,并且記錄下常見的惡意行為的描述;然后利用現(xiàn)有工具反匯編待檢測的 可疑程序,生成程序的下推自動(dòng)機(jī);再結(jié)合現(xiàn)有的模型檢驗(yàn)方法,通過已有的惡意行為描 述的記錄和待檢測程序的下推自動(dòng)機(jī)有效的檢測可疑程序中是否包含惡意行為。下面對(duì)本發(fā)明方法的技術(shù)方案作進(jìn)一步描述。本發(fā)明包含以下幾個(gè)重點(diǎn)1. 獲得已知惡意行為的有窮狀態(tài)自動(dòng)機(jī)本發(fā)明方法通過分析已知惡意行為,把惡意行為按照其功能劃分為文件訪問、網(wǎng)絡(luò)傳 輸?shù)炔煌墓δ軜?gòu)件,然后在各個(gè)構(gòu)件中仔細(xì)分析惡意行為的關(guān)鍵步驟(比如某些API調(diào) 用),并且通過這種特定的關(guān)鍵步驟以及它們之間的時(shí)序關(guān)系和狀態(tài)關(guān)系來標(biāo)識(shí)這種惡意行為。本發(fā)明使用有窮狀態(tài)自動(dòng)機(jī)(Finite States Automata, FSA)來描述惡意行為的關(guān)鍵步驟 以及它們之間的時(shí)序關(guān)系,簡言之,本發(fā)明采用有窮狀態(tài)自動(dòng)機(jī)來描述惡意行為。每一種惡意行為都可以建立相應(yīng)的有窮狀態(tài)自動(dòng)機(jī)描述,可以搜集各種已知的惡意行 為的有窮狀態(tài)自動(dòng)機(jī)描述,然后建立一個(gè)類似于病毒庫的惡意行為描述庫,以供后續(xù)的可 疑程序檢測中使用。2. 獲得待檢測的二進(jìn)制可疑程序的下推自動(dòng)機(jī)上述已知惡意行為的自動(dòng)機(jī)只能描述一個(gè)特定的惡意行為需要的步驟和相應(yīng)的狀態(tài) 轉(zhuǎn)移情況。而在一個(gè)真實(shí)的程序中, 一個(gè)惡意行為的步驟可能分布在程序中的不同位置, 并且一個(gè)程序還包括其它許多的狀態(tài)和動(dòng)作。因此,需要描述程序整體的狀態(tài)變化情況, 也就是需要描述程序的全局狀態(tài)空間。如上所述,真實(shí)程序可能包含復(fù)雜的函數(shù)調(diào)用、嵌套等復(fù)雜的控制結(jié)構(gòu),因此在真實(shí) 程序?qū)崿F(xiàn)時(shí)采用的是一個(gè)棧結(jié)構(gòu)來處理。本發(fā)明使用一個(gè)帶有棧結(jié)構(gòu)的自動(dòng)機(jī)來描述程序 的全局狀態(tài)空間,也就是說可以用一個(gè)下推自動(dòng)機(jī)來描述程序的全局狀態(tài)空間。對(duì)于可疑的程序(二進(jìn)制可執(zhí)行文件),本發(fā)明首先對(duì)其反匯編(從機(jī)器語言轉(zhuǎn)化為 匯編語言),然后反編譯,將其轉(zhuǎn)換為中間語言,接著根據(jù)中間語言生成程序的下推自動(dòng) 機(jī)。從而,每一個(gè)程序都可以用一個(gè)下推自動(dòng)機(jī)描述其全局狀態(tài)空間,而且這一步可以通 過現(xiàn)有的一些工具和方法實(shí)現(xiàn)。3.惡意行為檢測有了已知惡意行為的自動(dòng)機(jī),以及可疑程序的下推自動(dòng)機(jī)之后,接著就可以檢測它們 分別接受的語言有沒有交集。如果有一個(gè)輸入字符串能夠同時(shí)被有窮狀態(tài)自動(dòng)機(jī)和下推自 動(dòng)機(jī)接受,那么,也就是說,待檢測的可疑程序包含有已知的惡意行為,則判定該可疑程 序?yàn)閻阂獬绦?關(guān)于自動(dòng)機(jī)接受的語言以及字符串的概念,在具體實(shí)施方式
中有詳細(xì)的說 明)?,F(xiàn)有技術(shù)中已經(jīng)存在通過已知的算法判斷一個(gè)自動(dòng)機(jī)FSA以及一個(gè)下推自動(dòng)機(jī)PDA 的接受語言的交集是否為空的技術(shù)。因此,這一步可以使用已有的模型檢驗(yàn)方法,把待檢 測的可疑程序的下推自動(dòng)機(jī),以及已經(jīng)建立的惡意行為自動(dòng)機(jī)描述庫當(dāng)作輸入,利用已有 的工具進(jìn)行判斷。并且如果程序中存在惡意行為,則輸出包含惡意行為的程序執(zhí)行路徑。 所謂的程序執(zhí)行路徑,反映的是程序所執(zhí)行的語句序列,可以用程序的控制流圖中的路徑 來描述,也可以直接用程序中的語句序列來描述。本發(fā)明利用有窮狀態(tài)自動(dòng)機(jī)來描述惡意行為,結(jié)合現(xiàn)有的工具和方法把可疑程序轉(zhuǎn)換 為下推自動(dòng)機(jī),然后利用已有的模型檢驗(yàn)方法來檢測可疑程序中是否包含惡意代碼。與現(xiàn) 有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)-1. 能夠描述惡意行為的復(fù)雜上下文關(guān)系和控制流信息;2. 支持對(duì)惡意代碼的流敏感、上下文敏感且路徑敏感的函數(shù)間分析;3. 能夠擴(kuò)展較少的惡意行為,從而檢測許多未知的惡意代碼。
圖1是本發(fā)明方法的流程2是描述殺死反病毒軟件進(jìn)程的惡意行為的有窮狀態(tài)機(jī)模型 圖3是描述修改注冊(cè)表的惡意行為的有窮狀態(tài)機(jī)模型圖4是描述擊鍵記錄的惡意行為的有窮狀態(tài)機(jī)模型圖5是描述記錄當(dāng)前窗口的惡意行為的有窮狀態(tài)機(jī)模型圖6是描述DDOS攻擊的惡意行為的有窮狀態(tài)機(jī)模型具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述。 一.獲得已知惡意行為的有窮狀態(tài)自動(dòng)機(jī)本實(shí)施例通過分析己知的惡意行為的關(guān)鍵步驟(比如一些API調(diào)用)以及它們之間的 時(shí)序關(guān)系,判斷程序狀態(tài)間的變化情況,并采用有窮狀態(tài)自動(dòng)機(jī)描述這些惡意行為。有窮狀態(tài)自動(dòng)機(jī)的構(gòu)建過程如下把已知的惡意行為在各個(gè)關(guān)鍵步驟之前或者之后的 狀態(tài)作為狀態(tài)集Q,把關(guān)鍵步驟的動(dòng)作如API調(diào)用作為輸入字母表A,根據(jù)已知惡意行為 的惡意代碼的具體執(zhí)行情況建立狀態(tài)轉(zhuǎn)移函數(shù)S ,而把惡意行為觸發(fā)之后的狀態(tài)作為接收 狀態(tài)集F,初始狀態(tài)為ql,就可以建立一個(gè)有窮狀態(tài)自動(dòng)機(jī)。根據(jù)上面描述,給定一個(gè)輸 入字符串(程序的動(dòng)作序列),能夠判定最終能否到達(dá)接收狀態(tài)(惡意行為被觸發(fā))。也 就是說,這個(gè)自動(dòng)機(jī)能夠很好的描述惡意行為。下面給出一些具體的實(shí)例,包括兩種系統(tǒng)行為——?dú)⑺婪床《拒浖M(jìn)程行為和自啟動(dòng) 行為,以及兩種網(wǎng)絡(luò)行為——擊鍵記錄行為和分布式拒絕服務(wù)(DDoS)攻擊行為 (1).殺死反病毒軟件進(jìn)程行為一些惡意軟件為了提高自身存活率,通過實(shí)時(shí)監(jiān)視系統(tǒng)進(jìn)程,及時(shí)殺死某些著名反病 毒軟件或者監(jiān)控軟件的進(jìn)程,從而達(dá)到保護(hù)自己的目的。圖2表示使用ToolHdp API系列函數(shù)實(shí)現(xiàn)殺死反病毒軟件進(jìn)程的目的的有限狀態(tài)機(jī)。 程序初始狀態(tài)為a0,調(diào)用x-CreateToolhelp32Snapshot()取得快照句柄,程序狀態(tài)從a0到 達(dá)al,然后使用Process32First()和Process32Next()枚舉當(dāng)前的進(jìn)程,程序狀態(tài)分別從al 到達(dá)a2和從a2到達(dá)a3。惡意軟件通常維護(hù)一個(gè)反病毒軟件進(jìn)程名稱的列表,枚舉過程中 逐一判斷進(jìn)程名是否存在該列表中,若存在則調(diào)用y-OpenProcess()函數(shù)取得目標(biāo)進(jìn)程的句 柄,程序狀態(tài)從a3到達(dá)a4。然后調(diào)用函數(shù)TerminateProcess(y,O)終止該進(jìn)程,程序狀態(tài)從 a4到達(dá)a5。最后CloseHandle(x)關(guān)閉快照句柄,程序狀態(tài)從a5到達(dá)終止?fàn)顟B(tài)a6。若程序 使得該狀態(tài)機(jī)到達(dá)結(jié)束狀態(tài)a6,則程序中存在殺死反病毒軟件進(jìn)程行為。(其中x,y為自 由變量,每個(gè)自由變量在程序中的每次出現(xiàn)有一致的取值)。具體來說,針對(duì)這個(gè)惡意行為,設(shè)定CreateToolhelp32Snapshot(), Process32First(), Process32Next(), OpenProcess(), TerminateProcess(), CloseHandle()這幾個(gè)函數(shù)調(diào)用是關(guān)鍵行 為,然后分析其時(shí)序關(guān)系和狀態(tài)轉(zhuǎn)移關(guān)系,得到具體的有限狀態(tài)自動(dòng)機(jī)。這里的有限狀態(tài) 自動(dòng)機(jī)的狀態(tài)集Q={a0, al, a2, a3, a4, a5, a6},輸入字母表A={CreateToolhelp32Snapshot(), Process32First(), Process32Next(), OpenProcess(), TerminateProcess(), CloseHandle(》,接受狀 態(tài)集F^a6),初始狀態(tài)q^a0,狀態(tài)轉(zhuǎn)移函數(shù)S定義方式就是上面所描述的接受輸入字母 時(shí)狀態(tài)轉(zhuǎn)移的情況。具體來說就是,程序初始狀態(tài)為a0,調(diào)用x-CreateToolhelp32Snapshot() 取得快照句柄,程序狀態(tài)從a0到達(dá)al,那么S (aO, CfeateToolhelp32Snapshot())=al , S函 數(shù)對(duì)其他幾個(gè)的定義與之類似。(2) .自啟動(dòng)行為惡意軟件除了要進(jìn)行傳播外,還要將自身加載到目標(biāo)系統(tǒng)當(dāng)中,以實(shí)現(xiàn)對(duì)被植入木馬 的計(jì)算機(jī)進(jìn)行遠(yuǎn)程控制的目的,因此通常要能夠?qū)崿F(xiàn)自啟動(dòng)。圖3表示通過修改注冊(cè)表實(shí)現(xiàn)自啟動(dòng)的有限狀態(tài)機(jī)。程序的初始狀態(tài)為b0;調(diào)用 RegOpenKeyEx(x,"或RegCreateKeyEx(x,)函數(shù)打開或創(chuàng)建一個(gè)鍵,程序狀態(tài)從b0到達(dá)bl; 調(diào)用RegSetValueEx(x,)或RegDeleteKey(x,)設(shè)置鍵值或刪除一個(gè)鍵,程序狀態(tài)從bl到達(dá) b2;調(diào)用RegCloseKey(x)關(guān)閉鍵,程序狀態(tài)從b2到達(dá)終止?fàn)顟B(tài)b3。若程序使得狀態(tài)機(jī)到 達(dá)終止?fàn)顟B(tài)b3,則程序中存在自啟動(dòng)行為。(其中x為自由變量,在程序中的每次出現(xiàn)有 一致的取值;*表示任意多個(gè)參數(shù))。(3) .擊鍵記錄行為惡意軟件通過擊鍵監(jiān)控對(duì)被控計(jì)算機(jī)交互過程中的用戶鍵盤輸入和計(jì)算機(jī)的反應(yīng)數(shù) 據(jù)進(jìn)行檢査或記錄,識(shí)別軟件系統(tǒng)的登錄操作從而獲取帳號(hào)信息等。圖4表示擊鍵記錄的有限狀態(tài)機(jī)。程序初始狀態(tài)為c0,調(diào)用GetAsyncKeyState()函數(shù) 根據(jù)虛擬鍵表判斷按鍵類型,程序狀態(tài)從cO到達(dá)cl;調(diào)用send()或者fsend()等將按鍵信息 發(fā)送給控制端,程序狀態(tài)從cl到達(dá)終止?fàn)顟B(tài)c2。若程序使得該狀態(tài)機(jī)到達(dá)狀態(tài)c2,則程 序存在記錄擊鍵信息的行為。圖5表示窗口記錄行為的有限狀態(tài)機(jī)。程序初始狀態(tài)為d0,調(diào)用 x-GetForegroundWindow()函數(shù)得到程序當(dāng)前窗口的句柄,程序狀態(tài)從d0到達(dá)dl;調(diào)用 GetWindowText(x,"函數(shù)得到該窗口的標(biāo)題,程序狀態(tài)從dl到達(dá)d2;調(diào)用send()或者fsend() 等將按鍵信息發(fā)送給控制端,程序狀態(tài)從d2到達(dá)終止?fàn)顟B(tài)d3。(其中x為自由變量,在 程序中的每次出現(xiàn)有一致的取值;*表示任意多個(gè)參數(shù))。這兩種行為可以結(jié)合起來,比如記錄在某個(gè)窗口 (例如網(wǎng)上銀行等)中所有的擊鍵記 錄,包括密碼及帳號(hào)等信息。(4).分布式拒絕服務(wù)攻擊行為攻擊者可以使用被惡意代碼入侵的機(jī)器進(jìn)行協(xié)同攻擊,例如分布式拒絕服務(wù)攻擊 (DDos),將大量數(shù)據(jù)發(fā)送到特定的宿主或網(wǎng)站,使其停止對(duì)合法通信的響應(yīng)(或者無法響 應(yīng))。如圖6表示DDoS攻擊的有限狀態(tài)機(jī)。程序初始狀態(tài)為e0,進(jìn)入循環(huán)體(loop—entry, 通常是無條件循環(huán))使得程序狀態(tài)由eO到達(dá)el;若在狀態(tài)el時(shí)循環(huán)結(jié)束(loop—exit), 則程序回到初始狀態(tài)eO;在el狀態(tài)調(diào)用函數(shù)send()、 sendto()等函數(shù)向目標(biāo)機(jī)器發(fā)送數(shù)據(jù), 程序狀態(tài)從el到達(dá)e2;在e2狀態(tài),若調(diào)用了 recv等函數(shù)接收數(shù)據(jù),則為正常的網(wǎng)絡(luò)通信, 程序回到狀態(tài)el;若循環(huán)結(jié)束(loop—exit)使得e2到達(dá)結(jié)束狀態(tài)e3。若程序使得狀態(tài)機(jī) 到達(dá)結(jié)束狀態(tài)e3,則程序中存在拒絕服務(wù)攻擊。二、獲得待檢測的二進(jìn)制可疑程序的下推自動(dòng)機(jī)對(duì)于待檢測的可疑程序(二進(jìn)制可執(zhí)行文件),首先對(duì)其反匯編以及反編譯,從機(jī)器 語言轉(zhuǎn)化為匯編語言,提取匯編語言中的控制流和數(shù)據(jù)流,將標(biāo)準(zhǔn)化的程序生成面向安全 分析的中間語言,接著根據(jù)中間語言生成程序的下推自動(dòng)機(jī)。下推自動(dòng)機(jī)的建立過程大概如下在有限狀態(tài)機(jī)的基礎(chǔ)上,添加了一個(gè)棧以及一些棧 符號(hào)。這個(gè)棧記錄了還未結(jié)束的函數(shù)調(diào)用的返回地址,棧頂記錄了下一條指令的位置;棧 符號(hào)就是一些地址等信息;根據(jù)程序的具體執(zhí)行情況,可以建立狀態(tài)轉(zhuǎn)移函數(shù)。這個(gè)下推 自動(dòng)機(jī)接受的一個(gè)字符串就是實(shí)際程序的一個(gè)執(zhí)行路徑所包含的動(dòng)作序列。具體的實(shí)現(xiàn)方 法可以參考 H. Chen and D. Wagner. MOPS: an infrastructure for examining security properties of software. Technical Report UCB〃CSD-02-l 197, UC Berkeley, 2002。本發(fā)明使用標(biāo)準(zhǔn)的反匯編方法完成程序的反匯編工作,得到其中的匯編指令、數(shù)據(jù)說 明、函數(shù)引入說明等信息。然后分析和識(shí)別控制流以及數(shù)據(jù)流,完成對(duì)動(dòng)態(tài)API調(diào)用的識(shí) 別。在控制流分析和數(shù)據(jù)流分析的基礎(chǔ)上,將匯編程序轉(zhuǎn)換為自定義的面向安全分析的中 間語言程序。將每個(gè)中間轉(zhuǎn)換為抽象語法樹和抽象語法樹的流圖,使用現(xiàn)有的算法建立可 執(zhí)行程序的PDA,以表示程序的全局狀態(tài)空間。三、惡意行為的檢測步驟假設(shè)已經(jīng)有了一個(gè)有窮狀態(tài)自動(dòng)機(jī)f,其所接受的語言L(f),和一個(gè)下推自動(dòng)機(jī)p,其 所接受的語言為L(p)。在自動(dòng)機(jī)理論中,有經(jīng)典算法能夠根據(jù)有窮狀態(tài)自動(dòng)機(jī)f和下推自 動(dòng)機(jī)p構(gòu)造出一個(gè)新的下推自動(dòng)機(jī)q,使得q所接受的語言L(q)恰好等于L(f)nL(p)。這一 個(gè)算法的具體實(shí)現(xiàn)可以參考自動(dòng)機(jī)理論的文獻(xiàn)和書籍,例如參考《自動(dòng)機(jī)理論、語言和計(jì) 算導(dǎo)論》(美)Jhon E. Hopcroft、 Rajeev Motwani、 Jeffrey D. UUman著,劉田、姜暉、 王捍貧譯{Introduction to Automata Theory, Languages, and Computation Second Edition》, 機(jī)械工業(yè)出版社,中信出版社,2007年6月第1版第3次印刷,第199頁。上述過程求出了有窮狀態(tài)自動(dòng)機(jī)和下推自動(dòng)機(jī)各自接受的語言的交集,且得出結(jié)論這 個(gè)交集語言恰好被一個(gè)新的有窮狀態(tài)自動(dòng)機(jī)接受。同樣使用自動(dòng)機(jī)理論中的經(jīng)典算法可以 判定一個(gè)下推自動(dòng)機(jī)接受的語言是否為空,從而就可以判斷原始的有窮狀態(tài)自動(dòng)機(jī)和下推 自動(dòng)機(jī)各自接受的語言的交集是否為空。本實(shí)施例使用現(xiàn)有的工具例如MOPS的model checker來做惡意行為的檢測。這個(gè)模 型檢測工具的實(shí)現(xiàn)原理與上述的求交和判斷非空的算法基本相似,因而它可以把待檢測程 序的下推自動(dòng)機(jī)以及惡意行為的有窮狀態(tài)自動(dòng)機(jī)作為輸入,能夠有效的檢測一個(gè)有限狀態(tài) 自動(dòng)機(jī)與一個(gè)下推自動(dòng)機(jī)的接受的語言的交集是否為空。如果為空,那么說明待檢測的程 序所有執(zhí)行路徑上,都不包含該惡意行為的動(dòng)作序列;反之則說明,待檢測的程序可能包 含惡意行為的動(dòng)作序列,這個(gè)模型檢測工具就會(huì)輸出包含該惡意行為的程序執(zhí)行路徑。相 關(guān)實(shí)現(xiàn)過程可以參考H. Chen and D. Wagner. MOPS: an infrastructure for examining security properties of software. CCS,02, November 18—22, 2002, Washington, DC, USA.
權(quán)利要求
1. 一種惡意代碼檢測方法,其特征在于,包含如下步驟a)獲得已知惡意行為的有窮狀態(tài)自動(dòng)機(jī);b)建立待檢測的二進(jìn)制可疑程序的下推自動(dòng)機(jī);c)使用模型檢驗(yàn)方法檢測步驟b)所述的下推自動(dòng)機(jī)接受的語言和步驟a)所述的有窮狀態(tài)自動(dòng)機(jī)接受的語言之間是否有交集,若是,則判定上述待檢測的可疑程序?yàn)閻阂獬绦颉?br>
2. 如權(quán)利要求1所述的惡意代碼檢測方法,其特征在于,步驟a)所述的有窮狀態(tài)自動(dòng)機(jī)通過下述方法獲得由已知惡意代碼得到一個(gè)或多個(gè)惡意代碼功能組件,提取每個(gè)功能組件中的關(guān)鍵行為 及其行為時(shí)序序列,進(jìn)而對(duì)其作自動(dòng)機(jī)描述從而得到已知惡意行為的有窮狀態(tài)自動(dòng)機(jī)。
3. 如權(quán)利要求2所述的惡意代碼檢測方法,其特征在于,將獲得的已知惡意行為的有窮狀態(tài)自動(dòng)機(jī)合并成已知惡意行為描述庫,并不斷更新其中的已知惡意代碼的有窮狀態(tài)自動(dòng) 機(jī)。
4. 如權(quán)利要求3所述的惡意代碼檢測方法,其特征在于,所述惡意行為描述庫包含殺死 反病毒軟件進(jìn)程的惡意代碼的有窮狀態(tài)自動(dòng)機(jī),自啟動(dòng)操作系統(tǒng)的惡意代碼的有窮狀態(tài)自 動(dòng)機(jī),擊鍵記錄的惡意代碼的有窮狀態(tài)自動(dòng)機(jī),和分布式拒絕服務(wù)攻擊的惡意代碼的有窮 狀態(tài)自動(dòng)機(jī)。
5. 如權(quán)利要求1所述的惡意代碼檢測方法,其特征在于,步驟b)所述的下推自動(dòng)機(jī)通過下述方法獲得i. 對(duì)待檢測的二進(jìn)制可疑程序執(zhí)行反匯編得到匯編語言;ii. 對(duì)上述匯編語言執(zhí)行反編譯得到中間語言;Hi.由上述中間語言生成該二進(jìn)制可疑程序的一個(gè)或多個(gè)下推自動(dòng)機(jī);
6. 如權(quán)利要求1所述的惡意代碼檢測方法,其特征在于,步驟C)所述的模型檢驗(yàn)方法為使用MOPS的model checker進(jìn)行檢測。
7.如權(quán)利要求1所述的惡意代碼檢測方法,其特征在于,步驟c)之后還輸出程序中的包 含惡意行為的執(zhí)行路徑。
全文摘要
本發(fā)明公開了一種基于語義的惡意代碼檢測方法,可以完整地刻畫基于函數(shù)調(diào)用的攻擊行為,并有效地識(shí)別二進(jìn)制可疑程序中的惡意行為,屬于互聯(lián)網(wǎng)安全技術(shù)領(lǐng)域。本發(fā)明方法包含a)獲得已知惡意代碼的有窮狀態(tài)自動(dòng)機(jī);b)獲得待檢測的二進(jìn)制可疑程序的下推自動(dòng)機(jī);c)使用模型檢驗(yàn)方法檢測所述的下推自動(dòng)機(jī)和所述有窮狀態(tài)自動(dòng)機(jī)之間是否存在可以同時(shí)被兩者接收的輸入字符串,若是,則判定上述待檢測的可疑程序?yàn)閻阂獬绦?。本發(fā)明利用有窮狀態(tài)自動(dòng)機(jī)來描述惡意行為,結(jié)合現(xiàn)有的工具和方法把可疑程序轉(zhuǎn)換為下推自動(dòng)機(jī),然后利用已有的模型檢驗(yàn)方法來檢測可疑程序中是否包含惡意代碼??捎行У赜糜诨ヂ?lián)網(wǎng)安全技術(shù)領(lǐng)域的惡意代碼檢測。
文檔編號(hào)H04L29/06GK101266550SQ20081008957
公開日2008年9月17日 申請(qǐng)日期2008年4月8日 優(yōu)先權(quán)日2007年12月21日
發(fā)明者超 張, 戴帥夫, 李佳靜, 劍 毛, 王鐵磊, 趙新建, 維 鄒, 韜 韋 申請(qǐng)人:北京大學(xué)