国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于多表征融合的函數(shù)級(jí)代碼漏洞檢測(cè)方法

2023-07-01 06:36:40田振洲呂佳俊王凡凡
關(guān)鍵詞:控制流漏洞代碼

田振洲,呂佳俊,王凡凡

(西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710121)

近年來(lái),網(wǎng)絡(luò)攻擊事件頻發(fā),木馬、蠕蟲(chóng)和勒索軟件等層出不窮,對(duì)網(wǎng)絡(luò)安全構(gòu)成了嚴(yán)重威脅。例如,2017年的Apache Struts漏洞導(dǎo)致1.43億消費(fèi)者的金融數(shù)據(jù)被泄露,造成不可估量的經(jīng)濟(jì)損失[1-2]。網(wǎng)絡(luò)攻擊得以實(shí)施的根源在于軟件漏洞的普遍存在。截至目前,通用漏洞披露(Common Vulnerabilities &Exposures,CVE)網(wǎng)站上已收錄的漏洞高達(dá)17余萬(wàn)條[3],且漏洞數(shù)量依然呈爆發(fā)式增長(zhǎng)態(tài)勢(shì)。

現(xiàn)有漏洞檢測(cè)方法主要分為基于代碼相似性的漏洞檢測(cè)[4-6]、基于規(guī)則的漏洞檢測(cè)[7]和基于機(jī)器學(xué)習(xí)的漏洞檢測(cè)[8-9]。基于代碼相似性進(jìn)行漏洞檢測(cè)的核心思想是,相似的代碼中很可能包含相同的漏洞,但用其檢測(cè)并非由代碼復(fù)制引入的漏洞時(shí),存在較高的漏報(bào)率?;谝?guī)則的漏洞檢測(cè)方法定義的漏洞規(guī)則具有很強(qiáng)的主觀性,難以全面考慮各種區(qū)分有漏洞和無(wú)漏洞的情況,導(dǎo)致方法往往存在較高的漏報(bào)率和誤報(bào)率?;跈C(jī)器學(xué)習(xí)的漏洞檢測(cè)方法,按照是否需要專(zhuān)家定義特征,又分為基于傳統(tǒng)機(jī)器學(xué)習(xí)和基于深度學(xué)習(xí)的方法兩類(lèi)?;趥鹘y(tǒng)機(jī)器學(xué)習(xí)的漏洞檢測(cè)方法不依賴定義的漏洞規(guī)則,但依然需要人為地結(jié)合專(zhuān)業(yè)的領(lǐng)域知識(shí),利用特征工程篩選出對(duì)于刻畫(huà)漏洞至關(guān)重要的代碼特征,然后利用機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)漏洞檢測(cè)。

深度學(xué)習(xí)在程序語(yǔ)言建模[10]和情感分析[11]等諸多領(lǐng)域有著廣泛應(yīng)用,近年來(lái)也逐漸被應(yīng)用于程序漏洞檢測(cè)中。Xu等[12]利用神經(jīng)網(wǎng)絡(luò)模型在函數(shù)級(jí)上進(jìn)行基于代碼相似性的二進(jìn)制漏洞檢測(cè)。Russell等[13]針對(duì)C/C++源代碼,利用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)處理函數(shù)Token序列,實(shí)現(xiàn)漏洞檢測(cè)?;谏疃葘W(xué)習(xí)的漏洞檢測(cè)方法不需要手工定義特征,而是借助深度神經(jīng)網(wǎng)絡(luò)強(qiáng)大的特征學(xué)習(xí)能力,自動(dòng)抽取漏洞模式或漏洞相關(guān)的指示性特征。但是,僅利用代碼的某一特定的表征結(jié)構(gòu)進(jìn)行漏洞檢測(cè),導(dǎo)致深度學(xué)習(xí)模型難以充分學(xué)習(xí)代碼中蘊(yùn)含的深層語(yǔ)義信息,不利于深層漏洞的檢測(cè)。

