999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于代碼審計(jì)技術(shù)的OpenSSL脆弱性分析①

2017-09-15 07:19:48江,羅權(quán)
關(guān)鍵詞:分析

杜 江,羅 權(quán)

(重慶郵電大學(xué) 網(wǎng)絡(luò)與信息安全技術(shù)重慶市工程實(shí)驗(yàn)室,重慶 400065)

基于代碼審計(jì)技術(shù)的OpenSSL脆弱性分析①

杜 江,羅 權(quán)

(重慶郵電大學(xué) 網(wǎng)絡(luò)與信息安全技術(shù)重慶市工程實(shí)驗(yàn)室,重慶 400065)

本文討論應(yīng)用代碼審計(jì)技術(shù),分析OpenSSL源代碼,進(jìn)行脆弱性分析,并作出針對(duì)性修補(bǔ)建議.在進(jìn)行源碼級(jí)分析時(shí),主要采用數(shù)據(jù)流分析技術(shù),動(dòng)態(tài)污點(diǎn)分析技術(shù),定理證明等.各類代碼審計(jì)技術(shù)由于都主要采用形式化手段分析軟件構(gòu)架的安全需求,通常都對(duì)某種特定場(chǎng)景有較好效果,但實(shí)用性較差.在審計(jì)linux,xen等大型成熟軟件項(xiàng)后時(shí),存在效率低下,誤報(bào)率高等缺陷,甚至可能根本無法挖掘出有效漏洞.為此通過采用搭配使用各種不同代碼審計(jì)技術(shù),同時(shí)使用一種新的安全屬性定義手法,從底層角度定義安全屬性,以提升其對(duì)軟件安全需求描述的準(zhǔn)確度,避免其審計(jì)缺陷.在保留代碼審計(jì)技術(shù)自動(dòng)化程度高的優(yōu)點(diǎn)同時(shí)提升其審計(jì)效率以及降低誤報(bào)率,深層次發(fā)掘代碼脆弱性.

漏洞挖掘;代碼審計(jì);形式化;OpenSSL

安全是相對(duì)的,危險(xiǎn)是絕對(duì)的.現(xiàn)如今網(wǎng)絡(luò)安全的兩大威脅分別為軟件漏洞和惡意代碼,其中軟件漏洞對(duì)網(wǎng)絡(luò)安全的影響尤為巨大.SSL作為為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,而OpenSSL作為SSL協(xié)議的實(shí)現(xiàn),一旦OpenSSL出現(xiàn)未被披露但是已被黑客使用的漏洞或者OpenSSL的開發(fā)公司——Netscape在OpenSSL中植入后門,勢(shì)必將對(duì)我國(guó)的安全領(lǐng)域造成巨大影響.對(duì)OpenSSL做一次脆弱性分析是完全有必要的,對(duì)開源項(xiàng)后的源代碼進(jìn)行安全審計(jì)必定對(duì)我國(guó)的網(wǎng)絡(luò)安全有重大意義.

在編程語言不斷高級(jí)化,庫(kù)函數(shù)不斷封裝,使編程越發(fā)便捷的同時(shí),在代碼進(jìn)行抽象的過程中帶來的安全風(fēng)險(xiǎn)也越來越多,而代碼審計(jì)的目標(biāo)就是消除軟件工程之中不斷封裝,采用更高級(jí)語言編寫代碼時(shí)帶來的安全風(fēng)險(xiǎn).同時(shí)消除一些已有的一些大型項(xiàng)后存在的安全風(fēng)險(xiǎn),如 linux、xen、OpenSSL 等.代碼審計(jì)技術(shù)對(duì)信息安全具有重大意義.代碼審計(jì)技術(shù)的最終目標(biāo)是消除代碼中所有的漏洞.

