本站小編為你精心準(zhǔn)備了控制流污點(diǎn)信息導(dǎo)向的符號執(zhí)行參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
《中國科學(xué)技術(shù)大學(xué)學(xué)報》2016年第一期
摘要:
以快速生成能夠覆蓋可能存在缺陷程序點(diǎn)的測試用例為目標(biāo),結(jié)合基于生成的Fuzzing技術(shù)、靜態(tài)程序控制流分析、靜態(tài)污點(diǎn)分析等手段,提出一種導(dǎo)向式動態(tài)符號計算方法.通過Fuzzing生成能夠到達(dá)包含缺陷程序點(diǎn)的函數(shù)的測試用例,作為種子輸入驅(qū)動符號執(zhí)行快速到達(dá)缺陷函數(shù);在缺陷函數(shù)內(nèi)利用靜態(tài)控制流分析、靜態(tài)污點(diǎn)分析計算出控制流污點(diǎn)可達(dá)程序切片,基于該切片進(jìn)行朝向缺陷點(diǎn)的多路徑動態(tài)符號執(zhí)行.實(shí)驗驗證了方法能夠有效減輕符號執(zhí)行應(yīng)用中廣泛存在的路徑爆炸問題,并且能生成觸發(fā)目標(biāo)缺陷的測試用例.
關(guān)鍵詞:
控制流分析;污點(diǎn)分析;導(dǎo)向式符號執(zhí)行
隨著機(jī)器計算能力和約束求解能力的不斷提升,近年來動態(tài)符號執(zhí)行技術(shù)發(fā)展迅速.在整數(shù)、位向量理論的表達(dá)范圍內(nèi)描述程序的操作語義,以關(guān)于輸入變元約束等價類的形式刻畫程序的路徑空間,符號執(zhí)行技術(shù)能夠?qū)崿F(xiàn)對目標(biāo)程序的精確分析、路徑空間的高效覆蓋,已成為面向大規(guī)模預(yù)的二進(jìn)制軟件缺陷發(fā)掘的最佳選擇之一[1-3].符號執(zhí)行往往關(guān)注于目標(biāo)程序的全部路徑空間,然而該空間并不總能被完全覆蓋[4].適度的搜索空間約減是使該技術(shù)實(shí)際可行的關(guān)鍵.盡管當(dāng)前相關(guān)的研究(包括限制循環(huán)次數(shù)[5-6]、選擇式符號執(zhí)行[7]、符號執(zhí)行并行化[8]等)在某些場景中被證明為有效,基于符號執(zhí)行的缺陷發(fā)現(xiàn)技術(shù)依然不足以在實(shí)際應(yīng)用中為大型程序的安全性分析提供支撐.缺陷挖掘過程中常常關(guān)注于這樣的應(yīng)用場景:給定缺陷程序點(diǎn)θ,求解能到達(dá)θ并觸發(fā)目標(biāo)缺陷的輸入實(shí)例.在這一情況下,分析引擎可以不關(guān)注于完整的路徑空間,僅僅針對那些能夠到達(dá)θ的路徑集合進(jìn)行安全分析.由此,本文提出一種結(jié)合基于生成的Fuzzing測試[9]、靜態(tài)控制流分析、靜態(tài)污點(diǎn)分析、動態(tài)符號執(zhí)行等技術(shù)的程序分析方法,通過有導(dǎo)向性的路徑分析確定出目標(biāo)程序點(diǎn)的污點(diǎn)控制流依賴關(guān)系,自動生成能夠到達(dá)目標(biāo)程序點(diǎn)并觸發(fā)對應(yīng)缺陷的輸入實(shí)例.
1系統(tǒng)框架
系統(tǒng)框架如圖1所示,包括6個部件:良構(gòu)輸入生成器、執(zhí)行監(jiān)視器、靜態(tài)控制流分析引擎、靜態(tài)污點(diǎn)分析引擎、動態(tài)符號執(zhí)行引擎和缺陷驗證器.在給定目標(biāo)程序P和P中已知的缺陷程序點(diǎn)θ、程序良構(gòu)輸入對應(yīng)的協(xié)議規(guī)約τ的情況下,良構(gòu)輸入生成器應(yīng)用基于生成的Fuzzing技術(shù)生成滿足τ的良構(gòu)種子輸入,交由執(zhí)行監(jiān)視器監(jiān)視其在P中的執(zhí)行軌跡,從中篩選出能夠到達(dá)θ點(diǎn)所在函數(shù)f的良構(gòu)輸入集合Inputs;靜態(tài)控制流分析引擎計算出函數(shù)f到程序點(diǎn)θ的所有靜態(tài)可達(dá)的控制流路徑集合CFGslc.靜態(tài)污點(diǎn)分析引擎基于CFGslc,結(jié)合動態(tài)污點(diǎn)分析得到的函數(shù)f入口點(diǎn)的污點(diǎn)狀態(tài),應(yīng)用流敏感的控制流污點(diǎn)分析,篩選出能將污點(diǎn)輸傳播到θ程序點(diǎn)處敏感操作數(shù)的路徑集合CFGt-slc.動態(tài)符號執(zhí)行引擎綜合Inputs執(zhí)行軌跡和CFGt-slc蘊(yùn)含的路徑信息,引導(dǎo)符號執(zhí)行進(jìn)行朝向θ的安全分析.缺陷驗證器最終對獲取的輸入實(shí)例進(jìn)行測試,確認(rèn)是否能觸發(fā)θ點(diǎn)處的目標(biāo)缺陷.
2控制流污點(diǎn)信息計算
靜態(tài)控制流污點(diǎn)信息計算包括兩個部分:控制流信息計算和污點(diǎn)信息計算.這部分工作實(shí)現(xiàn)基于Binnavi二進(jìn)制分析平臺[10].
2.1靜態(tài)控制流分析給定目標(biāo)程序P和脆弱程序點(diǎn)θ,本文的靜態(tài)控制流分析首先確定出包含θ的函數(shù)f.對包含θ的模塊M,構(gòu)造過程調(diào)用圖CG和由每個函數(shù)funci的過程內(nèi)控制流圖cfgi構(gòu)成的集合CFG.其間對于M中存在的間接跳轉(zhuǎn)、間接調(diào)用等情況,本文采用跳轉(zhuǎn)表識別、具體輸入執(zhí)行記錄分析等手段補(bǔ)足控制流信息。
2.2污點(diǎn)信息計算上節(jié)的算法能夠計算出目標(biāo)函數(shù)f入口點(diǎn)到目標(biāo)程序點(diǎn)θ的靜態(tài)控制流可達(dá)切片CFGslc.然而,并非沿著該切片執(zhí)行的所有路徑都能夠?qū)⑼獠枯斎胂嚓P(guān)信息(污點(diǎn)信息)傳播到θ處的敏感操作數(shù)λ.需要計算出能夠?qū)⑽埸c(diǎn)傳播到λ的基本塊序列.靜態(tài)污點(diǎn)分析[11]一般以外部輸入的讀取位置(諸如Linux系統(tǒng)下的read函數(shù)調(diào)用點(diǎn))作為污點(diǎn)引入點(diǎn),將相關(guān)的讀取緩沖區(qū)內(nèi)容標(biāo)記為污點(diǎn)操作數(shù),沿著程序控制流圖(一般就單個可執(zhí)行程序模塊而言)計算污點(diǎn)數(shù)據(jù)流信息,考察關(guān)鍵程序點(diǎn)(sink)處敏感操作數(shù)的污點(diǎn)狀態(tài).然而在二進(jìn)制分析背景下,污點(diǎn)數(shù)據(jù)的讀取位置可能不在包含目標(biāo)函數(shù)f的模塊內(nèi),導(dǎo)致無法在對該模塊的數(shù)據(jù)流分析中引入污點(diǎn)信息.本文采用了一種動態(tài)污點(diǎn)分析和靜態(tài)污點(diǎn)分析結(jié)合的方法.首先由動態(tài)污點(diǎn)分析,以基于生成的Fuzzing篩選出的能夠到達(dá)函數(shù)f的良構(gòu)輸入集合Inputs為種子輸入,計算出在函數(shù)f入口點(diǎn)處的污點(diǎn)程序狀態(tài)(包括寄存器、內(nèi)存等)Statef,靜態(tài)污點(diǎn)分析引擎隨之將2.1節(jié)中計算出的目標(biāo)函數(shù)f入口點(diǎn)到目標(biāo)程序點(diǎn)θ的控制流可達(dá)切片CFGslc標(biāo)準(zhǔn)化(確保CFGslc中入口點(diǎn)entry只有一個入口邊,出口點(diǎn)exit只有一個出口邊),提升所有二進(jìn)制指令為vine中間語言,并轉(zhuǎn)換為靜態(tài)單賦值形式,在圖4所示的控制流污點(diǎn)格上進(jìn)行流敏感的正向數(shù)據(jù)流分析.
大型程序路徑狀態(tài)空間龐大,能到達(dá)目標(biāo)程序點(diǎn)的路徑數(shù)量則相對較小.在限定計算資源的情況下分析引擎對這部分路徑的覆蓋概率較低.導(dǎo)向式符號執(zhí)行首先基于目標(biāo)程序的控制流圖計算出目標(biāo)程序點(diǎn)控制流可達(dá)路徑,僅僅對這部分路徑進(jìn)行分析.由此確保了在資源限定的情況下,可以生成能夠到達(dá)目標(biāo)程序點(diǎn)的輸入實(shí)例.然而,在二進(jìn)制程序分析背景下,當(dāng)前導(dǎo)向式符號執(zhí)行存在如下問題:(Ⅰ)二進(jìn)制程序運(yùn)行時包含多個可執(zhí)行模塊,計算程序路徑所需要的完整的控制流圖往往并不可得,一般只能關(guān)注于可執(zhí)行程序自身模塊的控制流計算.對于目標(biāo)程序點(diǎn)在其它動態(tài)可加載模塊的情況并適用;(Ⅱ)程序的執(zhí)行路徑不僅與程序的控制流相關(guān),同時也與其數(shù)據(jù)流相關(guān).為便于計算可達(dá)路徑,當(dāng)前控制流分析一般將控制流圖中循環(huán)結(jié)構(gòu)的回邊、調(diào)用圖中遞歸結(jié)構(gòu)的回邊略去.由此導(dǎo)致那些能夠到達(dá)目標(biāo)程序點(diǎn)同時觸發(fā)缺陷的程序路徑,由于在對循環(huán)等關(guān)鍵程序結(jié)構(gòu)的遍歷中并不遵從分析假定的簡單模式而被丟棄.圖5導(dǎo)向式符號執(zhí)行Figure5Directedsymbolicexecution針對上述問題,結(jié)合“缺陷程序點(diǎn)所在函數(shù)往往包含在良構(gòu)輸入的處理路徑中”這一啟發(fā)式原則[13],本文提出一種單路徑具體-符號混合分析和多路徑符號分析相結(jié)合的方法.如圖5所示(圖5中實(shí)線表征符號執(zhí)行實(shí)際分析的程序路徑,虛線表示控制流可達(dá)而符號執(zhí)行并未進(jìn)行分析的程序路徑),以包含目標(biāo)程序點(diǎn)θ的函數(shù)f為界,在程序入口點(diǎn)到函數(shù)f入口點(diǎn)之間,利用基于生成的Fuzzing技術(shù)構(gòu)造的能夠到達(dá)函數(shù)f的良構(gòu)種子輸入I驅(qū)動符號執(zhí)行引擎進(jìn)行“嚴(yán)格遵循I執(zhí)行軌跡”單路徑符號執(zhí)行,記錄f入口點(diǎn)的程序機(jī)器狀態(tài)(包含具體機(jī)器狀態(tài)和符號機(jī)器狀態(tài))SCStatef;在函數(shù)f入口點(diǎn)到目標(biāo)程序點(diǎn)θ之間,則以SCStatef為初始狀態(tài),基于第3節(jié)中計算出的控制流污點(diǎn)可達(dá)切片進(jìn)行“忽略不相關(guān)路徑”的導(dǎo)向式多路徑符號執(zhí)行.
4實(shí)驗分析
基于Fuzzing平臺Peach[14]、二進(jìn)制靜態(tài)分析平臺BinNavi和全系統(tǒng)動態(tài)符號執(zhí)行平臺S2E[15],本文構(gòu)建了面向缺陷程序點(diǎn)的導(dǎo)向式二進(jìn)制程序符號執(zhí)行原型系統(tǒng),以WindowsXPProfessional版本2002ServicePack3操作系統(tǒng)平臺下實(shí)際公開的程序缺陷為數(shù)據(jù)源對方法有效性進(jìn)行了驗證實(shí)驗,其中缺陷程序點(diǎn)通過人工分析缺陷成因確定.缺陷的主要信息如下:對上述給定缺陷,利用基于生成的Fuzzing技術(shù)構(gòu)造出能夠到達(dá)bug函數(shù)的種子輸入,驅(qū)動符號執(zhí)行沿單路徑快速到達(dá)bug函數(shù),進(jìn)而在bug函數(shù)內(nèi)朝向bug程序點(diǎn)進(jìn)行導(dǎo)向式路徑分析,成功生成能夠到達(dá)缺陷程序點(diǎn)的測試用例.本文從基本塊約減、路徑約減兩方面對提出的“忽略不相關(guān)路徑”的導(dǎo)向式多路徑符號執(zhí)行的計算性能進(jìn)行分析.表2給出了目標(biāo)函數(shù)內(nèi)基本塊約減情況.其中PreBlocks表征約減分析前目標(biāo)函數(shù)內(nèi)聯(lián)基本塊的數(shù)目,PostBlocks表征約減分析后目標(biāo)函數(shù)內(nèi)聯(lián)基本塊的數(shù)目.
5結(jié)論
本文對面向給定程序點(diǎn)的測試用例快速生成技術(shù)進(jìn)行了研究,提出了一種導(dǎo)向式動態(tài)符號執(zhí)行方法.主要工作包括:應(yīng)用基于生成的Fuzzing技術(shù)生成種子輸入,導(dǎo)向單路徑符號執(zhí)行快速到達(dá)脆弱函數(shù);結(jié)合靜態(tài)控制流分析和靜態(tài)污點(diǎn)分析計算出脆弱函數(shù)到脆弱程序點(diǎn)的靜態(tài)可達(dá)路徑集合,導(dǎo)引多路徑動態(tài)符號執(zhí)行引擎僅僅關(guān)注于這些路徑的符號分析.實(shí)驗驗證了方法作為路徑爆炸問題減輕手段的有效性.下一步的工作包括:多線程計算環(huán)境下程序缺陷的分析建模;將該方法與靜態(tài)程序分析工具相結(jié)合,進(jìn)而降低靜態(tài)分析中廣泛存在的誤報率較高問題等.
作者:黃暉 陸余良 劉林濤 趙軍 單位:合肥電子工程學(xué)院網(wǎng)絡(luò)系