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

?

基于詞向量模型的漏洞檢測方法

2023-11-24 08:29:50胡景浩侯正章
關(guān)鍵詞:漏洞代碼語義

肖 巍,胡景浩,侯正章,王 濤,潘 超

(1.長春工業(yè)大學(xué) 計算機科學(xué)與工程學(xué)院,長春 130012;2.吉林大學(xué) 軟件學(xué)院,長春 130012)

在萬物互聯(lián)的時代,網(wǎng)絡(luò)安全問題備受關(guān)注.目前最常見和影響力最大的網(wǎng)絡(luò)安全問題均由軟件漏洞引起[1].軟件漏洞不僅容易被發(fā)現(xiàn)、被利用,而且能讓非法入侵者竊取數(shù)據(jù)或阻止應(yīng)用程序正常運行,常導(dǎo)致巨大的經(jīng)濟損失,嚴(yán)重危害了網(wǎng)絡(luò)安全,如瀏覽器插件中的漏洞,威脅著數(shù)百萬互聯(lián)網(wǎng)用戶的安全和隱私.為解決軟件漏洞問題,研究人員提出了許多方法,包括靜態(tài)分析、動態(tài)分析和混合分析.靜態(tài)分析是指對于給定程序的源代碼進行分析,如基于規(guī)則/模板的分析、符號執(zhí)行和代碼相似性檢測,主要依賴于對源代碼的分析;動態(tài)分析是指通過使用特定輸入數(shù)據(jù)執(zhí)行給定程序并監(jiān)視其運行時的行為對其進行分析,如模糊測試和污點分析;混合分析是指將靜態(tài)分析和動態(tài)分析技術(shù)相結(jié)合,對給定的程序進行分析.

機器學(xué)習(xí)和數(shù)據(jù)挖掘技術(shù)的進步以及它們在解決復(fù)雜應(yīng)用問題上的成功案例,促使研究人員開始考慮如何有效地利用這些技術(shù)進一步解決計算機安全問題.目前已有許多研究利用數(shù)據(jù)挖掘和機器學(xué)習(xí)技術(shù)自動提取漏洞代碼段的特征和模式,通過模式匹配技術(shù)發(fā)現(xiàn)軟件漏洞[2].Yamaguchi等[3]將函數(shù)構(gòu)建成AST(abstract syntax tree),利用詞袋技術(shù)將其映射到向量空間后,通過語義分析檢測軟件漏洞;Pang等[4]采用N-gram語法分析和統(tǒng)計特征選擇相結(jié)合的方式預(yù)測漏洞軟件;Grieco等[5]提出綜合使用N-gram和Word2vec模型對代碼進行向量表示,利用隨機森林等多種機器學(xué)習(xí)算法進行漏洞檢測.

近年來,神經(jīng)網(wǎng)絡(luò)模型在漏洞檢測方面的應(yīng)用也越來越廣泛.Russell等[6]使用Word2vec做為詞向量模型,通過卷積神經(jīng)網(wǎng)絡(luò)結(jié)合隨機森林的方法檢測代碼漏洞,獲得了很好的實驗效果;Li等[7]提出的VulDeePecker系統(tǒng)在SARD(software assurance reference dataset)數(shù)據(jù)集上使用Word2vec詞向量模型作為神經(jīng)網(wǎng)絡(luò)的輸入,檢測切片級C/C++代碼漏洞,通過SySeVR框架對代碼的語法和語義進行表征,提高了漏洞檢測的準(zhǔn)確性;Lin等[8]通過在手動標(biāo)記的漏洞數(shù)據(jù)集上進行實驗,將代碼序列化為抽象語法樹,經(jīng)過Word2vec模型輸入到以雙向長短期記憶網(wǎng)絡(luò)為基本框架的神經(jīng)網(wǎng)絡(luò)模型中檢測漏洞,與傳統(tǒng)方式相比,漏洞檢測效果更顯著.