針對(duì)上述問(wèn)題,擬提出一種基于多表征融合的代碼漏洞檢測(cè)(Sequence and Structure Fusion based Vulnerability Dectection,S2FVD)方法。對(duì)不同的代碼表征使用適配的深度神經(jīng)網(wǎng)絡(luò)模型,提取深層語(yǔ)義特征并進(jìn)行有機(jī)融合,以期充分學(xué)習(xí)代碼中蘊(yùn)含的語(yǔ)義信息,實(shí)現(xiàn)代碼漏洞的精準(zhǔn)檢測(cè)。

1 S2FVD方法整體結(jié)構(gòu)

S2FVD方法為保證漏洞檢測(cè)的粒度,先選取函數(shù)而非整個(gè)程序作為基本分析單元,通過(guò)對(duì)函數(shù)的詞法和語(yǔ)法解析,從中構(gòu)建Token序列和屬性控制流圖(Attributed Control Flow Graph,ACFG),作為函數(shù)的兩種不同的原始表征結(jié)構(gòu)。其次,對(duì)Token序列中的Token、屬性控制流圖中的節(jié)點(diǎn)進(jìn)行詞嵌入,得到初始向量表示,并在嵌入的基礎(chǔ)上,對(duì)屬性控制流圖中的節(jié)點(diǎn)屬性使用TextCNN模型提取節(jié)點(diǎn)初始特征。然后,分別使用針對(duì)序列的神經(jīng)網(wǎng)絡(luò)TextCNN和圖卷積神經(jīng)網(wǎng)絡(luò)[14](Graph Con-volutional Nueral Network,GCN ),從中抽取深層次的代碼語(yǔ)義特征。最后,考慮到Token序列和ACFG是從不同角度(序列和結(jié)構(gòu))對(duì)同一函數(shù)的語(yǔ)義進(jìn)行的互補(bǔ)性描述,因此通過(guò)直觀的向量拼接操作,將從二者中抽取的特征向量進(jìn)行有機(jī)融合,并送入分類(lèi)層,實(shí)現(xiàn)函數(shù)級(jí)漏洞的精準(zhǔn)檢測(cè)。S2FVD方法的整體結(jié)構(gòu)示意圖如圖1所示。

圖1 S2FVD方法的整體結(jié)構(gòu)示意圖

2 原始代碼表征提取

為了充分學(xué)習(xí)代碼所承載的語(yǔ)義信息,檢測(cè)出C/C++代碼中的漏洞,需要先提取每個(gè)函數(shù)的Token序列和屬性控制流圖,作為每個(gè)函數(shù)的原始代碼表征。

2.1 Token序列提取

Token序列相當(dāng)于按自然語(yǔ)言處理的方式處理代碼,體現(xiàn)了源代碼的自然順序,一定程度上反映了源代碼所體現(xiàn)的編程邏輯。提取Token序列時(shí),先刪除代碼中的注釋,因?yàn)槠渑c漏洞無(wú)關(guān)。然后,對(duì)代碼進(jìn)行標(biāo)準(zhǔn)化處理,篩選出自定義的變量名和函數(shù)名,對(duì)其進(jìn)行統(tǒng)一替換,以去除一些語(yǔ)義無(wú)關(guān)的信息。將同一函數(shù)中出現(xiàn)的不同變量和不同函數(shù)名按出現(xiàn)的次序映射為對(duì)應(yīng)的符號(hào)名,如“VAR1”“VAR2”表示同一函數(shù)中的不同變量,“FUN1”“FUN2”表示同一函數(shù)中的不同函數(shù)名。最后,通過(guò)詞法分析,將符號(hào)表示中的函數(shù)劃分為一系列標(biāo)記,包括標(biāo)識(shí)符、關(guān)鍵字、操作符和符號(hào)。函數(shù)轉(zhuǎn)化為T(mén)oken序列的過(guò)程如圖2所示。