就后前而言,漏洞挖掘技術(shù)主要指代碼審計(jì)技術(shù)以及fuzz技術(shù)兩種.主流代碼審計(jì)技術(shù)通常指的是數(shù)據(jù)流分析技術(shù),污點(diǎn)分析技術(shù),符號(hào)執(zhí)行技術(shù),定理證明,模式判別等.這些技術(shù)通常都是基于形式化的漏洞挖掘手段,其優(yōu)點(diǎn)都是自動(dòng)化程度高,但是也存在各種各樣的缺點(diǎn),如誤報(bào)率高、“路徑爆炸”之類的“維數(shù)災(zāi)難”等問題[1].通常這些技術(shù)都比較適合應(yīng)用于比較單純的某一場(chǎng)景之中,在實(shí)際的工程應(yīng)用中都存在實(shí)用性較差、效率低下、誤報(bào)率高等致命缺陷.對(duì)于脆弱性分析,后前在工業(yè)界比較流行的是fuzz技術(shù),但fuzz技術(shù)理論上存在一定缺陷,如無法深度探測(cè)代碼脆弱性、測(cè)試用例編寫困難,自動(dòng)化程度低,樣本間關(guān)聯(lián)性差等[2-5].未來必將屬于理論上更先進(jìn)的代碼審計(jì)技術(shù),但代碼審計(jì)技術(shù)后前而言并未成熟,難以在實(shí)際中應(yīng)用.

在完整使用代碼審計(jì)技術(shù)對(duì)軟件工程進(jìn)行脆弱性分析時(shí),分為兩個(gè)過程:1)前端——代碼解析部分;2)后端——形式化脆弱性分析部分.

對(duì)于前端部分來說,主要指數(shù)據(jù)流分析,污點(diǎn)分析等技術(shù).在代碼解析過程中,主要是對(duì)數(shù)據(jù)的流向,執(zhí)行過程做出分析,其精度很大程度上在于是否可以準(zhǔn)確描述程序的實(shí)際運(yùn)行過程.在分析過程中,條件判斷語句,相關(guān)變量大小都將影響語句執(zhí)行順序.在分析過程中,數(shù)據(jù)流分析技術(shù)分為流敏感與流不敏感分析技術(shù),而污點(diǎn)分析技術(shù)又分為顯式污染及隱式污染.在大型的軟件項(xiàng)后的實(shí)際分析過程中,代碼量過大導(dǎo)致無法構(gòu)架出完整的代碼模型,調(diào)用流程圖等相關(guān)信息,通常會(huì)使用忽略隱式污染,采用不敏感分析方法等降低分析難度,但這都是以犧牲精度為代價(jià)的.

對(duì)于后端部分,主要指定理證明技術(shù),模式判別技術(shù)等.在對(duì)代碼構(gòu)架做形式化判別的過程中,代碼模型中包含的大量語義信息難以做出有效處理,從編譯角度說,有限的語法,詞法可以表達(dá)出無限的語義,這一點(diǎn)嚴(yán)重影響代碼審計(jì)技術(shù)對(duì)代碼的脆弱性分析能力.另外在實(shí)際的處理過程中,在對(duì)大型軟件項(xiàng)后的狀態(tài)有窮枚舉數(shù)據(jù)集過大,導(dǎo)致空間爆炸等問題;在實(shí)際脆弱性判別過程中,對(duì)代碼的安全屬性以及安全需求的邊界難以確定.最后形式化判別的代碼模型與代碼本身存在一定誤差,導(dǎo)致大量誤報(bào),漏報(bào)等情況[6].

總體而言,代碼審計(jì)技術(shù)并不成熟,實(shí)用性相對(duì)較差,且誤報(bào)率高,但理論上較fuzz技術(shù)更為卓越自動(dòng)化,具有形式化程度高,挖掘?qū)哟紊畹葍?yōu)點(diǎn).代碼審計(jì)技術(shù)具有較高的研究?jī)r(jià)值.

1 OpenSSL 的審計(jì)過程

代碼審計(jì)技術(shù)作為漏洞挖掘技術(shù)領(lǐng)域的重要組成部分,其重要程度不言而喻.在對(duì)OpenSSL的審計(jì)過程中,主要使用的是:數(shù)據(jù)流分析,污點(diǎn)分析,以及定理證明技術(shù).代碼審計(jì)技術(shù)存在實(shí)用性差的缺點(diǎn),在實(shí)際的應(yīng)用過程中,需要搭配使用,在保留形式化挖掘優(yōu)點(diǎn)的基礎(chǔ)上,提升其實(shí)用性,真正達(dá)到一定的審計(jì)效果.