在漏洞檢測領(lǐng)域,目前研究者大多數(shù)在自己收集的數(shù)據(jù)集或SARD上進行研究和測試.數(shù)據(jù)集與實驗環(huán)境的不同,會導(dǎo)致無法準(zhǔn)確衡量算法的優(yōu)劣.多數(shù)漏洞檢測的研究是通過在同一種詞向量模型上應(yīng)用不同的神經(jīng)網(wǎng)絡(luò)提高準(zhǔn)確率,而對于多種詞向量模型,哪種詞向量模型與神經(jīng)網(wǎng)絡(luò)相結(jié)合能更有效地檢測漏洞還沒有準(zhǔn)確結(jié)論.

本文通過在同一數(shù)據(jù)集同一實驗環(huán)境中對不同的詞向量模型結(jié)合不同的神經(jīng)網(wǎng)絡(luò)進行實驗,分析得出最適用于漏洞檢測的詞向量模型和神經(jīng)網(wǎng)絡(luò)模型.本文的貢獻主要有以下三方面:

1) 本文在同一數(shù)據(jù)集上對數(shù)據(jù)進行預(yù)處理,先采用不同的詞向量進行轉(zhuǎn)化,再結(jié)合不同的神經(jīng)網(wǎng)絡(luò)進行實驗,通過比較統(tǒng)一平臺、統(tǒng)一框架下產(chǎn)生的不同實驗結(jié)果,分析出代碼漏洞的特點;

2) 本文在C/C++函數(shù)漏洞數(shù)據(jù)集上使用Word2vec,Fasttext,GloVe(global vectors for word representation),ELMo(embeddings from language models)和BERT(bidirectional encoder representation from transformers)詞向量模型,對源代碼生成的抽象語法樹結(jié)構(gòu)進行知識表示,由于不同模型生成的詞向量對代碼的語義和語法關(guān)系表征不同,漏洞檢測結(jié)果不同,分析出適用于漏洞檢測的詞向量模型;

3) 本文使用主流神經(jīng)網(wǎng)絡(luò)模型對代碼漏洞進行檢測,如DNN(deep neural networks),GRU(gate recurrent unit),LSTM(long short-term memory),Bi-GRU(bidirectional gated recurrent unit),Bi-LSTM(bidirectional long short-term memory)和Text-CNN(convolutional neural networks for text classification),不同網(wǎng)絡(luò)結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)模型對漏洞檢測效果不同,根據(jù)實驗結(jié)果分析出適用于漏洞檢測的神經(jīng)網(wǎng)絡(luò)模型.

1 詞向量模型的基本原理

1.1 Word2vec模型

NNLM(neural network language model)[9]以前饋神經(jīng)網(wǎng)絡(luò)模型為基礎(chǔ),使用低維緊湊的詞向量對上下文進行表示,解決了詞袋模型產(chǎn)生的數(shù)據(jù)稀疏和語義鴻溝等問題.RNNLM(recurrent neural network language model)[10]在NNLM的基礎(chǔ)上將上一輪計算狀態(tài)應(yīng)用到新一輪計算中,不再計算相同的詞表征,從而提高了模型的時間效率.CBOW(continuous bag-of-words)模型[11]采用先求和再求平均的計算方法,在降低向量維度和減少參數(shù)數(shù)量的同時采用線性分類,從而提高了模型效率.CBOW模型的輸入是中心詞的上下文,輸出是預(yù)測的中心詞.Skip-gram模型[11]是在已知當(dāng)前詞的情況下去預(yù)測上下文.由于序列化數(shù)據(jù)的局部信息具有關(guān)聯(lián)性,Word2vec模型將自然語言中的詞一一映射為長度相等的詞向量.使用該模型能分析出前后文的語義和語法關(guān)系,因此其廣泛應(yīng)用于自然語言處理的情感分析[12]、文本分類[13]和關(guān)系抽取[14]任務(wù)中.

1.2 Fasttext模型