圖2 函數(shù)轉(zhuǎn)化為T(mén)oken序列的過(guò)程

2.2 屬性控制流圖提取

控制流圖(Control Flow Graph,CFG)是程序分析領(lǐng)域廣泛使用的一種代碼表示結(jié)構(gòu),其蘊(yùn)含了程序代碼間的控制依賴等語(yǔ)義信息。進(jìn)一步地,除考慮控制流節(jié)點(diǎn)的依賴關(guān)系外,對(duì)控制流節(jié)點(diǎn)內(nèi)的程序語(yǔ)句進(jìn)行抽象以賦予節(jié)點(diǎn)屬性信息,從而構(gòu)建屬性控制流圖作為函數(shù)的另一種原始代碼表征結(jié)構(gòu)。

屬性控制流圖是一個(gè)有向圖,定義為G=(V,E,A),其中:V和E分別為頂點(diǎn)和邊的集合;A為頂點(diǎn)包含的信息的集合。在代碼漏洞檢測(cè)場(chǎng)景中,每個(gè)頂點(diǎn)是控制流圖中的節(jié)點(diǎn),每條邊代表代碼的控制流,節(jié)點(diǎn)所包含的信息作為節(jié)點(diǎn)的屬性。節(jié)點(diǎn)屬性包含節(jié)點(diǎn)的類(lèi)型和節(jié)點(diǎn)所對(duì)應(yīng)的程序語(yǔ)句。每個(gè)節(jié)點(diǎn)都有一個(gè)類(lèi)型,為節(jié)點(diǎn)所代表的程序語(yǔ)句的類(lèi)型。如圖3所示,類(lèi)型為METHOD的節(jié)點(diǎn)表示方法名,類(lèi)型為METHOD_RETURN的節(jié)點(diǎn)表示返回值類(lèi)型,類(lèi)型為.xxx的節(jié)點(diǎn)則表示對(duì)應(yīng)的邏輯、數(shù)學(xué)運(yùn)算,如.assignment表示賦值運(yùn)算。利用源碼分析工具Joern[15]對(duì)函數(shù)級(jí)的C/C++源代碼進(jìn)行分析,提取屬性控制流圖。

圖3 屬性控制流圖

3 基于多表征融合的漏洞檢測(cè)

3.1 基于TextCNN的代碼序列特征提取

對(duì)于函數(shù)的Token序列,采用嵌入的方式將單個(gè)Token轉(zhuǎn)化為向量表示,再使用TextCNN模型進(jìn)行代碼序列特征的提取。

1)嵌入。標(biāo)準(zhǔn)化后的Token序列必須轉(zhuǎn)換為數(shù)值向量,以便能夠作為深度學(xué)習(xí)模型的輸入。對(duì)此,利用Word2Vec詞嵌入算法,將每個(gè)獨(dú)特的Token映射成一個(gè)高維的數(shù)值向量。具體地,將標(biāo)準(zhǔn)化后的每條Token序列視為一條句子,將序列中的每個(gè)Token視為一個(gè)單詞。利用gensim庫(kù)中提供的skip-gram模型[16],迭代地通過(guò)中心詞推斷上下文窗口內(nèi)的其他詞,從而為每個(gè)獨(dú)特的Token學(xué)習(xí)一個(gè)d維向量。向量維度過(guò)高會(huì)導(dǎo)致表示空間稀疏,并增加后續(xù)神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練的時(shí)空開(kāi)銷(xiāo),維度過(guò)低,則可能導(dǎo)致含義不同的Token難以準(zhǔn)確區(qū)分。利用Word2Vec進(jìn)行詞嵌入的源代碼分析任務(wù)中,50、100和200為最常見(jiàn)的取值。采取gensim中skip-gram模型的默認(rèn)參數(shù)設(shè)置,即向量維度d和上下文窗口的值分別設(shè)置為100和5,同時(shí),模型迭代訓(xùn)練100次。

