史大偉,袁天偉
?
一種粗細(xì)粒度結(jié)合的動(dòng)態(tài)污點(diǎn)分析方法
史大偉,袁天偉
(江南計(jì)算技術(shù)研究所,江蘇 無錫 214083)
針對(duì)當(dāng)前污點(diǎn)分析工具不能兼顧速度和精確度的缺陷,研究并實(shí)現(xiàn)一種粗細(xì)粒度結(jié)合的二進(jìn)制代碼動(dòng)態(tài)污點(diǎn)分析方法。對(duì)比粗粒度污點(diǎn)分析和細(xì)粒度污點(diǎn)分析的實(shí)現(xiàn)過程,提出兩者結(jié)合的新型分析框架。預(yù)先在線執(zhí)行粗粒度污點(diǎn)分析以篩選有效指令,之后離線執(zhí)行細(xì)粒度污點(diǎn)分析以計(jì)算污點(diǎn)信息。根據(jù)粒度的差異分別建立粗細(xì)粒度污點(diǎn)數(shù)據(jù)的引入標(biāo)記方法,制定粗細(xì)粒度條件下的數(shù)據(jù)流和控制流傳播策略,設(shè)計(jì)離線軌跡記錄結(jié)構(gòu)作為粗細(xì)粒度污點(diǎn)分析的傳遞文件。在原型系統(tǒng)上的測(cè)試結(jié)果表明,該方法通過在線粗粒度模式保證了污點(diǎn)分析信息采集的快速性,同時(shí)采用離線細(xì)粒度模式以合理的時(shí)間消耗提升了污點(diǎn)分析的精確度。
粗粒度;細(xì)粒度;動(dòng)態(tài)污點(diǎn)分析;離線軌跡;污點(diǎn)傳播;二進(jìn)制
污點(diǎn)分析(taint analysis)是指對(duì)非信任來源的數(shù)據(jù)進(jìn)行標(biāo)記,并追蹤其在程序執(zhí)行中的傳播過程,以達(dá)到獲取關(guān)鍵位置與輸入數(shù)據(jù)關(guān)聯(lián)信息的分析方法[1]。隨著網(wǎng)絡(luò)化、信息化的不斷推進(jìn),來自于網(wǎng)絡(luò)的威脅越來越大,并逐漸呈現(xiàn)以下特征:惡意攻擊代碼變種越來越多,攻擊方式隱蔽性越來越高明,攻擊行為組織性專業(yè)性越來越強(qiáng)。網(wǎng)絡(luò)安全遭受的威脅日益加劇,防范難度日愈嚴(yán)峻。污點(diǎn)分析從網(wǎng)絡(luò)惡意攻擊的本質(zhì)入手,以一種溯源式的方式判斷外部傳遞數(shù)據(jù)對(duì)跳轉(zhuǎn)地址、返回地址、函數(shù)指針的影響,直接檢測(cè)網(wǎng)絡(luò)惡意攻擊的進(jìn)行。
動(dòng)態(tài)污點(diǎn)分析(Dynamic Taint Analysis, DTA)[2]能夠在程序運(yùn)行過程中,以運(yùn)行時(shí)機(jī)器指令流為依據(jù),對(duì)目標(biāo)軟件的非信任數(shù)據(jù)進(jìn)行信息流跟蹤,監(jiān)控軟件系統(tǒng)安全狀態(tài)。動(dòng)態(tài)污點(diǎn)分析是污點(diǎn)分析的主要模式,被廣泛運(yùn)用于信息安全驗(yàn)證、惡意代碼分析[3]、隱私泄露分析、協(xié)議格式逆向分析[4]等領(lǐng)域。分析時(shí),首先將未獲取安全認(rèn)證的輸入數(shù)據(jù)標(biāo)記為污染源,然后根據(jù)程序?qū)崟r(shí)指令和運(yùn)行時(shí)狀態(tài)信息,依據(jù)制定的污點(diǎn)流傳播規(guī)則,分析污染源數(shù)據(jù)在寄存器和內(nèi)存中的傳播過程,同時(shí)在程序敏感字段設(shè)置檢測(cè)點(diǎn),當(dāng)檢測(cè)到有污染源數(shù)據(jù)導(dǎo)入時(shí)采取相應(yīng)的安全決策措施。
當(dāng)前動(dòng)態(tài)污點(diǎn)分析技術(shù)按分析粒度可以劃分為細(xì)粒度(fine-grained)[5]動(dòng)態(tài)污點(diǎn)分析技術(shù)和粗粒度(coarse-grained)[6]動(dòng)態(tài)污點(diǎn)分析技術(shù)。粗粒度污點(diǎn)分析一般用于異常行為檢測(cè),例如對(duì)于某一端口的惡意掃描或其他不正常行為;細(xì)粒度污點(diǎn)分析則主要用于檢測(cè)程序的脆弱性攻擊點(diǎn)。粗粒度污點(diǎn)分析具有分析速度快、占用存儲(chǔ)空間小的優(yōu)點(diǎn),可用于檢測(cè)污點(diǎn)數(shù)據(jù)有無問題;細(xì)粒度污點(diǎn)分析精度高,可解決數(shù)據(jù)流的回溯問題?,F(xiàn)階段動(dòng)態(tài)污點(diǎn)分析均采用單一解析模式,都會(huì)碰到污點(diǎn)分析不精確、驗(yàn)證測(cè)試代價(jià)大或代碼解析效率低、空間需求過大的難題。
針對(duì)現(xiàn)有污點(diǎn)分析方法的不足,本文提出一種面向二進(jìn)制代碼的粗細(xì)粒度結(jié)合的動(dòng)態(tài)污點(diǎn)分析方法,利用粗粒度污點(diǎn)分析技術(shù)對(duì)目標(biāo)程序進(jìn)行實(shí)時(shí)監(jiān)控和預(yù)分析,實(shí)時(shí)記錄其執(zhí)行指令流及相關(guān)寄存器和內(nèi)存信息,同時(shí)依據(jù)策略分析污點(diǎn)傳播狀態(tài)。當(dāng)滿足中斷策略時(shí),輸出現(xiàn)有指令流記錄信息至離線細(xì)粒度污點(diǎn)分析系統(tǒng),快速高效地分析字節(jié)粒度的污點(diǎn)源關(guān)聯(lián)性,并執(zhí)行測(cè)試驗(yàn)證或安全修復(fù)。
動(dòng)態(tài)污點(diǎn)分析的主要目的是解決軟件安全問題,而導(dǎo)致軟件安全性問題的主要原因是軟件自身在設(shè)計(jì)、實(shí)現(xiàn)和配置時(shí)引入的各種安全漏洞(也稱脆弱性)。安全漏洞是指軟件中違背安全策略并導(dǎo)致安全危害的不足或缺陷,在一般條件下,可信程序在無外界干預(yù)的條件下,其運(yùn)行可認(rèn)為是可控的。軟件安全漏洞的出現(xiàn)在于程序自身,而其利用則以外部數(shù)據(jù)為誘因。
動(dòng)態(tài)污點(diǎn)分析以信息流傳播為主要分析對(duì)象,著重跟蹤外部引入數(shù)據(jù)在運(yùn)行中的傳播活動(dòng),其主要的分析過程包括污點(diǎn)標(biāo)記、污點(diǎn)傳播、污點(diǎn)檢測(cè)。運(yùn)行時(shí)污點(diǎn)狀態(tài)信息是動(dòng)態(tài)污點(diǎn)分析的基礎(chǔ)和對(duì)象,與污點(diǎn)分析的三大模塊密切相關(guān)。
定義1運(yùn)行時(shí)污點(diǎn)狀態(tài)(taint status)。在污點(diǎn)標(biāo)記和污點(diǎn)傳播中,對(duì)每個(gè)內(nèi)存(MEM)、寄存器(REG)和標(biāo)志位(eflags)獲取污點(diǎn)信息,該污點(diǎn)信息的集合統(tǒng)稱為運(yùn)行時(shí)污點(diǎn)狀態(tài)。指令的運(yùn)行會(huì)觸發(fā)的改變,在程序的運(yùn)行過程中,隨著污點(diǎn)信息的不斷引入和傳播,最終形成狀態(tài)轉(zhuǎn)換序列:=01…。
動(dòng)態(tài)污點(diǎn)分析的框架結(jié)構(gòu)如圖1所示。
圖1 動(dòng)態(tài)污點(diǎn)分析框架結(jié)構(gòu)
污點(diǎn)數(shù)據(jù)標(biāo)記、污點(diǎn)數(shù)據(jù)傳播和敏感點(diǎn)污點(diǎn)檢測(cè)為3個(gè)平行的污點(diǎn)操作活動(dòng)。運(yùn)用HOOK機(jī)制獲取指令流信息后,需結(jié)合當(dāng)前運(yùn)行時(shí)污點(diǎn)狀態(tài)和指令信息判斷:
(1)若該位置為敏感位置則進(jìn)行污點(diǎn)檢測(cè),如果存在污點(diǎn)信息的不當(dāng)使用則輸出該信息。
(2)若為污點(diǎn)引入則采用污點(diǎn)標(biāo)記策略,標(biāo)記外部引入數(shù)據(jù),同時(shí)更新。
(3)若為污點(diǎn)傳播則依據(jù)指令內(nèi)含的信息流傳播策略指導(dǎo)執(zhí)行并更新。
運(yùn)行時(shí)污點(diǎn)狀態(tài)提供了系統(tǒng)中的污點(diǎn)信息,依據(jù)記錄信息的精細(xì)劃分,將其區(qū)分為2種不同的粒度:粗粒度污點(diǎn)狀態(tài)和細(xì)粒度污點(diǎn)狀態(tài),其蘊(yùn)含的信息量不同,對(duì)應(yīng)的污點(diǎn)分析目的也有所區(qū)別。對(duì)兩者進(jìn)行比較,結(jié)果如表1所示。
表1 粗細(xì)粒度污點(diǎn)分析對(duì)比
粗粒度污點(diǎn)分析是將所有外部輸入的不可信數(shù)據(jù)源均標(biāo)記為污點(diǎn)源,該污點(diǎn)源的標(biāo)記是采用一種粗放式的標(biāo)識(shí)方法,所有污點(diǎn)源為不區(qū)分的單一模式。而對(duì)于每個(gè)寄存器、內(nèi)存地址和標(biāo)志位,均只有2種狀態(tài):untainted和tainted。
細(xì)粒度污點(diǎn)分析需要標(biāo)定和追蹤每個(gè)污點(diǎn)數(shù)據(jù)單元。由于一個(gè)內(nèi)存單元可能依賴于多個(gè)污點(diǎn)數(shù)據(jù),因此需要用集合結(jié)構(gòu)描述一個(gè)內(nèi)存單元的污點(diǎn)屬性。由污點(diǎn)屬性可以回溯污點(diǎn)傳播源頭,在分析過程中,一般采用整型變量表示污點(diǎn)標(biāo)簽,并建立變量索引表。本文采用的細(xì)粒度污點(diǎn)分析的污點(diǎn)數(shù)據(jù)標(biāo)記和污點(diǎn)個(gè)體描述均是以字節(jié)為單位。
粗粒度污點(diǎn)分析污點(diǎn)標(biāo)記簡(jiǎn)單,污點(diǎn)信息存儲(chǔ)空間小,分析速率快,而細(xì)粒度污點(diǎn)分析精度高,針對(duì)性強(qiáng)。本文結(jié)合粗粒度污點(diǎn)分析的高效性與細(xì)粒度污點(diǎn)分析的精確性,提出粗細(xì)粒度結(jié)合污點(diǎn)分析框架,具體設(shè)計(jì)如圖2所示。
圖2 粗細(xì)粒度結(jié)合的動(dòng)態(tài)污點(diǎn)分析框架
污點(diǎn)分析的主要分析模式遵循圖1的框架設(shè)計(jì),本文按粗細(xì)粒度區(qū)分實(shí)現(xiàn)了2種污點(diǎn)分析方式,并以中斷策略作為時(shí)空間隔標(biāo)準(zhǔn),先粗后細(xì)、先有無后精準(zhǔn)地實(shí)現(xiàn)快速高效的污點(diǎn)分析過程。中斷策略可設(shè)置為程序運(yùn)行結(jié)束或污點(diǎn)數(shù)據(jù)誤用敏感點(diǎn)。
在本文構(gòu)建的粗細(xì)粒度污點(diǎn)分析框架中,目標(biāo)程序運(yùn)行于客戶操作系統(tǒng)中,以運(yùn)行時(shí)的底層二進(jìn)制執(zhí)行指令作為分析對(duì)象,具有較強(qiáng)的系統(tǒng)無關(guān)性,適用于Windows、Linux、Mac OS等多種操作系統(tǒng)。同時(shí)虛擬的隔離環(huán)境提供良好的透明性,能分析各種類型的應(yīng)用程序軟件。該框架能較全面地應(yīng)用于各類系統(tǒng)與軟件的安全性分析,具有較好的普適性與可擴(kuò)展性。
程序監(jiān)控的指令流及運(yùn)行時(shí)信息駁雜且繁多,其中包含眾多圖形界面接口調(diào)用、系統(tǒng)參數(shù)讀取等非污點(diǎn)傳播事務(wù)軌跡信息,真正有效的污點(diǎn)傳播指令流較少。本文將繁雜的初運(yùn)行時(shí)信息和指令流用于簡(jiǎn)單的粗粒度污點(diǎn)分析,以在線分析形式快速獲取指令污點(diǎn)傳播信息,同時(shí)記錄污點(diǎn)傳播的指令流及對(duì)應(yīng)運(yùn)行時(shí)信息,依據(jù)中斷策略導(dǎo)出,之后轉(zhuǎn)入離線狀態(tài)的細(xì)粒度污點(diǎn)分析模塊,利用高性能處理機(jī)進(jìn)行分析。
污點(diǎn)標(biāo)記是污點(diǎn)傳播的首要步驟,其標(biāo)記方式極大地影響著污點(diǎn)傳播處理與污點(diǎn)信息存儲(chǔ)的效率。污點(diǎn)標(biāo)記是將外部引入的數(shù)據(jù)標(biāo)記為污點(diǎn)數(shù)據(jù)。本文采取粗細(xì)粒度區(qū)分的方式,制定2種污點(diǎn)標(biāo)記策略:
(1)對(duì)于粗粒度污點(diǎn)分析,污點(diǎn)信息的標(biāo)記值設(shè)定為tainted和untainted。污點(diǎn)源頭標(biāo)記的依據(jù)源于對(duì)程序運(yùn)行時(shí)系統(tǒng)調(diào)用函數(shù)的監(jiān)控,主要的監(jiān)控函數(shù)包括文件輸入open、read函數(shù)(Linux)、文件輸入OpenFile、ReadFile函數(shù)(Windows)、網(wǎng)絡(luò)輸入send、recv、sendto、recvfrom函數(shù)等。利用HOOK技術(shù)監(jiān)視系統(tǒng)調(diào)用,劫持目標(biāo)系統(tǒng)函數(shù)調(diào)用信息,獲取函數(shù)參數(shù),解析參數(shù)含義,轉(zhuǎn)向自定義函數(shù)調(diào)用處理,以獲取污點(diǎn)源頭輸入。
(2)對(duì)于粗粒度污點(diǎn)分析,內(nèi)存標(biāo)記的狀態(tài)空間僅為{tainted, untainted},同時(shí)污點(diǎn)數(shù)據(jù)的引入和傳播具有局部性的特征:污點(diǎn)數(shù)據(jù)通常分散存在于內(nèi)存的某重點(diǎn)區(qū)域;污點(diǎn)數(shù)據(jù)的引入一般會(huì)集中在某塊區(qū)域。故相應(yīng)的粗粒度污點(diǎn)分析內(nèi)存標(biāo)記模型采用精簡(jiǎn)式集中管理,將所有涉污數(shù)據(jù)地址統(tǒng)一存儲(chǔ),運(yùn)用段式污點(diǎn)標(biāo)記方法,標(biāo)識(shí)污點(diǎn)信息流的作用空間,可一定程度上降低內(nèi)存消耗。
在本文中,內(nèi)存中涉污數(shù)據(jù)段采用數(shù)據(jù)結(jié)構(gòu)
表2 粗粒度污點(diǎn)分析存儲(chǔ)模式
在細(xì)粒度污點(diǎn)分析中,以粗粒度分析后的涉污軌跡信息文件為對(duì)象,其污點(diǎn)的內(nèi)存標(biāo)記以字節(jié)為單位,并維護(hù)一個(gè)相對(duì)應(yīng)的影子內(nèi)存(shadow memory)[7]記錄內(nèi)存地址和污點(diǎn)屬性的映射關(guān)系。影子內(nèi)存為到的映射,記為{},其中,為單點(diǎn)鏈?zhǔn)絺鞑ゴ械臓顟B(tài)快照,包含源污點(diǎn)數(shù)據(jù)標(biāo)識(shí)表和依賴污點(diǎn)源數(shù)據(jù)結(jié)構(gòu)體。
本文采用字節(jié)粒度的污點(diǎn)數(shù)據(jù)標(biāo)識(shí),標(biāo)識(shí)號(hào)應(yīng)用順序整型的數(shù)字標(biāo)號(hào),標(biāo)識(shí)號(hào)的集合構(gòu)成源污點(diǎn)數(shù)據(jù)標(biāo)識(shí)表,依賴污點(diǎn)源數(shù)據(jù)結(jié)構(gòu)體采用有序二元決策圖(reduced ordered Binary Decision Diagram, roBDD)[8]。
動(dòng)態(tài)污點(diǎn)分析的靈魂是污點(diǎn)信息流[9]的傳播,信息流的傳播是污染源在程序運(yùn)行中擴(kuò)散和蔓延的關(guān)鍵,污染源數(shù)據(jù)以信息流為載體,沿著信息流傳播方向傳遞。伴隨著信息流的不斷傳播,污點(diǎn)信息不斷產(chǎn)生、傳遞和使用,可以說,信息流是污點(diǎn)數(shù)據(jù)傳播的宿主,它是傳播的支配者,要分析污染源的傳播狀態(tài),需從宿主著手,分析信息流傳播的方向性、范圍度、時(shí)效性,進(jìn)而重點(diǎn)跟蹤污染數(shù)據(jù)的路徑軌跡。本文動(dòng)態(tài)污點(diǎn)分析的過程即從信息流傳播入手,以執(zhí)行時(shí)二進(jìn)制匯編代碼為分析對(duì)象,研究信息流傳遞的時(shí)空特性,獲取狀態(tài)信息和傳播過程。
定義2污點(diǎn)信息流傳播(Taint-flow Propagation, TFP)是程序運(yùn)行時(shí)污點(diǎn)狀態(tài)的變化過程,為運(yùn)行時(shí)污點(diǎn)狀態(tài)序列=01…中相鄰鏈節(jié)點(diǎn)ts→ts+1的轉(zhuǎn)移過程,其前趨狀態(tài)ts為源狀態(tài),后趨狀態(tài)ts+1為目的狀態(tài)。
定義3污點(diǎn)傳播策略(Taint Propagation Strategy, TPS)是一種預(yù)設(shè)定的規(guī)則,為執(zhí)行指令操作到污點(diǎn)信息傳播形式的映射集合。TPS={data-flow strategy, control-flow strategy}包含數(shù)據(jù)流[10]分析策略和控制流[11]分析策略。污點(diǎn)傳播策略的完備性和正確性極大程度上決定了污點(diǎn)分析過程的精準(zhǔn)度。
數(shù)據(jù)流分析主要分析由數(shù)據(jù)移動(dòng)指令、算術(shù)邏輯運(yùn)算指令引發(fā)的值轉(zhuǎn)移過程,控制流分析主要分析由指令跳轉(zhuǎn)引發(fā)的控制轉(zhuǎn)移過程。數(shù)據(jù)流分析的主要對(duì)象為顯式操作數(shù)(標(biāo)準(zhǔn)指令格式中的操作數(shù))及隱式操作數(shù)(存在數(shù)據(jù)流轉(zhuǎn)移但未在指令中標(biāo)示的操作數(shù),以標(biāo)志位為代表),其側(cè)重點(diǎn)是通過解析指令,依據(jù)污點(diǎn)傳播策略指導(dǎo)污染數(shù)據(jù)的傳播??刂屏鞣治龃蠖噌槍?duì)跳轉(zhuǎn)類指令,以分支路徑跳轉(zhuǎn)為研究?jī)?nèi)容,由于匯編指令中,條件跳轉(zhuǎn)多數(shù)以標(biāo)志位為判斷,因此本文控制流分析的主要對(duì)象為跳轉(zhuǎn)指令中的標(biāo)志位污點(diǎn)信息。
本文將策略定義為模式和行為實(shí)體的集合strategy=
表3 動(dòng)態(tài)污點(diǎn)分析策略
控制流傳播分析旨在獲取當(dāng)前執(zhí)行路徑的污點(diǎn)約束,粗粒度污點(diǎn)標(biāo)記信息極簡(jiǎn)單,其控制流污點(diǎn)信息只表明污點(diǎn)控制的有無性,分析意義并不明顯,因此,本文重點(diǎn)設(shè)計(jì)了CTDPS、FTDPS和FTCPS。
本文依據(jù)匯編指令執(zhí)行規(guī)則,將粗粒度分析條件下信息流傳播模式(CTDPM)區(qū)分為以下5種:data in, data clear, eflags in, eflags set, NULL。過程分析中的污點(diǎn)傳播模式均屬于該類間集合。data in為存儲(chǔ)單元數(shù)據(jù)流引入;data clear為存儲(chǔ)單元數(shù)據(jù)流清除;eflags in為標(biāo)志位數(shù)據(jù)流引入;eflags clear為標(biāo)志位清除;NULL是空模式,為無污點(diǎn)流傳遞。圖3展示了粗粒度信息流傳播模式及具體示例。
圖3 粗粒度數(shù)據(jù)流傳播模式
粗粒度污點(diǎn)分析下信息流傳播策略的行為實(shí)體極為簡(jiǎn)略,其實(shí)體集合僅含{settainted, setuntainted, NULL}3類操作,分別表示污點(diǎn)屬性設(shè)定、污點(diǎn)屬性消除和空操作。粗粒度條件下,污點(diǎn)屬性信息為統(tǒng)一存儲(chǔ)維護(hù)的,所以,將依據(jù)污點(diǎn)屬性的更新,實(shí)時(shí)管理內(nèi)存污點(diǎn)屬性標(biāo)識(shí)鏈表、寄存器污點(diǎn)屬性標(biāo)識(shí)順序表和標(biāo)志位污點(diǎn)屬性字節(jié)。
細(xì)粒度分析條件下數(shù)據(jù)流傳播模式(FTDPM)區(qū)分為以下6種:data in, data add, data clear, eflags in, eflagsclear, NULL。data in為存儲(chǔ)單元數(shù)據(jù)流模式;data add為存儲(chǔ)單元數(shù)據(jù)流添加;data clear為存儲(chǔ)單元數(shù)據(jù)流清除;eflags in為標(biāo)志位數(shù)據(jù)流引入;eflags clear為標(biāo)志位清除;NULL為空模式。圖4展示了細(xì)粒度信息流傳播模式及具體示例。
圖4 細(xì)粒度信息流傳播模式
行為實(shí)體是針對(duì)污點(diǎn)屬性的具體操作,本文在細(xì)粒度分析條件下,共定義了7種行為實(shí)體。該行為實(shí)體適用于數(shù)據(jù)流分析策略和控制流分析策略。其中,()為當(dāng)前指令執(zhí)行中引入的源污點(diǎn)數(shù)據(jù)條目;()為當(dāng)前污染源集合,公式中行為實(shí)體5和行為實(shí)體6的主要區(qū)別是實(shí)體5是面向data add模式,而實(shí)體6是面向data in模式。細(xì)粒度污點(diǎn)信息流傳播中污點(diǎn)屬性的行為實(shí)體操作及應(yīng)用條件如表4所示。
表4 細(xì)粒度污點(diǎn)信息流傳播行為實(shí)體操作
細(xì)粒度分析條件下控制流傳播只包含一種模式,即控制流添加模式control add,隨著執(zhí)行路徑的深入,控制流污點(diǎn)信息是一個(gè)將當(dāng)前路徑約束逐步添加到全局路徑約束的不可逆過程,其行為實(shí)體如下:
對(duì)比可見,文中所提出的細(xì)粒度條件下污點(diǎn)傳播策略較粗粒度條件下擴(kuò)展了模式類別,細(xì)化了行為實(shí)體。此舉既提升了在線模式下污點(diǎn)分析的效率和規(guī)模,同時(shí)應(yīng)用離線細(xì)粒度污點(diǎn)分析,提高了分析的精準(zhǔn)度。
執(zhí)行軌跡信息是動(dòng)態(tài)污點(diǎn)分析的基礎(chǔ),污點(diǎn)分析過程中污點(diǎn)屬性的獲取和傳播、污點(diǎn)信息的讀取和寫入都依賴于執(zhí)行軌跡信息。在線粗粒度污點(diǎn)分析過程中,執(zhí)行軌跡信息是通過HOOK機(jī)制獲取的,包括指令流的提取,內(nèi)存、寄存器內(nèi)容讀取,可以根據(jù)需要實(shí)時(shí)獲取運(yùn)行時(shí)狀態(tài)信息,信息量足以滿足粗粒度污點(diǎn)分析的需要。而細(xì)粒度污點(diǎn)分析以包含有限信息的離線軌跡文件為唯一依據(jù),離線軌跡文件信息的完備性和精準(zhǔn)性在細(xì)粒度污點(diǎn)分析中起了決定性作用。
離線軌跡文件的記錄關(guān)鍵在于需求信息的全面性,但完整記錄程序運(yùn)行時(shí)的狀態(tài)信息是不現(xiàn)實(shí)的,因此,本文從污點(diǎn)分析的實(shí)質(zhì)出發(fā),以污點(diǎn)為中心,將污點(diǎn)相關(guān)作為記錄標(biāo)準(zhǔn),重點(diǎn)執(zhí)行如表5所示的策略。
表5 污點(diǎn)記錄策略
指令運(yùn)行時(shí)狀態(tài)參數(shù)指導(dǎo)行為實(shí)體具體執(zhí)行,同樣是污點(diǎn)分析的必要信息。因此,本文的離線軌跡信息文件從污點(diǎn)分析需求出發(fā),著重記錄指導(dǎo)污點(diǎn)傳播策略制定的污點(diǎn)屬性標(biāo)識(shí)、設(shè)定污點(diǎn)引入操作的源污點(diǎn)標(biāo)識(shí)、定位污點(diǎn)傳播操作的地址信息等,具體結(jié)構(gòu)如表6所示。
表6 離線軌跡文件記錄結(jié)構(gòu)
該結(jié)構(gòu)所記錄的文件內(nèi)容都是指令執(zhí)行前的狀態(tài)參數(shù),離線分析系統(tǒng)掃描一行軌跡信息后,提取其源污點(diǎn)標(biāo)識(shí),依據(jù)標(biāo)識(shí)有無采用污點(diǎn)標(biāo)記策略或污點(diǎn)傳播策略。獲取指令助記符、操作數(shù)和污點(diǎn)屬性,可確定完整的污點(diǎn)傳播策略。提取內(nèi)容和獲取信息的對(duì)應(yīng)關(guān)系如表7所示。
表7 離線軌跡文件信息提取
污點(diǎn)數(shù)據(jù)的超權(quán)限使用是污點(diǎn)分析檢查的重點(diǎn),本文在粗粒度污點(diǎn)分析模塊和細(xì)粒度污點(diǎn)分析模塊中均設(shè)置了敏感點(diǎn)檢測(cè),以制定的策略檢查污點(diǎn)數(shù)據(jù)的異常使用。針對(duì)當(dāng)前軟件安全的主要威脅點(diǎn),本文主要對(duì)污點(diǎn)數(shù)據(jù)作為跳轉(zhuǎn)地址、污點(diǎn)數(shù)據(jù)作為執(zhí)行代碼和污點(diǎn)數(shù)據(jù)的受控寫入等異常以為敏感點(diǎn)。著重檢測(cè)JMP類、MOV類、CALL、RET指令的污點(diǎn)信息。
本文實(shí)現(xiàn)的敏感點(diǎn)檢測(cè)模式包括:粗粒度敏感點(diǎn)檢測(cè)(coarse-grained sensitive point detection),細(xì)粒度敏感點(diǎn)檢測(cè)(fine-grained sensitive point detection),人工檢測(cè)(manual- control detection),3種模式均為可選模式,功能分別為:(1)粗粒度敏感點(diǎn)檢測(cè):監(jiān)控程序運(yùn)行狀態(tài)中的異常,防范惡意攻擊。(2)細(xì)粒度敏感點(diǎn)檢測(cè):獲取敏感位置污點(diǎn)信息,用于脆弱點(diǎn)驗(yàn)證。(3)人工檢測(cè):獲取運(yùn)行時(shí)污點(diǎn)狀態(tài)信息。
本文基于QEMU虛擬機(jī)[12]開發(fā)實(shí)現(xiàn)了粗細(xì)粒度結(jié)合動(dòng)態(tài)污點(diǎn)分析原型系統(tǒng)。利用虛擬化技術(shù)透明地監(jiān)視目標(biāo)程序的運(yùn)行狀態(tài),通過HOOK機(jī)制監(jiān)控執(zhí)行指令、參數(shù)及存儲(chǔ)狀態(tài)信息等。基本軟/硬件運(yùn)行環(huán)境如表8所示。
表8 實(shí)驗(yàn)基本軟/硬件環(huán)境
原型系統(tǒng)采用前述的框架設(shè)計(jì),使用自編譯程序test.exe、windows系統(tǒng)自帶記事本程序和安裝第三方軟件Adobe Reader作為測(cè)試實(shí)例。
在粗粒度污點(diǎn)分析中,將外部引入數(shù)據(jù)標(biāo)記為污點(diǎn)源,包括test.exe的輸入字符、記事本文件test.txt以及PDF文件test.pdf。使用CTDPS與CTCPS指導(dǎo)污點(diǎn)傳播過程,并維護(hù)一個(gè)共用的污點(diǎn)記錄結(jié)構(gòu),運(yùn)行過程中依文件記錄策略記錄離線軌跡文件,具體實(shí)例如下:
<7c93017b: IsSource; ADD EAX, [EBX];
REG@EAX[0x00250680]$4T MEM@0x0012fa78 [0x0012fb20] $4T FLAG@EFLAGS[0xffffffa0]$4T>
<7c9301b4: JNZ 0x7c930719; FLAG@EFLAGS[0xfffffcd1] $4T>
<7c872993:CALL 0x7c93069c; REG@0x7c93069c [8ac38ec2]$4N>
監(jiān)控程序主進(jìn)程Test.exe、Notepad.exe、AcroRd32.exe,獲取并記錄其運(yùn)行指令,提取污點(diǎn)相關(guān)指令,同時(shí)記錄粗粒度污點(diǎn)分析的耗時(shí)。表9展示了離線軌跡文件采集過程的統(tǒng)計(jì)信息。從實(shí)驗(yàn)結(jié)果可以看出,隨著監(jiān)控程序的增大和污點(diǎn)數(shù)據(jù)源的擴(kuò)大,監(jiān)控指令數(shù)和污點(diǎn)相關(guān)指令數(shù)均會(huì)大幅增加,粗粒度污點(diǎn)分析的耗時(shí)也會(huì)增加。分析觀察數(shù)據(jù),發(fā)現(xiàn)Adobe Reader 7.0的污點(diǎn)相關(guān)指令數(shù)占進(jìn)程相關(guān)指令數(shù)的比例較大,而其他兩者均相對(duì)較小。原因在于,test.pdf相對(duì)于其他兩個(gè)輸入污點(diǎn)文件,其包含了許多閱讀器所需的參數(shù),這些參數(shù)和用戶寫入的PDF文件內(nèi)容一同被標(biāo)記為污點(diǎn)數(shù)據(jù),同時(shí)在文件打開閱讀的過程中,被大量使用,故導(dǎo)致污點(diǎn)相關(guān)指令數(shù)比例的大幅增加。如何篩選污點(diǎn)引入數(shù)據(jù),減少污點(diǎn)相關(guān)指令數(shù)將是筆者下一步工作需要解決的問題。
表9 離線軌跡采集的實(shí)驗(yàn)數(shù)據(jù)
輸出離線軌跡文件至離線分析機(jī),通過細(xì)粒度污點(diǎn)分析模塊進(jìn)一步進(jìn)行細(xì)粒度污點(diǎn)分析,以FTDPS與FTCPS為指導(dǎo)策略,依次序讀取指令流,獲取指令參數(shù)及存儲(chǔ)狀態(tài)信息,計(jì)算并更新內(nèi)存、寄存器、標(biāo)志位的污點(diǎn)狀態(tài),并將其存儲(chǔ)在相應(yīng)影子內(nèi)存中。在離線分析過程中,可設(shè)置停止位、暫停污點(diǎn)分析、查詢污點(diǎn)狀態(tài)、在離線文件 27 658行查詢寄存器EAX、內(nèi)存地址0x00250680和符號(hào)位ZF的污點(diǎn)信息值,結(jié)果如下:
line27658EAX:tainted{1,2,3,4,7,8}
line27658 0x00250680:untainted
line27658ZF:tainted{5,6,7,8}
對(duì)比粗粒度污點(diǎn)分析污點(diǎn)記錄和細(xì)粒度污點(diǎn)分析污點(diǎn)查詢信息,可以看出污點(diǎn)狀態(tài)基本一致,但其中也存在個(gè)別位置污點(diǎn)屬性不統(tǒng)一的情況,主要原因是兩者的污點(diǎn)傳播策略不一致,粗粒度污點(diǎn)分析以快速方便為目標(biāo),相對(duì)而言分析的精確度不高,例如有些污點(diǎn)清除策略未制定全面。細(xì)粒度分析的策略則相對(duì)全面,因此,在具體分析過程中會(huì)有些許區(qū)別。
在對(duì)離線軌跡文件進(jìn)行細(xì)粒度污點(diǎn)分析過程中,本文在表10中記錄了細(xì)粒度污點(diǎn)分析模塊的運(yùn)行性能。
表10 細(xì)粒度污點(diǎn)的分析性能
可以看出,隨著應(yīng)用程序規(guī)模的擴(kuò)大,執(zhí)行指令數(shù)增加,污點(diǎn)分析的耗時(shí)也隨之增大。細(xì)粒度污點(diǎn)分析的主要時(shí)間消耗在于:(1)指令條目解析;(2)污點(diǎn)存儲(chǔ)模塊讀寫;(3)污點(diǎn)信息集合運(yùn)算。前兩條的耗時(shí)與離線軌跡文件中指令數(shù)成正比,集合運(yùn)算耗時(shí)與污點(diǎn)源大小關(guān)聯(lián),所以,細(xì)粒度污點(diǎn)分析的耗時(shí)與目標(biāo)軟件大小與污點(diǎn)源規(guī)模正相關(guān)。同時(shí)對(duì)比該表數(shù)據(jù)與表9可見細(xì)粒度污點(diǎn)分析的耗時(shí)和粗粒度污點(diǎn)分析差距不大,在只分析污點(diǎn)相關(guān)指令的情況下時(shí)間還能進(jìn)一步縮短,驗(yàn)證了粗細(xì)粒度結(jié)合的動(dòng)態(tài)污點(diǎn)分析方法具有較高的準(zhǔn)確性和快速性。
本文提出一種粗細(xì)粒度結(jié)合的二進(jìn)制代碼動(dòng)態(tài)污點(diǎn)分析方法,以動(dòng)態(tài)污點(diǎn)分析為基礎(chǔ),重點(diǎn)設(shè)計(jì)了先粗粒度后細(xì)粒度分析的新型框架結(jié)構(gòu),同時(shí)結(jié)合分析特性與需求,分別制定了粗細(xì)粒度條件下的信息流分析策略,并通過一種松耦合的方式,利用離線軌跡文件來傳遞分析信息。通過對(duì)原型系統(tǒng)的測(cè)試,驗(yàn)證了該方法兼有粗粒度和細(xì)粒度污點(diǎn)分析的優(yōu)點(diǎn),可實(shí)現(xiàn)高效、快捷、精確的分析。下一步將研究污點(diǎn)信息的精準(zhǔn)化定位和污點(diǎn)傳播路徑的回溯,提高對(duì)大型程序的分析效能。
[1] Lam M S, Martin M C, Livshits V B, et al. Securing Web Applications with Static and Dynamic Information Flow Tracking[C]//Proc. of 2008 ACM SIGPLAN Symposium on Partial Evaluation and Semantics-based Program Manipulation. New York, USA: ACM Press, 2008: 3-12.
[2] Newsome J, Song D. Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software[C]//Proc. of the 12th Annual Network and Distributed System Security Symposium. San Diego, USA: 2005.
[3] Sharif M, Lanzi A, Giffin J, et al. Automatic Reverse En- gineering of Malware Emulators[C]//Proc. of 2009 IEEE Symposium on Security and Privacy. Oakland, USA: IEEE Press, 2009: 94-109.
[4] Comparetti P M, Wondracek G, Kruegel C, et al. Prospex: Protocol Speci?cation Extraction[C]//Proc. of the 30th IEEE Symposium on Security and Privacy. Washington D. C., USA: IEEE Computer Society, 2009: 110-125.
[5] Yin Heng, Song D, Egele M, et al. Panorama: Capturing System-wide Information Flow for Malware Detection and Analysis[C]//Proc. of ACM Conference on Computer and Communication Security. Alexandria, USA: ACM Press, 2007: 116-127.
[6] Kohli P. Coarse-grained Dynamic Taint Analysis for Defeating Control and Non-control Data[EB/OL]. (2009-06-24). http:// arxiv.org/abs/0906.4481.
[7] Nethercote N, Seward J. How to Shadow Every Byte of Memory Used by a Program[C]//Proc. of the 3rd International ACM SIGPLAN/SIGOPS Conference on Virtual Execution
Environments. San Diego, USA: ACM Press, 2007: 65-74.
[8] Bryant R E. Symbolic Boolean Manipulation with Ordered Binary-decision Diagrams[J]. ACM Computing Surveys, 1992, 24(3): 293-318.
[9] 黃 強(qiáng), 曾慶凱. 基于信息流策略的污點(diǎn)傳播分析及動(dòng)態(tài)驗(yàn)證[J]. 軟件學(xué)報(bào), 2011, 22(9): 2036-2048.
[10]Denning D E. A Lattice Model of Secure Information Flow[J]. Communications of the ACM, 1976, 19(5): 236-243.
[11]Kang M G, McCamant S, Poosankam P. DTA++: Dynamic Taint Analysis with Targeted Control-Fow Pro- pagation[C]// Proc. of the 18th Annual Network and Distributed System Security Symposium. San Diego, USA: [s. n.], 2011.
[12]Bellard F. Qemu: A Fast and Portable Dynamic Translator[C]// Proc. of USENIX’05. Berkeley, USA: [s. n.], 2005: 41-46.
編輯 金胡考
A Dynamic Taint Analysis Method Combined with Coarse-grained and Fine-grained
SHI Da-wei, YUAN Tian-wei
(Jiangnan Institute of Computing Technology, Wuxi 214083, China)
Combination of coarse-grained and fine-grained Dynamic Taint Analysis(DTA) is developed to take speed and accuracy both into account. By comparing the realization process of coarse-grained DTA and fine-grained DTA, this paper proposes a new analysis framework. It executes online coarse-grained DTA to filter useful instruction, uses offline fine-grained DTA to calculate taint information. Coarse-grained and fine-grained taint mark methods are established respectively by comparing the difference of taint analysis. Data-flow property strategy and control-flow property strategy are developed under the condition of coarse-grained DTA and fine-grained DTA. As a transfer file, offline track record structure is designed to provide necessary information for fine-grained analysis. A prototype system is implemented and the experimental result proves that this method can ensure the rapid collection of taint information through online coarse-grained mode, and use offline fine-grained mode to improve the accuracy with accepted time consumption.
coarse-grained; fine-grained; Dynamic Taint Analysis(DTA); offline track; taint propagation; binary
國家“863”計(jì)劃基金資助項(xiàng)目(2012AA7111043)。
史大偉(1989-),男,碩士研究生,主研方向:軟件安全;袁天偉,高級(jí)工程師。
2013-10-17
2013-11-22 E-mail:sdave@126.com
1000-3428(2014)03-0012-06
A
TP309.2
10.3969/j.issn.1000-3428.2014.03.003