陶靜安
隨著社會的發(fā)展,黑客的技術(shù)水平越來越高,而在軟件方面,漏洞屬于一個不可避免的問題,這會導(dǎo)致黑客有機(jī)可趁,使數(shù)據(jù)信息受到破壞。在這種背景下,如何更快地發(fā)現(xiàn)軟件安全漏洞,并做好修復(fù)工作,是保證數(shù)據(jù)信息安全的一個有效手段。
1 軟件安全漏洞挖掘技術(shù)概述
1.1 漏洞概念
在任何軟件運(yùn)行的過程中,都會根據(jù)安全策略進(jìn)行一個安全域假定,也就是說這一域內(nèi)所有的操作都是可控且安全的,但是如果違反了安全策略或者超出了這一安全域,軟件運(yùn)行則會變?yōu)槲粗也豢煽氐模踩蛟谇袚Q為非安全域的過程中,其觸發(fā)點(diǎn)就是漏洞。通俗點(diǎn)說,漏洞就是指由于安全域設(shè)計(jì)不合理所形成的軟件及系統(tǒng)破壞。正是由于這種漏洞的存在,使得計(jì)算機(jī)在未授權(quán)的情況下會被攻擊者訪問或破壞。一般來說,漏洞多數(shù)是被動的、靜態(tài)的、可觸發(fā)的。
1.2 漏洞挖掘技術(shù)
在通過漏洞攻擊的過程中,主要可以分為三個步驟:漏洞挖掘、漏洞分析以及漏洞利用,由此可見漏洞挖掘?qū)儆诤髢蓚€步驟的基礎(chǔ)及前提,對網(wǎng)絡(luò)攻防有著非常重要的意義。所謂漏洞挖掘,主要是找尋漏洞,詳細(xì)點(diǎn)說就是該領(lǐng)域?qū)I(yè)人士使用各種綜合應(yīng)用工具以及技術(shù)盡最大可能找出軟件中存在的潛在漏洞,要想做好這一工作并不容易,這對于個人經(jīng)驗(yàn)有很大的依賴性。在實(shí)際的工作中,根據(jù)不同的分析對象,漏洞挖掘技術(shù)又可以分為基于源代碼漏洞挖掘技術(shù)以及基于目標(biāo)代碼漏洞挖掘技術(shù)。
2 當(dāng)前漏洞挖掘技術(shù)分析
當(dāng)前漏洞挖掘技術(shù)主要包括已知漏洞檢測以及位置漏洞補(bǔ)救這兩種,其中前者主要的作用在于發(fā)現(xiàn)系統(tǒng)中可能存在但是還沒有被發(fā)現(xiàn)的漏洞,在這方面主要又包括靜態(tài)分析、動態(tài)檢測、安全掃描以及手工分析這幾種技術(shù)。其中,手工分析要求比較高,不僅需要安全分析人員對軟件漏洞原理有充分的了解,還要對軟件結(jié)構(gòu)及功能有比較深入的認(rèn)識,而且即使?jié)M足了這兩點(diǎn)要求,其依然會耗費(fèi)很多的精力和時(shí)間,基于此,以下將主要對靜態(tài)分析以及動態(tài)檢測進(jìn)行分析。
2.1 靜態(tài)分析
這種漏洞檢測技術(shù)不需要對程序進(jìn)行運(yùn)行,而且在沒有輸入的條件下就可以發(fā)現(xiàn)程序中存在的安全漏洞,因此在程序編寫階段,通過靜態(tài)漏洞挖掘技術(shù)就可以發(fā)現(xiàn)其中存在的問題,并在開發(fā)早期就消滅掉漏洞。
2.2 動態(tài)檢測
所謂動態(tài)檢測,主要是在程序動態(tài)運(yùn)行的時(shí)候?qū)浖写嬖诘穆┒催M(jìn)行檢測,這不僅要求被測試目標(biāo)編譯為可執(zhí)行程序,而且在檢測的過程中還要提供相應(yīng)的輸入。具體來說,動態(tài)檢測技術(shù)主要是利用操作系統(tǒng)所提供的雕飾接口以及資源監(jiān)視接口,來獲得目標(biāo)程序運(yùn)行過程中所需的運(yùn)行數(shù)據(jù)及運(yùn)行狀態(tài)。在當(dāng)前的動態(tài)檢測技術(shù)中,比較常用的有數(shù)據(jù)流分析法以及環(huán)境錯誤注入法。
2.3 動態(tài)檢測以及靜態(tài)分析的對比
客觀來說,靜態(tài)分析以及動態(tài)檢測都是我們經(jīng)常使用的檢測方法,其中,靜態(tài)分析由于在運(yùn)行過程中的數(shù)據(jù)比較缺乏,因此難以實(shí)現(xiàn)動態(tài)測試細(xì)粒度的安全評估,無法對所有的安全漏洞都進(jìn)行確定,所以存在很多不足之處,不過其優(yōu)勢在于比較容易在開發(fā)過程中集成。
3 軟件安全漏洞挖掘流程分析
通過上文的分析我們可以看出,每種檢測方法都是存在缺陷的,我們要想真正地做好漏洞挖掘工作,就必須要在漏洞挖掘的不同環(huán)節(jié)使用不同的檢測方法,并根據(jù)具體的情況采取相應(yīng)的策略及方法,這樣才能將各種方法的優(yōu)勢發(fā)揮出來,并彌補(bǔ)其存在的不足。一般來說,漏洞挖掘的流程可以分為幾個環(huán)節(jié)。首先,初始化,這主要是將軟件類型分類,將開源和非開源軟件所使用的靜態(tài)分析方法確定下來。其次,反匯編,這主要是載入需要分析的程序,然后通過反匯編操作,實(shí)現(xiàn)對二進(jìn)制代碼的反匯編,并確定代碼中哪些屬于可執(zhí)行指令以及哪些屬于數(shù)據(jù)。第三,過程抽象,能夠識別可執(zhí)行指令之后,可以把其分為表示函數(shù)或者過程的組。第四,特征模式掃描,對于開軟軟件,我們通過編譯技術(shù)在編譯期間或者代碼掃描期間確定一些信息,根據(jù)這些信息檢查漏洞模型。至于非開源軟件的靜態(tài)分析,則可以通過之下而上的分析方法對調(diào)用二進(jìn)制文件的庫函數(shù)等進(jìn)行檢查,得到漏洞驗(yàn)證代碼。第五,驗(yàn)證漏洞特性,這主要是比較漏洞特征庫以及疑似漏洞驗(yàn)證代碼,并對其中是否含有惡意行為進(jìn)行判斷,得到檢測報(bào)告。第六,注入錯誤環(huán)境,對需要注入的錯誤環(huán)境數(shù)據(jù)進(jìn)行構(gòu)造,并利用其干擾程序運(yùn)行。第七,動態(tài)檢測,系統(tǒng)自動地對程序所有函數(shù)序列以及特定函數(shù)序列進(jìn)行分析,并對可能存在的漏洞數(shù)目進(jìn)行估算,得到檢測報(bào)告。第八,檢測評估,根據(jù)所得報(bào)告信息,確認(rèn)它們共同提出的疑似漏洞,并對其他疑似漏洞進(jìn)行下一步分析。
4 軟件安全漏洞挖掘技術(shù)的發(fā)展方向
首先,測試平臺的可擴(kuò)展性以及通用性將越來越強(qiáng),這是因?yàn)榘殡S著測試對象的增多,一個可擴(kuò)展性及通用性比較強(qiáng)的平臺對這一技術(shù)的發(fā)展有非常重要的提升效果。具體來說,這種平臺要具備以下幾個方面的特點(diǎn):首先,能夠產(chǎn)生多種格式并最好是有效的畸形測試數(shù)據(jù);具有可定制以及獨(dú)立的數(shù)據(jù)產(chǎn)生變異功能;具有可操作跟蹤調(diào)試功能;能夠?qū)Χ嗄K之間的自動化運(yùn)行進(jìn)行很好的協(xié)調(diào)。其次,以fuzzing測試技術(shù)為例,由于在fuzzing測試過程中,很大一部分時(shí)間都用在輸入數(shù)據(jù)格式、程序狀態(tài)轉(zhuǎn)換的人工分析上。因此提高知識獲取自動化程度對于提升測試效率非常有利,是未來的發(fā)展方向。第三,多維測試用例生成技術(shù)。當(dāng)前很多測試用例生成技術(shù)都是一維的,這容易使很多安全漏洞不能夠被有效地檢測出來。而如果使用多為測試用例生成技術(shù)雖然會拓寬其測試范圍,但也容易導(dǎo)致狀態(tài)爆炸問題,因此,多維測試用例生成技術(shù)的研究是未來的一個重點(diǎn)。同樣,智能測試用例生成技術(shù)也是未來的一個重點(diǎn)。第四,測試效果評估技術(shù),當(dāng)前的很多測試使用代碼覆蓋率對測試效果進(jìn)行評估,這存在著很大的不合理性。因此未來測試效果將從程序狀態(tài)的覆蓋率、測試數(shù)據(jù)的有效性以及輸入邊界測試的充分性等多個方面對測試效果進(jìn)行評估。
總之,軟件安全漏洞挖掘技術(shù)的研究是一個很寬泛的研究,本文限于篇幅,很多地方難以涉及并深入。因此,在我們的日常工作中應(yīng)加強(qiáng)這方面的探索和研究,只有不斷提升我們的技術(shù)水平,才能真正為信息數(shù)據(jù)的安全起到保障作用。
參考文獻(xiàn)
[1]文偉平.軟件安全漏洞挖掘的研究思路及發(fā)展趨勢[J]. 信息網(wǎng)絡(luò)安全. 2009(10).
[2]遲強(qiáng). 漏洞挖掘分析技術(shù)綜述[J]. 計(jì)算機(jī)與信息技術(shù). 2009(Z2).
[3]徐有福. 基于漏洞模型檢測的安全漏洞挖掘方法研究[J].信息網(wǎng)絡(luò)安全. 2011(08).
[4]夏建軍,孫樂昌,劉京菊,張旻,蔡銘. 基于多維Fuzzing的緩沖區(qū)溢出漏洞挖掘技術(shù)研究[J]. 計(jì)算機(jī)應(yīng)用研究.