2)TextCNN模型。在Token嵌入的基礎(chǔ)上,將每個(gè)Token序列轉(zhuǎn)換為原始特征矩陣A∈l×d,即

A=[e1,e2,…,ei,…,el]T

(1)

式中:l為T(mén)oken序列的長(zhǎng)度,Token的實(shí)際數(shù)量因函數(shù)而異,為方便批量訓(xùn)練,采取補(bǔ)零或截?cái)嗟姆绞?將Token序列長(zhǎng)度統(tǒng)一調(diào)整為l;ei∈d是序列中Token相應(yīng)的嵌入。

使用卷積核進(jìn)行特征提取,與圖像處理的卷積核不同的是,經(jīng)過(guò)詞向量表達(dá)的Token序列為一維數(shù)據(jù),因此,在TextCNN中用一維卷積。在卷積層,采用結(jié)構(gòu)為n×d的m個(gè)卷積濾波器對(duì)原始特征矩陣A進(jìn)行卷積運(yùn)算,得到特征矩陣A∈(l-n+1)×m,其中,n表示卷積核的大小。為了提取特征模式的不同視圖,使用大小分別為2、3和4的不同卷積核對(duì)A進(jìn)行卷積。不同高度的卷積核得到的特征圖(feature map)大小不一樣,使用匯聚函數(shù)使其維度相同,這里使用1D-maxpooling提取出最大值。最后,拼接起來(lái)得到特征向量VToken?;赥extCNN的模型結(jié)構(gòu)如圖4所示。

圖4 基于TextCNN的Token序列特征抽取模型

3.2 基于GCN的代碼結(jié)構(gòu)特征提取

帶屬性的控制流圖是圖結(jié)構(gòu),因此可以選擇使用GCN進(jìn)行表示學(xué)習(xí)。GCN的核心思想為學(xué)習(xí)一個(gè)函數(shù)映射,通過(guò)該映射圖中的節(jié)點(diǎn)聚合其自己特征與其鄰居節(jié)點(diǎn)特征,從而生成節(jié)點(diǎn)的新表示。

1)節(jié)點(diǎn)初始特征提取。首先,將控制流圖中節(jié)點(diǎn)的屬性通過(guò)詞法分析解析成Token序列。其次,采取gensim中的skip-gram模型,為每個(gè)獨(dú)特的Token學(xué)習(xí)一個(gè)w維向量,向量維度設(shè)置為100。將每個(gè)節(jié)點(diǎn)的屬性對(duì)應(yīng)的Token序列轉(zhuǎn)換為原始特征矩陣N∈Rk×w,其中k是Token序列的長(zhǎng)度,設(shè)置為30。然后,使用大小分別為2、3和4的卷積核進(jìn)行特征提取。不同大小的卷積核得到的特征圖大小不一樣,使用匯聚函數(shù),使其維度相同。最后,將生成的表示進(jìn)行連接,經(jīng)過(guò)全連接層轉(zhuǎn)化為輸出特征,作為圖中節(jié)點(diǎn)的初始特征。

2)GCN模型?;贕CN的模型結(jié)構(gòu)如圖5所示。

圖5 基于GCN的ACFG結(jié)構(gòu)特征抽取模型

將節(jié)點(diǎn)的初始特征組成一個(gè)n×m維的矩陣X,每個(gè)節(jié)點(diǎn)之間的關(guān)系也會(huì)形成一個(gè)n×n維的矩陣A,稱(chēng)為鄰接矩陣(adjacency matrix)。其中,n為節(jié)點(diǎn)的個(gè)數(shù),m為節(jié)點(diǎn)初始特征的維度,X和A是GCN模型的輸入,則GCN模型可用公式表示為

X(l+1)=f(X(l),A)

(2)

式中,X(l)為第l層節(jié)點(diǎn)的特征。

每個(gè)節(jié)點(diǎn)與鄰節(jié)點(diǎn)關(guān)系為