在本次代碼審計(jì)過程之中,所采用的方法是利用數(shù)據(jù)流分析技術(shù)分析OpenSSL代碼構(gòu)架,獲取軟件執(zhí)行路徑信息,隨后在其基礎(chǔ)上使用污點(diǎn)分析技術(shù)勾勒出受輸入信息影響部分,消減無關(guān)代碼分支干擾,最后使用定理證明技術(shù)分析脆其弱性,進(jìn)行漏洞挖掘工作,最終實(shí)現(xiàn)形式化漏洞挖掘.在定理證明過程中采用一種新的證明手法,從底層角度描述代碼的安全需求,消除常規(guī)定理技術(shù)需要手動(dòng)在代碼加入斷言缺陷,同時(shí)提高定理證明技術(shù)準(zhǔn)確性.圖1給出了OpenSSL代碼審計(jì)的流程圖.

1.1 數(shù)據(jù)流分析

數(shù)據(jù)流分析技術(shù)是一種代碼審計(jì)的支撐技術(shù),用于獲取在程序運(yùn)行過程中的變量參數(shù)等相關(guān)信息[1].

OpenSSL的主執(zhí)行流程為:新建SSL結(jié)構(gòu)體之后,選擇加密模式,之后進(jìn)入ssl3_connect或者ssl3_accept之中的握手流程,在握手流程之中,會(huì)調(diào)用密碼庫(kù)、io庫(kù)、證書庫(kù)、隨機(jī)數(shù)生成庫(kù)等等.而數(shù)據(jù)流分析的作用就是自動(dòng)分析出數(shù)據(jù)在代碼之中的流向,同時(shí)收集輸入數(shù)據(jù)在OpenSSL執(zhí)行過程之中的信息.

簡(jiǎn)單起見,以流敏感、路徑不敏感方法獲取程序執(zhí)行路徑,以及記錄中途的參數(shù)處理.由于現(xiàn)當(dāng)代的代碼構(gòu)架風(fēng)格,通常程序在最接近底層的部分只做最基本的操作,如 send、recv、read、write 等等,所有的上層操作只做抽象、封裝以及邏輯判斷等.數(shù)據(jù)流分析技術(shù)用于收集程序執(zhí)行流程中的完整抽象過程以及最終的執(zhí)行過程的相關(guān)信息.這是一個(gè)代碼審計(jì)的準(zhǔn)備過程,是一個(gè)完善程序代碼模型的過程.

圖1 OpenSSL 代碼審計(jì)流程圖

在這一過程之中,主要工作是:1)建立代碼模型;2)收集變量信息.

1.1.1 建立代碼模型

僅以ssl3_connect此主功能函數(shù)為例說明:

ssl3_connect->多個(gè)握手狀態(tài)->調(diào)用的不同函數(shù).

由于此函數(shù)調(diào)用流程過于復(fù)雜,圖2中流程密集到難以觀察,此過程若以手動(dòng)方式歸檔處理將無法實(shí)現(xiàn),現(xiàn)對(duì)其中的一小部分放大再做觀察.

圖2 ssl3_connect函數(shù)調(diào)用流程圖

圖3為_send_server_key_exchange函數(shù)在OpenSSL中的用流程圖,使用數(shù)據(jù)流分析技術(shù)對(duì)其進(jìn)行分析.

簡(jiǎn)單起見,使用ida等靜態(tài)分析工具直接獲取函數(shù)調(diào)用流程,但此類調(diào)用流程路徑不敏感,需進(jìn)一步分析.在擁有源代碼的情況下,使用判別分析等手段進(jìn)行路徑再次分析,約束語句判斷,如 if語句,while 語句,switch 語句等.消減分支,將分支數(shù)據(jù)歸檔,此過程可以依靠符號(hào)執(zhí)行技術(shù)完成[4].在此分析過程中,建立調(diào)用流程圖供后續(xù)分析時(shí)使用,簡(jiǎn)單來說,即在對(duì)底層代碼中任意一個(gè)變量或者函數(shù)感興趣時(shí)候,可以得到一個(gè)完整的,從OpenSSL獲取數(shù)據(jù)包開始一直到此函數(shù)的所有調(diào)用過程,以及所有的此函數(shù)繼續(xù)調(diào)用的所有代碼路徑.在要求最低情況下,ida已經(jīng)可以達(dá)到要求.

圖3 部分調(diào)用流程圖

1.1.2 收集變量信息

