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