張晛?zhàn)X 范明鈺
電子科技大學(xué)計(jì)算機(jī)學(xué)院 四川 610054
軟件的漏洞檢測(cè)主要分為動(dòng)態(tài)檢測(cè)和靜態(tài)檢測(cè)兩大類。其中動(dòng)態(tài)檢測(cè)指通過(guò)運(yùn)行被測(cè)程序,檢查運(yùn)行結(jié)果與預(yù)期結(jié)果的差異,并分析運(yùn)行效率和健壯性等性能,一般多用黑盒測(cè)試的方法。而靜態(tài)檢測(cè)是指不運(yùn)行被測(cè)程序本身,通過(guò)分析或檢查源程序的語(yǔ)法、結(jié)構(gòu)、過(guò)程、接口等來(lái)檢查程序的正確性。本文主要研究一種對(duì)于軟件源代碼的新型自動(dòng)靜態(tài)檢測(cè)技術(shù)模型,事實(shí)上,對(duì)于某些專業(yè)人員來(lái)說(shuō),通過(guò)可執(zhí)行代碼得到的匯編代碼也可以看作有了軟件的源代碼。
根據(jù)軟件安全漏洞的分類,漏洞產(chǎn)生主要有四大方面的原因:軟件設(shè)計(jì)缺陷、軟件代碼編寫(xiě)缺陷、執(zhí)行環(huán)境差異和補(bǔ)丁文件對(duì)整個(gè)系統(tǒng)的影響。實(shí)際上,各種原因在本質(zhì)上都是因?yàn)檐浖鞒躺洗嬖谝恍拔kU(xiǎn)路徑”,使得軟件可能會(huì)陷入于開(kāi)發(fā)者設(shè)想中不符的流程。而造成這樣“危險(xiǎn)路徑”的原因絕大多數(shù)是由于函數(shù)的調(diào)用引起的,其中包括危險(xiǎn)函數(shù)的調(diào)用和不恰當(dāng)?shù)暮瘮?shù)調(diào)用順序等。
根據(jù)軟件安全漏洞的產(chǎn)生原因,對(duì)漏洞的檢測(cè)就是要找到這些可能存在安全隱患的軟件執(zhí)行流程“路徑”。而大部分的漏洞檢測(cè)方法基本上都是一種可以稱之為“點(diǎn)檢測(cè)”的檢測(cè)方法,它們針對(duì)某一小段單一功能的具體代碼或者某一個(gè)函數(shù),采用特征碼匹配和分析的方法進(jìn)行安全漏洞的檢測(cè)。這樣的檢測(cè)方法會(huì)產(chǎn)生大量的“漏報(bào)”和“誤報(bào)”,因?yàn)檐浖鞒叹哂幸粋€(gè)整體性,對(duì)待數(shù)據(jù)流的某一部分可能對(duì)整個(gè)功能做出錯(cuò)誤的估計(jì)。
文獻(xiàn)提出了針對(duì)緩沖區(qū)溢出和循環(huán)拷貝出錯(cuò)漏洞的有限狀態(tài)自動(dòng)機(jī)模型,本文在此基礎(chǔ)上提出基于模糊度量的軟件安全漏洞檢測(cè)方法。其核心理論為模糊有限狀態(tài)自動(dòng)機(jī)。
自動(dòng)機(jī)可抽象地用一個(gè)五元組表示,即:A=(X,S,Y,∏,g),式中 X、S 和 Y 分別是輸入集、狀態(tài)集和輸出集,∏和 g分別是狀態(tài)轉(zhuǎn)移函數(shù)和輸出函數(shù)。在確定的自動(dòng)機(jī)中,狀態(tài)轉(zhuǎn)移函數(shù)∏和輸出函數(shù)g都是確定的,可以用嚴(yán)格的數(shù)學(xué)函數(shù)來(lái)描述。如果把狀態(tài)轉(zhuǎn)移函數(shù)∏和輸出函數(shù)g模糊化,或者∏和g只能用模糊函數(shù)來(lái)描述,則自動(dòng)機(jī)A即為模糊有限狀態(tài)自動(dòng)機(jī)。
模糊有限狀態(tài)自動(dòng)機(jī)與模糊文法相對(duì)應(yīng),可以作為軟件源程序模糊識(shí)別的標(biāo)準(zhǔn),只要建立合適狀態(tài)轉(zhuǎn)移函數(shù)和輸出函數(shù),就可以讓整個(gè)檢測(cè)模型具有模糊識(shí)別能力。模糊自動(dòng)機(jī)在復(fù)雜系統(tǒng)的行為分析、模式識(shí)別、學(xué)習(xí)系統(tǒng)和控制等方面具有顯著的優(yōu)勢(shì),這些模糊自動(dòng)機(jī)的特點(diǎn)對(duì)識(shí)別未知漏洞具有相當(dāng)重要的作用。因?yàn)檐浖到y(tǒng)本身就是一個(gè)復(fù)雜的系統(tǒng),分析軟件系統(tǒng)的行為模式就是發(fā)現(xiàn)軟件安全漏洞的主要方式。針對(duì)于未知漏洞,就需要分析技術(shù)具有識(shí)別和學(xué)習(xí)的能力。
在綜合模型檢驗(yàn)技術(shù)以及上文所提及的軟件系統(tǒng)行為分析、模式識(shí)別和自學(xué)習(xí)的功能,本文提出基于模糊度量的軟件安全漏洞檢測(cè)技術(shù),如圖1所示。