以輸入信息為起點(diǎn),獲取所有調(diào)用過程之中作為參數(shù)傳遞的變量.實(shí)際而言,所有的參數(shù)變量信息將變成一棵巨大的樹,這個(gè)樹上的每個(gè)節(jié)點(diǎn),都代表一個(gè)參數(shù)變量.隨著代碼執(zhí)行的深入,這棵樹會(huì)越來越大.而在后續(xù)代碼審計(jì)的步驟中需要查詢代碼樹中任意結(jié)點(diǎn)的可能狀態(tài)以及程序執(zhí)行路徑,用于支持其他代碼審計(jì)技術(shù).

其中結(jié)點(diǎn)即為函數(shù)的參數(shù),每個(gè)結(jié)點(diǎn)包含子函數(shù)中敏感信息.以此樹來描述代碼中的流程信息.

Struct{

Int type;

Char[20] name;

Int max;

Int min;

Void* choice;//參數(shù)在多種不同情況下的可能不同取值數(shù)組.

Int len;

Int fromnode;

Int[20] nextnode;

……;

}node;

1.2 污點(diǎn)分析

污點(diǎn)分析是一種跟蹤并分析污點(diǎn)信息在內(nèi)存中流動(dòng)的技術(shù).所有能夠被輸入影響到的變量及被影響變量所影響到的變量都屬于污點(diǎn)變量,在污染變量的過程被稱為污點(diǎn)擴(kuò)散.污點(diǎn)分析技術(shù)在漏洞挖掘之中意義重大,分析污點(diǎn)數(shù)據(jù)是否可以影響代碼關(guān)鍵操作,判別是否存在漏洞,常被用于sql注入漏洞的檢測(cè).此技術(shù)容易受編譯器影響,同時(shí)構(gòu)造復(fù)雜,在這里,同樣將其當(dāng)做漏洞挖掘的支撐技術(shù)看待,規(guī)避這些缺陷.

并非所有的可以影響關(guān)鍵操作都是漏洞,若可影響關(guān)鍵操作的數(shù)據(jù)被凈化,即對(duì)污點(diǎn)數(shù)據(jù)進(jìn)行驗(yàn)證,約束則不存在脆弱性,當(dāng)然也有可能驗(yàn)證不嚴(yán),在污點(diǎn)分析中稱為凈化不完全.如果,此數(shù)據(jù)與污點(diǎn)數(shù)據(jù)無直接關(guān)系,但是有邏輯關(guān)系,如:

此類污染被稱為隱式污染,此類污染造成漏洞的一個(gè)典型類型是UAF類型漏洞,典型漏洞例子為linux的CVE-2016-0728,在用計(jì)數(shù)整數(shù)溢出變?yōu)?時(shí),導(dǎo)致內(nèi)核對(duì)象被釋放,在被釋放空間內(nèi)偽造虛假內(nèi)核對(duì)象,調(diào)用原釋放空間保留的用執(zhí)行任意代碼.

實(shí)現(xiàn)污點(diǎn)分析,隱式污染的分析是一個(gè)難點(diǎn).顯式污染,可以使用語法樹分析處理,對(duì)于隱式污染處理較為復(fù)雜.好在隱式污染較為罕見,對(duì)于隱式污染,由于隱式污染一定伴隨于顯式污染,這里主要依靠其后的定理證明技術(shù)排除顯示污染附近代碼上下文可能的危險(xiǎn)操作,一定程度上可以緩解隱式污染所造成的不利影響.

污點(diǎn)分析技術(shù)的最大難點(diǎn)在于凈化的過程,“凈化”顧名思義即對(duì)受污染變量的約束過程.真正的問題在于如何確定凈化完全,即確定是否存在驗(yàn)證不嚴(yán)問題.形式化判別凈化是否完成是一個(gè)巨大難題,這里將此任務(wù)將交由定理證明技術(shù)完成.

1.3 定理證明技術(shù)

定理證明的方法是指,以公式的形式描述軟件安全屬性,若代碼可以突破安全屬性范圍,則發(fā)出警報(bào).而這個(gè)安全屬性由安全工程師以自己的經(jīng)驗(yàn)提煉.此技術(shù)優(yōu)點(diǎn)在于嚴(yán)格的推理證明控制檢測(cè)的進(jìn)行,誤報(bào)率低,方便輔助安全工程師編寫測(cè)試用例等[7,8].

