• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于緩沖區(qū)溢出的數(shù)據(jù)驅(qū)動型漏洞檢測系統(tǒng)總體設(shè)計與實現(xiàn)*

    2015-09-09 09:45:38文雪巍秦秀媛王鳳領(lǐng)
    關(guān)鍵詞:詞法源代碼緩沖區(qū)

    文雪巍,秦秀媛,王鳳領(lǐng)

    (黑龍江財經(jīng)學(xué)院)

    0 引言

    長期以來,計算機(jī)信息安全這個問題一直在困擾著人們,特別是隨著系統(tǒng)軟件和應(yīng)用軟件的廣泛使用,人們發(fā)現(xiàn)存在漏洞問題非常普遍.在這些漏洞中,數(shù)據(jù)驅(qū)動型漏洞達(dá)到了半數(shù)以上.數(shù)據(jù)驅(qū)動型漏洞是指由數(shù)據(jù)不正確使用引起的溢出產(chǎn)生的漏洞,它分為緩沖區(qū)溢出漏洞和格式化字符串漏洞等[1].

    為了減少這種漏洞的出現(xiàn),數(shù)據(jù)驅(qū)動型漏洞的檢測技術(shù)成為了信息安全研究的一個重要課題.原有的檢測方法只能對漏洞語句做到詞法分析和語法分析.該文在此基礎(chǔ)上提出了語義分析的靜態(tài)檢測方法,并實現(xiàn)了一個原型檢測系統(tǒng)[2].該系統(tǒng)可以在軟件開發(fā)完成后,在軟件開發(fā)小組內(nèi)部進(jìn)行檢測,檢測出軟件中是否存在緩沖區(qū)溢出漏洞,以及漏洞出現(xiàn)的位置,為軟件開發(fā)人員提供了更準(zhǔn)確的檢測依據(jù).

    1 原型檢測系統(tǒng)的總體設(shè)計

    這種面向語義分析的原型檢測系統(tǒng)是以語法分析和編譯原理中的詞法分析為基礎(chǔ)的,采用Wagner對緩沖區(qū)的數(shù)學(xué)描述方法,以實現(xiàn)語義方面的檢測.主要由四個模塊組成原型檢測系統(tǒng),分別是創(chuàng)建程序執(zhí)行流程模塊、綜合處理模塊、詞法分析模塊和緩沖區(qū)預(yù)先搜索模塊四個部分.原型檢測系統(tǒng)的整體結(jié)構(gòu)圖如圖1所示.

    圖1 原型檢測系統(tǒng)結(jié)構(gòu)圖

    根據(jù)圖1所示,其工作流程是:原型檢測系統(tǒng)首先讀入源代碼文件,如果有多個源代碼文件就逐個讀入.程序有兩個分支,“詞法分析模塊”將源代碼“粉碎”成一個token字序列(一個token字就是一個有屬性標(biāo)記的符號,比如,包括屬性有,標(biāo)識符,數(shù)字,關(guān)鍵字等).“詞法分析模塊”將token字序列傳遞給“緩沖區(qū)預(yù)先搜索模塊”(其實所謂的傳遞就是token字序列是全局變量,全局可見的),“緩沖區(qū)預(yù)先搜索模塊”根據(jù)token字序列,將字符指針,字符緩沖區(qū)等內(nèi)容從token字序列中“提取”出來,存入到固定的數(shù)據(jù)結(jié)構(gòu)中(數(shù)據(jù)結(jié)構(gòu)的描述在“緩沖區(qū)預(yù)先搜索模塊”中).“創(chuàng)建程序執(zhí)行流程模塊”根據(jù)緩沖區(qū)列表和源程序的執(zhí)行流程,對存在關(guān)系的緩沖區(qū)進(jìn)行統(tǒng)計,比如,如果兩個緩沖區(qū)簡直存在關(guān)系,那么就在有向圖中這兩個節(jié)點(diǎn)之間添加一條邊.“創(chuàng)建程序執(zhí)行流程模塊”得到一個緩沖區(qū)之間關(guān)系的有向圖.“綜合處理模塊”獲得token字串序列和流程有向圖,加載漏洞函數(shù)數(shù)據(jù)庫,根據(jù)該文提出的語義分析方法進(jìn)行語義分析,最后將分析的結(jié)果輸出到檢測報告中.

    2 原型檢測系統(tǒng)模型的詳細(xì)設(shè)計[3]

    2.1 詞法分析模塊

    2.1.1 詞法分析算法

    源代碼文件的錄入過程就是依靠詞法分析實現(xiàn)的,其本質(zhì)上是將源代碼的源程序轉(zhuǎn)換成眾多的Token字.考慮到源程序各個部分的具體的內(nèi)容互不相同,為了方便檢測和控制,常常將不同的部分轉(zhuǎn)換成特定的Token字進(jìn)行具體的標(biāo)記.如下所示,為常見的C語言類轉(zhuǎn)換語句:

    如果要詞法分析上面的C語言語句,可以簡單的將其劃為四個部分即:數(shù)字、特殊字符、變量、關(guān)鍵字,他們分別對應(yīng)著“1”、“=”、“b”、“int”,這樣該C語言的四個部分具有了特定的屬性,這樣既實現(xiàn)了詞法分析.類似的,可以對所有的源文件進(jìn)行這樣的詞法分析.

    2.1.2 詞法分析算法流程

    圖2為詞法分析算法流程圖,也即Lex的工作流程.

    圖2 詞法分析流程

    源文件中各個部分都被賦予了特定的屬性后,整個程序就轉(zhuǎn)換成了一個Token字符序列,該序列有明顯的獨(dú)特性,且很多模塊都可以檢測這些Token序列,因此,源文件就很容易被搜索.需要注意整個過程的最基本操作就是詞法分析[4].

    2.2 緩沖區(qū)搜索模塊

    2.2.1 緩沖區(qū)的搜索方法

    在源代碼中開辟緩沖區(qū)可能會引起數(shù)據(jù)驅(qū)動型漏洞,因此必須對源程序中開辟的緩沖區(qū)進(jìn)行具體的檢測.一般要找到源程序中的某一個緩沖區(qū),直接從緩沖區(qū)列表中讀取即可,但是要注意這一緩沖區(qū)列表不是自動生成的,首先需要檢測整個工程,進(jìn)而根據(jù)不同緩沖區(qū)的特點(diǎn)創(chuàng)建而成.2.2.2 模塊的算法流程

    模塊的算法流程顯示了緩沖區(qū)搜索的整個過程,如圖3所示.

    找到并檢測程序中的緩沖區(qū),并給予其具體的定義,采用專用的數(shù)據(jù)進(jìn)行表征進(jìn)而將其存儲在特定的區(qū)域.為了方便緩沖區(qū)的標(biāo)記和定義,一般要在開辟緩沖區(qū)之前制定一個對應(yīng)緩沖區(qū)具體屬性的表.

    2.3 創(chuàng)建程序執(zhí)行流程模塊

    改進(jìn)的Wagner處理方法.

    在整數(shù)范圍內(nèi)Wagner方法比較常用,但是遇到有向圖循環(huán)時,該處理方法就顯得格外麻煩,因為需要在所有的字符串后都分別設(shè)置一個特別域.因此,為了降低處理過程的復(fù)雜性,可以有意的避免循環(huán)圖的出現(xiàn)或者改變循環(huán)圖為非循環(huán)圖[5].

    這里優(yōu)化了Wagner方法,動態(tài)檢測時只處理與之相關(guān)的緩沖區(qū)域,盡量降低對緩沖區(qū)的干擾和影響,涉及到的約束關(guān)系相對比較簡單:

    圖3 緩沖區(qū)搜索流程

    (1)最常見的約束關(guān)系是緩沖區(qū)的開辟和使用(常與緩沖區(qū)的大小相關(guān));

    (2)字符串的長度是否達(dá)到一定值,這時常常要考慮庫文件中的一些函數(shù),這種約束關(guān)系也是常常涉及到[6].

    很明顯,上面說到的約束關(guān)系要比普通Wagner方法簡單很多,其十分有效的回避了循環(huán)圖問題,用很少的約束就達(dá)到了目的.但是上面所述的約束也存在兩個很大的缺陷:①不能把所有的緩沖區(qū)的信息都揭示出來;②沒有涉及到堆溢出的處理方法即沒有檢測堆分配和堆指針的安全性.因此,大多時候在搜索模塊必須解決上面所述的兩個突出問題.一般,綜合處理模塊負(fù)責(zé)了程序執(zhí)行流程模塊的程序執(zhí)行流程有向圖和緩沖區(qū)預(yù)先搜索模塊的緩沖區(qū)列表的創(chuàng)建,便于分析程序的語法和語義.

    2.4 綜合分析模塊

    圖4是綜合分析模塊的算法流程.

    綜合分析模塊分析檢索緩沖區(qū)時必須先得到Token字串序列和開辟的緩沖區(qū)的列表,然后參照程序執(zhí)行流程有向圖及定義的危險函數(shù),進(jìn)而確定是否及哪里會出現(xiàn)溢出及有缺陷的語義和內(nèi)容,并將判斷結(jié)果及時的報告到相關(guān)文件中.

    圖4 綜合分析流程

    3 測試過程

    該檢測軟件的測試過程包括兩個點(diǎn):一個是測試具有代表性的開源代碼、另一個是測試存在溢出漏洞的緩沖區(qū).使用上述兩個測試過程進(jìn)行系統(tǒng)檢驗可以得到較為完整的測試結(jié)果,檢驗系統(tǒng)是否能夠正常運(yùn)行.

    為對檢測系統(tǒng)做清晰的說明,舉幾個簡單但是特別構(gòu)造的具有緩沖區(qū)溢出漏洞的代碼,給出原型系統(tǒng)的檢測結(jié)果.代碼1為:

    從代碼1可以發(fā)現(xiàn),這段代碼具有明顯的數(shù)據(jù)驅(qū)動型漏洞.目的緩沖區(qū)buffer[10]中,開辟的空間大小為10字節(jié),而源緩沖區(qū)“Hello a example”,包括’

    凤山县| 信阳市| 宁远县| 富阳市| 新野县| 禄劝| 娱乐| 北川| 金寨县| 泗阳县| 乃东县| 隆子县| 弥渡县| 石家庄市| 阳信县| 桂东县| 贵溪市| 井陉县| 肥城市| 从化市| 郴州市| 石首市| 昌邑市| 桓仁| 新乐市| 海丰县| 方城县| 蒙城县| 左贡县| 手游| 克山县| 绍兴县| 闽清县| 太仓市| 德兴市| 绥宁县| 南宫市| 体育| 青铜峡市| 黄大仙区| 勐海县|