基于CBOW模型的文本分類模型Fasttext[15]與CBOW模型結(jié)構(gòu)基本一致,不同的是輸出結(jié)果為輸入文本對應(yīng)的類型標(biāo)記.該模型利用子詞N-gram信息,獲得字符之間的順序關(guān)系,以便更好地捕捉單詞內(nèi)部的語義信息,特別是在處理大數(shù)據(jù)時,能更準(zhǔn)確地對生僻詞和詞的變形進行向量表示.Fasttext在保持分類效果的前提下,采用線性分類并在輸出層使用層次Softmax和負采樣技術(shù),加快了訓(xùn)練速度,縮短了訓(xùn)練時間,常應(yīng)用于情感分析[16]、攔截垃圾郵件[17]和文檔語言識別等方面.

1.3 GloVe模型

詞向量生成模型GloVe[18]通過構(gòu)建單詞上下文的共現(xiàn)矩陣,計算詞間的共現(xiàn)比率,再建立詞與共現(xiàn)比率之間的映射關(guān)系,得到GloVe的模型函數(shù),用加權(quán)平方差作為損失函數(shù),通過AdaGrad優(yōu)化算法學(xué)習(xí)生成詞向量.GloVe模型廣泛應(yīng)用于命名實體識別[19]、情感分類[20]和區(qū)別相似詞[21]等問題中.

1.4 ELMo模型

基于Bi-LSTM的語言模型ELMo[22]包含前向語言模型和后向語言模型.前向語言模型根據(jù)前面的詞匯預(yù)測當(dāng)前詞的概率,后向語言模型根據(jù)后面的詞匯預(yù)測當(dāng)前詞的概率,通過最大化前向和后向語言模型的對數(shù)概率得到當(dāng)前詞的預(yù)測概率.該模型包含兩層Bi-LSTM,第一層主要嵌入詞的語法結(jié)構(gòu)信息,第二層主要嵌入句子的語義信息.ELMo能根據(jù)不同的上下文場景生成不同的詞向量,有效解決了一詞多義的問題.ELMo模型在情感分析[23]、命名實體識別[24]及文本分類[25]等方面性能優(yōu)異.

1.5 BERT模型

BERT模型[26]是由MLM(MASKed language model)和NSP(next sentence prediction)構(gòu)成的深度雙向Transformer語言模型.MLM以15%的概率用[MASK]隨機對訓(xùn)練序列中的標(biāo)記進行替換,其中80%的標(biāo)記被替換為[MASK],10%的標(biāo)記被隨機替換,10%的標(biāo)記保持不變,根據(jù)所給的標(biāo)記學(xué)習(xí)被替換的詞.NSP是一個二分類任務(wù),主要判斷兩個語句中的其中一條語句是否是另一條語句的下一句.訓(xùn)練數(shù)據(jù)中50%的數(shù)據(jù)從真實的上下文中抽取,剩余的50%數(shù)據(jù)從語料庫中隨機選擇用于加深學(xué)習(xí)其中的相關(guān)性.MLM能抽取標(biāo)記層次的表征,但不能直接獲取句子層次的表征,NSP能幫助理解句子間的關(guān)系進行預(yù)測.因此BERT模型在解決句子或段落的匹配、句間關(guān)系、理解深層語義特征等任務(wù)中效果顯著,如知識圖譜補全[27]、問答任務(wù)[28]、閱讀理解[29-30]、文本分類[31]和關(guān)系抽取[32]等.

表1列出了各詞向量模型的特點及其在漏洞檢測方面的應(yīng)用程度.

表1 各詞向量模型的特點及其應(yīng)用程度

2 詞向量模型在漏洞檢測上的應(yīng)用

詞向量模型在各自然語言處理任務(wù)中均有不同程度的應(yīng)用,效果也較好.在漏洞檢測方面,Word2vec作為早期的詞向量模型被廣泛應(yīng)用,Fasttext和BERT模型應(yīng)用較少,GloVe和ELMo模型尚未發(fā)現(xiàn)應(yīng)用于漏洞檢測方面.

2.1 Word2vec模型在漏洞檢測上的應(yīng)用

Word2vec模型將源代碼轉(zhuǎn)化為向量作為神經(jīng)網(wǎng)絡(luò)的輸入,由于生成的詞向量維數(shù)少、速度快、通用性強被廣泛應(yīng)用于漏洞檢測中.