常規(guī)定理證明技術(shù)包括數(shù)學(xué)定理證明、硬件驗(yàn)證、協(xié)議驗(yàn)證等.定理證明技術(shù)的實(shí)現(xiàn)關(guān)鍵在于證明器的編寫,用于判斷過程內(nèi)代碼是否存在漏洞,過程間代碼是否存在漏洞.通常需要在程序中插入大量斷言、注釋等輔助證明器工作[3,6].其缺陷在于定理規(guī)定復(fù)雜,擴(kuò)展性不強(qiáng),需要添加斷言之類在代碼審計(jì)過程中進(jìn)行交互,增加程序員工作量等.

這里不使用常規(guī)定理證明方法,直接判別程序動(dòng)作的底層行為.安全屬性定義方法示例:寫操作字節(jié)數(shù)不可以超過限定內(nèi)存空間大小,如memcpy的n不可以超過dest的內(nèi)存大小;任意一個(gè)函數(shù)不可以有兩條路徑返回成功.摒棄高級(jí)語言的語義級(jí)意義分析,從底層行為角度定義安全屬性,排除編程語言進(jìn)行描述時(shí)的多樣性干擾.從底層角度針對(duì)漏洞類型定義的安全屬性,可以提升其對(duì)軟件的安全需求描述的準(zhǔn)確度,且無需手動(dòng)在代碼中插入大量斷言用以支持證明過程中的布爾計(jì)算.證明器可在遍歷代碼狀態(tài)時(shí)自動(dòng)識(shí)別底層行為性操作進(jìn)行,驗(yàn)證是否存在脆弱性.

以O(shè)penSSL之中一個(gè)瑕疵代碼為例,此瑕疵與OpenSSL提供的測(cè)試代碼配合可造成信息泄漏,一次可以泄漏255字節(jié)數(shù)據(jù).

此size變量為0時(shí)候可以直接越過驗(yàn)證,實(shí)現(xiàn)異常路徑,也就是說參數(shù)可以影響程序執(zhí)行路徑,導(dǎo)致代碼流程改變,最終導(dǎo)致程序漏洞的出現(xiàn).

在OpenSSL中,若以“所有堆塊必須在使用完之后被釋放,且釋放只能一次,釋放后的指針無法使用”為一條安全屬性.根據(jù)先驗(yàn)知識(shí),如此設(shè)置約束規(guī)則起碼可以發(fā)現(xiàn)CVE-2015-0206、CVE-2014-3571等漏洞.

但在更加復(fù)雜的邏輯缺陷導(dǎo)致漏洞中,如最新的CVE-2015-4484提交密碼錯(cuò)誤93次返回root用戶,后前整個(gè)學(xué)術(shù)界都沒有較好的檢測(cè)方法.堆溢出、棧溢出、內(nèi)存泄露等典型漏洞嚴(yán)格來說屬于編碼規(guī)范化問題,都存在一定程度上的內(nèi)存破壞行為.對(duì)復(fù)雜的邏輯漏洞而已,其形式上已經(jīng)接近于開發(fā)者刻意留下的后門,不再具有典型漏洞的特征,在漏洞的利用過程中所執(zhí)行的是代碼正常的邏輯行為,并沒有shellcode存在.若需要檢測(cè)出邏輯漏洞,需要對(duì)代碼語義進(jìn)行解析,做出邏輯級(jí)的判斷.就后前的人工智能水平而言,尚無法對(duì)機(jī)器語言(或者說編程語言)背后的自然語義做出形式化分析,此類漏洞通常在學(xué)習(xí)者學(xué)習(xí)研究逆向相關(guān)項(xiàng)后時(shí)發(fā)現(xiàn).

2 OpenSSL 漏洞分析

2.1 漏洞概述

OpenSSL其本質(zhì)是一個(gè)庫(kù)文件.以ssl3_connect、ssl3_accept等函數(shù)封裝connect、accept等通信函數(shù),以透明的方式在程序的運(yùn)行過程之中加入握手加密等過程.在 ssl3_accept、ssl3_accept等函數(shù)中,調(diào)用 c 標(biāo)準(zhǔn)庫(kù)函數(shù)中的connect、accept等函數(shù),實(shí)現(xiàn)通信過程中收、發(fā)過程中的加、解密等功能.

