崔鵬宇
摘要:本文探討了處于動(dòng)態(tài)符號(hào)執(zhí)行架構(gòu)下的漏洞挖掘技術(shù),研究分析了多漏洞主動(dòng)式集成挖掘平臺(tái)。
關(guān)鍵詞:漏洞發(fā)掘;挖掘效率;MLIIMP
中圖分類(lèi)號(hào):TP393.08 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2018)09-0197-01
隨著越來(lái)越多的軟件開(kāi)發(fā)項(xiàng)目的進(jìn)行,軟件測(cè)試也越來(lái)越受到關(guān)注。其中,漏洞發(fā)掘作為軟件測(cè)試的主要目的之一,不少專(zhuān)家對(duì)其相關(guān)技術(shù)展開(kāi)了積極的研究工作[1-2]。動(dòng)態(tài)符號(hào)執(zhí)行技術(shù)因在漏洞發(fā)掘方面具有非常突出的優(yōu)勢(shì),使其成了關(guān)鍵技術(shù)。因動(dòng)態(tài)符號(hào)執(zhí)行將對(duì)被測(cè)試程序執(zhí)行,能夠獲得其具體運(yùn)行時(shí)產(chǎn)生的數(shù)據(jù),所以相對(duì)于靜態(tài)分析技術(shù)來(lái)說(shuō),具有更高的準(zhǔn)確性。與過(guò)去的黑盒測(cè)試技術(shù)對(duì)比來(lái)說(shuō),這一個(gè)技術(shù)具有相對(duì)較高的代碼覆蓋率,正因如此,其可以將更多的漏洞發(fā)掘出[3]。為了克服不足之處,筆者首先探討了處于動(dòng)態(tài)符號(hào)執(zhí)行架構(gòu)下的漏洞挖掘技術(shù),然后開(kāi)發(fā)出相應(yīng)的多漏洞主動(dòng)式集成挖掘平臺(tái),MLIIMP結(jié)合了動(dòng)態(tài)符號(hào)執(zhí)行方法以及主動(dòng)式挖掘技術(shù)的優(yōu)勢(shì),并采用先進(jìn)的路徑搜索方法,對(duì)軟件測(cè)試的漏洞檢測(cè)準(zhǔn)確性起到了非常大的作用。
1 MLIIMP的設(shè)計(jì)與實(shí)現(xiàn)
1.1 主動(dòng)式漏洞發(fā)掘
長(zhǎng)期以來(lái),業(yè)界通常使用被動(dòng)式的漏洞發(fā)掘技術(shù)方法,而MLIIMP則為一種主動(dòng)式的技術(shù)。所謂主動(dòng)式漏洞發(fā)掘,即測(cè)試用例并未將漏洞觸發(fā),然而在具體執(zhí)行的時(shí)候,利用某特定的技術(shù)產(chǎn)生了約束,之后對(duì)這一個(gè)約束進(jìn)行求解,形成新測(cè)試用例,從而將漏洞觸發(fā)。為對(duì)路徑可變漏洞進(jìn)行發(fā)掘,該系統(tǒng)提出了漏洞約束,相對(duì)于一般的約束來(lái)說(shuō),其在形式上并不存在很大的差異,然而它的功能并非探索其他的程序路徑,而是將當(dāng)前路徑上存在的漏洞檢測(cè)出來(lái)。具體見(jiàn)圖1所示。
當(dāng)x符合約束時(shí),在這種情況下能夠確保觸發(fā)語(yǔ)句6的漏洞,在這里屬于普通約束,如果滿(mǎn)足這一條件,就能夠確保路徑被執(zhí)行,而為漏洞約束,如果滿(mǎn)足這一條件,就能夠確保這一個(gè)路徑上的漏洞被觸發(fā)。為了達(dá)到主動(dòng)式漏洞發(fā)掘的目標(biāo),MLIIMP監(jiān)控了被測(cè)試程序,當(dāng)那些存在形成漏洞可能性的指令被執(zhí)行時(shí),則主動(dòng)將漏洞約束注入到路徑條件中,在此基礎(chǔ)上對(duì)其加以標(biāo)記,通過(guò)這種方式來(lái)對(duì)普通與漏洞約束進(jìn)行有效區(qū)分。探究路徑過(guò)程中,并沒(méi)有對(duì)漏洞約束實(shí)施否定,這是由于其并非用來(lái)表示程序分支的。
1.2 漏洞檢測(cè)器
作為一個(gè)漏洞發(fā)掘系統(tǒng),MLIIMP能夠?qū)崿F(xiàn)若干種漏洞的發(fā)掘。我們開(kāi)發(fā)的MLIIMP系統(tǒng)能夠?qū)崿F(xiàn)以下四種漏洞發(fā)掘,接下來(lái)筆者將簡(jiǎn)要闡明各種類(lèi)型。
(1)數(shù)組越界檢測(cè)器。其作用是對(duì)數(shù)組越界錯(cuò)誤進(jìn)行檢測(cè),比如圖1之中語(yǔ)句6的漏洞。其主要涉及到三項(xiàng)關(guān)鍵技術(shù):首先為符號(hào)索引跟蹤,也就是對(duì)符號(hào)自其他變量向數(shù)組傳播進(jìn)行跟蹤的索引,其次為數(shù)組操作識(shí)別,最后為數(shù)組界限檢測(cè),也就是對(duì)數(shù)組的合法區(qū)域進(jìn)行檢測(cè)。
具體來(lái)說(shuō),其運(yùn)行流程如下所示:首先是對(duì)符號(hào)傳播進(jìn)行跟蹤,當(dāng)發(fā)現(xiàn)符號(hào)作為索引來(lái)訪問(wèn)數(shù)組的時(shí)候,即會(huì)對(duì)當(dāng)前棧幀范圍進(jìn)行查詢(xún),通過(guò)這種方式得到數(shù)組界限,并且形成違反條件的漏洞約束,同時(shí)在當(dāng)前的路徑條件中將其注入。具體來(lái)說(shuō),所形成的新路徑條件可通過(guò)下面的公式描述:
(1)
式中,pc和pc'分別是指新、老的路徑條件,e指符號(hào)索引的符號(hào)表達(dá)式,代表注入的漏洞約束,與依次指數(shù)組的上、下界。因此,滿(mǎn)足新的路徑條件必將觸發(fā)數(shù)組越界錯(cuò)誤。
(2)除0錯(cuò)誤檢測(cè)器。其主要作用是對(duì)除0錯(cuò)誤漏洞進(jìn)行發(fā)掘,其具體的流程如下所示:首先對(duì)符號(hào)傳播進(jìn)行跟蹤,當(dāng)符號(hào)作為除數(shù)時(shí),形成相應(yīng)的漏洞約束,之后在路徑條件中將其注入,接下來(lái)對(duì)新路徑條件進(jìn)行求解,利用這種方式得到能夠觸發(fā)除0錯(cuò)誤的測(cè)試用例。具體來(lái)說(shuō),所得到的新路徑條件可通過(guò)下面的公式描述:
(2)
式中,與兩者依次是指新、舊路徑條件,e表示的含義與上文相同。這樣我們就能夠得知,當(dāng)滿(mǎn)足時(shí),必然會(huì)將除0錯(cuò)誤觸發(fā)。
1.3 優(yōu)化路徑搜索
MLIIMP開(kāi)發(fā)出優(yōu)化的路徑搜索方法,其一方面避免了對(duì)相同路徑的重復(fù)執(zhí)行,另一方面還可以提高發(fā)掘速度。這一個(gè)方法的基本工作原理如下所示:首先,在路徑探索過(guò)程中,僅僅將普通約束否定,原因是漏洞約束的作用不是表示程序分支的。其次,先執(zhí)行關(guān)鍵函數(shù)與指令多的路徑,原因是其數(shù)目越多,表明這一個(gè)路徑里面就越有可能有漏洞。
2 實(shí)驗(yàn)與分析
MS06-001漏洞為Windows Meta File(WMF)文件格式的,一般情況下,WMF文件往往是在圖像存儲(chǔ)中使用的。其格式中具有1個(gè)WMFHEAD頭與許多WMFRECORD數(shù)據(jù)結(jié)構(gòu)。后者決定著調(diào)用什么GDI函數(shù),其函數(shù)成員的低8位當(dāng)做索引。當(dāng)索引值是0x26時(shí),在這種情況下,將會(huì)調(diào)用Escape函數(shù),其還能夠?qū)etAbortProc函數(shù)進(jìn)行調(diào)用。由于WMFRECORD中的第9個(gè)字節(jié)代表輸入結(jié)構(gòu)的字節(jié)數(shù),這樣在對(duì)WMFRECORD結(jié)構(gòu)進(jìn)行解析過(guò)程中,所有從首個(gè)0x90起的代碼均得到執(zhí)行。因此,為能夠?qū)S06-001漏洞觸發(fā),一定要將WMFRECORD的第9個(gè)字節(jié)設(shè)定成0x16,具體可以通過(guò)下面的圖形進(jìn)行描述。
黑盒測(cè)試技術(shù)觸發(fā)MS06-001的難度非常大,由于這一個(gè)漏洞觸發(fā)的條件有兩個(gè),分別為:(1)WMFRECORD的第5個(gè)字節(jié)是0x26,通過(guò)這種方法所形成的測(cè)試用例之中,僅僅1/256的能夠符合該條件。(2)WMFRECORD的第9個(gè)字節(jié)是0x16,通過(guò)這種方法滿(mǎn)足該要求的可能性同樣僅僅為1/256。因此,該技術(shù)觸發(fā)的可能性?xún)H僅為1/65536。但在具體的實(shí)踐中,因會(huì)受到其他條件的制約,該技術(shù)觸發(fā)MS06-001的可能性比上面的數(shù)值小得多。
與傳統(tǒng)算法相比,MLIIMP在消耗相對(duì)偏少的資源與時(shí)間的情況下觸發(fā)MS06-001漏洞。通過(guò)驗(yàn)證可以看出,路徑條件的deepth平均是906,這就說(shuō)明存在的約束數(shù)目為906個(gè),平均執(zhí)行為1763456條指令數(shù),符號(hào)化了14581個(gè)字節(jié)的輸入。MLIIMP總計(jì)形成測(cè)試用例372個(gè),其中47個(gè)能夠?qū)S06-001漏洞觸發(fā),這47個(gè)所形成的路徑條件的深度平均是72。從中發(fā)現(xiàn),MS06-001處在相對(duì)較淺的程序路徑上。所需要的測(cè)試時(shí)間總共是234分鐘。
3 結(jié)語(yǔ)
本文主要是探討了動(dòng)態(tài)符號(hào)執(zhí)行架構(gòu)下的漏洞自動(dòng)化發(fā)掘技術(shù),設(shè)計(jì)并實(shí)現(xiàn)新的MLIIMP系統(tǒng)。到現(xiàn)在為止,這一個(gè)系統(tǒng)能夠發(fā)掘四種漏洞。其存在幾方面優(yōu)勢(shì):多種漏洞檢測(cè)器、主動(dòng)式漏洞發(fā)掘、優(yōu)化路徑搜索方法。但是,考慮到這一系統(tǒng)對(duì)于那些因長(zhǎng)度造成的緩沖區(qū)溢出的漏洞發(fā)掘不支持,這也是下一步優(yōu)化研究的方向。
參考文獻(xiàn)
[1]黃暉,陸余良,夏陽(yáng).基于動(dòng)態(tài)符號(hào)執(zhí)行的二進(jìn)制程序缺陷發(fā)現(xiàn)系統(tǒng)[J].計(jì)算機(jī)應(yīng)用研究,2013,(9):2810-2812.
[2]邵巳航,蘇亭,顧斌,等.基于過(guò)程間動(dòng)態(tài)符號(hào)執(zhí)行的C語(yǔ)言測(cè)試框架[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,(8):2746-2751.
[3]邢玉鳳.二進(jìn)制代碼的漏洞挖掘技術(shù)研究[J].計(jì)算機(jī)測(cè)量與控制,2014,(12):4111-4114.