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