亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于機(jī)器學(xué)習(xí)的動(dòng)靜結(jié)合的二進(jìn)制漏洞檢測(cè)

        2021-12-11 06:01:14蔡昊君牛少彰
        新一代信息技術(shù) 2021年20期
        關(guān)鍵詞:二進(jìn)制漏洞內(nèi)存

        蔡昊君,牛少彰

        (北京郵電大學(xué) 計(jì)算機(jī)學(xué)院,北京 100876)

        0 引言

        隨著互聯(lián)網(wǎng)的飛速發(fā)展,網(wǎng)絡(luò)與人們的生活越來(lái)越息息相關(guān),各種社交、學(xué)習(xí)、購(gòu)物等軟件逐漸滲透到我們生活中,給我們的生活帶來(lái)了很多便利的同時(shí)也帶來(lái)了很多網(wǎng)絡(luò)攻擊。軟件漏洞是網(wǎng)絡(luò)攻擊盛行的一個(gè)根本原因,在過(guò)去的十幾年中,軟件漏洞數(shù)量增長(zhǎng)迅速,NVD的統(tǒng)計(jì)數(shù)據(jù)顯示,2002年到2019年共有121 279條漏洞出現(xiàn),其中未知漏洞類型就多達(dá)38 868條。因此,及時(shí)發(fā)現(xiàn)漏洞是我們必須大力研究的內(nèi)容,漏洞檢測(cè)可以幫助安全工作人員在軟件發(fā)放到市場(chǎng)前及時(shí)發(fā)現(xiàn)并修補(bǔ)漏洞。

        本文研究的是與內(nèi)存有關(guān)的漏洞,在 CWE最近兩年的最危險(xiǎn)軟件漏洞榜單中,對(duì)內(nèi)存緩沖區(qū)范圍內(nèi)操作不當(dāng)和“越界寫(xiě)入”引起的漏洞在榜單中排名非??壳?,在官方統(tǒng)計(jì)中跟內(nèi)存相關(guān)的缺陷所引發(fā)的漏洞威脅程度還是很高的。軟件漏洞分析大致分為源代碼分析和二進(jìn)制代碼分析,源代碼的漏洞分析大部分是基于靜態(tài)的,Kim等人[1]提出了基于代碼相似性的方法,Yamaguchi等人[2-4]提出基于模式的方法,Ramos等人提出[5-6]符號(hào)執(zhí)行的方法,而動(dòng)態(tài)分析技術(shù)包括污點(diǎn)分析[7-8]和模糊測(cè)試[9-10]。但大部分商業(yè)軟件的發(fā)布并不包含自身的源代碼,而是以二進(jìn)制的形式發(fā)布,所以面向二進(jìn)制程序的漏洞分析具有極其重要的意義?,F(xiàn)有的面向二進(jìn)制程序的漏洞分析方法主要是靜態(tài)分析方法[11-12]和動(dòng)態(tài)分析方法[13-14],靜態(tài)分析通過(guò)利用軟件工具收集程序的語(yǔ)法和語(yǔ)義等信息,從而達(dá)到軟件分析的目的。動(dòng)態(tài)分析通過(guò)實(shí)際運(yùn)行程序,觀察程序的狀態(tài)信息來(lái)檢測(cè)程序中存在的漏洞。

        近年來(lái)機(jī)器學(xué)習(xí)在漏洞檢測(cè)領(lǐng)域也有了一定的發(fā)展,使用機(jī)器學(xué)習(xí)的二進(jìn)制代碼檢測(cè)模型有著檢測(cè)速度快、數(shù)據(jù)處理量大、檢測(cè)成本低的優(yōu)勢(shì),但由于二進(jìn)制程序不能像源程序那樣直接的表達(dá)程序信息,從中提取有效的特征集非常困難,導(dǎo)致現(xiàn)有的基于機(jī)器學(xué)習(xí)的漏洞檢測(cè)方法存在主觀性強(qiáng),檢測(cè)粒度粗,誤報(bào)率和漏報(bào)率高等問(wèn)題。

        對(duì)于靜態(tài)分析技術(shù)存在的分析效率低、誤報(bào)率較高的問(wèn)題和動(dòng)態(tài)分析技術(shù)存在的路徑覆蓋率低的問(wèn)題,本文提出了一種基于機(jī)器學(xué)習(xí)的二進(jìn)制代碼漏洞檢測(cè)方案,引入動(dòng)靜結(jié)合的思想,同時(shí)提取二進(jìn)制程序的靜態(tài)特征和動(dòng)態(tài)特征,構(gòu)建面向二進(jìn)制程序的漏洞自動(dòng)檢測(cè)模型。

        1 相關(guān)研究

        隨著機(jī)器學(xué)習(xí)的迅速發(fā)展,成功在圖像、文字、語(yǔ)音等領(lǐng)域有所應(yīng)用,近期機(jī)器學(xué)習(xí)也被用到了漏洞檢測(cè)中,基于機(jī)器學(xué)習(xí)方法的軟件漏洞檢測(cè)研究也取得了一定的進(jìn)展,根據(jù)研究對(duì)象的不同主要分為源程序漏洞檢測(cè)和二進(jìn)制程序漏洞檢測(cè)。

        1.1 基于機(jī)器學(xué)習(xí)的二進(jìn)制漏洞預(yù)測(cè)

        BM 等人[15]對(duì)二進(jìn)制程序進(jìn)行研究,首先識(shí)別潛在的易受攻擊的語(yǔ)句構(gòu)造,根據(jù)提出的表征方案為每個(gè)構(gòu)造提取靜態(tài)特征,捕獲代碼中采用的緩沖區(qū)使用模式和防御機(jī)制,對(duì)這些收集到的屬性使用數(shù)據(jù)挖掘的方法預(yù)測(cè)緩沖區(qū)溢出。Lee等人[16]提出了一種改進(jìn)的機(jī)器靜態(tài)二進(jìn)制分析技術(shù)——Instruction2vec,在word2vec的基礎(chǔ)上,使用 Instruction2vec對(duì)匯編代碼進(jìn)行建模,利用Text-CNN學(xué)習(xí)并提取軟件缺陷代碼的特征,文章使用Juliet Test Suite中的CWE-121作為數(shù)據(jù)集,最后實(shí)驗(yàn)證明該方法的準(zhǔn)確率可達(dá)到 91%。Liu等人[17]為解決二進(jìn)制軟件漏洞自動(dòng)檢測(cè)問(wèn)題提出了一種基于深度學(xué)習(xí)的方法,分為兩個(gè)階段:使用 IDA Pro從二進(jìn)制代碼中提取函數(shù);利用帶注意力機(jī)制的雙向長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)構(gòu)建預(yù)測(cè)模型。

        1.2 基于機(jī)器學(xué)習(xí)的源代碼缺陷預(yù)測(cè)

        J Ren等人[18]針對(duì)緩沖區(qū)溢出,提出了一個(gè)基于軟件度量方法—BOVP算法,對(duì)程序源代碼進(jìn)行預(yù)處理,然后在功能層采用動(dòng)態(tài)數(shù)據(jù)流分析的方法,通過(guò)分析軟件代碼的特點(diǎn)和不同類型的緩沖區(qū)溢出漏洞的特征,建立了基于功能層面的多類型緩沖區(qū)溢出漏洞模型的決策樹(shù)算法,該算法降低了測(cè)量的維度,減少了實(shí)驗(yàn)的開(kāi)銷,并與SVM、Bayes、Adaboost和隨機(jī)森林算法進(jìn)行對(duì)比,該文章提出的算法預(yù)測(cè)結(jié)果更準(zhǔn)確。Bilgin等人[19]開(kāi)發(fā)了一種源代碼中間表示方法,可以對(duì)源代碼的抽象語(yǔ)法樹(shù)形式進(jìn)行智能分析,使用機(jī)器學(xué)習(xí)算法去檢測(cè)脆弱性代碼。文中與code2vec方法進(jìn)行了對(duì)比,code2vec使用了神經(jīng)網(wǎng)絡(luò)生成代碼片段的向量表示,在 CWE數(shù)據(jù)集上進(jìn)行比較,該文章提出的方法效果更好。Li等人[20]提出了一種基于混合神經(jīng)網(wǎng)絡(luò)的源代碼漏洞自動(dòng)檢測(cè)框架,利用低層虛擬機(jī)中間表示和逆向程序切片將輸入轉(zhuǎn)換為具有顯式結(jié)構(gòu)信息的中間表示,通過(guò)卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)漏洞的局部特征,循環(huán)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)漏洞的全局特征,局部和全局特征的融合提高了檢測(cè)的準(zhǔn)確性。

        從相關(guān)學(xué)者的研究可以看出,機(jī)器學(xué)習(xí)應(yīng)用在程序源代碼的研究居多,通過(guò)抽象語(yǔ)法樹(shù)、數(shù)據(jù)流圖等提取源代碼的結(jié)構(gòu)特征,再利用機(jī)器學(xué)習(xí)模型進(jìn)行預(yù)測(cè),而對(duì)二進(jìn)制程序的研究相對(duì)較少,并且基于機(jī)器學(xué)習(xí)的漏洞檢測(cè)大多是提取程序的靜態(tài)特征,很少有動(dòng)態(tài)特征和靜態(tài)特征相結(jié)合的。本文提出采用動(dòng)靜結(jié)合的方法,提取二進(jìn)制程序的動(dòng)態(tài)特征和靜態(tài)特征,利用分片方式精確定位漏洞位置,并結(jié)合機(jī)器學(xué)習(xí)的算法去檢測(cè)二進(jìn)制程序漏洞,提出一種新的檢測(cè)方式的同時(shí)也豐富了對(duì)二進(jìn)制程序的研究。

        2 方法設(shè)計(jì)

        本文用Juliet Test Suite作為研究的數(shù)據(jù)集,Juliet套件中包含 CWE多種漏洞類型的樣例文件,漏洞類型豐富、涵蓋范圍廣,將測(cè)試用例編譯后即可得到可執(zhí)行文件,之后的研究將在可執(zhí)行文件上進(jìn)行。本文選用 Pin作為提取二進(jìn)制程序動(dòng)態(tài)特征和靜態(tài)特征的工具,首先獲取程序的特征日志文件,經(jīng)過(guò)預(yù)處理,切片生成數(shù)據(jù)集,通過(guò)分詞轉(zhuǎn)換成詞向量,輸入到模型中進(jìn)行訓(xùn)練。

        通過(guò)Pin的特定API可以獲取動(dòng)態(tài)特征和靜態(tài)特征,利用 Addr2line判斷其與漏洞位置的距離。由于一個(gè)函數(shù)的指令數(shù)量范圍不定,直接預(yù)測(cè)出現(xiàn)漏洞的函數(shù)粒度也不定。為了能更加精確的定位到漏洞的位置并且保證預(yù)測(cè)的準(zhǔn)確率,本文對(duì)函數(shù)進(jìn)行分片,分片標(biāo)簽是通過(guò)判斷其代碼中是否有和漏洞位置較為接近的指令,然后通過(guò)本文提出的向量轉(zhuǎn)換方法進(jìn)行特征向量化。

        各類機(jī)器學(xué)習(xí)算法有不同的優(yōu)缺點(diǎn)和適應(yīng)性條件,由于漏洞的多樣性,其特征也存在多樣性,所以不同漏洞適用的分類算法也不同。本文通過(guò)對(duì)同一漏洞進(jìn)行多種分類算法建模,比較各模型的準(zhǔn)確率、召回率等評(píng)價(jià)指標(biāo)來(lái)選擇最適合此漏洞類型的算法。具體方案如圖1所示。

        圖1 方案設(shè)計(jì)Fig.1 schematic design

        2.1 特征提取

        本文采用 Pin作為提取程序動(dòng)態(tài)特征和靜態(tài)特征的工具。Pin可以認(rèn)為是一個(gè)JIT編譯器,他的輸入是可執(zhí)行文件。本文首先對(duì)二進(jìn)制程序進(jìn)行函數(shù)粒度的插樁分析,通過(guò)Pin特定的API獲取運(yùn)行中函數(shù)的相關(guān)信息,然后對(duì)函數(shù)中的指令進(jìn)行插樁。獲取運(yùn)行中指令的行為狀態(tài)信息,包括指令的特性、內(nèi)存和寄存器的讀寫(xiě)信息等。靜態(tài)特征指的是可以反應(yīng)程序語(yǔ)義和語(yǔ)法信息的特征。例如指令的操作碼和操作數(shù)、是否為轉(zhuǎn)移指令、是否為分支指令等;動(dòng)態(tài)特征為程序運(yùn)行時(shí)的行為狀態(tài)信息。例如指令操作數(shù)大小、寄存器值等。

        相關(guān)的 API見(jiàn)表 1,內(nèi)存相關(guān)的漏洞可能跟操作數(shù)和寄存器的值有關(guān)。操作數(shù)規(guī)定了指令中進(jìn)行數(shù)字運(yùn)算量,操作數(shù)可以有三種方式獲得:立即數(shù)、寄存器、內(nèi)存。對(duì)于雙操作數(shù)指令,操作數(shù)可以是寄存器操作數(shù)、內(nèi)存操作數(shù)和立即數(shù)。本文 Pin插樁讀取操作數(shù)值和寄存器值,解析日志中3個(gè)內(nèi)存操作數(shù)和4個(gè)寄存器值。

        表1 APITab.1 API

        插樁后的 log文件中會(huì)包含大量的函數(shù)和指令。為了提高實(shí)驗(yàn)精度和速度,篩選掉與測(cè)試樣例無(wú)關(guān)的函數(shù),例如 malloc庫(kù)函數(shù)。通過(guò) RTN所屬的 IMAGE是否為測(cè)試樣例文件來(lái)判斷該RTN是否需要被過(guò)濾。

        2.2 切片及標(biāo)簽

        一個(gè)RTN包含多條指令,少則幾十條,多則上萬(wàn)條。如果按照RTN的粒度對(duì)二進(jìn)制程序進(jìn)行漏洞檢測(cè),還需要對(duì)有漏洞的函數(shù)進(jìn)行排查,極其耗時(shí)耗力。如果按照INS的粒度進(jìn)行檢測(cè),檢測(cè)效果大概率較差,因?yàn)橐恍性创a可能會(huì)對(duì)應(yīng)多條指令。所以本文采用切片的方法,將長(zhǎng)度不等的RTN切分成長(zhǎng)度相等的代碼片段,代碼片段構(gòu)成了樣本集。統(tǒng)計(jì)所有RTN包含的指令數(shù)量,打破原有的函數(shù)框架,根據(jù)粒度和精度的原則選擇較為合適的分片長(zhǎng)度,對(duì)每個(gè)RTN按照指定數(shù)量進(jìn)行切片。

        Pin插樁二進(jìn)制程序可以得到指令的地址,利用 Addr2line工具從指令地址中獲取到指令所對(duì)應(yīng)源碼所處的文件名、函數(shù)名及代碼文件中的行號(hào)。數(shù)據(jù)集中的 manifest.xml文件記錄了缺陷樣例的文件名、漏洞類型和導(dǎo)致漏洞的行號(hào),以此可以判斷該指令是否在漏洞附近,并標(biāo)注為有/無(wú)漏洞(1/0)。

        2.3 漏洞檢測(cè)及定位

        本文在漏洞定位的粒度上選擇分片粒度,將函數(shù)中的指令進(jìn)行分片。本文針對(duì)二進(jìn)制程序進(jìn)行漏洞檢測(cè)及定位,由于二進(jìn)制程序可讀性低,為方便研發(fā)人員進(jìn)行修改,需要定位二進(jìn)制程序漏洞在源程序的位置。如果進(jìn)行指令級(jí)的漏洞定位,很難在源程序中找到相應(yīng)的語(yǔ)句,源程序的每條語(yǔ)句對(duì)應(yīng)多條指令,而且很多時(shí)候漏洞的出現(xiàn)不僅是單個(gè)指令的問(wèn)題,所以指令級(jí)的漏洞定位粒度太小,預(yù)測(cè)準(zhǔn)確率較低。如果進(jìn)行函數(shù)粒度的漏洞定位,輸出源程序中可能會(huì)出現(xiàn)漏洞的函數(shù)名稱,若函數(shù)過(guò)長(zhǎng),研發(fā)人員需要花大量的時(shí)間核對(duì)代碼。

        針對(duì)以上問(wèn)題,本文的切片、代碼段的粒度,既可以在指令層面學(xué)習(xí)到細(xì)粒度的信息,有利于漏洞的定位,也可以在多指令的粗粒度上學(xué)習(xí)到更豐富的結(jié)構(gòu)信息和漏洞整體特征。如果出現(xiàn)函數(shù)的調(diào)用關(guān)系,漏洞定位可定位到最內(nèi)層函數(shù),例如函數(shù)A調(diào)用函數(shù)B,若B中存在漏洞,則漏洞定位會(huì)直接定位到函數(shù)B中,省去了檢查函數(shù)A中其他語(yǔ)句的成本。

        2.4 檢測(cè)模型

        本文利用機(jī)器學(xué)習(xí)的算法,在獲取到程序運(yùn)行的動(dòng)態(tài)特征和靜態(tài)特征之后,經(jīng)過(guò)特征分析和向量轉(zhuǎn)換,通過(guò)模型自動(dòng)檢測(cè)程序漏洞。本文采用的算法有 ID3、C4.5、隨機(jī)森林、改進(jìn)的隨機(jī)森林(Extra-trees)和CNN。ID3和C4.5是經(jīng)典的決策樹(shù)算法,產(chǎn)生的分類規(guī)則易于理解,可解釋性強(qiáng),準(zhǔn)確率較高;隨機(jī)森林算法不容易過(guò)擬合,具有較好的抗噪聲能力,支持并行化;CNN可以捕捉局部相關(guān)性,在文本分類任務(wù)中可以提取語(yǔ)句中的關(guān)鍵信息。

        傳統(tǒng)的靜態(tài)分析方法和動(dòng)態(tài)分析方法在提取特征后需要大量人工分析,耗時(shí)耗力,且很難解釋特征之間的內(nèi)在聯(lián)系。而機(jī)器學(xué)習(xí)算法具有自動(dòng)化、精確、迅速、可自定義和規(guī)模化等優(yōu)點(diǎn),可自動(dòng)學(xué)習(xí)新的模式,在新數(shù)據(jù)輸入的情況下可迅速做出反應(yīng)。對(duì)于二進(jìn)制程序的漏洞檢測(cè)任務(wù),可以歸為二分類問(wèn)題,即將目標(biāo)程序分為有漏洞和無(wú)漏洞兩種,通過(guò)機(jī)器學(xué)習(xí)模型學(xué)習(xí)程序的動(dòng)態(tài)和靜態(tài)特征向量,判斷樣本有無(wú)漏洞。

        3 實(shí)驗(yàn)及結(jié)果分析

        3.1 技術(shù)實(shí)現(xiàn)

        3.1.1 數(shù)據(jù)集預(yù)處理

        本文選用 NIST的 Juliet測(cè)試套件,其中包含CWE許多條目測(cè)試用例。CWE是開(kāi)發(fā)常用的軟件安全漏洞列表,是軟件安全工具的重要衡量標(biāo)準(zhǔn)。本文研究的漏洞類型有內(nèi)存泄漏、內(nèi)存溢出和內(nèi)存訪問(wèn)越界。具體選擇的 CWE條目見(jiàn)表2。

        表2 數(shù)據(jù)集條目Tab.2 data set entry

        將數(shù)據(jù)集中 C/C++源程序編譯鏈接成可執(zhí)行文件,即為二進(jìn)制文件,具體實(shí)驗(yàn)將在此二進(jìn)制文件上進(jìn)行。數(shù)據(jù)集中有可單獨(dú)運(yùn)行的文件,有包含數(shù)據(jù)流或控制流的文件,漏洞形式豐富。測(cè)試用例可能會(huì)包含多個(gè)測(cè)試文件,編譯鏈接得到的可執(zhí)行文件名是以“a”結(jié)尾的。編譯后得到各個(gè)漏洞類型所對(duì)應(yīng)的可執(zhí)行文件數(shù)量如表 3所示。

        表3 二進(jìn)制程序數(shù)量表Tab.3 table of the number of binary programs

        3.1.2 特征提取

        本文借助動(dòng)態(tài)二進(jìn)制插樁工具 Pin提取二進(jìn)制程序的動(dòng)態(tài)特征和靜態(tài)特征,編寫(xiě) Pintools對(duì)函數(shù)和函數(shù)中的指令進(jìn)行插樁分析,獲取RTN的信息以及 RTN包含的 INS的信息,具體調(diào)用的API見(jiàn)章節(jié)2.1。Pin插樁二進(jìn)制程序得到的特征信息保存在log文件中,如圖2所示,第一行為函數(shù)名、SECTION名、IMAGE名。IMAGE為函數(shù)所在的代碼文件。為減少無(wú)效數(shù)據(jù)干擾,本文通過(guò)判斷 IMAGE字段是否為代碼文件名來(lái)刪除不匹配的樣例文件中的函數(shù),并將 SECTION中非.text,即非代碼段的函數(shù)刪除。

        圖2 插樁日志Fig.2 log of Pin

        得到日志后,通過(guò)addr2line獲得每條指令的地址。addr2line是一個(gè)可以將指令的地址和可執(zhí)行映像轉(zhuǎn)換為文件名、函數(shù)名和源代碼行數(shù)的工具。在 Pin插樁完成之后,插樁日志中保存了每條指令的地址,通過(guò)地址找到指令所對(duì)應(yīng)的源碼行號(hào),由此生成一個(gè)新日志,如圖3所示。

        圖3 解析后的日志Fig.3 parsed logs

        3.1.3 標(biāo)簽生成

        日志解析完成之后,就提取到了程序中各函數(shù)的動(dòng)態(tài)特征和靜態(tài)特征,向量化之前首先需要進(jìn)行切片。程序切片是為了更加細(xì)粒度的定位到漏洞出現(xiàn)的位置,在保證漏洞檢測(cè)準(zhǔn)確率高的基礎(chǔ)上使漏洞范圍更加精確,從而減少排查漏洞所耗費(fèi)的成本。為盡可能的縮小定位范圍,本文設(shè)置分片長(zhǎng)度slice_length=50。slice_length是RTN切分時(shí)每個(gè)分片所包含的 INS數(shù)量,長(zhǎng)度不足slice_length的部分補(bǔ)0。

        對(duì)于本身無(wú)漏洞的函數(shù),切片片段標(biāo)簽為“0”;對(duì)于存在漏洞的函數(shù),切片后若片段中指令所對(duì)應(yīng)的源碼與漏洞位置在5行范圍內(nèi),則該片段的標(biāo)簽為“1”,否則為“0”。

        在特征向量化之前將按此規(guī)則得到的數(shù)據(jù)集進(jìn)行劃分,隨機(jī)提取數(shù)據(jù)集中的80%作為訓(xùn)練集,20%作為測(cè)試集。由于內(nèi)存泄漏中有漏洞的樣本僅有1 758個(gè),為了保證樣本量充足盡可能使得正負(fù)樣本均衡,內(nèi)存泄漏中正樣本取12 000個(gè),內(nèi)存溢出和內(nèi)存訪問(wèn)越界的正負(fù)樣本數(shù)各取 7 500個(gè)。訓(xùn)練集和測(cè)試集中正負(fù)樣本的具體數(shù)量見(jiàn)表4,Good表示有漏洞,Bad表示無(wú)漏洞。

        表4 數(shù)據(jù)集Tab.4 table of the number of binary programs

        3.1.4 向量化

        由于特征中存在匯編指令等非數(shù)值特征無(wú)法被模型直接理解,在輸入到模型訓(xùn)練之前需要先將特征向量化。首先將特征進(jìn)行分詞,通過(guò)word2vec模型,將分詞映射成向量。

        常見(jiàn)的語(yǔ)料庫(kù)詞維度是100~200維,本文中需要轉(zhuǎn)換成向量的是匯編指令,操作數(shù)操作碼等,詞表大小相比一般的文本分類小,每條指令轉(zhuǎn)換成176維的向量,每個(gè)樣本的維度是50×176。

        向量化結(jié)果如圖 4所示,行號(hào)和指令地址不作為模型訓(xùn)練的特征(前8個(gè)非數(shù)值特征均轉(zhuǎn)換成20維的向量)。

        圖4 向量化Fig.4 vectorization

        3.1.5 漏洞檢測(cè)及定位

        將向量化后的特征輸入模型中進(jìn)行訓(xùn)練。多次調(diào)整學(xué)習(xí)率、Batch_size、優(yōu)化器等參數(shù)優(yōu)化模型,保存最優(yōu)模型的訓(xùn)練結(jié)果。

        將待檢測(cè)的二進(jìn)制程序,選擇要檢測(cè)的漏洞類型及檢測(cè)模型,加載此漏洞類型最優(yōu)模型進(jìn)行預(yù)測(cè),輸出是否存在漏洞,若有漏洞存在則輸出存在漏洞的函數(shù)名稱,并通過(guò)指令的地址范圍來(lái)確定漏洞位置。

        3.2 實(shí)驗(yàn)結(jié)果分析

        3.2.1 評(píng)估指標(biāo)

        常用的模型評(píng)價(jià)指標(biāo)是準(zhǔn)確率,但是單用準(zhǔn)確率評(píng)判模型效果說(shuō)服力較低,所以本文選擇了更多的指標(biāo)來(lái)共同衡量模型訓(xùn)練的有效性。

        TP表示正類中被預(yù)測(cè)為正類的樣本數(shù)量,TN表示負(fù)類中被預(yù)測(cè)為負(fù)類的樣本數(shù)量,F(xiàn)P表示負(fù)類中被預(yù)測(cè)為正類的樣本數(shù)量,F(xiàn)N表示正類中被預(yù)測(cè)為負(fù)類的樣本數(shù)量。

        Accuracy是準(zhǔn)確率,是所有實(shí)例中,被分類正確的比例,Precision是精確度,衡量的是查準(zhǔn)率,也就是模型預(yù)測(cè)的準(zhǔn)不準(zhǔn);Recall是召回率,衡量的是查全率,就是有沒(méi)有把正例全部找出來(lái),F(xiàn)1 score是精確度和召回率的調(diào)和。

        本文從以上所列指標(biāo)對(duì)不同漏洞類型的不同模型的預(yù)測(cè)結(jié)果進(jìn)行比較。

        3.2.2 漏洞檢測(cè)結(jié)果

        本實(shí)驗(yàn)中,對(duì)二進(jìn)制程序進(jìn)行有無(wú)漏洞的檢測(cè),預(yù)測(cè)結(jié)果為“1”則有漏洞,“0”則無(wú)漏洞。找到最適合每一種漏洞類型的檢測(cè)模型,不同漏洞模型的檢測(cè)結(jié)果如表5所示,表中的精確度、召回率和F1 score都是針對(duì)負(fù)樣本的。

        從表 5中可以看出,在內(nèi)存泄漏和內(nèi)存訪問(wèn)越界兩種漏洞的實(shí)驗(yàn)中,改進(jìn)的隨機(jī)森林模型檢測(cè)效果最好,而內(nèi)存溢出中隨機(jī)森林模型檢測(cè)效果最好,預(yù)測(cè)準(zhǔn)確率都高達(dá) 97%。對(duì)于內(nèi)存泄漏,準(zhǔn)確率和精確度都比較高,都超過(guò)了96%,但精確度比準(zhǔn)確率稍低一些,說(shuō)明模型存在少許誤判;召回率和精確度相差4%,說(shuō)明有漏檢的情況,一些有漏洞的樣本沒(méi)有檢測(cè)出來(lái),可能是因?yàn)閮?nèi)存泄漏的數(shù)據(jù)集中負(fù)樣本的數(shù)量少,所以沒(méi)有提取到豐富的負(fù)樣本特征。對(duì)于內(nèi)存溢出和內(nèi)存訪問(wèn)越界,四類指標(biāo)值都較為均衡,說(shuō)明模型能很好地檢測(cè)到有漏洞的樣本,誤判率和漏檢率都比較低。

        表5 漏洞檢測(cè)實(shí)驗(yàn)結(jié)果Tab.5 experimental results of vulnerability detection

        3.2.3 漏洞定位結(jié)果

        本文是針對(duì)二進(jìn)制程序進(jìn)行漏洞檢測(cè)的研究,對(duì)于待檢測(cè)的二進(jìn)制程序,通過(guò)本文提出的特征處理方法和模型,可以輸出程序中可能存在漏洞的函數(shù)及位置。圖5是漏洞檢測(cè)定位結(jié)果,可以直觀的看到存在漏洞的函數(shù),源程序可以通過(guò)源碼中漏洞存在的位置直接定位并檢查代碼;若只有二進(jìn)制程序,可以通過(guò)二進(jìn)制程序漏洞存在的地址向后檢查,極大的縮小了檢查代碼的范圍,節(jié)省了大量的時(shí)間和人力成本。由于本實(shí)驗(yàn)的數(shù)據(jù)集只提供了真實(shí)漏洞在源碼中的位置,所以可以使用預(yù)測(cè)漏洞在源碼的位置來(lái)檢驗(yàn)本文方法的有效性。

        圖5 漏洞定位結(jié)果Fig.5 vulnerability location results

        選擇三種漏洞類型中各自表現(xiàn)最好的模型,檢測(cè)他們?cè)跍y(cè)試集上的定位效果。本文通過(guò)兩步來(lái)檢驗(yàn)漏洞定位的準(zhǔn)確性:(1)預(yù)測(cè)的漏洞位置是否包含了真實(shí)漏洞位置;(2)預(yù)測(cè)的漏洞位置范圍和真實(shí)漏洞位置的距離。

        表6統(tǒng)計(jì)了三種漏洞類型的測(cè)試集中漏洞定位結(jié)果不包含真實(shí)漏洞位置的比率,可以看出,每種類型都是超過(guò)99%的預(yù)測(cè)結(jié)果包含了真實(shí)漏洞的位置,程序員檢查此范圍內(nèi)的代碼即可定位到漏洞。

        表6 不包含真實(shí)漏洞位置的樣本數(shù)占比Tab.6 proportion of samples that do not contain the actual vulnerability location

        第一步的檢驗(yàn)完成,但預(yù)測(cè)結(jié)果包含真實(shí)漏洞位置并不代表定位精確,是否能真正地縮小排查范圍,還需第二步的檢驗(yàn)。

        圖6表示的是預(yù)測(cè)的漏洞位置和真實(shí)漏洞位置的距離統(tǒng)計(jì),距離以行為單位,可以看到和真實(shí)漏洞位置的距離不超過(guò) 10行的占整個(gè)測(cè)試集的90%左右,預(yù)測(cè)結(jié)果比較精確。

        圖6 預(yù)測(cè)位置誤差統(tǒng)計(jì)Fig.6 prediction position error statistics

        以上兩步的檢驗(yàn)證明了本文提出的方法在漏洞定位上有比較好的表現(xiàn)效果。

        4 結(jié)論

        本文提出了一種基于機(jī)器學(xué)習(xí)的二進(jìn)制漏洞檢測(cè)方法,利用動(dòng)態(tài)二進(jìn)制插樁工具 Pin提取程序的靜態(tài)特征和動(dòng)態(tài)特征,通過(guò)本文提出的切片以及向量化方法得到訓(xùn)練模型的數(shù)據(jù)集,訓(xùn)練漏洞檢測(cè)模型。實(shí)驗(yàn)結(jié)果表明,本文提出的方法在漏洞檢測(cè)和定位上都取得了較好的效果,由于實(shí)驗(yàn)中的數(shù)據(jù)集是基于真實(shí)的項(xiàng)目,所以該方法在網(wǎng)絡(luò)安全實(shí)際應(yīng)用中也適用,并且這一課題的研究為二進(jìn)制漏洞檢測(cè)提供了新的思路。實(shí)驗(yàn)結(jié)果較好,但該實(shí)驗(yàn)仍有很多可以繼續(xù)嘗試優(yōu)化的方向,例如分詞方法、標(biāo)簽生成的規(guī)則,都會(huì)在一定程度上影響模型的檢測(cè)效果。未來(lái)我們也會(huì)嘗試構(gòu)建多種漏洞的統(tǒng)一檢測(cè)模型,提升檢測(cè)模型的自動(dòng)化能力和泛化能力,這是在本文中還沒(méi)有實(shí)現(xiàn)的,還有繼續(xù)探索的空間。

        猜你喜歡
        二進(jìn)制漏洞內(nèi)存
        漏洞
        用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
        有趣的進(jìn)度
        二進(jìn)制在競(jìng)賽題中的應(yīng)用
        “春夏秋冬”的內(nèi)存
        三明:“兩票制”堵住加價(jià)漏洞
        漏洞在哪兒
        高鐵急救應(yīng)補(bǔ)齊三漏洞
        基于內(nèi)存的地理信息訪問(wèn)技術(shù)
        一個(gè)生成組合的新算法
        亚洲图片第二页| 国产精品国产三级国产专播| 亚洲av永久无码精品放毛片| 亚洲学生妹高清av| 99久久久无码国产精品性| 亚洲av无码乱码国产精品| 无码精品黑人一区二区三区| 国产高清在线91福利| 一区二区在线观看视频亚洲| 蜜臀av毛片一区二区三区| 国产午夜在线视频观看| 国产国产裸模裸模私拍视频| 牛鞭伸入女人下身的真视频| 欧美日一本| 亚洲一区二区三区在线高清中文 | 精品人妻va一区二区三区| 蜜桃一区二区三区| 日产无人区一线二线三线新版| 好爽~又到高潮了毛片视频| 尤物蜜桃视频一区二区三区| 精品无码人妻夜人多侵犯18| 国产亚洲精品久久777777| 美女一级毛片免费观看97| 精品在线视频免费在线观看视频| 亚洲中文av中文字幕艳妇| 国产三级av在线播放| 国产mv在线天堂mv免费观看| 网友自拍人妻一区二区三区三州 | 亚洲最大中文字幕在线| 最近中文字幕免费完整版| 婷婷丁香社区| 国产一区二区三区白浆在线观看 | 亚洲一区在线观看中文字幕| 特黄特色的大片观看免费视频| 国产AV无码专区亚洲AV桃花庵| 国产精品日本一区二区三区| 最新国产不卡在线视频| 成人欧美一区二区三区| 亚洲AⅤ永久无码精品AA| 日韩人妖一区二区三区| av熟妇一区二区三区|