一種污點傳播路徑分析方法
【專利摘要】本發(fā)明提供一種污點傳播路徑分析方法,解決的技術(shù)問題是利用程序依賴性來進(jìn)行分析污點傳播路徑。步驟一、利用LLVM編譯器架構(gòu)分析程序,將源代碼轉(zhuǎn)換為中間語言IR表示,LLVM的IR表示是基于靜態(tài)單一賦值形式;步驟二、在步驟一得到的IR表示上進(jìn)行一個基本塊內(nèi)的變量數(shù)據(jù)依賴分析;步驟三:在步驟一得到的IR表示上進(jìn)行基本塊之間的控制依賴分析;步驟四:處理基本塊聚合處的PHI節(jié)點的依賴:在靜態(tài)單一賦值形式表示中,PHI函數(shù)被放在基本塊聚合處,用于選擇變量的在各個分支的不同實例,根據(jù)步驟二、步驟三的分析結(jié)果,求出PHI函數(shù)左邊變量的依賴關(guān)系,將各基本塊到基本塊聚合處的依賴聯(lián)系起來,從而分析出污點傳播路徑。
【專利說明】一種污點傳播路徑分析方法【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種污點傳播路徑分析方法,屬于軟件檢測【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]污點傳播分析起源于Perl的Tainting機(jī)制。目前應(yīng)用于軟件缺陷檢測、基于類型的漏洞特征的自動生成、軟件測試等方面。通常將外部輸入的不可信數(shù)據(jù)標(biāo)記為污點,污點傳播分析是跟蹤和預(yù)防污點不正確使用的過程,發(fā)現(xiàn)污點傳播路徑對發(fā)現(xiàn)潛在脆弱性意義重大。
[0003]污點分析將外部流入程序的數(shù)據(jù)標(biāo)記為污點,然后跟蹤污點數(shù)據(jù)在程序中的傳播過程。其總體思想:1)標(biāo)記污點數(shù)據(jù)源;2)記錄污點數(shù)據(jù)的傳播;3)污點數(shù)據(jù)使用告警,當(dāng)監(jiān)測到污點數(shù)據(jù)流入與安全相關(guān)的敏感函數(shù)內(nèi),標(biāo)記此處為潛在的漏洞存在點,如strcpy函數(shù)。
[0004]現(xiàn)有的污點傳播分析技術(shù)主要有靜態(tài)和動態(tài)方法,靜態(tài)方法是在程序的控制流圖的基礎(chǔ)上對信息流進(jìn)行污點傳播的分析,現(xiàn)有的在信息流上進(jìn)行的污點分析的研究,有時候會導(dǎo)致污點變量的誤判;動態(tài)方法是動態(tài)的運(yùn)行被測程序,一次只能分析一條數(shù)據(jù)流,通常借助插裝技術(shù),但是這些額外的檢測操作會一定程序的影響程序的性能。本文將致力于污點傳播路徑的分析,根據(jù)污點傳播的特點,可以得知污點在程序中的傳播就是某一個特殊變量在程序中的傳播,實際上為某一變量值通過程序依賴進(jìn)行污點屬性的傳遞,主要是基于數(shù)據(jù)依賴、控制依賴和PHI節(jié)點的依賴進(jìn)行污點傳播的,通過程序依賴完成了污點的傳播過程,從而分析了污點傳播路徑。通過分析所得路徑,當(dāng)路徑中某處安全敏感的函數(shù)引用到污點數(shù)據(jù),我們就能夠發(fā)現(xiàn)到一個潛在的危險點,對軟件漏洞的挖掘有重要的意義。
[0005]然而現(xiàn)有的污點分析技術(shù)對污點傳播路徑方面的研究比較少,較多的關(guān)注在污點的發(fā)現(xiàn)上。動態(tài)污點分析方面已有的研究都需要借助插裝技術(shù),這樣需要耗費一定的性能,同時需要特定的輸入來驅(qū)動程序的運(yùn)行,對于構(gòu)造特定的輸入需要耗費一定的時間。
【發(fā)明內(nèi)容】
[0006]針對上述現(xiàn)有技術(shù),本發(fā)明要解決的技術(shù)問題是利用程序依賴性來進(jìn)行分析污點傳播路徑。
[0007]為了解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案:
[0008]一種污點傳播路徑分析方法,包括如下步驟:
[0009]步驟一、利用LLVM編譯器架構(gòu)分析程序,將源代碼轉(zhuǎn)換為中間語言IR表示,LLVM的IR表示是基于靜態(tài)單一賦值形式;
[0010]步驟二、在步驟一得到的IR表示上進(jìn)行一個基本塊內(nèi)的變量數(shù)據(jù)依賴分析;
[0011]步驟三:在步驟一`得到的IR表示上進(jìn)行基本塊之間的控制依賴分析;
[0012]步驟四:處理基本塊聚合處的PHI節(jié)點的依賴:在靜態(tài)單一賦值形式表示中,PHI函數(shù)被放在基本塊聚合處,用于選擇變量的在各個分支的不同實例,根據(jù)步驟二、步驟三的分析結(jié)果,求出PHI函數(shù)左邊變量的依賴關(guān)系,將各基本塊到基本塊聚合處的依賴聯(lián)系起來,從而分析出污點傳播路徑。
[0013]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
[0014]I)采用的中間形式是基于靜態(tài)單一賦值形式(SSA),保證了每個被使用的變量都有唯一的定義,因此數(shù)據(jù)流分析可以更加簡單,同時對一個變量的不相關(guān)的多次使用,在SSA中會轉(zhuǎn)變成對不同變量的使用,能消除冗余的依賴關(guān)系;
[0015]2)本發(fā)明對比了基本塊的控制依賴的定義和后支配邊界的定義,兩者定義一樣,故采用后支配邊界來計算基本塊間的控制依賴關(guān)系,消除了錯誤的控制依賴關(guān)系;
[0016]3)本發(fā)明將基本塊間的控制依賴關(guān)系利用分支控制變量轉(zhuǎn)化為變量間的依賴關(guān)系,體現(xiàn)了污點是變量的特性;
[0017]4)本發(fā)明增加了 PHI節(jié)點的依賴分析,從而將污點變量依賴傳遞過程從條件分支跳轉(zhuǎn)處到基本塊聚合處結(jié)合為一個整體,即貫通了整個污點變量從源頭到引用處傳遞過程。
【專利附圖】
【附圖說明】
[0018]圖1為本發(fā)明源代碼轉(zhuǎn)換為中間語言IR表示;
[0019]圖2為本發(fā)明依賴性關(guān)系示意圖。
【具體實施方式】
[0020]下面將結(jié)合附圖及【具體實施方式】對本發(fā)明做進(jìn)一步的描述。
[0021]首先對本發(fā)明中的術(shù)語進(jìn)行闡述:
[0022]靜態(tài)單一賦值:Static Single-Assignment,這是一種中間表示形式。之所以稱之為單賦值,是因為每個名字在SSA中僅被賦值一次。
[0023]后支配:我們說基本塊Y后支配基本塊X,如果每條從X到程序Exit處的路徑P包含Y,記為Y PDom X。即Y是X的后必經(jīng)節(jié)點。
[0024]后支配邊界(Post dominance frontier):DF (Y) = {X | Z是X的后繼節(jié)點使得Y后支配Z且Y不后支配節(jié)點X,即Z e SUcceed(X)使得Y PDom Z且Yn (PDom)X}.[0025]分支控制變量:假設(shè)基本塊B包含了變量V的定義或者使用語句,B的后必經(jīng)節(jié)點邊界集合為DF(B).對于任意一個Bi e DF (B),若Bi的最后一條語句是條件判斷語句P,判斷條件為Ci,那么V的分支控制變量為Ci構(gòu)成的集合,BCV (V) ={Ci I i e N}。
[0026]基本塊:是指程序順序執(zhí)行的語句序列,其中只有一個入口和一個出口,序列入口就是其中的第一個語句,序列出口是下一入口語句(下一入口語句),序列或遇到條件分支跳轉(zhuǎn)語句(包括該語句)停止,或遇到程序結(jié)束語句停止。
[0027]PHI節(jié)點:在SSA表示中,PHI函數(shù)所在基本塊,PHI函數(shù)被放在基本塊的聚合處,用來選擇同一變量的不同實例。
[0028]數(shù)據(jù)依賴:通過簡單的算術(shù)運(yùn)算及賦值表達(dá)式實現(xiàn)。
[0029]控制依賴:通過條件分支跳轉(zhuǎn)語句實現(xiàn)。
[0030]PHI節(jié)點的依賴:包括PHI節(jié)點的數(shù)據(jù)依賴和控制依賴。
[0031]LLVM (Low Level Virtual Machine):是一套編譯器的基礎(chǔ)設(shè)施,目前編譯器前端支持C、C++等語g。
[0032]中間語言表示IR = LLVM的組成部分,一種中間語言表示形式。
[0033]程序依賴:包括數(shù)據(jù)依賴、控制依賴和PHI節(jié)點的依賴。
[0034]本發(fā)明所述的一種污點傳播路徑分析的方法,包括如下部分:
[0035]1、源代碼轉(zhuǎn)換為LLVM的中間語言IR表示
[0036]本部分是將源碼轉(zhuǎn)換為LLVM中間表示IR,將下述源碼生成如圖1表示的中間表示。分析程序以編譯器架構(gòu)作為實驗平臺,這里采用了 LLVM編譯器,選它最重要的原因是它有表現(xiàn)形式很好的中間語言IR。
[0037]其中源代碼如下:
[0038]
【權(quán)利要求】
1.一種污點傳播路徑分析方法,其特征在于,包括如下步驟: 步驟一、利用LLVM編譯器架構(gòu)分析程序,將源代碼轉(zhuǎn)換為中間語言IR表示,LLVM的IR表示是基于靜態(tài)單一賦值形式; 步驟二、在步驟一得到的IR表示上進(jìn)行一個基本塊內(nèi)的變量數(shù)據(jù)依賴分析; 步驟三:在步驟一得到的IR表示上進(jìn)行基本塊之間的控制依賴分析; 步驟四:處理基本塊聚合處的PHI節(jié)點的依賴:在靜態(tài)單一賦值形式表示中,PHI函數(shù)被放在基本塊聚合處,用于選擇變量的在各個分支的不同實例,根據(jù)步驟二、步驟三的分析結(jié)果,求出PHI函數(shù)左邊變量的依賴關(guān)系,將各基本塊到基本塊聚合處的依賴聯(lián)系起來,從而分析出污點傳播路徑。
【文檔編號】G06F11/36GK103729295SQ201310750615
【公開日】2014年4月16日 申請日期:2013年12月31日 優(yōu)先權(quán)日:2013年12月31日
【發(fā)明者】胡昌振, 王勇, 王川, 薛靜鋒, 馬銳 申請人:北京理工大學(xué)