此次審計(jì)過程之中,挖掘的 0day 漏洞,已提交,獲取漏洞編號(hào)CVE-2016-2179,網(wǎng)景通信公司(Netscape Communications Corporation)致謝聲明網(wǎng)址為:

https://git.openssl.org/?p=openssl.git;a=commit;h=f5 c7f5dfbaf0d2f7d946d0fe86f08e6bcb36ed0d

圖4 致謝聲明

2.2 CVE-2016-2179

OpenSSL通常作為服務(wù)器套件存在,一般使用在linux服務(wù)器上,但是由于使用windows平臺(tái)之上的調(diào)試工具更為便捷,本次實(shí)驗(yàn)環(huán)境為 win7 x86 系統(tǒng),以及od2.1、openssl-1.0.2h,輔助分析工具Wireshark.

CVE-2016-2179漏洞位于d1_both.c文件的dtls1_get_message_fragment函數(shù)中.與基于tcp的加密不同,udp有分片特性,此函數(shù)作用是對(duì)于udp數(shù)據(jù)包所傳送數(shù)據(jù)的抽象,使上層函數(shù)不關(guān)心udp是否分片,直接從接受緩存區(qū)讀取數(shù)據(jù).此函數(shù)曾被爆出多個(gè)漏洞,甚至包括一個(gè)堆溢出遠(yuǎn)程任意代碼執(zhí)行的高危漏洞.

此函數(shù)在接收數(shù)據(jù)過程之中,若udp數(shù)據(jù)包分片,則需要申請(qǐng)內(nèi)存空間接收分片,將所有分片數(shù)據(jù)接收完成,排列整齊之后,將數(shù)據(jù)拷貝至數(shù)據(jù)接收空間處.在此抽象過程之中存在問題:若在接收過程之中,此次握手消息第一次接收到的是一個(gè)分片消息,則申請(qǐng)內(nèi)存空間,將此次接收到的信息插入buffered_messages隊(duì)列中,若第二次接受到的是此次消息的完整數(shù)據(jù)包,則此函數(shù)將誤認(rèn)為此次握手消息沒有分片,此函數(shù)將直接越過內(nèi)存空間釋放將消息掛入ssl結(jié)構(gòu)體中,起內(nèi)存泄露,最終可導(dǎo)致服務(wù)端客戶端雙方的拒絕服務(wù)攻擊.每次握手最多可以申請(qǐng)出約16883個(gè)字節(jié)大小的內(nèi)存塊.若同時(shí)向服務(wù)端申請(qǐng)多個(gè)會(huì)話,每個(gè)會(huì)話的每次握手都可以申請(qǐng).

10638字節(jié)大小的內(nèi)存空間,最終將導(dǎo)致由于內(nèi)存資源不足而起的拒絕服務(wù).

具體請(qǐng)看代碼:

無關(guān)代碼片段省略,由于是udp數(shù)據(jù)包,數(shù)據(jù)包存在接受到的數(shù)據(jù)順序和對(duì)方發(fā)送順序不一致的情況,所以O(shè)penSSL提供的接收函數(shù)dtls1_process_out_of_seq_message將所接收到的udp數(shù)據(jù)包中數(shù)據(jù)取出后重新排序,同時(shí)只要udp數(shù)據(jù)長(zhǎng)度小于信息長(zhǎng)度,說明此數(shù)據(jù)包分分片報(bào)文,則調(diào)用dtls1_reassemble_fragment函數(shù),此函數(shù)功能為組裝分片udp數(shù)據(jù)包:申請(qǐng)空間,將udp數(shù)據(jù)包中數(shù)據(jù)在此中轉(zhuǎn),組裝成完整握手消息后輸出.被泄露的內(nèi)存便是在此函數(shù)中被創(chuàng)建,若此次握手消息第一次被接收,便為其申請(qǐng)空間:

frag->msg_header.frag_off=0;}

至此,此將完成內(nèi)存申請(qǐng),若再次發(fā)送此次消息的完整數(shù)據(jù)包之后,便可從此函數(shù)返回接收數(shù)據(jù)成功,從而越過這塊內(nèi)存數(shù)據(jù)的處理釋放過程.請(qǐng)看代碼:

由代碼可知,如果第二次收到的數(shù)據(jù)包是完整的,代碼將直接進(jìn)入消息接收階段.代碼誤認(rèn)為此udp數(shù)據(jù)包是沒有被分片的,直接接收數(shù)據(jù),忽略了對(duì)分片數(shù)據(jù)接收緩沖區(qū)的處理與釋放導(dǎo)致內(nèi)存泄露.

在 od 中,調(diào)試此過程,在后續(xù)握手過程之中,此內(nèi)存塊依舊處于占用態(tài),并沒有被釋放.

圖5 觸發(fā)效果

3 修補(bǔ)方案

將每次接受到完整udp數(shù)據(jù)包消息時(shí)候檢查buffered_messages隊(duì)列,若存在有關(guān)本次消息的內(nèi)存信息存儲(chǔ),則釋放即可.

在每次握手過程之中檢查上次握手的消息隊(duì)列buffered_messages是否存在消息碎片未釋放,如果存在則釋放未釋放的消息碎片,即可消除此漏洞造成的內(nèi)存泄露情況.

4 結(jié)語

本文討論的是多種代碼審計(jì)技術(shù)的交互使用.設(shè)計(jì)數(shù)據(jù)流分析,污點(diǎn)分析以及定理判別三類技術(shù),三種技術(shù)相互配合提高審計(jì)效率以及審計(jì)準(zhǔn)確性,闡述了OpenSSL的一個(gè)漏洞的發(fā)現(xiàn)過程以及利用過程.由于代碼審計(jì)技術(shù)發(fā)展的局限以及本人水平有限,代碼審計(jì)手法自動(dòng)化程度還未達(dá)到全自動(dòng)目標(biāo),通用性較差,需要對(duì)此審計(jì)方案做較大改動(dòng).由于此次工作主要后的為針對(duì)openssl進(jìn)行代碼審計(jì)并非實(shí)現(xiàn)代碼審計(jì)工具,且編寫完整代碼審計(jì)工具工作量過大,此次審計(jì)采用編寫多個(gè)工具,分步驟手動(dòng)執(zhí)行,采用半自動(dòng)方式處理,并未實(shí)現(xiàn)真正全自動(dòng)審計(jì),另外,對(duì)于非源代碼原因入漏洞,如編譯器缺陷、bug導(dǎo)致軟件漏洞,代碼審計(jì)技術(shù)將無法分析出其脆弱性.

1 吳世忠,郭濤,董國(guó)偉,等.軟件漏洞分析技術(shù).北京:科學(xué)出版社,2014.

2 文碩,許靜,苑立英,等.基于策略推導(dǎo)的訪問控制漏洞測(cè)試用例生成方法.計(jì)算機(jī)學(xué)報(bào),2016,(39):1–15.

3 牛偉納,丁雪峰,劉智,等.基于符號(hào)執(zhí)行的二進(jìn)制代碼漏洞發(fā)現(xiàn).計(jì)算機(jī)科學(xué),2013,40(10):119–121,138.[doi:10.3969/j.issn.1002-137X.2013.10.024]

4 朱正欣.二進(jìn)制程序的動(dòng)態(tài)符號(hào)化污點(diǎn)分析[碩士學(xué)位論文].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2015.

5 馬俊.基于模擬器的緩沖區(qū)溢出漏洞動(dòng)態(tài)檢測(cè)技術(shù)研究[碩士學(xué)位論文].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2008.

6 吳世忠.信息安全漏洞分析回顧與展望.清華大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,49(S2):2065–2072.

7 張健.精確的程序靜態(tài)分析.計(jì)算機(jī)學(xué)報(bào),2008,31(9):1549–1553.

8 肖慶.提高靜態(tài)缺陷檢測(cè)精度的關(guān)鍵技術(shù)研究[博士學(xué)位論文].北京:北京郵電大學(xué),2012.

Vulnerability Analysis of OpenSSL Based on Code Audit Technology

DU Jiang,LUO Quan

(Chongqing Engineering Laboratory of Network and Information Security Technology,Chongqing University of Posts and Telecommunications,Chongqing 400065,China)

