一種動(dòng)態(tài)標(biāo)記處理控制依賴的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種動(dòng)態(tài)標(biāo)記處理控制依賴的方法,屬于軟件工程和信息安全領(lǐng)域。
【背景技術(shù)】
[0002] 動(dòng)態(tài)污點(diǎn)分析技術(shù)最早于1976年由Dorothy E. Denning教授提出,是指將程序從 外部獲取的數(shù)據(jù)標(biāo)記為污點(diǎn),然后觀察污點(diǎn)在程序執(zhí)行過程中的傳播,從而得到程序中的 信息流等信息。它是一種確定軟件代碼中指令與指令、指令與數(shù)據(jù)之間關(guān)系的有效手段,被 廣泛應(yīng)用于惡意軟件分析、攻擊代碼檢測(cè)等軟件安全性分析研究中。
[0003] 動(dòng)態(tài)污點(diǎn)分析技術(shù)能夠有效的追蹤輸入數(shù)據(jù)在程序運(yùn)行中的軌跡。通過把外部輸 入數(shù)據(jù)標(biāo)記為污點(diǎn),記錄污點(diǎn)數(shù)據(jù)的傳播蹤跡,能夠根據(jù)傳播軌跡得到二進(jìn)制程序內(nèi)部的 分支信息。同時(shí)結(jié)合符號(hào)執(zhí)行技術(shù),根據(jù)程序中的分支信息能夠得到整個(gè)程序的條件跳轉(zhuǎn) 樹,并通過計(jì)算得到能夠遍歷每條路徑的測(cè)試用例。
[0004] 動(dòng)態(tài)污點(diǎn)分析的過程主要包括污染源標(biāo)記、污染傳播規(guī)則指定和污點(diǎn)傳播計(jì)算三 個(gè)方面。污染源標(biāo)記即去頂被監(jiān)控?cái)?shù)據(jù)的起源,所有來自不被信任的渠道的數(shù)據(jù)都應(yīng)該被 標(biāo)記為"被污染"的。污染傳播規(guī)則是根據(jù)程序指令和函數(shù)的語義,結(jié)合污點(diǎn)源數(shù)據(jù)的特點(diǎn) 所定制的針對(duì)污點(diǎn)數(shù)據(jù)處理的推理規(guī)則。污點(diǎn)傳播計(jì)算則是在前邊兩方面工作的基礎(chǔ)上, 結(jié)合動(dòng)態(tài)執(zhí)行監(jiān)控的動(dòng)態(tài)過程信息,展開對(duì)污點(diǎn)數(shù)據(jù)處理過程的分析,確定其中指令與指 令、指令和數(shù)據(jù)之間的關(guān)系。
[0005] 動(dòng)態(tài)污點(diǎn)分析中數(shù)據(jù)的傳播包含數(shù)據(jù)依賴傳播和控制依賴傳播。數(shù)據(jù)依賴傳播處 理起來非常簡單,如果源操作數(shù)中有污染數(shù)據(jù),那么相應(yīng)的目標(biāo)操作數(shù)也應(yīng)該被標(biāo)記為污 點(diǎn)數(shù)據(jù)??刂埔蕾噦鞑ハ鄬?duì)復(fù)雜很多,如果不能處理將會(huì)導(dǎo)致污染缺失,導(dǎo)致一些本應(yīng)該被 標(biāo)記的數(shù)據(jù)沒有被標(biāo)記,丟失很多信息。為了處理控制依賴問題,常用的方法就是對(duì)程序進(jìn) 行控制流分析。首先生成程序的控制流圖,然后生成必經(jīng)節(jié)點(diǎn)樹和后必經(jīng)節(jié)點(diǎn)樹,判斷哪些 數(shù)據(jù)是由控制條件決定的,從而將這些數(shù)據(jù)也標(biāo)記為污點(diǎn)數(shù)據(jù)。但是這種方法比較適用于 針對(duì)源碼的靜態(tài)分析,對(duì)于二進(jìn)制程序則需要反匯編,反匯編的過程又可能丟失重要信息。 針對(duì)二進(jìn)制程序的動(dòng)態(tài)標(biāo)記方法則存在很多困難,程序每次運(yùn)行時(shí)都是執(zhí)行所有分支條件 中的一種選擇,不能僅僅依據(jù)本次的執(zhí)行判斷分支條件處另一條路徑的情況。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明技術(shù)解決問題:克服現(xiàn)有技術(shù)的不足,提供一種動(dòng)態(tài)標(biāo)記處理控制依賴的 方法,主要針對(duì)動(dòng)態(tài)污點(diǎn)分析中的控制依賴問題進(jìn)行處理,在對(duì)二進(jìn)制程序進(jìn)行動(dòng)態(tài)污點(diǎn) 分析的過程中,動(dòng)態(tài)識(shí)別控制依賴問題導(dǎo)致的污染數(shù)據(jù),將其標(biāo)記并傳播,減輕污染缺失的 影響,提高了測(cè)試的路徑覆蓋率。
[0007] 本發(fā)明的技術(shù)解決方案:這種在動(dòng)態(tài)污染分析過程中動(dòng)態(tài)處理控制依賴問題的方 法,包含以下兩個(gè)方面:
[0008] (1)對(duì)程序進(jìn)行動(dòng)態(tài)污染分析,利用Valgrind框架對(duì)被測(cè)試的二進(jìn)制程序進(jìn)行插 粧操作,將外部輸入文件作為污染源,跟蹤污點(diǎn)傳播路徑,最終獲得程序的動(dòng)態(tài)執(zhí)行軌跡。 分析Valgrind中間語言VEX IR及得到的程序動(dòng)態(tài)執(zhí)行軌跡的特點(diǎn),制定相應(yīng)的針對(duì)控制 依賴問題的污染傳播規(guī)則。
[0009] (2)在動(dòng)態(tài)污染分析的過程中,實(shí)施污染傳播規(guī)則。每次對(duì)被測(cè)程序進(jìn)行動(dòng)態(tài)污染 分析時(shí),收集程序動(dòng)態(tài)執(zhí)行軌跡上的分支信息,提取出約束條件集合,利用求解器求解是否 有滿足條件的值,如果存在則可以生成新的子測(cè)試用例。不斷重復(fù)這個(gè)過程,最終構(gòu)建出程 序完整的條件跳轉(zhuǎn)樹,每個(gè)測(cè)試用例對(duì)應(yīng)一條路徑,通過輸入不同的測(cè)試用例最終測(cè)試二 進(jìn)制程序的所有路徑。
[0010] 所述通過Valgrind框架實(shí)現(xiàn)對(duì)二進(jìn)制程序的插粧操作完成時(shí),Valgrind會(huì)將它 劃分成一個(gè)一個(gè)的基本塊,每次處理一個(gè)基本塊,首先把當(dāng)前基本塊翻譯成中間語言VEX, 然后傳遞給特定的Valgrind工具,完成插粧操作,最終將插粧好的中間語言重新編譯成機(jī) 器碼。
[0011] 所述通過分析Valgrind中間語言VEX IR及程序動(dòng)態(tài)執(zhí)行軌跡的特點(diǎn),制定相應(yīng) 的針對(duì)控制依賴問題的污染傳播規(guī)則的過程如下:
[0012] (1)通過分析VEX IR及程序動(dòng)態(tài)執(zhí)行軌跡的特點(diǎn),定義控制依賴相關(guān)變量的標(biāo)記 屬性公式。
[0013] (2)根據(jù)父用例和子用例角色的不同,依據(jù)標(biāo)記屬性公式制定傳播規(guī)則。
[0014] 在構(gòu)造并遍歷程序的條件跳轉(zhuǎn)樹的過程中加入根據(jù)污染傳播規(guī)則得到控制依賴 相關(guān)的變量的信息。對(duì)每條路徑取反達(dá)到相關(guān)路徑,此時(shí)路徑信息不僅來自數(shù)據(jù)依賴,也包 含了控制依賴的信息,可以得到更加完整污染傳播信息,從而構(gòu)造更加完整的程序跳轉(zhuǎn)樹。
[0015] 所述每次對(duì)被測(cè)程序進(jìn)行動(dòng)態(tài)污染分析后,收集程序動(dòng)態(tài)執(zhí)行軌跡上的分支信 息,利用求解器求解是否有滿足條件的值,不斷重復(fù)這個(gè)過程,最終構(gòu)建出程序完整的條件 跳轉(zhuǎn)樹。在這個(gè)過程中要加入根據(jù)污染傳播規(guī)則得到的控制依賴相關(guān)的變量的信息,構(gòu)造 更加完整的程序跳轉(zhuǎn)樹。
[0016] 本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于:
[0017] (1)分析處理的中間語言是VEX IR,它是基于靜態(tài)單一形式(SSA)的,保證了每個(gè) 被使用的變量都有唯一的定義,使得分析程序動(dòng)態(tài)執(zhí)行軌跡和制定規(guī)則的過程更加簡單。
[0018] (2)在污點(diǎn)分析的過程中處理控制依賴問題,不需要對(duì)二進(jìn)制程序進(jìn)行反匯編來 構(gòu)建程序整體的控制流圖,實(shí)現(xiàn)更加方便。
[0019] (3)能夠動(dòng)態(tài)的處理控制依賴問題,在構(gòu)建程序的條件跳轉(zhuǎn)樹的過程中逐漸完善 污點(diǎn)數(shù)據(jù)信息,減輕污點(diǎn)缺失的影響,提高被測(cè)程序的路徑覆蓋率。
【附圖說明】
[0020] 圖1為本發(fā)明動(dòng)態(tài)處理控制依賴問題方法流程圖;
[0021 ] 圖2為匯編指令及相應(yīng)VEX IR舉例;
[0022] 圖3為VEX IR跳轉(zhuǎn)代碼舉例;
[0023] 圖4為源代碼舉例及其流程圖;
[0024] 圖5為源代碼對(duì)應(yīng)的條件跳轉(zhuǎn)樹;
[0025] 圖6為條件跳轉(zhuǎn)樹的生成過程;
[0026] 圖7為帶污染標(biāo)簽的條件跳轉(zhuǎn)樹的生成過程。
【具體實(shí)施方式】
[0027] 下面結(jié)合說明書附圖,對(duì)本發(fā)明的【具體實(shí)施方式】做詳細(xì)描述。
[0028] 圖1展示的是在動(dòng)態(tài)污點(diǎn)分析中動(dòng)態(tài)處理控制依賴問題方法的流程圖,下邊我們 針對(duì)兩個(gè)主要方面進(jìn)行詳細(xì)介紹。
[0029] (1)對(duì)程序進(jìn)行動(dòng)態(tài)污染分析,利用Valgrind框架對(duì)被測(cè)試的二進(jìn)制程序進(jìn)行插 粧操作,將外部輸入文件作為污染源,跟蹤污點(diǎn)傳播路徑,最終獲得程序的動(dòng)態(tài)執(zhí)行軌跡。 然后分析Valgrind中間語言VEX IR和程序動(dòng)態(tài)執(zhí)行軌跡的特點(diǎn),制定相應(yīng)的針對(duì)控制依 賴問題的污染傳播規(guī)則。
[0030] 使用Valgrind框架實(shí)現(xiàn)對(duì)二進(jìn)制程序的插粧操作,從而實(shí)現(xiàn)動(dòng)態(tài)污點(diǎn)分析的過 程。處理被測(cè)試程序時(shí),Valgrind會(huì)將它劃分成一個(gè)一個(gè)的基本塊,每次處理一個(gè)基本塊。 首先把當(dāng)前基本塊翻譯成中間語言VEX,然后傳遞給特定的Valgrind工具,完成插粧操作, 最終將插粧好的中間語言重新編譯成機(jī)器碼。
[0031] 首先,介紹一下Valgrind中間語言VEX IR的結(jié)構(gòu)及特點(diǎn)。VEX IR是一種結(jié)構(gòu)中 立的中間語言,形式比較像編譯器所使用的語言。Valgrind處理的單元是基本塊。一個(gè)基 本塊是一個(gè)單入口,單或多出口的序列。圖2是一條匯編指令及翻譯成的相應(yīng)的VEX IR語 句,含義分別是保存寄存器eax的值到t3,保存寄存器ebx的值到t2, t3和t2相加的和保 存到tl,最終保存到寄存器eax。本發(fā)明可以看出,當(dāng)可執(zhí)行代碼翻譯成中間代碼時(shí),每條 語句都是對(duì)寄存器、內(nèi)存和臨時(shí)變量的操作。VEX IR具有SSA特性。SSA代表靜態(tài)單一賦 值,它表示每個(gè)變量都只會(huì)被賦值一次,而且每個(gè)變量都在使用之前定義,因此數(shù)據(jù)流分析 和優(yōu)化算法可以更加簡單。源程序中對(duì)同一個(gè)變量的不相關(guān)的若干次使用,在SSA形式中 會(huì)轉(zhuǎn)變成對(duì)不同變量的使用,因此能消除很多不必要的依賴關(guān)系。
[0032] 然后,本發(fā)明分析程序動(dòng)態(tài)執(zhí)行軌跡的特點(diǎn)。動(dòng)態(tài)污點(diǎn)分析是一種動(dòng)態(tài)跟蹤程序 運(yùn)行軌跡的技術(shù),它的特點(diǎn)在于每次程序運(yùn)行結(jié)束后,通過插粧分析得到的是本次執(zhí)行過 程中的運(yùn)行軌跡,是程序條件跳轉(zhuǎn)樹中的某一條路徑,本發(fā)明只能從這條路徑上找到分支 點(diǎn),但是對(duì)另一條分支的信息卻不能獲得。如圖3所示,在地址0X4004cc7地址的指令執(zhí)行 完之后緊著著執(zhí)行地址0X4004cc9處的指令。本發(fā)明只能知道在第一天指令結(jié)束之后存在 一個(gè)分支點(diǎn),滿足條件時(shí)程序會(huì)跳轉(zhuǎn)到地址〇X4004d26執(zhí)行。在兩個(gè)程序塊之間存在一個(gè) 跳轉(zhuǎn)指令,這種跳轉(zhuǎn)指令對(duì)應(yīng)二進(jìn)制程序中的分支判斷、函數(shù)調(diào)用和返回等會(huì)發(fā)生程序跳 轉(zhuǎn)的位置。通過動(dòng)態(tài)污點(diǎn)分析本發(fā)明可以得到程序的動(dòng)態(tài)執(zhí)行軌跡,從而記錄下污點(diǎn)數(shù)據(jù) 相關(guān)的軌跡,提取分支信息進(jìn)行分析。
[0033] 在跟蹤二進(jìn)制程序執(zhí)行的過程中,還有一點(diǎn)應(yīng)該引起本發(fā)明的注意。通過二進(jìn)制 插粧技術(shù),本發(fā)明記錄的是程序運(yùn)