圖1 基于模糊度量的軟件安全漏洞檢測(cè)技術(shù)
本漏洞檢測(cè)技術(shù)主要分為輸入、挖掘過(guò)程和輸出三個(gè)主要模塊。檢測(cè)過(guò)程首先由輸入模塊開(kāi)始,軟件源代碼和漏洞屬性庫(kù)作為前期輸入進(jìn)入挖掘過(guò)程,然后經(jīng)過(guò)挖掘過(guò)程的內(nèi)部處理后將一部分結(jié)果反饋給漏洞屬性庫(kù),完成自學(xué)習(xí)過(guò)程,最后輸出分析結(jié)果。其中核心模塊為輸入中的漏洞屬性庫(kù)、挖掘過(guò)程中執(zhí)行路徑模型生成器、漏洞屬性關(guān)聯(lián)生成器和模糊狀態(tài)自動(dòng)機(jī)模型檢測(cè)器。接下來(lái)對(duì)各個(gè)核心模塊做出具體說(shuō)明。
漏洞屬性庫(kù):這是一個(gè)存儲(chǔ)軟件安全漏洞屬性的數(shù)據(jù)庫(kù)。它將漏洞系統(tǒng)分解,將能夠?qū)Π踩[患產(chǎn)生影響的單一屬性存儲(chǔ)于一個(gè)獨(dú)立數(shù)據(jù)庫(kù)中。整個(gè)系統(tǒng)前期需要?jiǎng)?chuàng)建一個(gè)已知安全漏洞屬性數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中存在某些已知安全漏洞的相關(guān)屬性。例如緩沖區(qū)溢出安全漏洞的堆或棧空間分配長(zhǎng)度和內(nèi)容填充、循環(huán)錯(cuò)誤安全漏洞的循環(huán)塊存在位置、循環(huán)內(nèi)部?jī)?nèi)存讀寫(xiě)邊界設(shè)定和內(nèi)存讀寫(xiě)內(nèi)容填充,整數(shù)溢出漏洞的類型設(shè)定、值傳遞和類型轉(zhuǎn)化,格式化字符串的函數(shù)檢查和類型匹配,還有數(shù)據(jù)來(lái)源等關(guān)鍵安全屬性。這個(gè)漏洞屬性庫(kù)可以手工添加記錄,也可以通過(guò)系統(tǒng)的自學(xué)習(xí)機(jī)制反饋未知安全漏洞存在的屬性。它的作用是支持漏洞屬性關(guān)聯(lián)生成器。
漏洞屬性關(guān)聯(lián)生成器:這個(gè)生成器主要作用是減少冗余工作量,增加系統(tǒng)效率。它將漏洞屬性庫(kù)中的屬性根據(jù)邏輯關(guān)聯(lián)情況生成漏洞狀態(tài)關(guān)聯(lián)圖,用于檢測(cè)器分析。排除掉一些無(wú)用組合,避免系統(tǒng)盲目搜索數(shù)據(jù)庫(kù),增加冗余工作量。尤其是在數(shù)據(jù)庫(kù)比較龐大的,這個(gè)策略所帶來(lái)的意義是非常重大的。
執(zhí)行路徑模型生成器:這是一個(gè)根據(jù)軟件源碼構(gòu)建虛擬軟件執(zhí)行路徑模型的生成器。它綜合了靜態(tài)分析覆蓋范圍大以及動(dòng)態(tài)分析中軟件流程分析的優(yōu)點(diǎn),將抽象的軟件源碼組建成為具有層次結(jié)構(gòu)和清晰流程的模型。
模糊狀態(tài)自動(dòng)機(jī)模型檢測(cè)器:這是本檢測(cè)方法的核心部分。定義系統(tǒng)存在缺陷的程度為[0,1],1代表系統(tǒng)存在確定性漏洞,0代表系統(tǒng)安全,0到1之間表示系統(tǒng)存在不同程度的安全缺陷,數(shù)值越靠近1安全缺陷危險(xiǎn)程度越高。
這個(gè)檢測(cè)器利用模糊有限狀態(tài)自動(dòng)機(jī)的理論進(jìn)行組建:輸入集X為執(zhí)行路徑模型生成器的輸出模型;狀態(tài)集S為漏洞屬性關(guān)聯(lián)生成器的輸出模型;輸出集Y為{qs,qf,qv},qs表示系統(tǒng)狀態(tài)安全,qv表示系統(tǒng)存在確定性安全漏洞,qf表示系統(tǒng)存在不同程度的安全缺陷。輸出函數(shù)g分為兩個(gè)部分:第一部分將輸出集Y中所反應(yīng)的安全缺陷危險(xiǎn)程度和在軟件執(zhí)行流程模型中的路徑顯示給分析人員,第二部分將分析中出現(xiàn)的安全缺陷的各個(gè)安全屬性反饋給漏洞屬性庫(kù),添加未記錄的漏洞屬性;狀態(tài)轉(zhuǎn)移函數(shù)∏依托漏洞屬性狀態(tài)轉(zhuǎn)移模型建立。