This paper discusses the process of applying code audit to analyze the vulnerabilities of OpenSSL source codes and proposes some specific fixing advice for OpenSSL.Source level analysis mainly contains data flow analysis,dynamic taint analysis and path constraint solving proof method,etc.Because various code audit techniques adopt formal analysis on software architecture based on their own security requirements,they usually produce good effects when aiming at some particular scenes,but they lack universality.When auditing important mature projects like linux and xen,it is even impossible to exploit vulnerabilities efficiently with using these code audit techniques with high false rate.In this case,the collocation use of different code audit techniques is applied,as well as a new method of the security attributes definition from the bottom to improve the accuracy of software security requirements description and to avoid the defects in its audit.These methods increase audit efficiency,decrease false positive and process deep vulnerability exploitation while retaining the advantages of the high degree of automation of code audit.

code audit;vulnerability minin;formal methods;OpenSSL

杜江,羅權(quán).基于代碼審計(jì)技術(shù)的OpenSSL脆弱性分析.計(jì)算機(jī)系統(tǒng)應(yīng)用,2017,26(9):253–258.http://www.c-s-a.org.cn/1003-3254/5974.html

2016-12-31;采用時(shí)間:2017-02-08

猜你喜歡
分析
禽大腸桿菌病的分析、診斷和防治
隱蔽失效適航要求符合性驗(yàn)證分析
電力系統(tǒng)不平衡分析
電子制作(2018年18期)2018-11-14 01:48:24
電力系統(tǒng)及其自動(dòng)化發(fā)展趨勢(shì)分析
經(jīng)濟(jì)危機(jī)下的均衡與非均衡分析
對(duì)計(jì)劃生育必要性以及其貫徹實(shí)施的分析
GB/T 7714-2015 與GB/T 7714-2005對(duì)比分析
出版與印刷(2016年3期)2016-02-02 01:20:11
中西醫(yī)結(jié)合治療抑郁癥100例分析
偽造有價(jià)證券罪立法比較分析
在線教育與MOOC的比較分析
主站蜘蛛池模板: 国产乱人免费视频| 久久精品免费国产大片| 国产一区二区精品福利| 激情视频综合网| 理论片一区| 国产视频大全| 亚洲国产日韩在线成人蜜芽| 亚洲综合九九| 日韩av手机在线| 亚洲精品无码AⅤ片青青在线观看| 一本大道AV人久久综合| 99国产精品免费观看视频| 色欲不卡无码一区二区| 六月婷婷综合| 91福利片| 精品人妻AV区| 精品国产黑色丝袜高跟鞋| 欧美激情视频二区| 欧美精品三级在线| 亚洲无码视频一区二区三区| 国产欧美日韩91| 亚洲啪啪网| 国产尤物视频网址导航| 欧美日韩国产成人高清视频| 国产精品第5页| 精品一区二区三区四区五区| 国产精品自在在线午夜| 精久久久久无码区中文字幕| 朝桐光一区二区| 国产成人久久777777| 日韩在线第三页| 亚洲成a人片在线观看88| 97狠狠操| 午夜欧美理论2019理论| 无码一区二区波多野结衣播放搜索| 亚洲欧美自拍中文| 久久国产精品电影| 亚洲人妖在线| 日韩a在线观看免费观看| 激情视频综合网| 久久这里只有精品免费| 国产成人久久综合777777麻豆| 91青青草视频在线观看的| 一级一级一片免费| 三级国产在线观看| 国产欧美日韩精品综合在线| 深夜福利视频一区二区| 国产在线91在线电影| 中文字幕亚洲第一| 中文字幕亚洲另类天堂| 亚洲 欧美 偷自乱 图片 | 午夜国产大片免费观看| 怡春院欧美一区二区三区免费| 亚洲欧美国产视频| 思思热在线视频精品| 亚洲国产高清精品线久久| 亚洲浓毛av| 亚洲无码电影| 国产视频a| 日韩在线观看网站| 狠狠色狠狠综合久久| 凹凸精品免费精品视频| 在线观看精品国产入口| 亚洲永久视频| aⅴ免费在线观看| 四虎在线观看视频高清无码| 亚洲免费毛片| 欧美有码在线| AV在线麻免费观看网站| 在线看国产精品| 在线亚洲精品自拍| 国产色伊人| 国产精品成| 国产男女免费视频| 欧美精品一二三区| 国产99视频精品免费视频7| 亚洲品质国产精品无码| 亚洲丝袜中文字幕| 亚洲婷婷在线视频| 国产91色| 久热精品免费| 国产成人精彩在线视频50|