專利名稱:一種自動(dòng)化的網(wǎng)絡(luò)攻擊特征生成方法
技術(shù)領(lǐng)域:
本發(fā)明屬于網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,具體涉及一種網(wǎng)絡(luò)攻擊特征的生成方法。
背景技術(shù):
隨著網(wǎng)絡(luò)應(yīng)用的快速發(fā)展,攻擊者的攻擊目標(biāo)和攻擊方式都大大增加,攻擊速度 更快,破壞性更強(qiáng),依賴于專業(yè)人員的分析經(jīng)驗(yàn)的手動(dòng)特征生成耗時(shí)費(fèi)力,生成特征的質(zhì) 量也難以保證,不能滿足應(yīng)用需求。自動(dòng)化的攻擊特征生成成為了當(dāng)前攻擊特征生成領(lǐng)域 的研究熱點(diǎn)。攻擊特征的本質(zhì)是對(duì)同類攻擊輸入進(jìn)行識(shí)別和過濾的表示方法。在各種網(wǎng)絡(luò) 和主機(jī)入侵防范系統(tǒng)中使用攻擊特征對(duì)輸入進(jìn)行檢査和過濾,是保護(hù)主機(jī)和脆弱程序免遭 入侵的一種常用方法。因此,快速精確的攻擊特征生成成為了防御網(wǎng)絡(luò)攻擊、保障應(yīng)用系 統(tǒng)安全的關(guān)鍵環(huán)節(jié)。
現(xiàn)有的攻擊特征生成的方法可以分為黑盒法和白盒法兩種。黑盒法不涉及脆弱程序本 身,直接分析攻擊輸入之間的共同特點(diǎn)以及攻擊輸入和正常輸入的區(qū)別,歸納總結(jié)出攻擊 特征。黑盒法的局限主要有需要比較大量的攻擊輸入樣本和正常輸入樣本才能分析出攻 擊特征,收集樣本需要時(shí)間;由于不關(guān)注脆弱程序中漏洞利用的具體信息,生成的攻擊特 征的誤報(bào)率和漏報(bào)率難以保證;另外,由于攻擊輸入本身是攻擊者可以完全控制的,因此 攻擊者可以制造假的攻擊輸入對(duì)黑盒法的特征提取過程進(jìn)行干擾。白盒法則是從脆弱程序 的漏洞被利用的執(zhí)行流程出發(fā),分析提取攻擊特征。它可以綜合利用特征生成相關(guān)的所有 信息,包括攻擊輸入、漏洞利用過程、漏洞本身特點(diǎn)等,因此生成的特征能更好的描述同 類攻擊的本質(zhì)特點(diǎn),具有更低的誤報(bào)率和漏報(bào)率。但是,現(xiàn)有的特征生成白盒方法多面臨 依賴程序源代碼、需要有經(jīng)驗(yàn)的分析人員手動(dòng)分析的局限,導(dǎo)致應(yīng)用場(chǎng)合受到限制以及需 要大量人工分析時(shí)間等問題。
從攻擊特征的表現(xiàn)形式出發(fā),可以分為正則表達(dá)式、符號(hào)約束條件和圖靈機(jī)三種表現(xiàn) 形式。正則表達(dá)式由于本身表達(dá)能力的限制,不能做數(shù)值計(jì)算和值大小比較,它對(duì)特征的 描述能力最弱,因此正則表達(dá)式形式的攻擊特征精確度最低,但它的匹配算法效率是最高 的,對(duì)攻擊輸入的判斷最為直接迅速;符號(hào)約束條件的特征表現(xiàn)形式比正則表達(dá)式有更強(qiáng) 的描述能力,但它對(duì)漏洞利用過程中的循環(huán)結(jié)構(gòu)在某些情況下不能作等效的描述,從而影 響到攻擊特征的精度;圖靈機(jī)式的攻擊特征,包含導(dǎo)向漏洞發(fā)生點(diǎn)的語句以及漏洞觸發(fā)的
4條件,是判斷輸入是否為攻擊的一個(gè)程序,可以對(duì)攻擊特征作最詳盡最真實(shí)的表示,做到 絕對(duì)精確,沒有誤報(bào)率,并且可以根據(jù)需要轉(zhuǎn)換為符號(hào)約束條件和正則表達(dá)式形式的攻擊 特征。
發(fā)明內(nèi)容
本發(fā)明提供一種基于可回溯動(dòng)態(tài)污點(diǎn)分析的網(wǎng)絡(luò)攻擊特征生成方法,借助動(dòng)態(tài)污點(diǎn)分 析技術(shù)對(duì)脆弱程序的漏洞利用過程進(jìn)行完整的指令級(jí)分析記錄,利用回溯算法提取出與攻 擊行為直接相關(guān)的代碼執(zhí)行流程,識(shí)別其中不同類型的指令并加以修正,可以實(shí)現(xiàn)快速自 動(dòng)的生成圖靈機(jī)式的攻擊特征。
本發(fā)明的技術(shù)方案概述如下
一種自動(dòng)化的網(wǎng)絡(luò)攻擊特征生成方法,其步驟如下
1) 在虛擬主機(jī)中安裝虛擬操作系統(tǒng),布署脆弱程序,配置出與脆弱程序的真實(shí)應(yīng)用 一致的運(yùn)行環(huán)境,并配置污點(diǎn)數(shù)據(jù)操作規(guī)則;
2) 啟動(dòng)脆弱程序,將脆弱程序的所有網(wǎng)絡(luò)輸入標(biāo)記為污點(diǎn)數(shù)據(jù)進(jìn)行監(jiān)控,跟蹤記錄 污點(diǎn)數(shù)據(jù)的狀態(tài),記錄污點(diǎn)數(shù)據(jù)相關(guān)操作指令形成污點(diǎn)傳播流3) 根據(jù)污點(diǎn)數(shù)據(jù)操作規(guī)則檢測(cè)到有污點(diǎn)數(shù)據(jù)異常操作時(shí),從污點(diǎn)傳播流圖中獲得從 輸入數(shù)據(jù)包開始的污點(diǎn)數(shù)據(jù)被脆弱程序操作處理的指令序列;
4) 對(duì)步驟3)獲得的指令序列按照設(shè)定規(guī)則處理成可編譯執(zhí)行指令,并添加判斷輸出 語句,生成圖靈機(jī)式的攻擊特征。
所述污點(diǎn)數(shù)據(jù)操作規(guī)則為當(dāng)污點(diǎn)數(shù)據(jù)被用作跳轉(zhuǎn)地址或者代碼執(zhí)行,則認(rèn)為污點(diǎn)數(shù)據(jù) 異常操作。
采用硬件模擬器模擬出虛擬主機(jī),通過截獲虛擬CPU中單步運(yùn)行的中間指令,實(shí)現(xiàn)指 令級(jí)的動(dòng)態(tài)污點(diǎn)分析。
進(jìn)一步,通過使虛擬執(zhí)行的翻譯環(huán)節(jié)按每次單條指令的方式進(jìn)行,實(shí)現(xiàn)針對(duì)脆弱程序 的單步執(zhí)行。
所述步驟2)通過監(jiān)控虛擬CPU截獲的API函數(shù)地址,發(fā)現(xiàn)脆弱程序的輸入數(shù)據(jù)包, 將其標(biāo)記為污點(diǎn)數(shù)據(jù)。
所述步驟3)使用回溯分析算法從污點(diǎn)傳播流圖中獲得從輸入數(shù)據(jù)包開始的污點(diǎn)數(shù)據(jù) 被脆弱程序操作處理的指令序列。所述污點(diǎn)傳播流圖包括源節(jié)點(diǎn)和其他節(jié)點(diǎn),所述源節(jié)點(diǎn)對(duì)應(yīng)網(wǎng)絡(luò)輸入數(shù)據(jù)包讀入內(nèi)存 后的緩存區(qū),所述其他節(jié)點(diǎn)每一個(gè)對(duì)應(yīng)一條污點(diǎn)數(shù)據(jù)相關(guān)操作指令,所述其他節(jié)點(diǎn)之間按 照污點(diǎn)數(shù)據(jù)相關(guān)操作指令中的污點(diǎn)操作數(shù)進(jìn)行關(guān)聯(lián)。
進(jìn)一步,節(jié)點(diǎn)之間建立關(guān)聯(lián)的方法是在污點(diǎn)狀態(tài)記錄的結(jié)構(gòu)中增加一個(gè)成員指向該 污點(diǎn)數(shù)據(jù)當(dāng)前對(duì)應(yīng)的污點(diǎn)傳播流圖節(jié)點(diǎn),當(dāng)有新的污點(diǎn)數(shù)據(jù)相關(guān)操作指令發(fā)生時(shí),新生成 一個(gè)污點(diǎn)傳播流圖節(jié)點(diǎn)記錄該指令,并將其與指令中的所有影響到指令操作結(jié)果的污點(diǎn)操 作數(shù)對(duì)應(yīng)的污點(diǎn)傳播流圖節(jié)點(diǎn)用一條邊關(guān)聯(lián)起來,同時(shí)更新該指令中污點(diǎn)數(shù)據(jù)的污點(diǎn)狀態(tài) 記錄中的成員指向新生成的節(jié)點(diǎn)。
所述步驟4)設(shè)定的規(guī)則為
對(duì)于操作數(shù)本身是污點(diǎn)數(shù)據(jù),且是寄存器類型的,無需進(jìn)行處理;
對(duì)于本身不是污點(diǎn)數(shù)據(jù)而且不會(huì)被污點(diǎn)數(shù)據(jù)污染的操作數(shù),則需要將它的實(shí)際值作為 立即數(shù)替換它在指令序列中的類型;
對(duì)于本身不是污點(diǎn)數(shù)據(jù),但通過指令執(zhí)行被污點(diǎn)數(shù)據(jù)污染的操作數(shù),如果類型是寄存 器,無需進(jìn)行處理;如果是內(nèi)存尋址地址,則將其替換為圖靈機(jī)式攻擊特征提供的用于污 點(diǎn)數(shù)據(jù)變量存儲(chǔ)的數(shù)據(jù)段的一個(gè)地址,如果該操作數(shù)的被污染之前的值對(duì)污染后的值有影 響,需要提取出它的實(shí)際值代入污染指令的計(jì)算。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和積極效果如下
1. 本發(fā)明使用硬件模擬技術(shù)實(shí)現(xiàn)了可回溯的動(dòng)態(tài)污點(diǎn)分析系統(tǒng),在脆弱程序執(zhí)行環(huán) 境外部分析針對(duì)脆弱程序的攻擊過程,不需要對(duì)脆弱程序本身以及所處操作系統(tǒng)做任何修 改,有利于攻擊行為的發(fā)現(xiàn)和攻擊流程的提取;
2. 本發(fā)明使用可回溯的動(dòng)態(tài)污點(diǎn)分析系統(tǒng)對(duì)脆弱程序的漏洞利用過程進(jìn)行指令級(jí)的 分析,無須獲取脆弱程序源代碼,并可以充分利用攻擊輸入以及攻擊行為的詳細(xì)信息,因 此生成的攻擊特征更為精確。
3. 本發(fā)明只需要檢測(cè)到一次攻擊行為就可以生成對(duì)應(yīng)的攻擊特征,無須釆集多個(gè)攻
擊樣本和正常數(shù)據(jù)樣本進(jìn)行比較,攻擊特征生成過程自動(dòng)快速。
圖1為本發(fā)明網(wǎng)絡(luò)攻擊特征生成方法示意圖
圖2為本發(fā)明污點(diǎn)數(shù)據(jù)傳播流圖生成示意圖 圖2a為污點(diǎn)狀態(tài)記錄結(jié)構(gòu)圖2b為污點(diǎn)傳播流圖
具體實(shí)施例方式
本發(fā)明利用了動(dòng)態(tài)污點(diǎn)分析技術(shù),對(duì)分析目標(biāo)程序不可信來源的輸入進(jìn)行污點(diǎn)標(biāo)記, 然后記錄污點(diǎn)數(shù)據(jù)在整個(gè)代碼執(zhí)行流程中的被使用情況,在含有污點(diǎn)數(shù)據(jù)的操作中根據(jù)參 數(shù)之間的數(shù)據(jù)依賴關(guān)系向相關(guān)數(shù)據(jù)傳播污點(diǎn)狀態(tài),并根據(jù)預(yù)先設(shè)定的規(guī)則監(jiān)控污點(diǎn)數(shù)據(jù)是 否被不安全的使用,從而檢測(cè)到攻擊行為。
下面結(jié)合附圖詳細(xì)說明本發(fā)明的
具體實(shí)施例方式如圖1所示,本發(fā)明的自動(dòng)化網(wǎng)絡(luò)攻 擊特征生成方法實(shí)施過程如下
1、構(gòu)造基于硬件模擬器的可回溯動(dòng)態(tài)污點(diǎn)分析系統(tǒng)
本發(fā)明通過截獲硬件模擬器的虛擬CPU中單步運(yùn)行的中間指令,實(shí)現(xiàn)指令級(jí)的動(dòng)態(tài)污 點(diǎn)分析。為了提高系統(tǒng)執(zhí)行效率并提高分析環(huán)境的透明性,我們并沒有使用模擬CPU的單 步標(biāo)志位進(jìn)行全系統(tǒng)的單步執(zhí)行,而是在虛擬CPU執(zhí)行環(huán)境切換到脆弱程序時(shí),改變虛擬 執(zhí)行的翻譯環(huán)節(jié),使得翻譯按每次單條指令的方式進(jìn)行,從而實(shí)現(xiàn)了針對(duì)脆弱程序的單步, 并降低了分析環(huán)境被探知可能引起的風(fēng)險(xiǎn)。對(duì)單步執(zhí)行的每一條中間指令做反匯編處理, 實(shí)現(xiàn)了對(duì)指令類型和操作數(shù)的識(shí)別,并獲取操作數(shù)的寄存器或內(nèi)存地址,根據(jù)操作數(shù)的當(dāng) 前污點(diǎn)狀態(tài)以及源操作數(shù)和目標(biāo)操作數(shù)之間的數(shù)據(jù)依賴關(guān)系,進(jìn)行動(dòng)態(tài)污點(diǎn)分析。可回溯 動(dòng)態(tài)污點(diǎn)分析系統(tǒng)基本的污點(diǎn)傳播方式與一般的動(dòng)態(tài)污點(diǎn)分析系統(tǒng)中的污點(diǎn)傳播方式基 本一致,但由于我們的最終目標(biāo)是提取脆弱程序?qū)χ苯庸袈┒吹奈埸c(diǎn)數(shù)據(jù)的完整處理流
程,因此我們的系統(tǒng)不僅會(huì)分析引起污點(diǎn)傳播的指令,對(duì)INC等不會(huì)引起污點(diǎn)傳播的污點(diǎn)
數(shù)據(jù)操作指令同樣需要記錄。另外,處理流程中的條件分支語句是生成的攻擊特征中對(duì)輸 入數(shù)據(jù)進(jìn)行判斷的重要節(jié)點(diǎn),因此與污點(diǎn)數(shù)據(jù)有關(guān)的分支跳轉(zhuǎn)指令同樣需要進(jìn)行分析,本
發(fā)明采用的方法是根據(jù)虛擬CPU的標(biāo)志寄存器的污點(diǎn)狀態(tài)進(jìn)行判斷。綜上,凡是操作數(shù)中
有污點(diǎn)數(shù)據(jù)的操作指令以及與污點(diǎn)數(shù)據(jù)有關(guān)的分支跳轉(zhuǎn)指令,都需要作為污點(diǎn)數(shù)據(jù)相關(guān)操
作進(jìn)行記錄。
為實(shí)現(xiàn)可回溯的動(dòng)態(tài)污點(diǎn)分析,可回溯動(dòng)態(tài)污點(diǎn)分析系統(tǒng)依賴兩個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu) 污點(diǎn)狀態(tài)記錄結(jié)構(gòu)和污點(diǎn)傳播流圖TPG (Taint Propagation Graph)。
污點(diǎn)狀態(tài)記錄結(jié)構(gòu)實(shí)時(shí)反映了每一次指令操作后,程序空間中的污點(diǎn)數(shù)據(jù)分布情況, 是污點(diǎn)傳播的依據(jù)。污點(diǎn)狀態(tài)記錄結(jié)構(gòu)以單個(gè)字節(jié)作為最小記錄單位,分兩部分組成一 部分負(fù)責(zé)內(nèi)存空間的污點(diǎn)狀態(tài),記錄了內(nèi)存中所有污點(diǎn)數(shù)據(jù)的地址;另一部分記錄寄存器的污點(diǎn)狀態(tài),每個(gè)寄存器都有對(duì)應(yīng)的污點(diǎn)狀態(tài)記錄,如圖2a所示。
污點(diǎn)傳播流圖TPG (Taint Propagation Graph)是污點(diǎn)數(shù)據(jù)相關(guān)操作的記錄結(jié)構(gòu),如圖 2b所示。污點(diǎn)源節(jié)點(diǎn)是TPG圖的起始節(jié)點(diǎn),對(duì)應(yīng)網(wǎng)絡(luò)輸入的數(shù)據(jù)包讀入內(nèi)存后的緩存區(qū), 它沒有上級(jí)節(jié)點(diǎn)。TPG圖中的其它節(jié)點(diǎn)每一個(gè)對(duì)應(yīng)一條污點(diǎn)數(shù)據(jù)相關(guān)操作指令。TPG圖中 的節(jié)點(diǎn)按照對(duì)應(yīng)的污點(diǎn)數(shù)據(jù)相關(guān)操作指令中污點(diǎn)操作數(shù)之間的關(guān)系進(jìn)行關(guān)聯(lián)。對(duì)于一條指 令,如果它的操作數(shù)有污點(diǎn)數(shù)據(jù),就需要為該指令生成一個(gè)節(jié)點(diǎn),識(shí)別出該指令的所有影 響到操作結(jié)果的污點(diǎn)操作數(shù),在污點(diǎn)狀態(tài)記錄結(jié)構(gòu)中査詢出它們對(duì)應(yīng)的TGP圖中的節(jié)點(diǎn), 然后把為當(dāng)前指令生成的節(jié)點(diǎn)和查詢出的節(jié)點(diǎn)用一條邊聯(lián)系起來,從而實(shí)現(xiàn)了把新生成的 節(jié)點(diǎn)加入TPG圖。為此,需要建立污點(diǎn)操作數(shù)和TPG圖中的節(jié)點(diǎn)之間的實(shí)時(shí)映射關(guān)系。 我們采用的方法是在污點(diǎn)狀態(tài)記錄結(jié)構(gòu)中增加一個(gè)成員指向該污點(diǎn)數(shù)據(jù)當(dāng)前對(duì)應(yīng)的TPG 圖節(jié)點(diǎn),即圖2a所示的"TPG節(jié)點(diǎn)指針"成員。每當(dāng)有該污點(diǎn)數(shù)據(jù)相關(guān)操作I得到執(zhí)行時(shí), 將污點(diǎn)數(shù)據(jù)狀態(tài)記錄中該污點(diǎn)數(shù)據(jù)的"TPG節(jié)點(diǎn)指針"更新到為I生成的TPG圖中的節(jié)點(diǎn)。 按照上述的規(guī)則,每當(dāng)發(fā)生一次污點(diǎn)數(shù)據(jù)相關(guān)操作指令,新生成一個(gè)污點(diǎn)傳播流圖節(jié)點(diǎn)記 錄該指令,并將其與指令中的所有影響到操作結(jié)果的污點(diǎn)操作數(shù)所對(duì)應(yīng)的污點(diǎn)傳播流圖節(jié) 點(diǎn)之間用一條邊關(guān)聯(lián)起來,同時(shí)更新該指令中污點(diǎn)數(shù)據(jù)的污點(diǎn)狀態(tài)記錄中的"TPG節(jié)點(diǎn)指 針"指向新生成的節(jié)點(diǎn)。根據(jù)污點(diǎn)操作指令中操作數(shù)的關(guān)系, 一個(gè)節(jié)點(diǎn)可能分支到多個(gè)節(jié) 點(diǎn),多個(gè)節(jié)點(diǎn)也可能匯聚到一個(gè)節(jié)點(diǎn),因此,污點(diǎn)傳播形成"圖"的結(jié)構(gòu),如圖2b所示。 為了支持回溯分析,TPG圖中的邊都為雙向邊,區(qū)分出節(jié)點(diǎn)間上下級(jí)關(guān)系。另外,為了區(qū) 分污點(diǎn)操作指令之間的時(shí)序關(guān)系,TPG圖的每個(gè)節(jié)點(diǎn)都有一個(gè)獨(dú)立的序號(hào),記錄指令執(zhí)行 的先后關(guān)系。
2、 在硬件模擬器的虛擬系統(tǒng)中配置并啟動(dòng)脆弱程序
在硬件模擬器的虛擬主機(jī)中安裝操作系統(tǒng),使其配置與脆弱程序真實(shí)運(yùn)行環(huán)境一致, 并將脆弱程序的參數(shù)配置按實(shí)際運(yùn)行相同的方式設(shè)置。
通過監(jiān)控硬件模擬器的虛擬CPU執(zhí)行,比對(duì)EIP和脆弱進(jìn)程所有導(dǎo)入的API函數(shù)地 址,本發(fā)明實(shí)現(xiàn)了在虛擬操作系統(tǒng)外部對(duì)關(guān)鍵網(wǎng)絡(luò)API函數(shù)進(jìn)行攔截,讀取脆弱程序中網(wǎng) 絡(luò)輸入數(shù)據(jù)包存儲(chǔ)地址,將其初始化為動(dòng)態(tài)污點(diǎn)分析的污點(diǎn)源。
在虛擬操作系統(tǒng)中啟動(dòng)脆弱程序后,當(dāng)通過截獲API發(fā)現(xiàn)有脆弱程序的輸入數(shù)據(jù)包進(jìn) 入系統(tǒng),則將其標(biāo)記為污點(diǎn)數(shù)據(jù),在污點(diǎn)狀態(tài)記錄結(jié)構(gòu)中更新相應(yīng)位置的狀態(tài),并開始動(dòng) 態(tài)污點(diǎn)分析,記錄脆弱程序執(zhí)行過程中的污點(diǎn)數(shù)據(jù)相關(guān)操作指令形成污點(diǎn)傳播流圖。
3、 通過檢測(cè)污點(diǎn)數(shù)據(jù)的異常使用發(fā)現(xiàn)針對(duì)未知漏洞的攻擊在可回溯動(dòng)態(tài)污點(diǎn)分析系統(tǒng)中,配置了污點(diǎn)數(shù)據(jù)異常使用規(guī)則,并據(jù)此檢測(cè)污點(diǎn)數(shù)據(jù) 相關(guān)操作指令中的異常情況,發(fā)現(xiàn)針對(duì)脆弱程序的未知漏洞的攻擊行為。
污點(diǎn)數(shù)據(jù)異常使用規(guī)則就是,如果有污點(diǎn)數(shù)據(jù)被用作跳轉(zhuǎn)地址或者代碼執(zhí)行,則認(rèn)為 發(fā)生了污點(diǎn)數(shù)據(jù)的異常使用。為此,當(dāng)發(fā)現(xiàn)JMP、 CALL、 RET等分支指令執(zhí)行時(shí)需要檢測(cè) 它們的操作數(shù)是否是污點(diǎn)數(shù)據(jù),以及它們轉(zhuǎn)移后的執(zhí)行地址內(nèi)容是否為污點(diǎn)數(shù)據(jù)。上述的 異常使用在正常程序執(zhí)行中幾乎不會(huì)發(fā)生,而出現(xiàn)在多種漏洞攻擊行為中,因此如果檢測(cè) 發(fā)現(xiàn)上述異常使用就可以判定發(fā)生了針對(duì)脆弱程序的網(wǎng)絡(luò)攻擊行為。
當(dāng)檢測(cè)到攻擊發(fā)生,使用回溯分析算法從污點(diǎn)傳播流圖中的污點(diǎn)數(shù)據(jù)異常操作指令對(duì) 應(yīng)的節(jié)點(diǎn)開始,提取出脆弱程序?qū)εc漏洞攻擊直接相關(guān)的污點(diǎn)數(shù)據(jù)的所有操作指令,從而 得到從輸入數(shù)據(jù)包開始的與攻擊直接相關(guān)的污點(diǎn)數(shù)據(jù)被脆弱程序操作處理的指令序列。
4、生成圖靈機(jī)式的攻擊特征
執(zhí)行上述的可回溯動(dòng)態(tài)污點(diǎn)分析檢測(cè)到對(duì)未知漏洞攻擊的發(fā)生,提取出從污點(diǎn)源開始 的與漏洞攻擊直接相關(guān)的污點(diǎn)數(shù)據(jù)被脆弱程序操作處理的指令序列,記作TOT (Taint Operation Trace),它提供了圖靈機(jī)式的攻擊特征TMS (Turing Machine Signature) 生成 的基礎(chǔ)。但是TOT并不等同于TMS,需要從兩方面對(duì)TOT進(jìn)行修改和完善,才能生成圖 靈機(jī)式的攻擊特征TMS。
1)處理TOT中指令和操作數(shù),適應(yīng)TMS的執(zhí)行環(huán)境
TOT中的操作指令的操作數(shù)的寄存器和內(nèi)存地址都處在攻擊發(fā)生時(shí)脆弱程序的執(zhí)行上 下文中,由于提取TOT時(shí)的進(jìn)程內(nèi)存空間和執(zhí)行上下文與TMS的執(zhí)行環(huán)境有很大的差異, 因此需要根據(jù)指令的操作數(shù)類型和污點(diǎn)狀態(tài),分別進(jìn)行處理,使它們能夠移植到TMS的 運(yùn)行環(huán)境中順利執(zhí)行。
在對(duì)TOT中的指令進(jìn)行處理之前,TMS需要建立一個(gè)初始化的環(huán)境,為待檢査的輸 入數(shù)據(jù)包提供一個(gè)緩沖區(qū)進(jìn)行存放,并將TOT中讀取污點(diǎn)源數(shù)據(jù)的指令映射到輸入TMS 的數(shù)據(jù)包對(duì)應(yīng)緩沖區(qū)的地址空間。除此之外,TMS還需要提供一個(gè)數(shù)據(jù)段,用于污點(diǎn)數(shù)據(jù) 相關(guān)操作的變量的存儲(chǔ),避免TOT中的尋址地址和TMS的內(nèi)存地址發(fā)生沖突,同時(shí)也可 以控制TMS運(yùn)行時(shí)的內(nèi)存占用。然后,按如下的規(guī)則對(duì)TOT的中的污點(diǎn)數(shù)據(jù)相關(guān)操作指 令進(jìn)行處理
1.對(duì)于操作數(shù)本身是污點(diǎn)數(shù)據(jù),并且是寄存器類型的,無需進(jìn)行特別處理,因?yàn)槲埸c(diǎn)數(shù) 據(jù)的值將隨著TMS對(duì)輸入數(shù)據(jù)的處理自動(dòng)獲得;2. 對(duì)于本身不是污點(diǎn)數(shù)據(jù)而且不會(huì)被污點(diǎn)數(shù)據(jù)污染的操作數(shù),則需要將它的實(shí)際值作為 立即數(shù)(立即數(shù)信息是在進(jìn)行分析的時(shí)候提取的)替換它在TOT中的類型。這個(gè)過程在可 回溯動(dòng)態(tài)污點(diǎn)分析系統(tǒng)處理該指令時(shí)進(jìn)行。無論該操作數(shù)是一個(gè)寄存器還是內(nèi)存尋址地 址,本發(fā)明提出的動(dòng)態(tài)污點(diǎn)分析系統(tǒng)都能夠獲取攻擊發(fā)生時(shí)它的實(shí)際值;
3. 對(duì)于本身不是污點(diǎn)數(shù)據(jù),但通過指令執(zhí)行被污點(diǎn)操作數(shù)污染的操作數(shù),如果類型是寄 存器,無需進(jìn)行處理;如果類型是內(nèi)存尋址地址,則將其替換為TMS提供的專門用于污 點(diǎn)數(shù)據(jù)變量存儲(chǔ)的數(shù)據(jù)段的一個(gè)地址,并將后面指令中出現(xiàn)的該地址都使用TMS數(shù)據(jù)段 中的同一地址進(jìn)行替換。特別地,如果該操作數(shù)的被污染之前的值對(duì)污染后的值有影響, 需要提取出它的實(shí)際值參與污染指令的計(jì)算。
使用處理規(guī)則2是因?yàn)門OT中只含有污點(diǎn)數(shù)據(jù)相關(guān)的操作,沒有對(duì)非污點(diǎn)數(shù)據(jù)的變量 的初始化過程,如果在TMS中直接使用這些非污點(diǎn)數(shù)據(jù)在攻擊發(fā)生時(shí)的內(nèi)存地址和寄存 器,將會(huì)引起系統(tǒng)崩潰或者讀入錯(cuò)誤的值,因此在本發(fā)明中使用這些變量在污點(diǎn)分析時(shí)的 實(shí)際值代入它們?cè)赥MS的相關(guān)計(jì)算。事實(shí)上,TOT中的非污點(diǎn)數(shù)據(jù)表示了脆弱程序執(zhí)行 環(huán)境中的其他資源對(duì)輸入數(shù)據(jù)包的影響。在TMS中使用它們的實(shí)際值,實(shí)際上是模擬了 攻擊發(fā)生時(shí)的特征生成環(huán)境來對(duì)輸入數(shù)據(jù)進(jìn)行檢査。雖然可能和應(yīng)用程序的實(shí)際運(yùn)行環(huán)境 有一定區(qū)別,但如果特征生成環(huán)境的部署具有一般性,那么生成的圖靈機(jī)式的攻擊特征所 作出的判斷就應(yīng)該被普遍接受因?yàn)閬G棄一個(gè)可能對(duì)典型的相同應(yīng)用發(fā)起攻擊的數(shù)據(jù)包是 符合邏輯的。
使用處理規(guī)則3是因?yàn)門OT中不含有經(jīng)過污點(diǎn)傳播成為污點(diǎn)數(shù)據(jù)的變量的初始化過 程,直接在TMS中使用它們?cè)诠舭l(fā)生時(shí)的內(nèi)存地址,可能和TMS的內(nèi)存地址發(fā)生沖突。 但是與非污點(diǎn)數(shù)據(jù)不同,污點(diǎn)數(shù)據(jù)變量最終將在運(yùn)行過程中得到來源于輸入數(shù)據(jù)包的賦 值,因此只需要在TMS的執(zhí)行環(huán)境中為其分配一個(gè)合法的存儲(chǔ)空間就可以了。特別地, 如果該操作數(shù)的被污染之前的值對(duì)污染后的值有影響,則需要提取出它在污點(diǎn)分析時(shí)的實(shí) 際值參與污染指令的計(jì)算。
2)做出最終判斷
通過使用上述規(guī)則對(duì)TOT進(jìn)行處理,提取得到的指令已經(jīng)可以編譯執(zhí)行。但是,要成 為圖靈機(jī)式的攻擊特征,還必須對(duì)輸入數(shù)據(jù)是否為攻擊作出明確的判斷。如果輸入數(shù)據(jù)能 夠沿著攻擊路徑到達(dá)漏洞發(fā)生點(diǎn),那么可以判斷輸入數(shù)據(jù)會(huì)引發(fā)攻擊,圖靈機(jī)式攻擊特征 返回ATTACK,否則可以判斷是合法輸入,攻擊特征應(yīng)該返回BENIGN。因此,需要對(duì) TOT中的條件分支語句的進(jìn)行處理,添加判斷輸出語句。在動(dòng)態(tài)污點(diǎn)分析系統(tǒng)處理污點(diǎn)數(shù)據(jù)相關(guān)的條件分支跳轉(zhuǎn)指令時(shí),記錄當(dāng)時(shí)對(duì)該指令的條件滿足情況,據(jù)此處理TOT中對(duì)應(yīng) 指令,使得與動(dòng)態(tài)污點(diǎn)分析時(shí)條件滿足情況一致時(shí),沿著攻擊路徑執(zhí)行,否則TMS返回 BENIGN。在漏洞點(diǎn)之前的最后一個(gè)條件分支跳轉(zhuǎn)指令,如果與當(dāng)時(shí)條件滿足情況一致, 直接返回ATTACK判斷,因?yàn)橹笠呀?jīng)沒有條件分支語句,輸入數(shù)據(jù)必然能夠到達(dá)漏洞, 符合數(shù)據(jù)異常使用的檢測(cè)規(guī)則,從而滿足觸發(fā)漏洞的條件。
5、生成攻擊特征的應(yīng)用
上述步驟生成的圖靈機(jī)式的攻擊特征是以脆弱程序的網(wǎng)絡(luò)輸入數(shù)據(jù)包為輸入的可執(zhí)行 程序,可以輸出對(duì)輸入數(shù)據(jù)包是否為攻擊的判斷。因此,本發(fā)明生成的攻擊特征可以直接 部署于脆弱程序的實(shí)際應(yīng)用環(huán)境,在脆弱程序之前對(duì)輸入數(shù)據(jù)包進(jìn)行檢査,如果發(fā)現(xiàn)輸入 數(shù)據(jù)包是同類型的攻擊,則進(jìn)行丟棄;否則,將判斷為非攻擊的數(shù)據(jù)包提交給脆弱程序繼 續(xù)處理。
本發(fā)明提出的基于可回溯動(dòng)態(tài)污點(diǎn)分析的網(wǎng)絡(luò)攻擊特征生成方法,對(duì)于本領(lǐng)域的技術(shù) 人員而言,可以根據(jù)需要自己配置各種基于硬件模擬器的虛擬環(huán)境,適應(yīng)不同脆弱程序的 需要;同時(shí)還可以靈活設(shè)置污點(diǎn)分析中的污點(diǎn)數(shù)據(jù)異常使用規(guī)則以及對(duì)污點(diǎn)傳播流圖的指 令序列提取方法,生成針對(duì)不同類型漏洞攻擊的圖靈機(jī)式的攻擊特征。
盡管為說明目的公開了本發(fā)明的具體實(shí)施例和附圖,其目的在于幫助理解本發(fā)明的內(nèi)容并 據(jù)以實(shí)施,但是本領(lǐng)域的技術(shù)人員可以理解在不脫離本發(fā)明及所附的權(quán)利要求的精神和 范圍內(nèi),各種替換、變化和修改都是可能的。因此,本發(fā)明不應(yīng)局限于最佳實(shí)施例和附圖 所公開的內(nèi)容,本發(fā)明要求保護(hù)的范圍以權(quán)利要求書界定的范圍為準(zhǔn)。
權(quán)利要求
1、一種自動(dòng)化的網(wǎng)絡(luò)攻擊特征生成方法,其步驟如下1)在虛擬主機(jī)中安裝虛擬操作系統(tǒng),布署脆弱程序,配置出與脆弱程序的真實(shí)應(yīng)用一致的運(yùn)行環(huán)境,并配置污點(diǎn)數(shù)據(jù)操作規(guī)則;2)啟動(dòng)脆弱程序,將脆弱程序的所有網(wǎng)絡(luò)輸入標(biāo)記為污點(diǎn)數(shù)據(jù)進(jìn)行監(jiān)控,跟蹤記錄污點(diǎn)數(shù)據(jù)的狀態(tài),記錄污點(diǎn)數(shù)據(jù)相關(guān)操作指令形成污點(diǎn)傳播流圖;3)根據(jù)污點(diǎn)數(shù)據(jù)操作規(guī)則檢測(cè)到有污點(diǎn)數(shù)據(jù)異常操作時(shí),從污點(diǎn)傳播流圖中獲得從輸入數(shù)據(jù)包開始的污點(diǎn)數(shù)據(jù)被脆弱程序操作處理的指令序列;4)對(duì)步驟3)獲得的指令序列按照設(shè)定規(guī)則處理成可編譯執(zhí)行指令,并添加判斷輸出語句,生成圖靈機(jī)式的攻擊特征。
2、 如權(quán)利要求1所述的方法,其特征在于,所述污點(diǎn)數(shù)據(jù)操作規(guī)則為污點(diǎn)數(shù)據(jù)被用 作跳轉(zhuǎn)地址或者代碼執(zhí)行,則認(rèn)為污點(diǎn)數(shù)據(jù)異常操作。
3、 如權(quán)利要求1所述的方法,其特征在于,采用硬件模擬器模擬出虛擬主機(jī),通過 截獲虛擬CPU中單步運(yùn)行的中間指令,實(shí)現(xiàn)指令級(jí)的動(dòng)態(tài)污點(diǎn)分析。
4、 如權(quán)利要求3所述的方法,其特征在于,通過使虛擬執(zhí)行的翻譯環(huán)節(jié)按每次單條 指令的方式進(jìn)行,實(shí)現(xiàn)針對(duì)脆弱程序的單步執(zhí)行。
5、 如權(quán)利要求l所述的方法,其特征在于,所述步驟2)通過監(jiān)控虛擬CPU截獲的 API函數(shù)地址,發(fā)現(xiàn)脆弱程序的輸入數(shù)據(jù)包,將其標(biāo)記為污點(diǎn)數(shù)據(jù)。
6、 如權(quán)利要求l所述的方法,其特征在于,所述步驟3)使用回溯分析算法從污點(diǎn)傳 播流圖中獲得從輸入數(shù)據(jù)包開始的污點(diǎn)數(shù)據(jù)被脆弱程序操作處理的指令序列。
7、 如權(quán)利要求1所述的方法,其特征在于,所述污點(diǎn)傳播流圖包括源節(jié)點(diǎn)和其他節(jié) 點(diǎn),所述源節(jié)點(diǎn)對(duì)應(yīng)網(wǎng)絡(luò)輸入數(shù)據(jù)包讀入內(nèi)存后的緩存區(qū),所述其他節(jié)點(diǎn)每一個(gè)對(duì)應(yīng)一條 污點(diǎn)數(shù)據(jù)相關(guān)操作指令,所述其他節(jié)點(diǎn)之間按照污點(diǎn)數(shù)據(jù)相關(guān)操作指令中的污點(diǎn)操作數(shù)進(jìn) 行關(guān)聯(lián)。
8、 如權(quán)利要求7所述的方法,其特征在于,建立關(guān)聯(lián)的方法是在污點(diǎn)狀態(tài)記錄的 結(jié)構(gòu)中增加一個(gè)成員指向該污點(diǎn)數(shù)據(jù)當(dāng)前對(duì)應(yīng)的污點(diǎn)傳播流圖節(jié)點(diǎn),當(dāng)有新的污點(diǎn)數(shù)據(jù)相 關(guān)操作指令發(fā)生時(shí),新生成一個(gè)污點(diǎn)傳播流圖節(jié)點(diǎn)記錄該指令,并將其與指令中的所有影 響到指令操作結(jié)果的污點(diǎn)操作數(shù)對(duì)應(yīng)的污點(diǎn)傳播流圖節(jié)點(diǎn)用一條邊關(guān)聯(lián)起來,同時(shí)更新該 指令中污點(diǎn)數(shù)據(jù)的污點(diǎn)狀態(tài)記錄中的成員指向新生成的節(jié)點(diǎn)。
9、 如權(quán)利要求l所述的方法,其特征在于,所述步驟4)設(shè)定的規(guī)則為 對(duì)于操作數(shù)本身是污點(diǎn)數(shù)據(jù),且是寄存器類型的,無需進(jìn)行處理;對(duì)于本身不是污點(diǎn)數(shù)據(jù)而且不會(huì)被污點(diǎn)數(shù)據(jù)污染的操作數(shù),則需要將它的實(shí)際值作為 立即數(shù)替換它在指令序列中的類型;對(duì)于本身不是污點(diǎn)數(shù)據(jù),但通過指令執(zhí)行被污點(diǎn)數(shù)據(jù)污染的操作數(shù),如果類型是寄存 器,無需進(jìn)行處理;如果是內(nèi)存尋址地址,則將其替換為圖靈機(jī)式攻擊特征提供的用于污 點(diǎn)數(shù)據(jù)變量存儲(chǔ)的數(shù)據(jù)段的一個(gè)地址,如果該操作數(shù)的被污染之前的值對(duì)污染后的值有影 響,需要提取出它的實(shí)際值代入污染指令的計(jì)算。
10、如權(quán)利要求1所述的方法,其特征在于,所述步驟4)中添加判斷輸出語句的方 法是在步驟3)提取的指令序列中的條件分支語句處加入對(duì)輸入數(shù)據(jù)包是否為攻擊的判 斷,如果輸入數(shù)據(jù)能夠沿著攻擊路徑到達(dá)漏洞發(fā)生點(diǎn),判斷輸入數(shù)據(jù)會(huì)引發(fā)攻擊,否則判 斷是合法輸入。
全文摘要
本發(fā)明公開了一種自動(dòng)化的網(wǎng)絡(luò)攻擊特征生成方法,包括如下步驟1)在虛擬主機(jī)中安裝虛擬操作系統(tǒng),配置出與脆弱程序的真實(shí)應(yīng)用一致的運(yùn)行環(huán)境,并配置污點(diǎn)數(shù)據(jù)操作規(guī)則;2)啟動(dòng)脆弱程序?qū)⑵渌芯W(wǎng)絡(luò)輸入標(biāo)記為污點(diǎn)數(shù)據(jù)進(jìn)行監(jiān)控,記錄污點(diǎn)數(shù)據(jù)狀態(tài),記錄污點(diǎn)數(shù)據(jù)相關(guān)操作指令形成污點(diǎn)傳播流圖;3)檢測(cè)到有污點(diǎn)數(shù)據(jù)異常操作時(shí),從污點(diǎn)傳播流圖中獲得從輸入數(shù)據(jù)包開始的污點(diǎn)數(shù)據(jù)被脆弱程序操作處理的指令序列;4)將指令序列處理成可編譯執(zhí)行指令,并添加判斷輸出語句,生成圖靈機(jī)式的攻擊特征。使用本發(fā)明的方法有利于對(duì)未知漏洞攻擊行為的發(fā)現(xiàn)和攻擊流程的提??;無須獲取脆弱程序源代碼;生成的攻擊特征更精確;攻擊特征生成過程自動(dòng)快速。
文檔編號(hào)H04L29/06GK101616151SQ200910090178
公開日2009年12月30日 申請(qǐng)日期2009年7月31日 優(yōu)先權(quán)日2009年7月31日
發(fā)明者豫 劉, 軼 楊, 蘇璞睿 申請(qǐng)人:中國(guó)科學(xué)院軟件研究所