(3)

由式(3)可知,每經(jīng)過(guò)一層圖卷積,利用節(jié)點(diǎn)與節(jié)點(diǎn)之間的聯(lián)系和節(jié)點(diǎn)自身的特征進(jìn)行聚合,可生成新的節(jié)點(diǎn)表示。在讀出(Readout)操作中,采用均值匯聚的方式,將圖中新的節(jié)點(diǎn)表示的均值作為圖的表示,即

(4)

式中:N為圖中的所有節(jié)點(diǎn);xv是節(jié)點(diǎn)v的特征表示。xg對(duì)應(yīng)的特征向量為VCFG。

3.3 融合

融合的方式很多種,常見(jiàn)的有逐點(diǎn)相加和向量拼接兩種方式[18]。逐點(diǎn)相加的數(shù)學(xué)表達(dá)為,現(xiàn)有特征向量v1∈n和v2∈n,為了融合v1和v2,進(jìn)行對(duì)應(yīng)位置元素的相加,即v={xi|xi=v1[i]+v2[i],i=1,2,…,n}。進(jìn)行此操作的前提是這兩個(gè)向量的維度相同。

向量拼接是一個(gè)更為通用的特征融合方法,其數(shù)學(xué)表達(dá)為,現(xiàn)有特征向量v1∈n和v2∈n,則有融合特征向量v=[v1∶v2]∈m+1。對(duì)于融合機(jī)制的設(shè)計(jì),考慮到提取的代碼表征分別是從序列和結(jié)構(gòu)的角度對(duì)函數(shù)進(jìn)行的互補(bǔ)性描述,因此選擇向量拼接融合的方式,將不同代碼表征學(xué)習(xí)到的特征向量拼接成一個(gè)單一的特征向量。

源碼分析工具Joern無(wú)法對(duì)所有的函數(shù)進(jìn)行正確解析,導(dǎo)致生成的屬性控制流圖數(shù)量略微少于數(shù)據(jù)集中的函數(shù)數(shù)量。因此,先進(jìn)行數(shù)據(jù)處理,將Token序列和屬性控制流圖進(jìn)行一一對(duì)應(yīng)。然后,將前面提取出來(lái)的特征向量VToken和VCFG直接拼接,得到特征向量Vs=[VToken∶VCFG],維度是384。最后,將特征向量Vs送入全連接層,并利用sigmoid實(shí)現(xiàn)二分類(lèi),得到標(biāo)簽的值,其中,0代表目標(biāo)函數(shù)無(wú)漏洞,1代表目標(biāo)函數(shù)有漏洞。

4 實(shí)驗(yàn)

4.1 實(shí)驗(yàn)環(huán)境與數(shù)據(jù)集

實(shí)驗(yàn)在RTX 2080Ti GPU的硬件條件與python 3.7的軟件環(huán)境上運(yùn)行,網(wǎng)絡(luò)模型部分基于PyTorch框架和深度圖譜庫(kù)(Deep Graph Library,DGL)框架構(gòu)建。使用VDISC(Vulnerability Detection in Source Code)漏洞數(shù)據(jù)集[13],該數(shù)據(jù)集共計(jì)包含127萬(wàn)余個(gè)C/C++函數(shù)。利用Clang[19]、Cppcheck[20]和Flawfinder[21]等靜態(tài)漏洞分析工具掃描源代碼得到每個(gè)函數(shù)標(biāo)記,即是否存在漏洞以及漏洞對(duì)應(yīng)的CWE(Common Vulnerabilities &Exposures)類(lèi)型。處理生成的語(yǔ)料庫(kù)中函數(shù)Token序列長(zhǎng)度的分布情況如圖6所示。可以看到,接近95%的Token序列的長(zhǎng)度在400以下,約99%的Token序列長(zhǎng)度不超過(guò)500??紤]到模型學(xué)習(xí)效率和函數(shù)語(yǔ)義覆蓋的完整程度,S2FVD選取400作為默認(rèn)的Token序列截?cái)嗷蜓a(bǔ)全的長(zhǎng)度。

