


摘要:針對(duì)軟件漏洞挖掘領(lǐng)域的問題,文章探討了一種基于深度學(xué)習(xí)的漏洞檢測(cè)方法。首先,分析了目前常用的漏洞挖掘方法;其次,研究設(shè)計(jì)了軟件漏洞檢查的總體框架;再次,采用Word2Vec技術(shù)將代碼轉(zhuǎn)換為詞向量序列,對(duì)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型進(jìn)行了訓(xùn)練,從而實(shí)現(xiàn)對(duì)軟件漏洞的自動(dòng)檢測(cè);最后,在TensorFlow框架下構(gòu)建了檢測(cè)模型,并利用NVD數(shù)據(jù)集進(jìn)行了實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,所提方法在準(zhǔn)確率、精確率、召回率和F1-score等指標(biāo)上表現(xiàn)出良好效果。
關(guān)鍵詞:深度學(xué)習(xí);循環(huán)神經(jīng)網(wǎng)絡(luò);詞向量;軟件漏洞
中圖分類號(hào):TP311.5 "文獻(xiàn)標(biāo)志碼:A
0 引言
軟件漏洞作為影響軟件安全的關(guān)鍵因素,可能被惡意利用進(jìn)而導(dǎo)致數(shù)據(jù)泄露、服務(wù)中斷甚至系統(tǒng)崩潰。近年來,隨著網(wǎng)絡(luò)攻擊手段的不斷升級(jí),快速準(zhǔn)確地發(fā)現(xiàn)并修復(fù)軟件漏洞變得尤為重要。因此,研究有效的軟件漏洞挖掘方法具有重要的理論意義和實(shí)際的應(yīng)用價(jià)值[1]。
目前,軟件漏洞挖掘方法主要分為靜態(tài)分析等傳統(tǒng)方法以及基于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的新興方法2大類[2-4]。傳統(tǒng)方法在漏洞挖掘領(lǐng)域已取得一定的效果,但存在分析效率低、誤報(bào)率高以及難以應(yīng)對(duì)復(fù)雜漏洞等問題。隨著人工智能技術(shù)的發(fā)展,基于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的新興方法逐漸被應(yīng)用于軟件漏洞挖掘領(lǐng)域。該類技術(shù)通過對(duì)代碼數(shù)據(jù)進(jìn)行大量學(xué)習(xí),更好地理解了代碼結(jié)構(gòu)和行為,從而提高了漏洞檢測(cè)的準(zhǔn)確性和效率。
基于上述背景,本文的主要內(nèi)容如下:首先,研究了軟件漏洞挖掘的總體框架,明確了漏洞挖掘中的基本流程和關(guān)鍵技術(shù);其次,針對(duì)代碼表征問題,探索了基于詞向量的代碼表征方法;然后,研究了基于循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)的漏洞挖掘方法[5-6];最后,基于Python平臺(tái)設(shè)計(jì)并實(shí)施相關(guān)實(shí)驗(yàn)[7],對(duì)所提方法進(jìn)行測(cè)試以評(píng)估其有效性和適用性。綜上所述,本文通過引入深度學(xué)習(xí)技術(shù)構(gòu)建了一個(gè)高效、準(zhǔn)確的軟件漏洞挖掘體系,為軟件安全性的提升提供了新的思路和手段。
1 漏洞挖掘的總體框架
本文提出的基于深度學(xué)習(xí)的漏洞挖掘技術(shù)總體理論框架如圖1所示。該框架主要包括數(shù)據(jù)預(yù)處理、代碼表征、深度學(xué)習(xí)、分析與優(yōu)化。
數(shù)據(jù)預(yù)處理是漏洞挖掘的基礎(chǔ),其主要任務(wù)是從大量源代碼中提取有用的信息,具體步驟包括代碼收集、代碼清洗、代碼標(biāo)注和特征提取。通過這些步驟,系統(tǒng)確保了輸入數(shù)據(jù)的質(zhì)量和一致性,為后續(xù)的代碼表征和模型訓(xùn)練奠定了基礎(chǔ)。代碼表征能夠?qū)⒃创a轉(zhuǎn)換為深度學(xué)習(xí)模型可處理的形式,本文采用基于詞向量的代碼表征方法,可以將代碼語句或代碼片段表示為高維向量。該方法不僅考慮了代碼的語法結(jié)構(gòu),還能捕捉代碼的語義信息和上下文關(guān)系以提高漏洞檢測(cè)的準(zhǔn)確性。在深度學(xué)習(xí)部分,本文采用RNN模型,通過對(duì)預(yù)處理后的代碼數(shù)據(jù)進(jìn)行訓(xùn)練,該模型可以識(shí)別出代碼漏洞。最后,需要對(duì)深度學(xué)習(xí)模型檢測(cè)出的漏洞進(jìn)行驗(yàn)證,分析誤報(bào)和漏報(bào)情況,以提高模型的實(shí)際應(yīng)用效果。
2 基于詞向量的代碼表征
在對(duì)代碼進(jìn)行檢測(cè)之前,本文使用Word2Vec方法來提取詞向量以表征軟件代碼[8],其核心思想是基于上下文語境將具有相似語義的詞映射到相近的向量空間位置。該方法主要包括2種模型:連續(xù)詞袋(Continuous Bag of Words,CBOW)模型[9],Skip-gram模型[10]。本文主要討論Skip-gram模型。
假設(shè)給定一個(gè)詞序列w1,w2,…,wT,該方法的控制目標(biāo)是使式(1)所示目標(biāo)函數(shù)最大化。
1T∑Tt=1∑-c≤j≤c,j≠0logP(wt+j|wt)(1)
其中,wt表示當(dāng)前詞,wt+j表示窗口大小為c的上下文詞,P(wt+j|wt)表示在給定詞wt條件下預(yù)測(cè)詞wt+j的概率。
為了計(jì)算條件概率P(wt+j|wt),該方法使用Softmax函數(shù)進(jìn)行建模,如式(2)所示。
P(wt+j|wt)=exp(v′wt+jvwt)∑Ww=1exp(v′wvwt)a2+b2(2)
其中,vwt是詞wt的詞向量表示(輸入向量),v′wt+j是詞wt+j的詞向量表示(輸出向量),W是詞匯表大小。
為了提高計(jì)算效率,本文通過負(fù)采樣來近似優(yōu)化目標(biāo)函數(shù)。該方法的基本思想是將多分類問題轉(zhuǎn)化為二分類問題,通過構(gòu)造正樣本和負(fù)樣本來訓(xùn)練模型。具體而言,目標(biāo)函數(shù)可以表示為:
logσ(v′wt+jvwt)+∑ki=1Ewi~Pn(w)logσ(-v′wivwt)(3)
其中,σ(x)=11+exp(-x)是Sigmoid函數(shù);k是負(fù)采樣的數(shù)量;Pn(w)是噪聲分布。
接著,通過隨機(jī)梯度下降法(Stochastic Gradient Descent,SGD)進(jìn)行模型參數(shù)更新。每個(gè)訓(xùn)練樣本的更新規(guī)則如下。
(1)正樣本更新。
vwt←vwt+η1-σ(v′wt+jvwt)v′wt+j(4)
v′wt+j←v′wt+j+η1-σ(v′wt+jvwt)vwt(5)
(2)負(fù)樣本更新。
vwt←vwt-ησ(v′wivwt)v′wi(6)
v′wi←v′wi-ησ(v′wivwt)vwt(7)
其中,η是學(xué)習(xí)率。
通過上述過程,Skip-gram模型能夠?qū)υ~語的低維向量表示進(jìn)行有效學(xué)習(xí),為后續(xù)的漏洞挖掘提供有效支持。
3 基于RNN的漏洞挖掘
當(dāng)使用詞向量訓(xùn)練RNN進(jìn)行軟件漏洞挖掘時(shí),研究人員應(yīng)選擇合適的向量作為輸入。首先,本文將代碼片段按詞語進(jìn)行分詞得到一個(gè)詞語序列,例如:給定一個(gè)代碼片段并按詞語進(jìn)行分詞,從而得到一個(gè)詞語序列,如式(8)所示。
[\"def\",\"add\",\"(\",\"a\",\",\",\"b\",\")\",\":\",\"return\",\"a\",\"+\",\"b\"](8)
然后,本文利用Word2Vec模型,將每個(gè)詞語轉(zhuǎn)換為對(duì)應(yīng)的詞向量。假設(shè)詞向量的維度為d,則每個(gè)詞語wt的詞向量表示為vwt∈瘙綆d。對(duì)于上述代碼片段,可得式(9)所示詞向量序列。
V=[v\"def\",v\"add\",v\"(\",v\"a\",v\",\",v\"b\",v\")\",v\":\",v\"return\",v\"a\",v\"+\",v\"b\"](9)
接著,將詞向量序列作為輸入,逐個(gè)輸入RNN中進(jìn)行訓(xùn)練。RNN在每個(gè)時(shí)間步接受輸入,并更新其內(nèi)部狀態(tài),從而處理任意長(zhǎng)度的輸入序列。若給定詞向量序列V,則RNN在每個(gè)時(shí)間步t更新隱藏狀態(tài)ht為:
ht=σ(Whvwt+Uhht-1+bh)(10)
其中,ht為時(shí)間步t的隱藏狀態(tài)向量,Wh為詞向量到隱藏狀態(tài)的權(quán)重矩陣,Uh為上一隱藏狀態(tài)到當(dāng)前隱藏狀態(tài)的權(quán)重矩陣,bh為偏置向量,σ為激活函數(shù)(例如tanh或ReLU函數(shù))。
RNN的輸出yt通常可以通過一個(gè)線性變換和Softmax函數(shù)來計(jì)算,如式(11)所示。
yt=Softmax(Wyht+by)(11)
其中,Wy為隱藏狀態(tài)到輸出的權(quán)重矩陣,by為輸出層的偏置向量。
綜上所述,軟件漏洞檢測(cè)的任務(wù)目標(biāo)是根據(jù)代碼片段的詞向量序列V預(yù)測(cè)該代碼片段是否包含漏洞,具體步驟如下。
(1)輸入詞向量序列。將代碼片段轉(zhuǎn)換為詞向量序列V,并輸入RNN。
(2)更新隱藏狀態(tài)。RNN在每個(gè)時(shí)間步t,根據(jù)輸入詞向量vwt和前一時(shí)間步的隱藏狀態(tài)ht-1更新當(dāng)前隱藏狀態(tài)ht。
(3)生成輸出。在每個(gè)時(shí)間步t,通過隱藏狀態(tài)ht計(jì)算輸出yt。漏洞檢測(cè)任務(wù)在最后一個(gè)時(shí)間步T使用最終的隱藏狀態(tài)hT來進(jìn)行分類或預(yù)測(cè)。
(4)計(jì)算損失函數(shù)。通過損失函數(shù)來衡量預(yù)測(cè)結(jié)果與實(shí)際標(biāo)簽之間的差異。假設(shè)真實(shí)標(biāo)簽為y^,則損失函數(shù)L可表示為:
L=-∑Ci=1y^ilog(yi)(12)
其中,C為類別數(shù)量,y^i為第i類的真實(shí)標(biāo)簽,yi為第i的預(yù)測(cè)概率。
(5)反向傳播與參數(shù)更新。通過反向傳播算法計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度,并使用優(yōu)化算法更新模型參數(shù)。具體而言,對(duì)于每個(gè)參數(shù)θ,更新方法為:
θ←θ-ηLθ(13)
通過上述過程,RNN能夠從代碼的詞向量序列中學(xué)習(xí)到代碼結(jié)構(gòu)和語義信息,并在此基礎(chǔ)上進(jìn)行軟件漏洞檢測(cè)。
4 實(shí)驗(yàn)設(shè)計(jì)
4.1 數(shù)據(jù)集與實(shí)驗(yàn)方案
國(guó)家漏洞數(shù)據(jù)庫(kù)(National Vulnerability Database,NVD)是美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(National Institute of Standards and Technology,NIST)維護(hù)的一個(gè)公共數(shù)據(jù)庫(kù),旨在收集和描述已公開的軟件漏洞信息。研究者通常采用NVD數(shù)據(jù)集來評(píng)估漏洞挖掘和檢測(cè)方法的效果。
為了評(píng)估基于TensorFlow深度學(xué)習(xí)框架構(gòu)建的漏洞檢測(cè)模型,本文設(shè)計(jì)如下的試驗(yàn)方案。
(1)數(shù)據(jù)準(zhǔn)備:對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理,包括數(shù)據(jù)清洗、特征提取和標(biāo)簽標(biāo)注等。本實(shí)驗(yàn)采用二分類標(biāo)簽1和0,1表示漏洞存在,0表示不存在。
(2)模型構(gòu)建:基于TensorFlow選擇RNN用于漏洞檢測(cè)任務(wù),并構(gòu)建詞嵌入層、循環(huán)神經(jīng)網(wǎng)絡(luò)層和輸出層。
(3)模型訓(xùn)練與優(yōu)化:選擇交叉熵?fù)p失函數(shù)來衡量預(yù)測(cè)結(jié)果與真實(shí)標(biāo)簽之間的差異,使用Adam優(yōu)化器最小化損失函數(shù)并更新模型參數(shù)。
(4)模型評(píng)估:使用評(píng)估指標(biāo)(如準(zhǔn)確率(Accuracy)、精確率(Precision)、召回率(Recall)和F1-score等)評(píng)估模型在測(cè)試集上的性能表現(xiàn)。
(5)實(shí)驗(yàn)結(jié)果分析:對(duì)模型預(yù)測(cè)中的誤報(bào)和漏報(bào)情況進(jìn)行深入分析,探討改進(jìn)模型的可能途徑。
4.2 實(shí)驗(yàn)結(jié)果
上述實(shí)驗(yàn)的檢測(cè)結(jié)果如表1所示。
在實(shí)驗(yàn)中,模型的準(zhǔn)確率和F1-score指標(biāo)較高,分別達(dá)到了0.85和0.84,這說明模型在整體預(yù)測(cè)的準(zhǔn)確性和綜合評(píng)估能力上均較高。精確率為0.82表明模型在預(yù)測(cè)為漏洞的樣本中,能夠較為準(zhǔn)確地捕捉真正的漏洞。召回率為0.86表明對(duì)于實(shí)際存在的漏洞,模型能夠較為全面地進(jìn)行檢測(cè),減少漏報(bào)的可能性。從準(zhǔn)確率和F1-score來看,當(dāng)在綜合評(píng)估漏洞檢測(cè)效果時(shí)模型表現(xiàn)穩(wěn)定,能夠較好地平衡精確率和召回率之間的關(guān)系。這意味著模型在實(shí)際應(yīng)用中具有較高的可靠性,能夠有效地識(shí)別軟件代碼中的潛在漏洞。
5 分析與討論
本文所提基于深度學(xué)習(xí)的軟件漏洞挖掘方法在理論和實(shí)證方面均取得了一定的進(jìn)展和成果。通過詞向量的研究和RNN模型的應(yīng)用,該方法在實(shí)驗(yàn)中展現(xiàn)出顯著的性能優(yōu)勢(shì)。
首先,本文采用Word2Vec技術(shù)將軟件代碼轉(zhuǎn)化為詞向量序列,這一步驟對(duì)代碼的語義信息進(jìn)行了有效的編碼和表示。詞向量能夠捕捉代碼中標(biāo)識(shí)符、關(guān)鍵字和操作符等元素的語義關(guān)聯(lián),使模型能夠更加準(zhǔn)確地理解和分析代碼的結(jié)構(gòu)和功能。這為后續(xù)的漏洞檢測(cè)任務(wù)提供了堅(jiān)實(shí)的基礎(chǔ),使模型能夠在更高層次上理解和推斷代碼中的潛在安全隱患。
其次,本文選擇了RNN作為主要的深度學(xué)習(xí)模型來處理詞向量序列并進(jìn)行漏洞檢測(cè)。RNN通過其循環(huán)結(jié)構(gòu)和隱狀態(tài),能夠有效地捕捉代碼序列中的時(shí)間依賴性和上下文信息。這種能力使得模型在檢測(cè)漏洞時(shí)不僅能夠考慮當(dāng)前的代碼片段,還能夠綜合考慮代碼的歷史信息,從而提高了漏洞檢測(cè)的全面性和準(zhǔn)確性。
在實(shí)驗(yàn)驗(yàn)證方面,本文采用了NVD數(shù)據(jù)集進(jìn)行了測(cè)試,并使用了準(zhǔn)確率、精確率、召回率和F1-score指標(biāo)來評(píng)估模型的性能。實(shí)驗(yàn)結(jié)果顯示,所提方法在各項(xiàng)指標(biāo)上均表現(xiàn)出顯著優(yōu)勢(shì),證明了其在真實(shí)漏洞數(shù)據(jù)上的有效性和可靠性。特別是在處理大規(guī)模軟件代碼和復(fù)雜漏洞模式時(shí),模型能夠有效地提升漏洞檢測(cè)的效率,為軟件安全提供了重要的技術(shù)支持。
然而,盡管取得了積極的成果,本文仍然面臨一些挑戰(zhàn)。例如,模型在處理代碼語義理解的深度和廣度上仍有進(jìn)一步提升的可能性,可以考慮引入更多領(lǐng)域知識(shí)或者更復(fù)雜的模型結(jié)構(gòu)來增強(qiáng)其表達(dá)能力。此外,對(duì)于稀有漏洞或者特定應(yīng)用場(chǎng)景下的適應(yīng)性,模型的泛化能力和可擴(kuò)展性也需要進(jìn)一步探索和優(yōu)化。
6 結(jié)語
本文深入探討了基于深度學(xué)習(xí)軟件漏洞挖掘方法的關(guān)鍵技術(shù)和應(yīng)用方法。首先,通過詞向量表示技術(shù)有效地捕捉了代碼的語義信息,為后續(xù)的漏洞檢測(cè)奠定了基礎(chǔ);其次,采用RNN模型處理代碼序列,該模型不僅考慮了代碼的結(jié)構(gòu)特征,還能夠充分利用上下文信息來提高漏洞檢測(cè)的全面性和準(zhǔn)確性;最后,實(shí)驗(yàn)結(jié)果驗(yàn)證了所提方法的有效性,展示了在現(xiàn)實(shí)應(yīng)用場(chǎng)景中的潛力和優(yōu)勢(shì)。未來研究可進(jìn)一步探索更加復(fù)雜的深度學(xué)習(xí)模型和優(yōu)化策略,以進(jìn)一步提升漏洞檢測(cè)效果和應(yīng)對(duì)復(fù)雜漏洞形式的能力。
參考文獻(xiàn)
[1]陸余良,于璐,趙家振.軟件漏洞智能化挖掘技術(shù)研究進(jìn)展[J].信息對(duì)抗技術(shù),2023(2):1-19.
[2]王洪義,沙樂天.基于靜態(tài)分析和模糊測(cè)試的路由器漏洞檢測(cè)方法[J].信息安全研究,2024(1):40-47.
[3]董健,馮瑩瑩.改進(jìn)機(jī)器學(xué)習(xí)的軟件多類漏洞并行挖掘分析[J].計(jì)算機(jī)仿真,2022(10):386-390.
[4]李妍,羌衛(wèi)中,李珍,等.基于程序過程間語義優(yōu)化的深度學(xué)習(xí)漏洞檢測(cè)方法[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào),2023(6):86-101.
[5]劉明珠,高麗婷,李倩蕓.基于代碼壓縮和循環(huán)神經(jīng)網(wǎng)絡(luò)的惡意代碼檢測(cè)方法研究[J].河北建筑工程學(xué)院學(xué)報(bào),2023(4):246-251.
[6]楊麗,吳雨茜,王俊麗,等.循環(huán)神經(jīng)網(wǎng)絡(luò)研究綜述[J].計(jì)算機(jī)應(yīng)用,2018(增刊2):1-6,26.
[7]韓慶生.TensorFlow與Pytorch環(huán)境的搭建[J].計(jì)算機(jī)產(chǎn)品與流通,2020(5):124.
[8]席寧麗,朱麗佳,王錄通,等.一種Word2vec構(gòu)建詞向量模型的實(shí)現(xiàn)方法[J].電腦與信息技術(shù),2023(1):43-46.
[9]姜霖,王東波.采用連續(xù)詞袋模型(CBOW)的領(lǐng)域術(shù)語自動(dòng)抽取研究[J].現(xiàn)代圖書情報(bào)技術(shù),2016(2):9-15.
[10]夏家莉,曹中華,彭文忠,等.Skip-Gram結(jié)構(gòu)和詞嵌入特性的文本主題建模[J].小型微型計(jì)算機(jī)系統(tǒng),2020(7):1400-1405.
(編輯 沈 強(qiáng)編輯)
Software vulnerability mining method based on deep learning
XU" Shenglin
(China Pharmaceutical University, Nanjing 211198, China)
Abstract: Aiming at the problem of software vulnerability mining, this paper discusses a vulnerability detection method based on deep learning. First of all, this paper analyzes the commonly used vulnerability mining methods. Secondly, this research designs the overall framework of software vulnerability detection. Then, this research uses Word2Vec technology to convert the code into word vector sequence, the recurrent neural network (RNN) model is trained to automatically detect software vulnerabilities. Finally, the detection model is built under the TensorFlow framework, and the NVD data set is used to verify in the experiments. The experimental results show that the proposed method performs well in accuracy, accuracy, recall and F1-score.
Key words: deep learning; recurrent neural network; word vector; software vulnerability