模糊有限狀態(tài)自動(dòng)機(jī)狀態(tài)轉(zhuǎn)移示意圖如圖2所示。

圖2 模糊有限狀態(tài)自動(dòng)機(jī)狀態(tài)轉(zhuǎn)移示意圖
q0為初始狀態(tài),根據(jù)狀態(tài)轉(zhuǎn)移函數(shù),如果軟件執(zhí)行流程中未出現(xiàn)漏洞屬性關(guān)聯(lián)生成器中生成模型的屬性,那么狀態(tài)不發(fā)生變化,返回q0;如果出現(xiàn)漏洞相關(guān)屬性,則根據(jù)漏洞屬性進(jìn)行狀態(tài)轉(zhuǎn)移并計(jì)算安全缺陷危險(xiǎn)度。然后繼續(xù)上述思路,如果期間出現(xiàn)某確定性軟件漏洞,則直接輸出qv狀態(tài),返回危險(xiǎn)度最大值 1,并計(jì)算該漏洞的危急程度;若直至軟件執(zhí)行流程模型某條路徑結(jié)束都未出現(xiàn)確定性安全漏洞,則根據(jù)綜合計(jì)算的安全缺陷危險(xiǎn)程度輸出,若危險(xiǎn)程度為 0,則輸出qs狀態(tài),否則輸出,qf和安全缺陷危險(xiǎn)度。
本文在Windows XP SP2系統(tǒng)下實(shí)現(xiàn)了該檢測(cè)方法的仿真程序,漏洞特征數(shù)據(jù)庫(kù)添加基本數(shù)據(jù)和相關(guān)測(cè)試基本安全度(此安全度可以根據(jù)實(shí)際情況進(jìn)行設(shè)置,此處僅設(shè)置為測(cè)試用基本安全度)。然后對(duì)多款第三方軟件進(jìn)行實(shí)驗(yàn),并將實(shí)驗(yàn)結(jié)果與官方發(fā)布的漏洞進(jìn)行比對(duì)。結(jié)果如表1。