圖6 Token序列長(zhǎng)度分布情況

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

隨機(jī)選取80%的函數(shù)作為訓(xùn)練集,20%的函數(shù)作為測(cè)試集。將PR(Precision-Recall)曲線、ROC(Receiver Operating Characteristic)曲線、馬修斯相關(guān)系數(shù)(Matthews Correlation Coefficient,MCC)和F1值作為性能評(píng)估指標(biāo),對(duì)S2FVD的檢測(cè)性能進(jìn)行評(píng)估,并與文獻(xiàn)[13]漏洞檢測(cè)方法進(jìn)行對(duì)比。S2FVD方法的PR和ROC曲線分別如圖7和圖8所示,兩種方法的檢測(cè)結(jié)果如表1所示。

表1 兩種方法的檢測(cè)結(jié)果

圖7 S2FVD方法的PR曲線評(píng)估結(jié)果

圖8 S2FVD的ROC曲線評(píng)估結(jié)果

由表1可以看到,S2FVD 方法的4種性能評(píng)估指標(biāo)均優(yōu)于文獻(xiàn)[13]漏洞檢測(cè)方法。其中,PR和ROC曲線下的面積(Area Under Curve,AUC)分別提高了28.7%和1%。特別地,F1值提高了21.7%。F1值綜合考慮了精確率和召回率的計(jì)算結(jié)果,較全面地評(píng)價(jià)了分類(lèi)器的性能,其值越大說(shuō)明檢測(cè)效果越理想。由此得出,S2FVD方法在漏洞檢測(cè)方面優(yōu)于文獻(xiàn)[13]漏洞檢測(cè)方法。這是因?yàn)镾2FVD綜合了Token序列和屬性控制流圖兩種不同的代碼表征形式,分別利用適配的表示學(xué)習(xí)模型學(xué)習(xí)函數(shù)語(yǔ)義的不同側(cè)面并進(jìn)行融合,使得抽取到的函數(shù)語(yǔ)義特征更加全面。

為了驗(yàn)證多表征融合對(duì)代碼漏洞的檢測(cè)效果好于單一表征,下面進(jìn)行消融實(shí)驗(yàn),對(duì)采取單一表征訓(xùn)練好的模型的檢測(cè)效果進(jìn)行評(píng)估。將Token序列通過(guò)TextCNN模型學(xué)習(xí)得到特征向量VToken,并送入分類(lèi)層進(jìn)行二分類(lèi)訓(xùn)練,記為S2FVDToken方法。將屬性控制流圖通過(guò)GCN模型學(xué)習(xí)得到特征向量VCFG,且獨(dú)立地送入分類(lèi)層進(jìn)行二分類(lèi)訓(xùn)練,記為S2FVDACFG方法。將S2FVDToken和S2FVDACFG兩種方法的檢測(cè)結(jié)果分別與S2FVD方法對(duì)比,如表2所示。

表2 多表征融合方式與單一表征的檢測(cè)結(jié)果對(duì)比

由表2可以看出,基于多表征融合進(jìn)行漏洞檢測(cè)的各項(xiàng)評(píng)估指標(biāo),均優(yōu)于采用單一表征的情形。說(shuō)明采用單一表征進(jìn)行訓(xùn)練時(shí),模型確實(shí)不容易充分學(xué)習(xí)代碼所承載的語(yǔ)義信息,導(dǎo)致產(chǎn)生相對(duì)較差的檢測(cè)效果。同時(shí)也可以推斷出,從Token序列和屬性控制流圖中抽取的特征,會(huì)有一定程度的語(yǔ)義上的重疊,但這些特征不相交的部分,進(jìn)一步提升了融合模型的漏洞檢測(cè)能力。