Russell等[6]使用Word2vec詞向量模型,將CNN(convolutional neural networks)結(jié)合RF(random forest)實現(xiàn)代碼漏洞檢測.實驗結(jié)果表明,將源代碼通過神經(jīng)網(wǎng)絡(luò)訓(xùn)練生成的特征向量作為隨機森林分類器的輸入比單獨使用神經(jīng)網(wǎng)絡(luò)在漏洞檢測上的效果更好,在準(zhǔn)確率、精確率及F1值上均有約2%~3%的提升.Fidalgo等[33]使用Word2vec模型對PHP語言的代碼進行向量表示,應(yīng)用LSTM進行代碼漏洞預(yù)測.LSTM模型有助于理解代碼之間的語法和語義信息,可更好地處理序列化的文本信息,準(zhǔn)確率和召回率均達95%以上.文獻[7-8,34-38]采用Word2vec作為詞向量模型,將C/C++語言的源代碼轉(zhuǎn)換為向量,使用不同的神經(jīng)網(wǎng)絡(luò)模型進行漏洞檢測.其中,Zou等[34]提出了多類別的深度學(xué)習(xí)漏洞檢測系統(tǒng),同時提供了用于測評漏洞系統(tǒng)的標(biāo)準(zhǔn)檢測數(shù)據(jù)集.文獻[7-8,35-36]分別采用抽象語法樹、最小中間表征以及代碼段表征等技術(shù)對源代碼進行預(yù)處理,通過Bi-LSTM捕捉上下文語義關(guān)系檢測漏洞,實驗結(jié)果的準(zhǔn)確率均有不同程度提升.Li等[37]為更好地學(xué)習(xí)漏洞特征采用了Bi-GRU代替Bi-LSTM,比其他神經(jīng)網(wǎng)絡(luò)模型更有效.Xu等[38]提出了使用基于上下文的長短期記憶神經(jīng)網(wǎng)絡(luò)模型對源代碼進行漏洞檢測,該模型性能比CNN和LSTM模型更好,準(zhǔn)確率可達96.71%,F1值最高為97%.

Zhou等[39]提出了基于圖神經(jīng)網(wǎng)絡(luò)的漏洞檢測模型.該模型將源代碼轉(zhuǎn)換為抽象語法樹,結(jié)合不同層次間的程序控制和數(shù)據(jù)依賴關(guān)系,形成具有全面程序語義結(jié)構(gòu)的聯(lián)合圖.通過Word2vec對代碼進行編碼,采用Bi-GRU模型學(xué)習(xí)節(jié)點嵌入.該模型檢測漏洞的準(zhǔn)確率提高10.51%,F1值提高8.68%.

2.2 Fasttext模型在漏洞檢測上的應(yīng)用

Alenezi等[40]通過Fasttext模型訓(xùn)練后得到詞向量,采用DNN模型從輸入向量中學(xué)習(xí)更深層的隱藏特征并進行漏洞檢測.實驗結(jié)果表明,該方法的效果及性能較好,在不同的數(shù)據(jù)集上,最好實驗結(jié)果達到準(zhǔn)確率98.6%,召回率98.6%,F1值為98.55%.

Fasttext模型與Word2vec模型相比,更注重詞語內(nèi)部的形態(tài),有助于模型對低頻詞和集外詞更好地表示.由于Fasttext模型需要提取子詞與詞本身的特征,因此隨著語料庫的增加,內(nèi)存需求也不斷增加,嚴(yán)重影響了模型的構(gòu)建速度,從而限制了Fasttext模型在漏洞檢測問題上的應(yīng)用.

2.3 BERT模型在漏洞檢測上的應(yīng)用

Ziems等[41]采用SARD作為數(shù)據(jù)集,通過BERT模型使代碼具有更深層的語義表征,分別使用了LSTM和Bi-LSTM神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練,實驗準(zhǔn)確率為93%.實驗結(jié)果顯示,Bi-LSTM模型的準(zhǔn)確率并沒有在LSTM模型的基礎(chǔ)上有所提升.原因在于BERT是基于雙向Transformer的結(jié)構(gòu),多一層雙向機制并不能提取更有益的信息.目前BERT模型在漏洞檢測方面的應(yīng)用較少.

