杜 江,羅 權(quán)
(重慶郵電大學(xué) 網(wǎng)絡(luò)與信息安全技術(shù)重慶市工程實驗室,重慶 400065)
基于代碼審計技術(shù)的OpenSSL脆弱性分析①
杜 江,羅 權(quán)
(重慶郵電大學(xué) 網(wǎng)絡(luò)與信息安全技術(shù)重慶市工程實驗室,重慶 400065)
本文討論應(yīng)用代碼審計技術(shù),分析OpenSSL源代碼,進行脆弱性分析,并作出針對性修補建議.在進行源碼級分析時,主要采用數(shù)據(jù)流分析技術(shù),動態(tài)污點分析技術(shù),定理證明等.各類代碼審計技術(shù)由于都主要采用形式化手段分析軟件構(gòu)架的安全需求,通常都對某種特定場景有較好效果,但實用性較差.在審計linux,xen等大型成熟軟件項后時,存在效率低下,誤報率高等缺陷,甚至可能根本無法挖掘出有效漏洞.為此通過采用搭配使用各種不同代碼審計技術(shù),同時使用一種新的安全屬性定義手法,從底層角度定義安全屬性,以提升其對軟件安全需求描述的準(zhǔn)確度,避免其審計缺陷.在保留代碼審計技術(shù)自動化程度高的優(yōu)點同時提升其審計效率以及降低誤報率,深層次發(fā)掘代碼脆弱性.
漏洞挖掘;代碼審計;形式化;OpenSSL
安全是相對的,危險是絕對的.現(xiàn)如今網(wǎng)絡(luò)安全的兩大威脅分別為軟件漏洞和惡意代碼,其中軟件漏洞對網(wǎng)絡(luò)安全的影響尤為巨大.SSL作為為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,而OpenSSL作為SSL協(xié)議的實現(xiàn),一旦OpenSSL出現(xiàn)未被披露但是已被黑客使用的漏洞或者OpenSSL的開發(fā)公司——Netscape在OpenSSL中植入后門,勢必將對我國的安全領(lǐng)域造成巨大影響.對OpenSSL做一次脆弱性分析是完全有必要的,對開源項后的源代碼進行安全審計必定對我國的網(wǎng)絡(luò)安全有重大意義.
在編程語言不斷高級化,庫函數(shù)不斷封裝,使編程越發(fā)便捷的同時,在代碼進行抽象的過程中帶來的安全風(fēng)險也越來越多,而代碼審計的目標(biāo)就是消除軟件工程之中不斷封裝,采用更高級語言編寫代碼時帶來的安全風(fēng)險.同時消除一些已有的一些大型項后存在的安全風(fēng)險,如 linux、xen、OpenSSL 等.代碼審計技術(shù)對信息安全具有重大意義.代碼審計技術(shù)的最終目標(biāo)是消除代碼中所有的漏洞.
就后前而言,漏洞挖掘技術(shù)主要指代碼審計技術(shù)以及fuzz技術(shù)兩種.主流代碼審計技術(shù)通常指的是數(shù)據(jù)流分析技術(shù),污點分析技術(shù),符號執(zhí)行技術(shù),定理證明,模式判別等.這些技術(shù)通常都是基于形式化的漏洞挖掘手段,其優(yōu)點都是自動化程度高,但是也存在各種各樣的缺點,如誤報率高、“路徑爆炸”之類的“維數(shù)災(zāi)難”等問題[1].通常這些技術(shù)都比較適合應(yīng)用于比較單純的某一場景之中,在實際的工程應(yīng)用中都存在實用性較差、效率低下、誤報率高等致命缺陷.對于脆弱性分析,后前在工業(yè)界比較流行的是fuzz技術(shù),但fuzz技術(shù)理論上存在一定缺陷,如無法深度探測代碼脆弱性、測試用例編寫困難,自動化程度低,樣本間關(guān)聯(lián)性差等[2-5].未來必將屬于理論上更先進的代碼審計技術(shù),但代碼審計技術(shù)后前而言并未成熟,難以在實際中應(yīng)用.
在完整使用代碼審計技術(shù)對軟件工程進行脆弱性分析時,分為兩個過程:1)前端——代碼解析部分;2)后端——形式化脆弱性分析部分.
對于前端部分來說,主要指數(shù)據(jù)流分析,污點分析等技術(shù).在代碼解析過程中,主要是對數(shù)據(jù)的流向,執(zhí)行過程做出分析,其精度很大程度上在于是否可以準(zhǔn)確描述程序的實際運行過程.在分析過程中,條件判斷語句,相關(guān)變量大小都將影響語句執(zhí)行順序.在分析過程中,數(shù)據(jù)流分析技術(shù)分為流敏感與流不敏感分析技術(shù),而污點分析技術(shù)又分為顯式污染及隱式污染.在大型的軟件項后的實際分析過程中,代碼量過大導(dǎo)致無法構(gòu)架出完整的代碼模型,調(diào)用流程圖等相關(guān)信息,通常會使用忽略隱式污染,采用不敏感分析方法等降低分析難度,但這都是以犧牲精度為代價的.
對于后端部分,主要指定理證明技術(shù),模式判別技術(shù)等.在對代碼構(gòu)架做形式化判別的過程中,代碼模型中包含的大量語義信息難以做出有效處理,從編譯角度說,有限的語法,詞法可以表達出無限的語義,這一點嚴(yán)重影響代碼審計技術(shù)對代碼的脆弱性分析能力.另外在實際的處理過程中,在對大型軟件項后的狀態(tài)有窮枚舉數(shù)據(jù)集過大,導(dǎo)致空間爆炸等問題;在實際脆弱性判別過程中,對代碼的安全屬性以及安全需求的邊界難以確定.最后形式化判別的代碼模型與代碼本身存在一定誤差,導(dǎo)致大量誤報,漏報等情況[6].
總體而言,代碼審計技術(shù)并不成熟,實用性相對較差,且誤報率高,但理論上較fuzz技術(shù)更為卓越自動化,具有形式化程度高,挖掘?qū)哟紊畹葍?yōu)點.代碼審計技術(shù)具有較高的研究價值.
代碼審計技術(shù)作為漏洞挖掘技術(shù)領(lǐng)域的重要組成部分,其重要程度不言而喻.在對OpenSSL的審計過程中,主要使用的是:數(shù)據(jù)流分析,污點分析,以及定理證明技術(shù).代碼審計技術(shù)存在實用性差的缺點,在實際的應(yīng)用過程中,需要搭配使用,在保留形式化挖掘優(yōu)點的基礎(chǔ)上,提升其實用性,真正達到一定的審計效果.
在本次代碼審計過程之中,所采用的方法是利用數(shù)據(jù)流分析技術(shù)分析OpenSSL代碼構(gòu)架,獲取軟件執(zhí)行路徑信息,隨后在其基礎(chǔ)上使用污點分析技術(shù)勾勒出受輸入信息影響部分,消減無關(guān)代碼分支干擾,最后使用定理證明技術(shù)分析脆其弱性,進行漏洞挖掘工作,最終實現(xiàn)形式化漏洞挖掘.在定理證明過程中采用一種新的證明手法,從底層角度描述代碼的安全需求,消除常規(guī)定理技術(shù)需要手動在代碼加入斷言缺陷,同時提高定理證明技術(shù)準(zhǔn)確性.圖1給出了OpenSSL代碼審計的流程圖.
數(shù)據(jù)流分析技術(shù)是一種代碼審計的支撐技術(shù),用于獲取在程序運行過程中的變量參數(shù)等相關(guān)信息[1].
OpenSSL的主執(zhí)行流程為:新建SSL結(jié)構(gòu)體之后,選擇加密模式,之后進入ssl3_connect或者ssl3_accept之中的握手流程,在握手流程之中,會調(diào)用密碼庫、io庫、證書庫、隨機數(shù)生成庫等等.而數(shù)據(jù)流分析的作用就是自動分析出數(shù)據(jù)在代碼之中的流向,同時收集輸入數(shù)據(jù)在OpenSSL執(zhí)行過程之中的信息.
簡單起見,以流敏感、路徑不敏感方法獲取程序執(zhí)行路徑,以及記錄中途的參數(shù)處理.由于現(xiàn)當(dāng)代的代碼構(gòu)架風(fēng)格,通常程序在最接近底層的部分只做最基本的操作,如 send、recv、read、write 等等,所有的上層操作只做抽象、封裝以及邏輯判斷等.數(shù)據(jù)流分析技術(shù)用于收集程序執(zhí)行流程中的完整抽象過程以及最終的執(zhí)行過程的相關(guān)信息.這是一個代碼審計的準(zhǔn)備過程,是一個完善程序代碼模型的過程.
圖1 OpenSSL 代碼審計流程圖
在這一過程之中,主要工作是:1)建立代碼模型;2)收集變量信息.
僅以ssl3_connect此主功能函數(shù)為例說明:
ssl3_connect->多個握手狀態(tài)->調(diào)用的不同函數(shù).
由于此函數(shù)調(diào)用流程過于復(fù)雜,圖2中流程密集到難以觀察,此過程若以手動方式歸檔處理將無法實現(xiàn),現(xiàn)對其中的一小部分放大再做觀察.
圖2 ssl3_connect函數(shù)調(diào)用流程圖
圖3為_send_server_key_exchange函數(shù)在OpenSSL中的用流程圖,使用數(shù)據(jù)流分析技術(shù)對其進行分析.
簡單起見,使用ida等靜態(tài)分析工具直接獲取函數(shù)調(diào)用流程,但此類調(diào)用流程路徑不敏感,需進一步分析.在擁有源代碼的情況下,使用判別分析等手段進行路徑再次分析,約束語句判斷,如 if語句,while 語句,switch 語句等.消減分支,將分支數(shù)據(jù)歸檔,此過程可以依靠符號執(zhí)行技術(shù)完成[4].在此分析過程中,建立調(diào)用流程圖供后續(xù)分析時使用,簡單來說,即在對底層代碼中任意一個變量或者函數(shù)感興趣時候,可以得到一個完整的,從OpenSSL獲取數(shù)據(jù)包開始一直到此函數(shù)的所有調(diào)用過程,以及所有的此函數(shù)繼續(xù)調(diào)用的所有代碼路徑.在要求最低情況下,ida已經(jīng)可以達到要求.
圖3 部分調(diào)用流程圖
以輸入信息為起點,獲取所有調(diào)用過程之中作為參數(shù)傳遞的變量.實際而言,所有的參數(shù)變量信息將變成一棵巨大的樹,這個樹上的每個節(jié)點,都代表一個參數(shù)變量.隨著代碼執(zhí)行的深入,這棵樹會越來越大.而在后續(xù)代碼審計的步驟中需要查詢代碼樹中任意結(jié)點的可能狀態(tài)以及程序執(zhí)行路徑,用于支持其他代碼審計技術(shù).
其中結(jié)點即為函數(shù)的參數(shù),每個結(jié)點包含子函數(shù)中敏感信息.以此樹來描述代碼中的流程信息.
Struct{
Int type;
Char[20] name;
Int max;
Int min;
Void* choice;//參數(shù)在多種不同情況下的可能不同取值數(shù)組.
Int len;
Int fromnode;
Int[20] nextnode;
……;
}node;
污點分析是一種跟蹤并分析污點信息在內(nèi)存中流動的技術(shù).所有能夠被輸入影響到的變量及被影響變量所影響到的變量都屬于污點變量,在污染變量的過程被稱為污點擴散.污點分析技術(shù)在漏洞挖掘之中意義重大,分析污點數(shù)據(jù)是否可以影響代碼關(guān)鍵操作,判別是否存在漏洞,常被用于sql注入漏洞的檢測.此技術(shù)容易受編譯器影響,同時構(gòu)造復(fù)雜,在這里,同樣將其當(dāng)做漏洞挖掘的支撐技術(shù)看待,規(guī)避這些缺陷.
并非所有的可以影響關(guān)鍵操作都是漏洞,若可影響關(guān)鍵操作的數(shù)據(jù)被凈化,即對污點數(shù)據(jù)進行驗證,約束則不存在脆弱性,當(dāng)然也有可能驗證不嚴(yán),在污點分析中稱為凈化不完全.如果,此數(shù)據(jù)與污點數(shù)據(jù)無直接關(guān)系,但是有邏輯關(guān)系,如:
此類污染被稱為隱式污染,此類污染造成漏洞的一個典型類型是UAF類型漏洞,典型漏洞例子為linux的CVE-2016-0728,在用計數(shù)整數(shù)溢出變?yōu)?時,導(dǎo)致內(nèi)核對象被釋放,在被釋放空間內(nèi)偽造虛假內(nèi)核對象,調(diào)用原釋放空間保留的用執(zhí)行任意代碼.
實現(xiàn)污點分析,隱式污染的分析是一個難點.顯式污染,可以使用語法樹分析處理,對于隱式污染處理較為復(fù)雜.好在隱式污染較為罕見,對于隱式污染,由于隱式污染一定伴隨于顯式污染,這里主要依靠其后的定理證明技術(shù)排除顯示污染附近代碼上下文可能的危險操作,一定程度上可以緩解隱式污染所造成的不利影響.
污點分析技術(shù)的最大難點在于凈化的過程,“凈化”顧名思義即對受污染變量的約束過程.真正的問題在于如何確定凈化完全,即確定是否存在驗證不嚴(yán)問題.形式化判別凈化是否完成是一個巨大難題,這里將此任務(wù)將交由定理證明技術(shù)完成.
定理證明的方法是指,以公式的形式描述軟件安全屬性,若代碼可以突破安全屬性范圍,則發(fā)出警報.而這個安全屬性由安全工程師以自己的經(jīng)驗提煉.此技術(shù)優(yōu)點在于嚴(yán)格的推理證明控制檢測的進行,誤報率低,方便輔助安全工程師編寫測試用例等[7,8].
常規(guī)定理證明技術(shù)包括數(shù)學(xué)定理證明、硬件驗證、協(xié)議驗證等.定理證明技術(shù)的實現(xiàn)關(guān)鍵在于證明器的編寫,用于判斷過程內(nèi)代碼是否存在漏洞,過程間代碼是否存在漏洞.通常需要在程序中插入大量斷言、注釋等輔助證明器工作[3,6].其缺陷在于定理規(guī)定復(fù)雜,擴展性不強,需要添加斷言之類在代碼審計過程中進行交互,增加程序員工作量等.
這里不使用常規(guī)定理證明方法,直接判別程序動作的底層行為.安全屬性定義方法示例:寫操作字節(jié)數(shù)不可以超過限定內(nèi)存空間大小,如memcpy的n不可以超過dest的內(nèi)存大小;任意一個函數(shù)不可以有兩條路徑返回成功.摒棄高級語言的語義級意義分析,從底層行為角度定義安全屬性,排除編程語言進行描述時的多樣性干擾.從底層角度針對漏洞類型定義的安全屬性,可以提升其對軟件的安全需求描述的準(zhǔn)確度,且無需手動在代碼中插入大量斷言用以支持證明過程中的布爾計算.證明器可在遍歷代碼狀態(tài)時自動識別底層行為性操作進行,驗證是否存在脆弱性.
以O(shè)penSSL之中一個瑕疵代碼為例,此瑕疵與OpenSSL提供的測試代碼配合可造成信息泄漏,一次可以泄漏255字節(jié)數(shù)據(jù).
此size變量為0時候可以直接越過驗證,實現(xiàn)異常路徑,也就是說參數(shù)可以影響程序執(zhí)行路徑,導(dǎo)致代碼流程改變,最終導(dǎo)致程序漏洞的出現(xiàn).
在OpenSSL中,若以“所有堆塊必須在使用完之后被釋放,且釋放只能一次,釋放后的指針無法使用”為一條安全屬性.根據(jù)先驗知識,如此設(shè)置約束規(guī)則起碼可以發(fā)現(xiàn)CVE-2015-0206、CVE-2014-3571等漏洞.
但在更加復(fù)雜的邏輯缺陷導(dǎo)致漏洞中,如最新的CVE-2015-4484提交密碼錯誤93次返回root用戶,后前整個學(xué)術(shù)界都沒有較好的檢測方法.堆溢出、棧溢出、內(nèi)存泄露等典型漏洞嚴(yán)格來說屬于編碼規(guī)范化問題,都存在一定程度上的內(nèi)存破壞行為.對復(fù)雜的邏輯漏洞而已,其形式上已經(jīng)接近于開發(fā)者刻意留下的后門,不再具有典型漏洞的特征,在漏洞的利用過程中所執(zhí)行的是代碼正常的邏輯行為,并沒有shellcode存在.若需要檢測出邏輯漏洞,需要對代碼語義進行解析,做出邏輯級的判斷.就后前的人工智能水平而言,尚無法對機器語言(或者說編程語言)背后的自然語義做出形式化分析,此類漏洞通常在學(xué)習(xí)者學(xué)習(xí)研究逆向相關(guān)項后時發(fā)現(xiàn).
OpenSSL其本質(zhì)是一個庫文件.以ssl3_connect、ssl3_accept等函數(shù)封裝connect、accept等通信函數(shù),以透明的方式在程序的運行過程之中加入握手加密等過程.在 ssl3_accept、ssl3_accept等函數(shù)中,調(diào)用 c 標(biāo)準(zhǔn)庫函數(shù)中的connect、accept等函數(shù),實現(xiàn)通信過程中收、發(fā)過程中的加、解密等功能.
此次審計過程之中,挖掘的 0day 漏洞,已提交,獲取漏洞編號CVE-2016-2179,網(wǎng)景通信公司(Netscape Communications Corporation)致謝聲明網(wǎng)址為:
https://git.openssl.org/?p=openssl.git;a=commit;h=f5 c7f5dfbaf0d2f7d946d0fe86f08e6bcb36ed0d
圖4 致謝聲明
OpenSSL通常作為服務(wù)器套件存在,一般使用在linux服務(wù)器上,但是由于使用windows平臺之上的調(diào)試工具更為便捷,本次實驗環(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ù)作用是對于udp數(shù)據(jù)包所傳送數(shù)據(jù)的抽象,使上層函數(shù)不關(guān)心udp是否分片,直接從接受緩存區(qū)讀取數(shù)據(jù).此函數(shù)曾被爆出多個漏洞,甚至包括一個堆溢出遠程任意代碼執(zhí)行的高危漏洞.
此函數(shù)在接收數(shù)據(jù)過程之中,若udp數(shù)據(jù)包分片,則需要申請內(nèi)存空間接收分片,將所有分片數(shù)據(jù)接收完成,排列整齊之后,將數(shù)據(jù)拷貝至數(shù)據(jù)接收空間處.在此抽象過程之中存在問題:若在接收過程之中,此次握手消息第一次接收到的是一個分片消息,則申請內(nèi)存空間,將此次接收到的信息插入buffered_messages隊列中,若第二次接受到的是此次消息的完整數(shù)據(jù)包,則此函數(shù)將誤認為此次握手消息沒有分片,此函數(shù)將直接越過內(nèi)存空間釋放將消息掛入ssl結(jié)構(gòu)體中,起內(nèi)存泄露,最終可導(dǎo)致服務(wù)端客戶端雙方的拒絕服務(wù)攻擊.每次握手最多可以申請出約16883個字節(jié)大小的內(nèi)存塊.若同時向服務(wù)端申請多個會話,每個會話的每次握手都可以申請.
10638字節(jié)大小的內(nèi)存空間,最終將導(dǎo)致由于內(nèi)存資源不足而起的拒絕服務(wù).
具體請看代碼:
無關(guān)代碼片段省略,由于是udp數(shù)據(jù)包,數(shù)據(jù)包存在接受到的數(shù)據(jù)順序和對方發(fā)送順序不一致的情況,所以O(shè)penSSL提供的接收函數(shù)dtls1_process_out_of_seq_message將所接收到的udp數(shù)據(jù)包中數(shù)據(jù)取出后重新排序,同時只要udp數(shù)據(jù)長度小于信息長度,說明此數(shù)據(jù)包分分片報文,則調(diào)用dtls1_reassemble_fragment函數(shù),此函數(shù)功能為組裝分片udp數(shù)據(jù)包:申請空間,將udp數(shù)據(jù)包中數(shù)據(jù)在此中轉(zhuǎn),組裝成完整握手消息后輸出.被泄露的內(nèi)存便是在此函數(shù)中被創(chuàng)建,若此次握手消息第一次被接收,便為其申請空間:
frag->msg_header.frag_off=0;}
至此,此將完成內(nèi)存申請,若再次發(fā)送此次消息的完整數(shù)據(jù)包之后,便可從此函數(shù)返回接收數(shù)據(jù)成功,從而越過這塊內(nèi)存數(shù)據(jù)的處理釋放過程.請看代碼:
由代碼可知,如果第二次收到的數(shù)據(jù)包是完整的,代碼將直接進入消息接收階段.代碼誤認為此udp數(shù)據(jù)包是沒有被分片的,直接接收數(shù)據(jù),忽略了對分片數(shù)據(jù)接收緩沖區(qū)的處理與釋放導(dǎo)致內(nèi)存泄露.
在 od 中,調(diào)試此過程,在后續(xù)握手過程之中,此內(nèi)存塊依舊處于占用態(tài),并沒有被釋放.
圖5 觸發(fā)效果
將每次接受到完整udp數(shù)據(jù)包消息時候檢查buffered_messages隊列,若存在有關(guān)本次消息的內(nèi)存信息存儲,則釋放即可.
在每次握手過程之中檢查上次握手的消息隊列buffered_messages是否存在消息碎片未釋放,如果存在則釋放未釋放的消息碎片,即可消除此漏洞造成的內(nèi)存泄露情況.
本文討論的是多種代碼審計技術(shù)的交互使用.設(shè)計數(shù)據(jù)流分析,污點分析以及定理判別三類技術(shù),三種技術(shù)相互配合提高審計效率以及審計準(zhǔn)確性,闡述了OpenSSL的一個漏洞的發(fā)現(xiàn)過程以及利用過程.由于代碼審計技術(shù)發(fā)展的局限以及本人水平有限,代碼審計手法自動化程度還未達到全自動目標(biāo),通用性較差,需要對此審計方案做較大改動.由于此次工作主要后的為針對openssl進行代碼審計并非實現(xiàn)代碼審計工具,且編寫完整代碼審計工具工作量過大,此次審計采用編寫多個工具,分步驟手動執(zhí)行,采用半自動方式處理,并未實現(xiàn)真正全自動審計,另外,對于非源代碼原因入漏洞,如編譯器缺陷、bug導(dǎo)致軟件漏洞,代碼審計技術(shù)將無法分析出其脆弱性.
1 吳世忠,郭濤,董國偉,等.軟件漏洞分析技術(shù).北京:科學(xué)出版社,2014.
2 文碩,許靜,苑立英,等.基于策略推導(dǎo)的訪問控制漏洞測試用例生成方法.計算機學(xué)報,2016,(39):1–15.
3 牛偉納,丁雪峰,劉智,等.基于符號執(zhí)行的二進制代碼漏洞發(fā)現(xiàn).計算機科學(xué),2013,40(10):119–121,138.[doi:10.3969/j.issn.1002-137X.2013.10.024]
4 朱正欣.二進制程序的動態(tài)符號化污點分析[碩士學(xué)位論文].合肥:中國科學(xué)技術(shù)大學(xué),2015.
5 馬俊.基于模擬器的緩沖區(qū)溢出漏洞動態(tài)檢測技術(shù)研究[碩士學(xué)位論文].長沙:國防科學(xué)技術(shù)大學(xué),2008.
6 吳世忠.信息安全漏洞分析回顧與展望.清華大學(xué)學(xué)報(自然科學(xué)版),2009,49(S2):2065–2072.
7 張健.精確的程序靜態(tài)分析.計算機學(xué)報,2008,31(9):1549–1553.
8 肖慶.提高靜態(tài)缺陷檢測精度的關(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).基于代碼審計技術(shù)的OpenSSL脆弱性分析.計算機系統(tǒng)應(yīng)用,2017,26(9):253–258.http://www.c-s-a.org.cn/1003-3254/5974.html
2016-12-31;采用時間:2017-02-08