基于深度學(xué)習(xí)的動(dòng)靜結(jié)合的漏洞挖掘方法_第1頁
基于深度學(xué)習(xí)的動(dòng)靜結(jié)合的漏洞挖掘方法_第2頁
基于深度學(xué)習(xí)的動(dòng)靜結(jié)合的漏洞挖掘方法_第3頁
基于深度學(xué)習(xí)的動(dòng)靜結(jié)合的漏洞挖掘方法_第4頁
基于深度學(xué)習(xí)的動(dòng)靜結(jié)合的漏洞挖掘方法_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

0引言隨著互聯(lián)網(wǎng)在全球的普及、物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展、數(shù)字經(jīng)濟(jì)的廣泛應(yīng)用,圍繞網(wǎng)絡(luò)和數(shù)據(jù)的服務(wù)與應(yīng)用呈現(xiàn)爆發(fā)式增長(zhǎng)。豐富的應(yīng)用場(chǎng)景暴露出越來越多的網(wǎng)絡(luò)安全風(fēng)險(xiǎn)和問題,并在全球范圍內(nèi)產(chǎn)生廣泛而深遠(yuǎn)的影響。圖1顯示了自2019年來CNNVD收錄的漏洞數(shù)量變化叫平均每月新增漏洞數(shù)量約1500個(gè)。圖1CNNVD采集的漏洞數(shù)量(2019/01—2020/10)安全漏洞是網(wǎng)絡(luò)安全風(fēng)險(xiǎn)中最主要的部分。安全漏洞是在硬件、軟件以及協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷,使攻擊者能夠在未經(jīng)授權(quán)的情況下訪問和修改系統(tǒng)。安全漏洞不僅是病毒、蠕蟲等的重要傳播途徑,也是網(wǎng)絡(luò)攻防的焦點(diǎn),是網(wǎng)絡(luò)安全領(lǐng)域的核心問題。因此,漏洞挖掘一直是熱門的研究領(lǐng)域。符號(hào)執(zhí)行和模糊測(cè)試是目前比較常用的漏洞檢測(cè)方法。符號(hào)執(zhí)行(SymbolicExecution)由King等首次提出,是一種程序分析技術(shù),使用符號(hào)值代替具體值作為程序的輸入,根據(jù)漏洞分析規(guī)則,通過約束求解等過程得到初步結(jié)果,再對(duì)結(jié)果進(jìn)行分析處理找出漏洞檢測(cè)。模糊測(cè)試(Fuzzing)的概念最早由Miller等人提出,已經(jīng)發(fā)展成為一種快速有效地檢測(cè)程序中漏洞的方法。模糊測(cè)試是一種通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法。隨著人工智能的不斷發(fā)展,用深度學(xué)習(xí)的方法來進(jìn)行漏洞檢測(cè)逐漸成為熱門研究領(lǐng)域。目前已經(jīng)發(fā)表了很多用深度學(xué)習(xí)的方法來檢測(cè)軟件漏洞的論文,包括源碼層面的檢測(cè)和基于中間語言的檢測(cè)。但是,這類方法相較于傳統(tǒng)的模糊測(cè)試等方法誤報(bào)較多,且由于模型可能會(huì)學(xué)習(xí)到較多訓(xùn)練集上的特征,泛化性較差。它在訓(xùn)練集和測(cè)試集上效果可能很好,但是在真實(shí)代碼中的準(zhǔn)確率下降嚴(yán)重。本文提出了一種將深度學(xué)習(xí)與漏洞代碼檢測(cè)和模糊測(cè)試結(jié)合的方法,通過對(duì)待測(cè)代碼進(jìn)行切片和用深度學(xué)習(xí)模型檢測(cè),先定位到可能觸發(fā)漏洞的敏感點(diǎn),再利用定向模糊測(cè)試的方法對(duì)代碼進(jìn)行測(cè)試,確定檢測(cè)模型判斷的漏洞的可觸發(fā)性。本文的組織結(jié)構(gòu)如下:第1節(jié)介紹漏洞檢測(cè)及模糊測(cè)試方面的相關(guān)研究;第2節(jié)介紹所采用的方法,包括代碼切片、檢測(cè)模型的訓(xùn)練及定向模糊測(cè)試;第3節(jié)是模型訓(xùn)練和模糊測(cè)試的實(shí)驗(yàn)結(jié)果;第4節(jié)是總結(jié)。1相關(guān)研究1.1漏洞檢測(cè)隨著深度學(xué)習(xí)的發(fā)展,用深度學(xué)習(xí)的方法分析程序中的漏洞成為可能。鄒德清等人提出了第一個(gè)基于深度學(xué)習(xí)進(jìn)行漏洞檢測(cè)的系統(tǒng)化框架SySeVR,并構(gòu)建了基于深度學(xué)習(xí)的細(xì)粒度漏洞檢測(cè)系統(tǒng)VulDeePecker,將人類專家從煩瑣、主觀的手工定義feature中解放出來。與靜態(tài)漏洞檢測(cè)方法相比,它顯著降低了漏報(bào)率。該系統(tǒng)以基于語義的漏洞(Semantics-basedVulnerabilityCandidates,SeVC)為粒度進(jìn)行檢測(cè),無法準(zhǔn)確定位到漏洞行。劉強(qiáng)等人提出了一種基于程序切片的相似度匹配的漏洞檢測(cè)方法,研究了根據(jù)關(guān)鍵點(diǎn)對(duì)代碼進(jìn)行切片、特征抽取和向量化的方法,通過計(jì)算待測(cè)代碼切片與漏洞樣本切片的相似度,判斷待測(cè)樣本中是否含有漏洞。該系統(tǒng)沒有使用深度學(xué)習(xí)的方法,后續(xù)可以引入機(jī)器學(xué)習(xí)的方法進(jìn)行優(yōu)化。此外,還有利用中間語言代碼図和深度表征學(xué)習(xí)來進(jìn)行漏洞檢測(cè)的研究,取得了一定的成效。1.2模糊測(cè)試模糊測(cè)試(Fuzzing)是一種通過向目標(biāo)系統(tǒng)提供非預(yù)期輸入并監(jiān)視異常結(jié)果發(fā)現(xiàn)軟件漏洞的方法。它主要通過輸入大量數(shù)據(jù)發(fā)現(xiàn)程序中存在的問題。可以通過使程序某些內(nèi)容溢出出現(xiàn)異常,或者輸入程序規(guī)定范圍內(nèi)的數(shù)據(jù)結(jié)果出現(xiàn)異常,找出程序漏洞。模糊測(cè)試的概念最早由Miller等人提出,已經(jīng)發(fā)展成為一種快速有效的檢測(cè)程序漏洞的方法。AFL(AmericanFuzzyLop)最初是一個(gè)模糊測(cè)試工具,通過使用一種特殊的編譯工具和遺傳算法來自動(dòng)發(fā)現(xiàn)有效的測(cè)試用例。這些測(cè)試用例會(huì)觸發(fā)目標(biāo)文件中的新狀態(tài),大大提高了模糊測(cè)試的覆蓋率,且具有適度的性能開銷。AFLgo是基于AFL開發(fā)的一個(gè)定向灰盒模糊測(cè)試的工具,通過設(shè)置一個(gè)目標(biāo)點(diǎn)來進(jìn)行定向模糊測(cè)試。對(duì)于每個(gè)種子,AFLgo會(huì)計(jì)算其執(zhí)行路徑到目標(biāo)點(diǎn)的距離,并計(jì)劃為更接近目標(biāo)點(diǎn)的種子提供更多能量。其中,能量高的種子會(huì)有更多的變異機(jī)會(huì)。它的算法核心是模擬退火算法,每次隨機(jī)變異種子,通過計(jì)算能量來判斷此次變異是否是在向更優(yōu)的方向靠近,以此來不斷逼近目標(biāo)點(diǎn),實(shí)現(xiàn)定向的功能。此外,微軟研究院回還將模糊測(cè)試和強(qiáng)化學(xué)習(xí)結(jié)合起來,提出了一種利用強(qiáng)化學(xué)習(xí)來進(jìn)行模糊測(cè)試的方法。利用馬爾可夫決策過程的概念,將模糊測(cè)試轉(zhuǎn)化為強(qiáng)化學(xué)習(xí)的問題,利用Q-Learning算法進(jìn)行決策,通過在初始程序輸入上執(zhí)行一組種子變異方法后計(jì)算的獎(jiǎng)勵(lì)學(xué)習(xí)一個(gè)策略,以指導(dǎo)下一步種子變異所使用的方法,從而獲得更高的回報(bào)。這種利用強(qiáng)化學(xué)習(xí)進(jìn)行的模糊測(cè)試優(yōu)于采用隨機(jī)變異的模糊測(cè)試。2實(shí)現(xiàn)方法項(xiàng)目總體流程,如圖2所示。它主要通過代碼切片、模型訓(xùn)練及檢測(cè)、定向模糊測(cè)試3個(gè)步驟來實(shí)現(xiàn)漏洞檢測(cè),具體步驟如下:(1)利用切片程序根據(jù)敏感點(diǎn)對(duì)代碼進(jìn)行切片,獲得漏洞切片;(2)利用獲得的漏洞切片進(jìn)行檢測(cè)模型的訓(xùn)練及漏洞檢測(cè);(3)根據(jù)模型檢測(cè)的結(jié)果,對(duì)模型檢測(cè)出的有漏洞的代碼進(jìn)行定向模糊測(cè)試。圖2項(xiàng)目總體流程2.1程序切片漏洞代碼在用于模型訓(xùn)練前要進(jìn)行數(shù)據(jù)預(yù)處理,其中最主要的步驟就是對(duì)漏洞進(jìn)行切片,剔除漏洞代碼中與漏洞觸發(fā)無關(guān)的語句,使模型更容易學(xué)習(xí)到漏洞代碼的特征。通過對(duì)代碼進(jìn)行切片,也可以減少向檢測(cè)模型中輸入的代碼長(zhǎng)度。本文實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的用于源碼切片的工具,實(shí)現(xiàn)了跨函數(shù)、跨文件切片,同時(shí)支持自動(dòng)掃描敏感函數(shù)和手動(dòng)選擇敏感行兩種切片方式。具體的切片過程如圖3所示。將所有要合并在一起進(jìn)行切片的文件路徑作為切片工具的輸入,如果要手動(dòng)選擇切片點(diǎn),則還要將切片點(diǎn)所在的文件及其行號(hào)輸入到切片工具。步驟1:切片程序先在所有要切片的文件中掃描敏感函數(shù)(如果手動(dòng)選擇了切片點(diǎn),則會(huì)跳過這一步)。步驟2:程序會(huì)將掃描到的敏感函數(shù)或手動(dòng)選擇的敏感行中包含的函數(shù)及變量標(biāo)記為被污染的標(biāo)識(shí)符。步驟3:對(duì)于被污染的函數(shù),將其所有參數(shù)及調(diào)用該函數(shù)的行也標(biāo)記為被污染。步驟4:對(duì)于被污染的變量,程序?qū)⒈闅v該變量的作用域,尋找包含該變量的行,并將這些行中出現(xiàn)的新的函數(shù)與變量也標(biāo)記為被污染。步驟5:重復(fù)步驟3和步驟4,直到不再出現(xiàn)新的被污染標(biāo)識(shí)符。步驟6:將所有包含被污染標(biāo)識(shí)符的代碼行記錄下來,輸出只保留這些行的切片文件,最終得到代碼的切片。模型訓(xùn)練時(shí)多是已知漏洞代碼中漏洞觸發(fā)點(diǎn)的行號(hào),所以采用手動(dòng)選擇敏感行的方式,以漏洞的觸發(fā)點(diǎn)為切片點(diǎn)進(jìn)行切片。在利用模型進(jìn)行漏洞檢測(cè)時(shí),因?yàn)闊o法得知漏洞觸發(fā)點(diǎn)的位置,甚至不能確定待測(cè)代碼中是否含有漏洞,所以釆用自動(dòng)掃描敏感函數(shù)的方式進(jìn)行切片,掃描程序中可能觸發(fā)漏洞的敏感行,并將其作為切片點(diǎn)進(jìn)行切片。2.2模型訓(xùn)練及檢測(cè)本文訓(xùn)練一個(gè)基于代碼的相似性檢測(cè)代碼漏洞的10分類的檢測(cè)模型。對(duì)于得到的代碼切片,還要進(jìn)行數(shù)據(jù)預(yù)處理才能用于模型訓(xùn)練,流程如圖4所示。預(yù)處理主要包括把代碼中的宏定義替換掉和對(duì)代碼進(jìn)行函數(shù)名和變量名的替換。替換函數(shù)名和變量名的主要目的是剔除自定義的函數(shù)名和變量名對(duì)檢測(cè)模型的影響,將除了敏感函數(shù)之外的函數(shù)名統(tǒng)一替換為FUN1、FUN2的形式,將所有變量名統(tǒng)一替換為VAR1、VAR2的形式。圖3切片程序工作流程圖4代碼預(yù)處理流程經(jīng)過預(yù)處理的樣本先進(jìn)行分詞,將代碼轉(zhuǎn)換成由詞組成的列表,之后對(duì)每個(gè)詞進(jìn)行編號(hào),將編號(hào)的結(jié)果存儲(chǔ)在一個(gè)字典中,再把所有的詞替換成對(duì)應(yīng)的編號(hào),利用Word2Vec把所有的詞編號(hào)轉(zhuǎn)換為詞向量,從而將所有的樣本都轉(zhuǎn)換成向量的形式。因?yàn)槭腔诖a的相似性來判斷代碼中是否含有漏洞,所以將正負(fù)樣本組成不相似樣本對(duì),將兩個(gè)同類漏洞的負(fù)樣本組成相似樣本對(duì)(正樣本是無漏洞代碼,負(fù)樣本為有漏洞代碼),并將這些樣本對(duì)輸入到Siamese攣生網(wǎng)絡(luò)中進(jìn)行訓(xùn)練。本文利用多個(gè)二分類模型實(shí)現(xiàn)多分類效果,共訓(xùn)練了10個(gè)二分類檢測(cè)模型,每個(gè)模型檢測(cè)一種類型的漏洞,整合10個(gè)模型的分類結(jié)果,最終得到漏洞檢測(cè)結(jié)果。在進(jìn)行漏洞檢測(cè)時(shí),對(duì)于一段待檢測(cè)的代碼切片也要先進(jìn)行預(yù)處理,之后分別用10種模型對(duì)代碼進(jìn)行相似性檢測(cè)。每個(gè)模型返回的結(jié)果是一個(gè)取值范圍在0?1之間的浮點(diǎn)數(shù)。該數(shù)值越接近1,說明這段待檢測(cè)的代碼與這種類型的漏洞的相似性越高。取10種模型中相似性最高(即模型返回的數(shù)值最大)的一類判斷為待測(cè)代碼的漏洞類型。若相似性最高的模型返回的分值也沒有達(dá)到設(shè)定的閾值,則判斷待測(cè)代碼無漏洞。模型訓(xùn)練和檢測(cè)的流程,分別如圖5和圖6所示。圖5模型訓(xùn)練流程圖6檢測(cè)流程2.3定向模糊測(cè)試對(duì)于模型預(yù)測(cè)存在漏洞的結(jié)果,利用定向模糊測(cè)試驗(yàn)證其漏洞的可觸發(fā)性。本文使用AFLgo對(duì)代碼進(jìn)行定向模糊測(cè)試,將切片時(shí)記錄的敏感點(diǎn)所在行標(biāo)記為定向模糊測(cè)試的目標(biāo),并在BBtargets.txt文件中設(shè)置。之后利用AFLgo對(duì)源代碼進(jìn)行插樁,并利用AFLgo計(jì)算種子到目標(biāo)點(diǎn)的距離,進(jìn)行定向模糊測(cè)試。具體的路徑計(jì)算方法如下。通過Clang得知目標(biāo)行所在的函數(shù)和基本塊以,利用LLVM在調(diào)用圖中計(jì)算兩個(gè)函數(shù)間最短的距離(最短路徑的邊數(shù))對(duì)于一個(gè)函數(shù),它到所有目標(biāo)行最短距離的調(diào)和平均數(shù)記為函數(shù)級(jí)的目標(biāo)距離。對(duì)于函數(shù)中的每個(gè)基本塊計(jì)算它到下一個(gè)可以跳轉(zhuǎn)的函數(shù)的基本塊的距離(調(diào)用圖中兩個(gè)基本塊之間最短路徑的邊數(shù)),再加上待跳轉(zhuǎn)的函數(shù)與目標(biāo)函數(shù)的距離,即為基本塊級(jí)的距離。最后,根據(jù)種子執(zhí)行路徑中經(jīng)過的基本塊,計(jì)算種子到目標(biāo)點(diǎn)的距離。AFLgo會(huì)給予距離目標(biāo)點(diǎn)更近的種子更高的能量。這些種子將獲得更多的變異機(jī)會(huì),使AFLgo能更快逼近目標(biāo)點(diǎn),測(cè)試感興趣的路徑。3實(shí)驗(yàn)本文用于模型訓(xùn)練及檢測(cè)的樣本主要來自于SARD數(shù)據(jù)集。該數(shù)據(jù)是由NIST制作并維護(hù)的一個(gè)公開的漏洞樣本集,由許多精心編寫的小程序。每個(gè)樣本都包含一個(gè)good版本和一個(gè)bad版本,分別對(duì)應(yīng)無漏洞代碼和有漏洞代碼。實(shí)驗(yàn)在miniconda3創(chuàng)建的虛擬環(huán)境中進(jìn)行,虛擬環(huán)境的python版本為3.6,安裝的其他軟件版本信息為:scikit-leam為0.23.1,tensorflow-gpu為2.2.0,keras-gpu為2.3.1,gensim為3.8.0,smart_open為1.9.0。訓(xùn)練的模型是針對(duì)源代碼進(jìn)行檢測(cè)的。對(duì)于SARD數(shù)據(jù)集中的每個(gè)樣本,根據(jù)good和bad的標(biāo)簽進(jìn)行分割,其中bad版本作為漏洞樣本,good版本為對(duì)應(yīng)的無漏洞樣本。在進(jìn)行模糊測(cè)試時(shí),通過SARD數(shù)據(jù)集中帶有的0MITG00D和0MITBAD標(biāo)記,可以分另U將樣本編譯成good版本和bad版本進(jìn)行測(cè)試,且編譯成的程序跟源代碼分割出的good版本代碼和bad版本代碼一一對(duì)應(yīng)。實(shí)驗(yàn)過程中,通過對(duì)SARD數(shù)據(jù)集進(jìn)行處理,共得到了135776個(gè)樣本,其中g(shù)ood和bad樣本各占一半且一一對(duì)應(yīng)。利用其中的113612個(gè)樣本進(jìn)行模型訓(xùn)練,剩下的22164個(gè)樣本用于檢測(cè)。在進(jìn)行漏洞檢測(cè)時(shí),首先用模型去對(duì)這22164個(gè)樣本進(jìn)行預(yù)測(cè),將預(yù)測(cè)結(jié)果寫入csv文件。若模型的檢測(cè)結(jié)果表明某個(gè)樣本有漏洞,利用定向模糊測(cè)試對(duì)該樣本所對(duì)應(yīng)的程序進(jìn)行測(cè)試。FP、FN、TP、TN的定義,如表1所示。表1FP、FN、TP、TN的定義統(tǒng)計(jì)檢測(cè)結(jié)果中砰、FN、TP、77V的數(shù)量,并計(jì)算精確率(Precision)、召回率(Recall)和準(zhǔn)確率(Accuracy),計(jì)算結(jié)果如表2所示。表2模型檢測(cè)結(jié)果從實(shí)驗(yàn)結(jié)果來看,訓(xùn)練的模型達(dá)到了72.38%的準(zhǔn)確率,但是仍有較多的誤報(bào)和漏報(bào)。結(jié)合模糊測(cè)試的方法后,通過對(duì)模型預(yù)測(cè)的漏洞進(jìn)行定向模

糊測(cè)試,可以消除誤報(bào),一定程度上提高了整個(gè)檢測(cè)的準(zhǔn)確率。此外,采用這種動(dòng)靜結(jié)合的方法對(duì)glftpd軟件1.23版本進(jìn)行檢測(cè),通過切片和深度學(xué)習(xí)模型檢測(cè)定位軟件中的敏感點(diǎn),再結(jié)合定向模糊測(cè)試,對(duì)glftpd源代碼中的dupscan.c文件生成崩潰文件,結(jié)合漏洞利用的方法,驗(yàn)證了該崩潰是可以利用的漏洞。4結(jié)語本文提出了一種將深度學(xué)習(xí)漏洞代碼檢測(cè)和模糊測(cè)試結(jié)合的方法,通過對(duì)代碼進(jìn)行切片,定位敏感點(diǎn)。先利用深度學(xué)習(xí)模型對(duì)代碼切片進(jìn)行檢測(cè),再通過定向模糊測(cè)試的方法將敏感點(diǎn)設(shè)置為目標(biāo)點(diǎn),對(duì)模型預(yù)測(cè)的有漏洞的代碼

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論