表1 仿真實(shí)驗(yàn)結(jié)果
該實(shí)驗(yàn)結(jié)果表明與傳統(tǒng)檢測(cè)方法相比,基于模糊度量的軟件漏洞檢測(cè)技術(shù)可以更好的進(jìn)行軟件安全漏洞檢測(cè),尤其對(duì)未知軟件安全漏洞進(jìn)行檢測(cè),并且能給出漏洞的危急程度。
本文所提出的基于模糊度量的軟件安全漏洞自動(dòng)檢測(cè)技術(shù)結(jié)合了有限狀態(tài)自動(dòng)機(jī)和模型檢測(cè)的思想,將通常的漏洞整體檢測(cè),分解為對(duì)漏洞中單一屬性集合的檢測(cè),使漏洞檢測(cè)化整為零,并具有自學(xué)習(xí)的機(jī)制。另一方面,引進(jìn)模糊狀態(tài)轉(zhuǎn)移函數(shù)可更好檢測(cè)軟件安全漏洞的危急程度,指導(dǎo)相關(guān)人員根據(jù)危急程度進(jìn)行修正。
但是該檢測(cè)技術(shù)仍具有不少值得改進(jìn)之處。其難點(diǎn)之一是漏洞屬性庫(kù)的設(shè)計(jì)。漏洞屬性庫(kù)和漏洞屬性關(guān)聯(lián)生成器這個(gè)設(shè)計(jì)其中很重要的一點(diǎn)就是提高系統(tǒng)檢測(cè)效率,如果漏洞屬性數(shù)據(jù)庫(kù)能更完善表明各漏洞屬性之間的依賴情況,就能有助于提高漏洞屬性關(guān)聯(lián)生成器工作時(shí)的效率。另一個(gè)難點(diǎn)就是模糊狀態(tài)轉(zhuǎn)移函數(shù)在設(shè)計(jì)上如果能結(jié)合漏洞屬性關(guān)聯(lián)生成器所生成的模型做出動(dòng)態(tài)改變,將可以更好的檢測(cè)軟件系統(tǒng)的安全漏洞。因此,在今后的研究工作中,主要針對(duì)“漏洞屬性依賴關(guān)系”和“軟件執(zhí)行流程的安全度量”進(jìn)行進(jìn)一步的研究。
[1] S.Weber,P.Karger and A.Paradkar.A Sofiware Flaw Taxonomy:Aiming Tools at Security[C].Software Engineering for Secure Systems-Building Trustworthy Applications(SESS)Proceedings.2005.
[2] V.Benjamin Livshits and Monica S.Lam.Tracking Pointers with Path and Context Sensitivity for Bug Detection in C Programs[C].ACM 2003.
[3] Cynthia Phillip s,Laura Painton Swiler.A graph based system for network vulnerability analysis[C].ACM 1999.
[4] Paul Ammann,Duminda Wijesekera,and Saket Kaushik.Analysis and verification Scalable,graph2based network vulnerability analysis[C].ACM 2002.