3 實驗設(shè)計

本文使用手動收集的真實漏洞數(shù)據(jù)集進行實驗,主要包括4個階段: 1) 數(shù)據(jù)預(yù)處理;2) 利用CodeSensor解析器提取源代碼的語法和語義信息,生成對應(yīng)的抽象語法樹;3) 通過預(yù)訓(xùn)練的詞向量模型將序列化的抽象語法樹向量化;4) 使用神經(jīng)網(wǎng)絡(luò)對漏洞表征進行學(xué)習(xí),檢測漏洞函數(shù).實驗設(shè)計的整體框架如圖1所示.

圖1 漏洞檢測整體框架Fig.1 Overall framework of vulnerability detection

圖2 示例代碼Fig.2 Example code

圖3 代碼的抽象語法樹Fig.3 Abstract syntax tree of code

3.1 數(shù)據(jù)預(yù)處理

本文將數(shù)據(jù)集按6∶2∶2的比例劃分為訓(xùn)練集、驗證集和測試集.為從數(shù)據(jù)中去除不必要的噪聲,刪除了函數(shù)中所有的注釋與常見的停用詞,如空格、換行和制表符等.

3.2 生成抽象語法樹

抽象語法樹是常見的代碼表征方式,用于代碼基本結(jié)構(gòu)和語法語義的中間表示.本文將如圖2所示的源代碼輸入到CodeSensor解析器中,經(jīng)過解析輸出如圖3所示對應(yīng)的抽象語法樹.代碼被解析為函數(shù)聲明、代碼塊、語句等不同類型的節(jié)點,其中內(nèi)部節(jié)點表示運算符及節(jié)點類型,葉節(jié)點表示操作符,有向邊表示節(jié)點間的層次關(guān)系.

3.3 向量化

考慮到樹的層次結(jié)構(gòu),本文使用深度優(yōu)先遍歷算法將抽象語法樹中的節(jié)點用文本向量的形式進行表示,向量中元素的順序反映了抽象語法樹中節(jié)點的層次關(guān)系,圖3的抽象語法樹轉(zhuǎn)換為文本向量如下: (main,decl,char,*buf,assign,buf,=,express,(char*),call,malloc,arg,BUFSIZE,if,pred,call,…).

將所得的文本向量通過詞向量模型生成128維向量,作為神經(jīng)網(wǎng)絡(luò)模型的輸入.詞向量轉(zhuǎn)換過程中,本文分別使用Word2vec,Fasttext,GloVe,ELMo和BERT詞向量模型進行實驗,以檢驗?zāi)姆N詞向量模型更適用于漏洞檢測.

3.4 訓(xùn)練及測試

本文分別使用DNN,GRU,LSTM,Bi-GRU,Bi-LSTM和Text-CNN神經(jīng)網(wǎng)絡(luò)模型對數(shù)據(jù)進行訓(xùn)練,根據(jù)訓(xùn)練后的模型結(jié)果不斷調(diào)整迭代次數(shù)、學(xué)習(xí)率、損失函數(shù)和激活函數(shù)等參數(shù),保留效果最好的模型進行測試.在相同實驗條件下,將各詞向量模型結(jié)合神經(jīng)網(wǎng)絡(luò)模型對真實數(shù)據(jù)集中的數(shù)據(jù)進行漏洞檢測,以獲得實驗效果最好的詞向量模型和神經(jīng)網(wǎng)絡(luò)模型.

4 實 驗

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