S2FVD默認(rèn)采取Word2Vec進(jìn)行Token嵌入??紤]到FastText是另一種常用的詞嵌入模型,這里對(duì)比采取不同Token嵌入模型時(shí),S2FVD的漏洞檢測(cè)結(jié)果。同時(shí),考慮到Token序列長(zhǎng)度是影響模型檢測(cè)能力的關(guān)鍵參數(shù)之一,其決定了檢測(cè)模型能夠看到的函數(shù)語(yǔ)義的范圍。對(duì)此,對(duì)比分析Token序列長(zhǎng)度l在不同取值(300、400和500)時(shí),S2FVD的漏洞檢測(cè)結(jié)果。S2FVD采取不同嵌入方式和取不同l值時(shí)的檢測(cè)結(jié)果如表3所示。

表3 采取不同嵌入方式和取不同l值時(shí)的檢測(cè)結(jié)果

如表3所示,S2FVD在不同嵌入方式下的檢測(cè)結(jié)果差異并不顯著,表明Word2Vec或FastText均能充分學(xué)習(xí)Token的共現(xiàn)關(guān)系,生成品質(zhì)區(qū)別不大的預(yù)訓(xùn)練嵌入向量。類(lèi)似地,采取不同Token長(zhǎng)度時(shí),模型的檢測(cè)性能也并未表現(xiàn)出明顯變化。主要原因在于,S2FVD融合了TextCNN從序列中抽取的語(yǔ)義特征,以及GCN從ACFG中抽取的語(yǔ)義特征實(shí)現(xiàn)漏洞檢測(cè),而序列長(zhǎng)度主要影響了TextCNN從Token序列中提取的部分漏洞相關(guān)的特征,表明多表征融合有助于降低模型對(duì)參數(shù)設(shè)置的敏感性。同時(shí),采取Word2Vec進(jìn)行Token嵌入,且Token序列長(zhǎng)度l取值為400時(shí),S2FVD模型表現(xiàn)出最優(yōu)的漏洞檢測(cè)性能。

5 結(jié)語(yǔ)

S2FVD方法基于函數(shù)中提取的Token序列和屬性控制流圖兩種原始的代碼表征結(jié)構(gòu),分別適配TextCNN和GCN神經(jīng)網(wǎng)絡(luò)模型進(jìn)行語(yǔ)義特征抽取,并通過(guò)語(yǔ)義特征向量的拼接融合,提高了漏洞檢測(cè)能力。在公共數(shù)據(jù)集上開(kāi)展的實(shí)驗(yàn)結(jié)果表明,S2FVD相比文獻(xiàn)[13]方法表現(xiàn)出更優(yōu)秀的漏洞檢測(cè)能力。消融實(shí)驗(yàn)結(jié)果表明,對(duì)多種代碼表征結(jié)構(gòu)進(jìn)行融合學(xué)習(xí)是有必要的,檢測(cè)性能優(yōu)于僅使用單一表征結(jié)構(gòu)的情況。

猜你喜歡
控制流漏洞代碼
漏洞
抵御控制流分析的Python 程序混淆算法
工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
電子科技(2021年2期)2021-01-08 02:25:58
抵御控制流分析的程序混淆算法
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
三明:“兩票制”堵住加價(jià)漏洞
漏洞在哪兒
土默特右旗| 高邑县| 西贡区| 西吉县| 阜平县| 肥乡县| 清丰县| 安阳市| 翼城县| 赤水市| 邯郸市| 丰顺县| 彩票| 清河县| 富锦市| 玉门市| 调兵山市| 丁青县| 大名县| 沁源县| 迁西县| 泽库县| 仁布县| 吉首市| 阿拉善右旗| 来安县| 牙克石市| 西乌| 鄯善县| 资溪县| 建德市| 年辖:市辖区| 西昌市| 衡水市| 新乡市| 云安县| 视频| 塘沽区| 临潭县| 平顺县| 堆龙德庆县|