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

        ?

        基于代碼序列與圖結(jié)構(gòu)的源代碼漏洞檢測方案

        2024-01-04 06:26:28王守梁
        關(guān)鍵詞:源代碼集上漏洞

        王守梁

        (中北大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,山西 太原 030051)

        0 引 言

        軟件源代碼漏洞檢測一直是軟件安全領(lǐng)域的一個重要挑戰(zhàn)[1-3]。隨著大數(shù)據(jù)時代的來臨,軟件代碼數(shù)量以量級攀升,軟件更加復(fù)雜與多樣,任何微小的漏洞都可能導(dǎo)致整個系統(tǒng)的崩潰。據(jù)統(tǒng)計,2022年,缺陷名錄網(wǎng)站(NVD)全年的漏洞總數(shù)為6 515個,預(yù)期年增長率提升了170%; 公共漏洞披露平臺(CVE)全年的漏洞總數(shù)為10 703個,預(yù)期年增長率為70%。政府單位、銀行以及科技企業(yè)已成為漏洞攻擊的重點[4],為了維護(hù)網(wǎng)絡(luò)安全,需對軟件源代碼漏洞檢測相關(guān)工作提出更高的要求。

        傳統(tǒng)的漏洞檢測主要使用3種技術(shù):靜態(tài)分析技術(shù)[5]、動態(tài)分析技術(shù)[6]及機(jī)器學(xué)習(xí)技術(shù)[7]。靜態(tài)分析指在不執(zhí)行程序的情況下,通過掃描源代碼,分析代碼詞法、語法、數(shù)據(jù)流及控制流等信息來篩選漏洞,耗時耗力。動態(tài)分析指在執(zhí)行程序的情況下,通過聚焦執(zhí)行路徑、程序狀態(tài)等信息來篩選漏洞,可擴(kuò)展性差。機(jī)器學(xué)習(xí)技術(shù)借助預(yù)設(shè)特征的機(jī)器學(xué)習(xí)算法來檢測漏洞,在復(fù)雜數(shù)據(jù)集上效果較差。

        近年來,該領(lǐng)域研究方向有所轉(zhuǎn)變,由被動檢測轉(zhuǎn)向漏洞代碼的主動預(yù)測。同時,深度學(xué)習(xí)與漏洞檢測的結(jié)合成為研究熱點?,F(xiàn)有的基于深度學(xué)習(xí)的漏洞檢測成果表明,深度學(xué)習(xí)較傳統(tǒng)技術(shù)檢測具有更優(yōu)越的檢測性能?,F(xiàn)有的檢測方案亦存在一定的局限性。一類研究[8-11]將源代碼看作特殊的自然語言,使用自然語言處理領(lǐng)域的成熟模型解決漏洞檢測任務(wù),未考慮代碼的結(jié)構(gòu)信息; 另一類研究[12-13]抽取代碼對應(yīng)的圖表示并借助圖神經(jīng)網(wǎng)絡(luò)解決漏洞檢測任務(wù),現(xiàn)有的相關(guān)方案一方面未考慮異類邊的處理,另一方面忽略了節(jié)點內(nèi)語句的局部語義信息。此外,現(xiàn)有研究多使用以word2vec[14]、glove[15]、fasttext[16]及doc2vec[17]為代表的傳統(tǒng)詞向量模型為標(biāo)記生成固定的向量表示,未考慮代碼上下文差異。

        為解決以上問題,本文提出了一種函數(shù)級源代碼漏洞檢測方案,綜合考慮源代碼基于圖的中間表示與基于序列的中間表示來輔助漏洞檢測。

        本文方案的實現(xiàn)步驟過程如下:1) 對源代碼進(jìn)行預(yù)處理,并抽取其代碼屬性圖(Code Property Graph,CPG)[18]。受文獻(xiàn)[19-20]中方法的啟發(fā),通過增加自定義類型的邊對CPG圖進(jìn)行擴(kuò)展,得到CPG’,其中,代碼語句被解析為圖節(jié)點,語句之間的關(guān)系被解析為圖邊。對于節(jié)點,分別對其類型與語句進(jìn)行編碼; 對于邊,分別對其類型與方向進(jìn)行編碼。同時,采用關(guān)系圖卷積神經(jīng)網(wǎng)絡(luò)(RGCN)聚合信息來生成最終圖表示。2) 切分預(yù)處理后的源代碼得到對應(yīng)的標(biāo)記序列,并使用基于程序語言的預(yù)訓(xùn)練模型CodBert[21]編碼器,生成源代碼對應(yīng)的詞向量矩陣。3) 集成以上兩種表示并采用由全連接神經(jīng)網(wǎng)絡(luò)(FCNN)與sigmoid層組成的分類器實現(xiàn)漏洞檢測。

        1 相關(guān)工作

        在源代碼漏洞檢測領(lǐng)域,現(xiàn)有的綜述已從不同的角度對漏洞檢測領(lǐng)域的研究進(jìn)行了全面的總結(jié)[22-26]。本節(jié)將聚焦本文研究工作的三個關(guān)鍵方面:源代碼中間表示、詞向量技術(shù)與神經(jīng)網(wǎng)絡(luò)模型,并從以上三個角度對已有的漏洞檢測工作分別進(jìn)行總結(jié)回顧。

        1) 源代碼中間表示形式主要分為兩類:一是序列形式,即將源代碼轉(zhuǎn)換成線性標(biāo)記序列。Wang[27]、Russell[28]及Li[29]等在源代碼序列基礎(chǔ)上借助不同的神經(jīng)網(wǎng)絡(luò)模型實現(xiàn)了漏洞檢測。二是圖形式,即將源代碼轉(zhuǎn)換成結(jié)構(gòu)圖。Chakraborty[30]、Li[31]及Dong[32]等將源代碼轉(zhuǎn)換成CPG圖,Li等[33]將源代碼轉(zhuǎn)換成PDG圖,Fan等[19]將源代碼轉(zhuǎn)換成AST、CFG、DFG及NCS四種圖。成果匯總見表1。本文按照圖種類與所抽取的信息類型,對現(xiàn)有研究進(jìn)行梳理,成果如表2 所示。其中,CPG圖因其含有更多類型的邊關(guān)系,能反映更豐富的程序結(jié)構(gòu)信息而被多數(shù)研究采用。

        表1 漏洞檢測源代碼中間表示研究匯總

        表2 基于圖表示的漏洞檢測研究匯總

        2) 詞向量技術(shù)用于生成神經(jīng)網(wǎng)絡(luò)可處理的實值向量,其選取決定著漏洞代碼的上下文信息的提取,進(jìn)而影響模型的檢測性能。Pradel和Sen[37]使用Word2Vec生成代碼向量,用于訓(xùn)練深度學(xué)習(xí)模型,以檢測JavaScript代碼中的漏洞。Henkel等[38]應(yīng)用GloVe從C程序的抽象符號軌跡中學(xué)習(xí)向量表示。Fang等[39]應(yīng)用FastText進(jìn)行基于集成機(jī)器學(xué)習(xí)模型的漏洞預(yù)測。Kanade等[40]提出了CuBERT,它通過在軟件源代碼上訓(xùn)練BERT模型來生成上下文嵌入。Karampatsis和Sutton[41]提出了一個名為SCELMo的模型來生成上下文代碼向量。詳細(xì)成果匯總見表3。

        表3 詞向量轉(zhuǎn)化技術(shù)研究匯總

        3) 神經(jīng)網(wǎng)絡(luò)模型主要分為兩類,分別對應(yīng)兩種中間表示形式。包括卷積神經(jīng)網(wǎng)絡(luò)(CNN)、多層感知器(MLP)、深度置信網(wǎng)絡(luò)(DBN)、長短期記憶網(wǎng)絡(luò)(LSTM)及門控單元網(wǎng)絡(luò)(GRU)等在內(nèi)的多種神經(jīng)網(wǎng)絡(luò)模型被應(yīng)用在基于序列的漏洞檢測中并取得了良好的檢測效果; 包括門控圖神經(jīng)網(wǎng)絡(luò)(GGNN)、圖卷積神經(jīng)網(wǎng)絡(luò)(GCN)等在內(nèi)的多種圖神經(jīng)網(wǎng)絡(luò)模型被應(yīng)用在基于圖的漏洞檢測中,用于生成圖向量。成果匯總見表4。

        表4 漏洞檢測神經(jīng)網(wǎng)絡(luò)模型匯總

        2 模型設(shè)計

        2.1 問題定義與整體架構(gòu)

        2.1.1 問題定義

        2.1.2 整體架構(gòu)

        如圖1 所示,該漏洞檢測方案將函數(shù)級源程序樣本作為輸入,包括以下兩大模塊:特征抽取與特征學(xué)習(xí)。特征抽取階段,使用兩種方式對源代碼進(jìn)行處理:① 抽取函數(shù)源代碼對應(yīng)的多類型邊結(jié)構(gòu)圖。② 抽取函數(shù)源代碼對應(yīng)標(biāo)記序列。特征學(xué)習(xí)階段,分別生成以上兩種形式的中間表示對應(yīng)的實值向量,并將二者集成拼接。最后,使用全連接網(wǎng)絡(luò)輸出漏洞檢測結(jié)果。詳細(xì)原理將在后續(xù)章節(jié)中進(jìn)行闡述。

        圖1 本研究漏洞檢測方案的整體架構(gòu)

        2.2 基于圖的特征學(xué)習(xí)

        2.2.1 圖的生成

        為學(xué)習(xí)源代碼中的結(jié)構(gòu)信息并提取漏洞特征,需要將其轉(zhuǎn)換成合適的結(jié)構(gòu)圖。結(jié)構(gòu)圖的質(zhì)量在很大程度上決定了從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)到的特征數(shù)量,進(jìn)而影響模型的漏洞檢測性能。代碼屬性圖(簡稱CPG) 提供了控制流圖(簡稱CFG)和數(shù)據(jù)流圖(簡稱DFG)中的元素以及抽象語法樹(簡稱AST)和程序依賴圖(簡稱PDG)的代碼組合,是現(xiàn)存最綜合全面的程序圖表示,本文選擇其作為源代碼的初始結(jié)構(gòu)圖。

        源代碼函數(shù)對應(yīng)的CPG按照以下流程生成:① 解析源代碼函數(shù)生成AST。② 應(yīng)用控制流分析生成CFG。③ 應(yīng)用依賴性分析生成PDG。④ 在AST中添加CFG與PDG邊生成CPG。以上過程使用工具Joern實現(xiàn)。

        CPG在富含多種結(jié)構(gòu)信息的同時,缺失了語句中的順序信息,為解決此問題,本文在初始結(jié)構(gòu)圖CPG基礎(chǔ)上增加自然代碼序列邊(NCS)[50]并對其進(jìn)行了擴(kuò)展,通過在AST中的相鄰葉節(jié)點之間從左到右添加有向邊,增加了代碼編輯的時序信息,輔助漏洞檢測。本文將最終得到的結(jié)構(gòu)圖記為CPG’=〈V,E〉,其中,V={v|v∈ASTnode}表示圖中的節(jié)點集合,ASTnode表示函數(shù)的AST中的節(jié)點,每個節(jié)點包含節(jié)點類型與節(jié)點代碼兩種元素;E={e|e∈CFGedge或e∈DDGedge或e∈CDGedge或e∈ASTedge或e∈NCSedge}表示圖中的邊集合,這些邊分別反映了節(jié)點之間的控制流、數(shù)據(jù)依賴、控制依賴、語法結(jié)構(gòu)與時序信息。圖2對應(yīng)一個緩沖區(qū)溢出漏洞的簡單樣例,其main函數(shù)對應(yīng)的CPG’如圖3 所示。

        圖2 緩沖區(qū)溢出漏洞代碼樣例

        圖3 CPG’

        后續(xù)任務(wù)中基于CPG’生成神經(jīng)網(wǎng)絡(luò)能處理的實值向量至關(guān)重要,本文將綜合考慮結(jié)構(gòu)圖中的節(jié)點及邊。

        2.2.2 節(jié)點嵌入

        節(jié)點嵌入模塊分別對節(jié)點類型與節(jié)點代碼采用不同嵌入方法來生成初始向量:① 對于節(jié)點類型,采用獨熱編碼(one-hot)生成對應(yīng)向量xi。② 對于節(jié)點代碼,首先,完成標(biāo)準(zhǔn)化處理,將源代碼中用戶自定義的變量名稱與函數(shù)名稱采用統(tǒng)一標(biāo)準(zhǔn)進(jìn)行重命名,用VAR與序號的組合替代自定義變量名,用FUN與序號的組合替代自定義函數(shù)名,如“VAR1”和“FUN1”,減少語料庫規(guī)模與噪聲干擾,提升向量生成的質(zhì)量; 其次,使用基于編程語言的預(yù)訓(xùn)練模型CodeBert訓(xùn)練的單詞嵌入權(quán)重初始化嵌入層權(quán)重,CodeBert模型使用的字節(jié)對編碼(BPE)標(biāo)記器[51]能在很大程度上緩解Out-Of-Vocabulary(OOV)問題; 最后,連接雙向長短期記憶網(wǎng)絡(luò)(Bi-LSTM)聚合局部語義信息,獲得最終向量表示yi。最終,連接xi,yi得到節(jié)點vi對應(yīng)的向量表示gi。

        上述過程的形式化表述如下:

        對于節(jié)點類型v[type,i],有

        xi=one-hot(v[type,i])。

        (1)

        對于源代碼S={s1,s2,s3,…,sn},其中,si對應(yīng)節(jié)點vi中的代碼。首先,進(jìn)行標(biāo)準(zhǔn)化處理

        S′=normalization(S)。

        (2)

        其次,通過CodeBert預(yù)訓(xùn)練的BPE標(biāo)記器進(jìn)行標(biāo)記并使用CodeBert嵌入層權(quán)重來初始化自嵌入權(quán)重,以獲得每個標(biāo)記的向量表示eij∈Ei={ei1,ei2,ei3,…,ein}。

        (3)

        Ei=Codebert(tokensi)。

        (4)

        最后,連接Bi-LSTM獲取與節(jié)點vi對應(yīng)的語句si的向量表示yi。

        (5)

        (6)

        最終,連接xi,yi得到節(jié)點vi的最終向量表示

        gi=CONCAT(xi,yi)。

        (7)

        2.2.3 邊嵌入

        邊嵌入模塊分別對邊方向與邊類型采用不同嵌入方法來生成初始向量:① 對于邊方向,采用深度優(yōu)先遍歷(DFS)將節(jié)點排序并從0開始編號,以節(jié)點編號數(shù)對的形式編碼邊方向; ② 對于邊類型,采用標(biāo)簽編碼(label encoding)將有限邊類型進(jìn)行編碼。

        上述過程的形式化表述如下:函數(shù)源代碼對應(yīng)的結(jié)構(gòu)圖記為CPG’=〈V,E〉,其中,V代表節(jié)點集合,E代表邊集合。

        對于邊方向,有

        IE={〈vi.order,vj.order〉|e=

        〈vi,vj〉,e∈E}。

        (8)

        對于邊類型,有

        TE={te|e∈E},

        (9)

        (10)

        圖4 為一個函數(shù)源代碼對應(yīng)的邊嵌入過程的示例。

        圖4 邊嵌入策略實例說明

        圖4 中,節(jié)點按照深度優(yōu)先遍歷算法進(jìn)行編號,5條有向邊分別對應(yīng)5種不同的邊類型,還給出了邊方向與邊類型對應(yīng)的向量形式。

        2.2.4 圖神經(jīng)網(wǎng)絡(luò)

        上述環(huán)節(jié)孤立考慮每個節(jié)點,僅根據(jù)單個節(jié)點包含的元素進(jìn)行向量初始化,缺乏相鄰節(jié)點的狀態(tài)信息,無法較好地反映源代碼的結(jié)構(gòu)信息。本研究采用關(guān)系圖卷積網(wǎng)絡(luò)(RGCN)完成鄰域聚合,進(jìn)而更新節(jié)點狀態(tài)。

        圖卷積網(wǎng)絡(luò)(GCN)是CNN在圖結(jié)構(gòu)上的擴(kuò)展,是在給定圖上應(yīng)用圖卷積運算后,通過聚合其相鄰節(jié)點的所有特征來更新節(jié)點。與連續(xù)計算節(jié)點狀態(tài)的遞歸圖神經(jīng)網(wǎng)絡(luò)(如GGNN)相比,GCN是每層更新一次節(jié)點向量,因此效率更高,可擴(kuò)展性更強(qiáng)。RGCN是在GCN的基礎(chǔ)上進(jìn)行了增量改進(jìn),其通過在每種關(guān)系類型下用相鄰節(jié)點更新節(jié)點來區(qū)別對待不同類型的邊,更適合處理本文所抽取的多類型邊異構(gòu)圖CPG’。如圖5 所示,在每個RGCN層中,更新單個節(jié)點需要按邊類型積累其所有相鄰節(jié)點的信息,這些信息隨后與該節(jié)點本身的特征相結(jié)合,通過激活函數(shù)(本文采用ReLU)傳遞,得到最終表示。

        圖5 節(jié)點更新過程

        上述過程的形式化表述如下:

        函數(shù)源代碼對應(yīng)的結(jié)構(gòu)圖記為CPG’=〈V,E〉,其中,V代表節(jié)點集合,E代表邊集合。單個節(jié)點向量的更新公式為

        (11)

        2.2.5 圖嵌入

        圖嵌入模塊為基于圖的特征學(xué)習(xí)的最后一步,目標(biāo)是得到最終的圖向量表示。本文通過聚合所有更新后的節(jié)點向量生成代表整個CPG’的單個向量,即

        (12)

        2.3 基于序列的特征學(xué)習(xí)

        基于序列的特征學(xué)習(xí)是本方案理解源代碼全局語義信息的關(guān)鍵過程。現(xiàn)有研究普遍采用以Word2vec,GloVe及FastText為代表的詞向量模型生成源代碼對應(yīng)的實值向量,這些模型無法基于不同的代碼上下文為相同標(biāo)記生成不同向量,即僅為相同標(biāo)記生成唯一向量,不考慮標(biāo)記對應(yīng)變量值的變化,忽略了上下文信息在漏洞檢測工作中的關(guān)鍵作用。

        本研究采用基于代碼語言的預(yù)訓(xùn)練模型CodeBert來生成源代碼的特征向量,充分考慮了上下文信息。相較傳統(tǒng)詞向量模型,CodeBert的模型結(jié)構(gòu)要更復(fù)雜,其結(jié)構(gòu)繼承了BERT的架構(gòu),基于一個12層雙向transformer,每層包含12個自注意頭,每個自注意頭的大小設(shè)為64,隱藏維度設(shè)為768,transformer的多頭注意力機(jī)制能夠集中數(shù)據(jù)流的多個關(guān)鍵變量,有助于分析和跟蹤潛在的漏洞代碼數(shù)據(jù),幫助學(xué)習(xí)需長期依賴性分析的漏洞代碼模式。此外,其內(nèi)置字節(jié)對編碼(BPE)標(biāo)記器在很大程度上緩解了OOV問題,預(yù)訓(xùn)練技術(shù)也克服了數(shù)據(jù)集中漏洞樣本過少或漏洞樣本與非漏洞樣本的不平衡所帶來的過擬合問題。最后,對于每一個函數(shù)級源代碼樣本,CodeBert編碼器生成對應(yīng)的向量矩陣,并封裝其語義含義。

        上述過程的形式化表述如下:fi代表一個函數(shù)級源代碼樣本輸入,其向量矩陣為

        Pi=CodeBert(fi)。

        (13)

        2.4 特征融合

        基于以上流程,分別獲得了所有函數(shù)級源代碼樣本fi的基于結(jié)構(gòu)圖生成的向量表示G與基于序列生成的向量表示Pi。本研究采用連接操作組合二者,進(jìn)而集成兩種特征,生成所有源代碼函數(shù)對應(yīng)的最終向量表示Hi,其公式為

        Hi=CONCAT(G,Pi)。

        (14)

        2.5 分類器

        鑒于全連接神經(jīng)網(wǎng)絡(luò)(FCNN)的卓越性能和在頂級分類器中的主導(dǎo)地位,本文使用全連接網(wǎng)絡(luò)作為漏洞檢測分類器,其由輸入層、隱藏層與輸出層三部分組成。

        上述特征融合模塊的輸出被作為輸入層,最終,輸出層將利用隱藏層特征進(jìn)行漏洞預(yù)測。

        (15)

        (16)

        式中:σ代表隱層激活函數(shù);W1,W2,b1與b2代表可學(xué)習(xí)的參數(shù)。

        3 實驗設(shè)計

        3.1 數(shù)據(jù)集

        本文基于7個不同的c/c++源代碼數(shù)據(jù)集開展實驗。其中,4個為簡單數(shù)據(jù)集,它們分別為CWE-362,CWE-476,CWE-754與CWE-758,其從代碼結(jié)構(gòu)和功能相對簡單的軟件中收集,包含可能更容易識別的漏洞模式; 剩余3個為復(fù)雜數(shù)據(jù)集,分別為Big-Vul[52],Reveal[30]與FFMPeg+Qemu[50],而Fan等[52]數(shù)據(jù)集涵蓋了2002年至2019年的CWE。在函數(shù)粒度上,數(shù)據(jù)集包含超過10 000個漏洞函數(shù)。Reveal[30]數(shù)據(jù)集包含超過18 000個函數(shù),其中9.16%是漏洞函數(shù)。FFMPeg+Qemu[50]數(shù)據(jù)集包含超過22 000個函數(shù),其中45.0%的為漏洞函數(shù)。表5 展示了數(shù)據(jù)集的相關(guān)細(xì)節(jié)。

        表5 7個數(shù)據(jù)集

        3.2 研究問題

        實驗結(jié)果將以回答以下研究問題的形式呈現(xiàn):

        研究問題1:本文提出的漏洞檢測方案與現(xiàn)有軟件漏洞檢測工具相比性能如何?

        對照組1:AVDetect[28],VulDeePecker[29],Codebert[21];

        對照組2:Devign[50],Reveal[30],IVDetect[33],FUNDED[20];

        對照組3:DeepVulSeeker[34]。

        以上實驗方案均采用基于深度學(xué)習(xí)的漏洞檢測技術(shù),其中對照組1中的模型采用基于序列的方法,對照組2中的模型采用基于圖的方法,而對照組3中的模型采用基于圖與序列相結(jié)合的方法。

        研究問題2:綜合考慮圖與序列信息是否有助于提升模型的漏洞檢測性能?

        本研究的漏洞檢測方案抽取的信息類型包括圖節(jié)點(節(jié)點類型與節(jié)點元素)、圖邊(邊類型與邊方向及序列信息),為驗證綜合考慮多類型信息對漏洞檢測模型的有效性,采取控制變量的方法,減少對照組中抽取的信息類型。

        對照組1:僅抽取圖信息; 對照組2:僅抽取序列信息。

        研究問題3:不同的節(jié)點初始化嵌入方法是否影響方案的漏洞檢測性能?

        本文漏洞檢測方案采用預(yù)訓(xùn)練模型CodeBert對節(jié)點元素進(jìn)行初始化,并通過再次訓(xùn)練微調(diào)嵌入權(quán)重。通過設(shè)計對照實驗與其他圖節(jié)點向量化方法進(jìn)行比較,具體對照組設(shè)置如下:

        對照組1:Word2vec; 對照組2:Dov2vec。

        研究問題4:不同的序列初始化嵌入方法是否影響方案的漏洞檢測性能?

        本文漏洞檢測方案采用預(yù)訓(xùn)練模型CodeBert對序列標(biāo)記進(jìn)行初始化,并通過再次訓(xùn)練微調(diào)嵌入權(quán)重。通過設(shè)計對照實驗與傳統(tǒng)的詞向量模型進(jìn)行比較,具體對照組設(shè)置如下:

        對照組1:Word2vec; 對照組2:GloVe; 對照組3:Fasttext。

        3.3 實驗環(huán)境

        本文漏洞檢測系統(tǒng)開發(fā)環(huán)境為Linux操作系統(tǒng),使用Python語言進(jìn)行開發(fā),深度學(xué)習(xí)庫選擇以Tensorflow-gpu為后端的Keras框架開發(fā),其具體內(nèi)置版本信息如表6 所示。

        表6 實驗環(huán)境參數(shù)

        3.4 評估指標(biāo)

        本文采用4個指標(biāo)對模型進(jìn)行評估,即漏報率(FNR)、誤報率(FPR)、準(zhǔn)確率(Accuracy)及F1指數(shù)(F1_score),具體計算公式分別為

        其中,

        式中:NTP表示將正樣本預(yù)測為正樣本的數(shù)量;NTN表示將正樣本預(yù)測為負(fù)樣本的數(shù)量;NFP表示將負(fù)樣本預(yù)測為正樣本的數(shù)量,即誤報;NFN表示將正樣本預(yù)測為負(fù)樣本的數(shù)量,即漏報。因此,漏報率(FNR)表示漏報的樣本占正樣本數(shù)量的比例,誤報率(FPR)表示誤報的樣本占負(fù)樣本數(shù)量的比例,準(zhǔn)確率(Accuracy)表示預(yù)測正確的數(shù)據(jù)占總樣本的比例,F1指數(shù)(F1_score)是根據(jù)準(zhǔn)確率(Precision)與召回率(Recall)給出的一種綜合評價,是二者的調(diào)和平均值。

        具有高準(zhǔn)確率(Accuracy)、高F1指數(shù)(F1_score)和低漏報率(FNR)、低誤報率(FPR)的模型被認(rèn)為是高效的。

        4 實驗結(jié)果及分析

        4.1 研究問題1的實驗結(jié)果

        表7 與表8 展示了問題1所涉及的對照組1的實驗結(jié)果??梢钥闯?在簡單數(shù)據(jù)集上,本研究模型在 4個數(shù)據(jù)集上的平均準(zhǔn)確率與F1值均高于對照組所有模型; 在真實世界數(shù)據(jù)集上,實驗組除在FFMPeg+Qemu上的F1值略低于VulDeePecker[29]與codebert[21]以外,其他各項結(jié)果均高于對照組結(jié)果。

        表7 對照組1的實驗結(jié)果1

        表8 對照組1的實驗結(jié)果2

        表9 與表10 展示了問題1所涉及的對照組2的實驗結(jié)果。可以看出,在簡單數(shù)據(jù)集上,本研究模型在4個數(shù)據(jù)集上的平均準(zhǔn)確率與F1值均高于對照組所有模型; 在真實世界數(shù)據(jù)集上,實驗組除在FFMPeg+Qemu數(shù)據(jù)集上的F1值略低于IVDetect[33]與FUNDED[20]以外,其他各項結(jié)果均高于對照組結(jié)果。

        表9 對照組2的實驗結(jié)果1

        表10 對照組2的實驗結(jié)果2

        表11 與表12 展示了問題1所涉及的對照組3 的實驗結(jié)果??梢钥闯?在簡單數(shù)據(jù)集上,本研究模型在CWE-362與CWE-476上的兩項指標(biāo)均高于對照組模型,在CWE-754與CWE-758上的兩項指標(biāo)雖然相對略低,但兩項指標(biāo)均值仍分別達(dá)到0.980 8與0.972 4; 在真實世界數(shù)據(jù)集上,實驗組除在FFMPeg+Qemu上的F1值略低以外,其他各項結(jié)果均高于對照組結(jié)果。

        表11 對照組3的實驗結(jié)果1

        表12 對照組3的實驗結(jié)果2

        綜上所述,可以得出

        結(jié)論1:與現(xiàn)有方案相比,在兩類數(shù)據(jù)集上,本研究的漏洞檢測方案都有更卓越的性能。

        4.2 研究問題2的實驗結(jié)果

        表13 與表14 展示了問題2對應(yīng)的實驗結(jié)果??梢钥闯?對照組1(即單獨抽取圖表示)的整體性能比對照組2(即單獨抽取序列表示)更好,但實驗組在兩類數(shù)據(jù)集上的準(zhǔn)確率與F1值均有更明顯的提高。以上差距驗證了圖結(jié)構(gòu)信息與序列語義信息對漏洞檢測的重要性。

        表13 研究問題2的實驗結(jié)果1

        表14 研究問題2的實驗結(jié)果2

        基于以上分析,可以得出

        結(jié)論2:較單獨考慮圖或單獨考慮序列,綜合考慮二者的漏洞檢測方案有著更好的檢測性能。

        4.3 研究問題3的實驗結(jié)果

        表15 與表16 展示了問題3對應(yīng)的實驗結(jié)果??梢钥闯?在兩類數(shù)據(jù)集上,實驗組都具有更高的準(zhǔn)確率與F1值,其中,較對照組1,在簡單數(shù)據(jù)集上,準(zhǔn)確率差異的平均值達(dá)到0.172 3,F1值差異的平均值達(dá)到0.174 4; 在復(fù)雜數(shù)據(jù)集上,準(zhǔn)確率差異的平均值達(dá)到0.139 4,F1值差異的平均值達(dá)到0.116 5。較對照組2,在簡單數(shù)據(jù)集上,準(zhǔn)確率差異的平均值達(dá)到0.130 1,F1值差異的平均值達(dá)到0.133 7; 在復(fù)雜數(shù)據(jù)集上,準(zhǔn)確率差異的平均值達(dá)到0.110 1,F1值的差異的平均值達(dá)到0.091 5。以上差距驗證了本文所使用的節(jié)點嵌入方式能有效替代傳統(tǒng)的詞向量方法,具有一定的合理性。

        表15 研究問題3的實驗結(jié)果1

        表16 研究問題3的實驗結(jié)果2

        基于以上分析,可以得出

        結(jié)論3:與傳統(tǒng)的節(jié)點源代碼初始化嵌入方式相比,本研究所采用的方法能更好地提取局部語義信息,進(jìn)而提升方案的漏洞檢測性能。

        4.4 研究問題4的實驗結(jié)果

        表17 與表18 展示了問題4對應(yīng)的實驗結(jié)果??梢钥闯?所有對照組中,對照組2(即使用GloVe模型)的整體性能最好,然而,實驗組的結(jié)果顯示,在簡單數(shù)據(jù)集上,準(zhǔn)確率平均提高了0.061 1,F1值平均提高了0.070 7; 在真實世界數(shù)據(jù)集上,準(zhǔn)確率平均提高了0.065 8,F1值平均提高了0.066 3。以上差距驗證了預(yù)訓(xùn)練模型的引入較傳統(tǒng)詞向量模型對序列的嵌入有更好的效果,具有一定的合理性。

        表17 研究問題4的實驗結(jié)果1

        表18 研究問題4的實驗結(jié)果2

        基于以上分析,可以得出

        結(jié)論4:與傳統(tǒng)的源代碼序列初始化嵌入方式相比,本研究所采用的針對代碼的預(yù)訓(xùn)練模型能更好地提取抽取代碼全局語義信息,進(jìn)而提升模型的整體漏洞檢測性能。

        5 結(jié) 論

        本文主要結(jié)論如下:1) 提出了一個函數(shù)級源代碼漏洞檢測方案,綜合學(xué)習(xí)程序語義和結(jié)構(gòu)信息來識別漏洞。本方案以自動化的方式捕獲了比現(xiàn)有方法更綜合的特征。2) 在多環(huán)節(jié)引入基于代碼的預(yù)訓(xùn)練語言模型來代替?zhèn)鹘y(tǒng)的詞向量模型進(jìn)行信息編碼。使用CodeBert生成源代碼序列的詞向量矩陣,使用CodeBert進(jìn)行節(jié)點元素初始化并用BiLSTM聚合節(jié)點內(nèi)部的局部語義信息。3) 分別在簡單與復(fù)雜兩類數(shù)據(jù)集上與現(xiàn)有檢測方案進(jìn)行了對照實驗。實驗結(jié)果表明,該方案在多個評估指標(biāo)上顯著優(yōu)于現(xiàn)有的漏洞檢測方法。此外,對照實驗也驗證了各環(huán)節(jié)的有效性,并且表明本研究對節(jié)點、邊以及序列信息的處理策略優(yōu)于現(xiàn)有其他方案。

        本研究尚存在以下三點局限性:1) 預(yù)訓(xùn)練模型CodeBert含12個編碼器層,參數(shù)多達(dá)1.1億,訓(xùn)練與部署成本高昂。2) 數(shù)據(jù)集均為C/C++語言書寫,語言類型單一。3) 僅關(guān)注漏洞識別,為二分類探究,無法準(zhǔn)確區(qū)分漏洞類型。未來研究工作需要完善以上局限:1) 提出一個輕量級預(yù)訓(xùn)練模型。2) 擴(kuò)展數(shù)據(jù)集以適應(yīng)更多種類的程序設(shè)計語言。3) 擴(kuò)展本方案以適應(yīng)多類型的漏洞檢測。

        猜你喜歡
        源代碼集上漏洞
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        漏洞
        基于TXL的源代碼插樁技術(shù)研究
        Cookie-Cutter集上的Gibbs測度
        鏈完備偏序集上廣義向量均衡問題解映射的保序性
        軟件源代碼非公知性司法鑒定方法探析
        復(fù)扇形指標(biāo)集上的分布混沌
        三明:“兩票制”堵住加價漏洞
        漏洞在哪兒
        兒童時代(2016年6期)2016-09-14 04:54:43
        揭秘龍湖產(chǎn)品“源代碼”
        国产高清一区二区三区四区色| 手机色在线| 极品少妇在线观看视频| 亚洲一区二区三区四区地址| 51看片免费视频在观看| 国产一区日韩二区欧美三区| 精品久久久久久99人妻| 不卡免费在线亚洲av| 国产亚洲一区二区在线观看| 国产精品区一区第一页| 人片在线观看无码| 视频女同久久久一区二区| 看全色黄大色黄大片 视频| 久久丫精品国产亚洲av| 中文字字幕在线精品乱码 | 国产偷2018在线观看午夜| 中文字幕日本五十路熟女| 草草影院ccyy国产日本欧美| 东京无码熟妇人妻av在线网址| 国产农村妇女高潮大叫| 区无码字幕中文色| 91一区二区三区在线观看视频| 国产精品成人网站| 色窝窝在线无码中文| 人妻一区二区三区免费看| 日韩乱码中文字幕在线| 国产特级毛片aaaaaaa高清| 国产精品无码久久久一区蜜臀| 香蕉蜜桃av一区二区三区| 婷婷成人丁香五月综合激情| 日韩精品人妻系列无码专区免费| AV无码专区亚洲AVL在线观看| 婷婷色精品一区二区激情| 无码国产福利av私拍| 国产精品流白浆喷水| 亚洲乱码中文字幕第一页| 国产成人精品日本亚洲专区61| 成人免费毛片aaaaaa片| 国产精品深夜福利免费观看| 亚洲无人区乱码中文字幕动画| 少妇中文字幕乱码亚洲影视|