采用文獻[42]提供的數(shù)據(jù)集,該數(shù)據(jù)集是從NVD網(wǎng)站中手動收集的C語言函數(shù),共包含9個開源項目: Asterisk,FFmpeg,HTTPD,LibPNG,LibTIFF,OpenSSL,Pidgin,VLC Player和Xen.收集函數(shù)數(shù)據(jù)60 768個,其中漏洞函數(shù)1 471個,非漏洞函數(shù)59 297個.本文已將漏洞數(shù)據(jù)集和源代碼開源到GitHub(https://github.com/ithicker/MWEMVD)上.為能獲得準(zhǔn)確的檢測結(jié)果,保證數(shù)據(jù)的均衡性,將9個項目均以6∶2∶2的比例劃分為訓(xùn)練集、驗證集和測試集.

4.2 實驗環(huán)境及參數(shù)配置

實驗在Ubuntu Linux系統(tǒng)上運行,硬件配置為處理器IntelXeon(R) Silver 4210 2.2 GHz,內(nèi)存78 GB,GPU Quadro P2200,硬盤1.3 TB.軟件分別使用Keras 2.2.4,TensorFlow 1.12.0,Keras 2.3.1和TensorFlow 1.15.0.詞向量模型及配置環(huán)境列于表2.

表2 詞向量模型及配置環(huán)境

4.3 結(jié)果處理

為能準(zhǔn)確地衡量神經(jīng)網(wǎng)絡(luò)模型在漏洞檢測上的效果,實驗以精確度和召回率為評估指標(biāo).精確度是指正確預(yù)測為漏洞的函數(shù)占全部預(yù)測正確函數(shù)(漏洞函數(shù)和非漏洞函數(shù)之和)的比例;召回率是指正確預(yù)測為漏洞的函數(shù)占全部漏洞函數(shù)的比例.由數(shù)據(jù)集特征可見,漏洞函數(shù)和非漏洞函數(shù)占比不均衡,非漏洞函數(shù)數(shù)量遠多于漏洞函數(shù)數(shù)量,從而導(dǎo)致無法準(zhǔn)確判斷.為解決該問題,本文對神經(jīng)網(wǎng)絡(luò)模型輸出結(jié)果的權(quán)重(預(yù)測為漏洞函數(shù)的可能性)從高到低排序,求取前k個值(Top-k)計算精確度和召回率,精確度和召回率公式表示如下:

(1)

(2)

其中TP@k表示檢測前k個函數(shù)正確預(yù)測為漏洞的函數(shù)數(shù)量,FP@k表示檢測前k個函數(shù)錯誤預(yù)測為漏洞的函數(shù)數(shù)量,FN@k表示檢測前k個函數(shù)未被預(yù)測為漏洞的函數(shù)數(shù)量.

4.4 結(jié)果分析

對于高級程序設(shè)計語言,代碼漏洞通常是由于多行代碼間存在的邏輯關(guān)系產(chǎn)生的問題,漏洞代碼段與前文或后文的代碼有關(guān),因此上下文信息對代碼漏洞檢測十分重要.函數(shù)級別的代碼通常由多個if-else條件分支語句及for和while等循環(huán)語句構(gòu)成,但條件分支語句和循環(huán)語句代碼塊相對獨立,代碼塊內(nèi)的語句相互之間存在上下文語義關(guān)系,而代碼塊與代碼塊之間雖有關(guān)聯(lián)但并不緊密.表3列出了實驗結(jié)果.

從詞向量方面分析表3的實驗結(jié)果得出如下結(jié)論: Word2vec模型能表征淺層語義關(guān)系,通過滑動窗口處理代碼段能抓住程序的局部特征,應(yīng)用于漏洞檢測總體效果相對較好;Fasttext模型在RNN上實驗效果與Word2vec模型相近,其原因在于兩個模型的原理相似,Fasttext模型更注重單詞內(nèi)部的形式,而代碼更注重單詞之間的語義關(guān)系,因此在DNN與Text-CNN上的實驗效果不如Word2vec模型;Glove模型通過共現(xiàn)矩陣統(tǒng)計單詞共現(xiàn)比率計算詞向量,不僅增加了模型的計算量,且易誤導(dǎo)詞向量的整體訓(xùn)練方向,因此整體效果較差;ELMo模型在循環(huán)神經(jīng)網(wǎng)絡(luò)中實驗效果差異較小,歸因于ELMo是以Bi-LSTM構(gòu)建生成的詞向量模型,雙層循環(huán)神經(jīng)網(wǎng)絡(luò)對漏洞檢測并無太大影響.Word2vec,Fasttext,Glove和ELMo模型在Text-CNN神經(jīng)網(wǎng)絡(luò)上漏洞檢測效果最好.BERT模型能通過上下文抽取代碼特征,在循環(huán)神經(jīng)網(wǎng)絡(luò)上實驗效果較好,由于BERT是雙向Transformer模型,因此其實驗結(jié)果在LSTM和Bi-LSTM神經(jīng)網(wǎng)絡(luò)上無明顯差異,這種現(xiàn)象與文獻[41]中分析得到的結(jié)論相符.由于BERT模型適用于處理長距離依賴關(guān)系的文本,而漏洞檢測需要處理短距離文本代碼塊,因此實驗效果并非最好.

從神經(jīng)網(wǎng)絡(luò)方面分析表3的實驗結(jié)果得出如下結(jié)論: 循環(huán)神經(jīng)網(wǎng)絡(luò)模型能捕捉代碼之間的依賴關(guān)系,因此在代碼漏洞檢測方面效果好于DNN模型,但由于代碼之間并沒有長距離的上下文依賴關(guān)系,因此使用循環(huán)神經(jīng)網(wǎng)絡(luò)并未能取得最好的實驗效果;Text-CNN模型通過卷積層的局部窗口學(xué)習(xí)代碼的局部特征,通過池化層將各代碼塊的局部特征整合形成復(fù)雜抽象的特征,使模型更注重代碼塊內(nèi)的關(guān)系,而不過分關(guān)注代碼塊間的聯(lián)系,因此Text-CNN模型在神經(jīng)網(wǎng)絡(luò)中效果最佳.

表3 實驗結(jié)果

根據(jù)漏洞代碼的特點及實驗結(jié)果綜合分析可知,使用Word2vec作為詞向量模型并結(jié)合Text-CNN模型檢測代碼漏洞的效果最好.

綜上所述,本文在介紹了各詞向量模型的基本原理和詞向量模型在漏洞檢測方面的應(yīng)用后,將各詞向量模型結(jié)合神經(jīng)網(wǎng)絡(luò)模型在相同實驗條件下進行了漏洞檢測,并分析了實驗結(jié)果.對于函數(shù)級別的漏洞,代碼之間存在著上下文關(guān)聯(lián)而代碼塊之間的聯(lián)系并不緊密,因此代碼之間屬于淺層的語義關(guān)系.在5個詞向量模型中,Word2vec模型具有簡單的模型結(jié)構(gòu),對于描述淺層的語義關(guān)系效果相對較好;在6個神經(jīng)網(wǎng)絡(luò)模型中,Text-CNN模型對文本淺層特征的抽取能力強.實驗結(jié)果表明,Word2vec詞向量模型結(jié)合Text-CNN神經(jīng)網(wǎng)絡(luò)檢測代碼漏洞的效果最佳.

猜你喜歡
漏洞代碼語義
漏洞
語言與語義
創(chuàng)世代碼
動漫星空(2018年11期)2018-10-26 02:24:02
創(chuàng)世代碼
動漫星空(2018年2期)2018-10-26 02:11:00
創(chuàng)世代碼
動漫星空(2018年9期)2018-10-26 01:16:48
創(chuàng)世代碼
動漫星空(2018年5期)2018-10-26 01:15:02
三明:“兩票制”堵住加價漏洞
漏洞在哪兒
兒童時代(2016年6期)2016-09-14 04:54:43
“上”與“下”語義的不對稱性及其認知闡釋
高鐵急救應(yīng)補齊三漏洞
家居| 岳阳县| 乐亭县| 即墨市| 若尔盖县| 潍坊市| 搜索| 玛沁县| 信阳市| 临猗县| 若尔盖县| 兖州市| 新乐市| 五莲县| 白河县| 南投市| 江阴市| 闽清县| 洪江市| 马尔康县| 西充县| 黄梅县| 垫江县| 沙洋县| 韶山市| 浦东新区| 高邑县| 乌什县| 思南县| 漳平市| 石林| 济源市| 鄂托克前旗| 榆社县| 安西县| 五家渠市| 永城市| 闻喜县| 辽宁省| 鞍山市| 行唐县|