






















摘 要:漏洞報告在網絡安全中發揮著重要作用,大量且不斷增加的漏洞對漏洞分類的效率和準確性提出了巨大挑戰。為了緩解漏洞分類深度學習模型無法關注重要特征和容易陷入過擬合的問題,提出了一種新穎的基于雙注意力機制和改進對抗訓練的漏洞分類方法。首先,提出TextCNN-DA(text convolutional neural network with double attention) 模型,將空間注意力和通道注意力機制與 TextCNN 結合,以更好地關注到重要特征。然后,提出SWV-FGM (single word vector-fast gradient method) 算法,對模型進行對抗訓練,進而提高模型的魯棒性和泛化性。在漏洞數據集上與其他基線算法進行了對比,并且對不同漏洞類型數據的表現進行了具體分析,該方法在accuracy、macro-F1等多項指標上都有更良好的表現,能夠更好地完成漏洞分類任務。
關鍵詞:網絡安全; 漏洞分類; 注意力機制; 對抗訓練
中圖分類號:TP319 文獻標志碼:A
文章編號:1001-3695(2024)11-036-3447-08
doi: 10.19734/j.issn.1001-3695.2024.01.0061
Vulnerability classification method based on double-attention mechanism and adversarial training
Yang Jinneng1, Li Wenshan1, 2, He Junjiang1, Zhou Shaohong1, Li Tao1, Wang Yunpeng1, 3?
(1.School of Cyber Science amp; Engineering, Sichuan University, Chengdu 610207, China; 2. School of Cyber Science amp; Engineering, Chengdu University of Information Technology, Chengdu 610225, China; 3. Smart Rongcheng Operation Center, Xindu District, Chengdu 610095, China)
Abstract:Vulnerability reports play a pivotal role in cybersecurity, and the ever-growing number of vulnerabilities challenges the efficiency and accuracy of vulnerability classification. To alleviate issues with deep learning models in vulnerability classification, which often fail to focus on significant features and are prone to overfitting, this paper introduced a novel vulnerability classification approach based on a double attention mechanism and improved adversarial training. Firstly, this paper proposed the TextCNN-DA model, which augmented the conventional TextCNN with spatial and channel attention mechanisms to enhance focus on pertinent features. Furthermore, this paper introduced the SWV-FGM algorithm for adversarial training to increase the robustness and generalization of the model. Comparative analysis with other baseline algorithms on a vulnerability dataset, and specific performance evaluation across different vulnerability types, show that the proposed method outperforms in several key metrics such as accuracy and macro-F1, effectively advancing vulnerability classification tasks.
Key words:cyber security; vulnerability classification; attention mechanism; adversarial training
0 引言
當前,計算機和網絡系統中的安全漏洞對個人、組織和國家網絡安全構成嚴重威脅。CVE (common vulnerabilities and exposures) 提供了一個唯一識別的公開已知網絡安全漏洞列表,被廣泛應用于網絡安全產品和服務中。其中,在軟件開發生命周期中為避免漏洞的產生,需要從大量不同類型的CVE中準確識別和了解漏洞類型。因此,快速準確地識別和了解漏洞類型對于軟件開發人員、集成商和用戶至關重要。
CWE (common weakness enumeration) 是一種對軟件弱點或漏洞進行分類的行業標準。每個弱點都被分配了一個唯一的字母數字標識符,稱為CWE ID。將現有和新發現的漏洞映射為CWE是快速理解和減輕漏洞影響的重要方法。通過用相應的CWE ID標記漏洞報告(例如CVE條目),可以很容易地識別漏洞的類型。然而,目前為漏洞報告分配CWE ID基本上是人工任務,需要花費大量人力,且存在可擴展性較差、質量難以保證的問題。根據NVD (national vulnerability database)的統計,2013年報告了5 187個條目,2023年增加到28 963個,如圖1所示。面對不斷增加的漏洞報告數量,人工標注會變得越來越不現實;另外,為正確分配CWE ID,必須要由熟悉每個弱點描述的安全專業人員來進行標注,標注成本太高。因此,亟需一種將CWE ID自動分配給漏洞報告的方法。
隨著網絡安全威脅的不斷增加,利用機器學習技術對漏洞進行高效、準確的分類成為了研究重點。盡管傳統的機器學習算法為漏洞分類提供了初步解決方案,但面對數據的高維度和復雜性,它們逐漸顯示出局限性。深度學習技術因能應對這些挑戰而獲得關注,并顯示出在自動漏洞分類任務中相比傳統算法的顯著優勢。
盡管深度學習已經在漏洞分類領域有了很多研究,但現有研究依舊存在許多不足。一方面,其缺乏關注重要特征的能力;另一方面,模型的泛化性較差。為了解決這些問題,本文提出一種基于雙注意力機制和對抗訓練的漏洞分類框架。首先,本文對漏洞文本數據進行數據預處理,并利用word2vec模型得到初始詞嵌入;然后,本文將空間注意力機制和通道注意力機制引入TextCNN模型,提出 TextCNN-DA (TextCNN with double attention) 模型,該模型可以對輸入特征分別在空間維度和通道維度上進行注意力計算,更好關注到兩個維度上的重要特征,從而增強漏洞分類效果;最后,本文提出SWV-FGM (single word vector-FGM) 算法,該方法根據每一次反向傳播的梯度信息,以單個詞向量為基本單位來生成擾動數據,對模型進行對抗訓練,迫使模型在不同類別之間尋找更具有區分性的決策邊界,增強了模型的泛化性。實驗結果證明了該方法的有效性。本文的主要貢獻如下:a)提出將空間注意力機制和通道注意力機制引入TextCNN模型,使模型能更好地關注到重要特征,增強漏洞分類效果;b)提出改進對抗樣本生成算法SWV-FGM,該算法對FGM算法進行改進,使其更適合漏洞文本分類任務,增強了模型的泛化性;c)在收集的漏洞文本數據集上評估了該方法的有效性。實驗結果表明,該方法在macro-F1度量為86.54%,優于其他分類算法。
1 相關工作
為了實現漏洞報告的自動分類,研究人員首先利用機器學習算法進行研究。Neuhaus等人[1]研究CVE數據庫的漏洞報告,使用LDA主題模型來半自動地找到普遍的漏洞類型和新趨勢。Wijayasekara等人[2]提出了一種基于文本挖掘Bug數據庫來識別隱藏影響Bug的方法。文本挖掘過程提取錯誤報告的句法信息,壓縮后生成特征向量送入機器學習分類器。Na等人[3]使用樸素貝葉斯分類器將CVE條目分類到對應漏洞類型。Davari等人[4]提出一個使用隨機森林等機器學習方法的漏洞自動分類框架。Yang等人[5]將模糊熵用于脆弱性特征選擇,用TF-IDF確定特征權重,用改進的粒子群優化算法優化支持向量機的參數,提高了分類精度,縮短了分類時間。Chen等人[6]提出了一種基于詞頻-逆重力矩陣TF-IGM和特征選擇的漏洞嚴重性分類框架。Aota等人[7]選取19個弱點作為目標,利用機器學習方法對弱點進行分類,最終得出Boruta用于特征提取和隨機森林用于分類器的分類性能最好。文獻[8]結合文本分析和XGBoost等樹模型自動對漏洞進行分類。Russo等人[9]提出了CVErizer,自動生成每日發布漏洞摘要并進行分類,實驗利用了不同的機器學習方法,其中表現最好的是貝葉斯網絡。Terdchanakul等人[10]提出了一種基于n-gram IDF的漏洞報告分類方法,該方法利用n-gram IDF和主題建模的特征構建邏輯回歸和隨機森林的分類模型。文獻[11]使用三種特征,應用監督和非監督方法將軟件漏洞報告自動分類為安全和非安全相關。
隨著漏洞描述的復雜性和對應的弱點數量的增加,傳統的機器學習方法已經難以滿足需求。近年來,深度學習迅速發展,深度學習在文本分類中具有自動特征提取、學習長期依賴關系的能力和強語義表示等優點。因此,大量研究提出了基于深度學習的漏洞分類方法。Aghaei等人[12]利用TF-IDF對文本進行向量化,并使用單層神經網絡進行多標簽分層分類,將漏洞分類為弱點類別。Huang 等人[13]將詞向量模型與神經網絡相結合,證明了神經網絡在 NVD 數據集上的分類性能優于傳統機器學習分類器。Nakagawa 等人[14]使用特征級別 CNN 預測漏洞的嚴重程度。Sharma等人[15]使用單詞嵌入和CNN來評估軟件漏洞的嚴重性,數據集包括Linux、微軟、谷歌和混合供應商的漏洞。Das等人[16]基于Transformer的V2W-BERT,將CVE和CWE嵌入到同一空間,通過鏈接預測相互映射,對于頻繁出現的CVE得到了不錯的分類效果。Vishnu等人[17]提出使用自注意力深度神經網絡對CVE漏洞進行分類,并使用潛在狄利克雷分配 (LDA) 方法進行主題建模,以發現數據集中各種 CVE 類別的主題趨勢,實驗結果顯示該方法優于其他深度學習方法。Wang等人[18]提出基于加權詞向量和融合神經網絡的自動漏洞分類算法。通過改進TF-IDF算法并與word2vec模型相結合,生成加權單詞嵌入向量,并構建TCNN-BiGRU模型,以進一步自動提取漏洞描述的特征并實現漏洞分類。Dong等人[19]提出DeKeDVer,利用TextRCNN和代碼屬性圖對漏洞描述文本和源代碼進行漏洞分類。
2 基于雙注意力機制和改進對抗訓練的分類方法
為了解決當前漏洞分類面臨的挑戰,本文提出了一種基于雙注意力機制和對抗訓練的漏洞分類方法,如圖2所示。首先,本文從NVD中收集了漏洞文本數據,包括漏洞描述、對應的CVE ID和CWE ID,并進行文本預處理清洗文本,通過word2vec模型得到詞嵌入。然后,過濾的文本信息被送入本文TextCNN-DA模型來進行漏洞分類任務,輸出預測的CWE ID。最后,為了增強模型的魯棒性和泛化性,本文利用提出的SWV-FGM算法使用對抗訓練進一步提升模型效果,使生成的對抗樣本更符合文本數據的特點。
2.1 漏洞文本預處理
在這個階段,本文對漏洞描述文本數據進行預處理,以使文本數據足夠干凈。本文的預處理工作具體步驟如下:
a)大小寫轉換。將所有大寫轉換為小寫,消除大小寫產生的差異。
b)去除特殊符號。刪除文本中的特殊符號、標點符號和HTML標簽等。本文會將像“7.3.5”這種表示版本信息的文本形式保留。
c)刪除停用詞。刪除文本中通常被忽略的單詞,因為這些單詞通常不會改變文本的意義,例如:“the”“and”和“in”等。
d)處理縮寫詞。本文會將縮寫詞后面的縮寫刪除,例如:“it’s”變為“it”,這是因為大多數的縮寫都屬于停用詞。
e)詞干化。本文將單詞后綴去除,保留核心部分。例如,將詞匯“jumps”和“jumping”轉換為“jump”。
f)詞性還原。將一些單詞還原成基本形式,即詞元。例如,“best”“better”還原成“good”。
本文經過文本數據預處理后的漏洞數據如表1所示。
2.2 TextCNN-DA 模型
為解決傳統漏洞分類模型缺乏關注文本重要特征的能力導致分類效果不佳的問題,本文提出了基于雙注意力機制的TextCNN-DA模型。由于漏洞數據集是一種領域特定的短文本數據,往往根據文本中的幾個關鍵詞就可以確定漏洞所屬類別,而TextCNN是一種將卷積網絡應用到文本領域的典型代表,具有很強的局部特征捕捉能力,非常適合領域性短文本數據集,因此本文選擇TextCNN模型作為基本模型。傳統TextCNN模型的缺陷在于會將每個通道的特征和單個通道上的特征都視為同等重要的特征信息,導致模型不能關注到重要特征?;诖藛栴},本文將空間注意力機制和時間注意力機制引入到了TextCNN模型中,改進后的TextCNN-DA模型不僅可以在空間域中更加重視關鍵詞的特征,而且在通道域上更加關注重要的通道特征。
2.2.1 空間注意力機制
空間注意力機制主要在空間維度進行注意力計算。不是圖像中的所有區域對任務的貢獻都是同樣重要的,只有任務相關的區域才是需要關心的,空間注意力模型就是尋找網絡中最重要的部位進行處理。將其應用到文本分類任務中,相當于從整個文本中選擇重要的詞匯??臻g注意力機制原理如圖3所示,其中展示了空間注意力機制根據特征信息生成空間注意力權重矩陣的過程。
在圖3中,輸入的文本矩陣形狀為(c, h, 1),其中通道數為 c,文本長度為 h,詞向量維度為 1,將矩陣在通道維度分別進行最大池化和平均池化, 得到兩個(1, h, 1)的矩陣,以此獲取到關鍵特征和特征變化趨勢,然后在通道維度上進行矩陣連接,保留兩種特征信息,形成(2, h, 1)的矩陣A。為了保證卷積后矩陣維度保持不變,將矩陣A進行填充得到矩陣B,隨后進行卷積得到矩陣C。最后經過一個sigmoid層得到最終的空間注意力權重矩陣。
在本文的TextCNN-DA模型中,空間注意力機制扮演了決定一句話中每個詞語重要性的角色。模型利用它來識別并強調輸入文本的那些對分類任務貢獻最大的部分。具體地,輸入的文本矩陣形狀為(c, h, 1),其中通道數為 c,文本長度為 h,詞向量維度為 1,輸出為形狀為 (1,h,1) 的空間注意力權重矩陣,該矩陣會與輸入矩陣相乘,附加權值到輸入文本矩陣中,從而突出那些對分類貢獻程度最高的部分。例如,在處理一個包含“sql”和“injection”的文本矩陣時,空間注意力機制允許模型重點關注這些關鍵詞的表示。這個過程如圖4所示,其中包含了從識別關鍵特征到生成空間注意力權重,再到如何賦予這些權重來突出重點區域的詳細步驟。具體流程如下:
a)形為(6, 5)的文本矩陣代表的是文本“sql injection is a common vulnerability”的文本特征圖,文本中的“sql” 和“injection”是具有區分文本類別能力的關鍵詞,其中“sql” 的詞向量為[0.1, 0, 0, 0, 0],“injection”的詞向量為[0.2, 0, 0, 0, 0],相較于其他非關鍵詞,關鍵詞的重要性沒有在初始的文本矩陣中得到體現。
b)初始的文本矩陣經過卷積之后,生成了(4, 1)的文本矩陣A,在矩陣A中可以看到1號特征同時包含了“sql”和“injection”兩個關鍵詞,2號特征包含了“injection”關鍵詞,但兩個特征的權值都低于其他非關鍵詞組成的特征。
c)空間注意力矩陣B擁有和矩陣A相同的形狀,為了讓模型可以關注到重要的詞匯,矩陣B為1號和2號特征賦予更高的權值。
d)將矩陣A和B逐元素相乘之后,得到了具有空間注意力的矩陣C,此時的1號和2號位的特征值高于其他非關鍵詞組成的特征,使得模型在后續的分類任務中,可以關注到重要詞匯的信息。
2.2.2 通道注意力機制
基于通道的注意力機制通過建模各個特征通道的重要程度,然后針對不同的任務增強或者抑制不同的通道。通道注意力機制原理如圖5所示,其中展示了通道注意力根據特征信息生成通道注意力權重矩陣的過程。
輸入形狀為(c, h, 1)的特征矩陣。將矩陣在空間維度上分別進行最大池化和平均池化操作, 得到兩個(c, 1, 1)的矩陣,以此獲取到關鍵特征和特征變化趨勢,并進行矩陣變換形成兩個(1, c)的矩陣,然后進行矩陣相加保留兩種特征信息,得到矩陣A。為了讓卷積后的矩陣可以保持維度不變,在矩陣A的基礎上進行填充得到矩陣B。將矩陣B送入到卷積層進行卷積得到矩陣C,通過 sigmoid 層后得到矩陣D,最后將矩陣D進行矩陣變換,得到最終的通道注意力權重矩陣。
通道注意力機制能衡量各個特征通道的重要程度,本文使用通道注意力機制讓模型關注具有良好區分漏洞類別能力的通道特征。輸入的文本矩陣形狀為(c, h, 1),其中通道數為 c,文本長度為 h,詞向量維度為 1,輸出為形狀為 (c,1,1) 的通道注意力權重矩陣,該矩陣用于附加權值到文本矩陣中。
例如,在處理一個包含“sql”和“injection”的文本矩陣時,通道注意力機制允許模型重點關注關鍵特征通道的表示。具體過程如圖6所示, 為了方便表示,圖中對向量的數值進行了簡化。
具體流程如下:
a)形為(6, 5)的文本矩陣代表的文本是“sql injection is a common vulnerability”的文本特征圖。文本中的“sql”和“injection”是具有良好區分文本類別能力的關鍵詞,其中“sql”的詞向量為[0.4, 0, 0, 0, 0],“injection”的詞向量為[0.3, 0, 0, 0, 0]。
b)初始的文本矩陣送入到3個不同的卷積核后,生成具有三個通道數的文本矩陣D,三個通道的特征圖分別用A、B、C表示,三個特征圖的1號特征包含了“sql”和“injection”兩個關鍵詞的信息,2號特征包含了“injection”關鍵詞的信息。
c)通過分析發現,通道B的1號和2號特征值在整個矩陣中占比最高,分別為0.333和0.256,通道A的1號特征值占比為0.321,高于通道C中的占比。因此認為通道B具有最好的文本類別區分能力,其次為通道A。
d)根據每個通道的重要性,通道注意力權重矩陣為每個通道附加不同的權值,最終得到經過加權的文本矩陣D′,其中通道B′的權值最高,通道A′的權值其次,通道C′的權值最小。使得模型可以更加重視通道B′的信息。
為了根據文本矩陣的通道數來確定通道注意力模塊中一維卷積層的卷積核大小,本文采用ECA注意力機制中的自適應函數來計算每次卷積大小,該函數如式(1)所示。
k=|log2cγ+bγ|(1)
其中:γ為2;b為1;當k不為奇數時,k的值加1。
2.2.3 雙注意力機制
最終融合了空間注意力機制 (SA)和通道注意力機制 (CA) 的 TextCNN-DA 模型如圖7所示。假設輸入文本矩陣形狀為(7×3),處理流程如下:
a)將形為(1, 7, 3)的單通道文本矩陣送入到TextCNN-DA網絡中。
b)文本矩陣經過不同的卷積層進行卷積,生成形為(2, 5, 1)和(2, 4, 1)的矩陣。
c)將不同卷積層生成的矩陣送入到不同的空間注意力模塊中,這一步相當于選擇具有關鍵詞信息的特征。
d)將空間注意力模塊輸出的形為(2, 5, 1)和(2, 4, 1)的矩陣,送入到共享的通道注意力模塊中,這一步相當于確定什么樣的特征組合更能區分文本類別。
e)最后將通道注意力模塊輸出的形為(2, 5, 1)和(2, 4, 1)的矩陣,經過池化層和向量連接之后,組合成新的向量,送入后續的全連接層。
2.3 SWV-FGM算法
為解決傳統漏洞分類方法容易過擬合和泛化性不好的問題,進一步提升模型效果,本文提出了改進對抗樣本生成算法SWV-FGM。
對抗樣本生成算法就是利用對抗訓練來緩解模型的過擬合和泛化性問題。對抗訓練的核心在于將經過精心構造的對抗樣本納入訓練集中,從而迫使模型學習到更為一般化和健壯的數據特征表示。文獻[20]對此提供了直觀的闡述,如圖8所示。圖8(a)展示的是模型學習到的基于原始訓練數據的決策邊界。可以觀察到,部分數據點緊鄰這一邊界,這導致模型在遇到新的或邊緣樣本時更易出錯。這些接近邊界的數據表示模型對于所學習的知識過于自信,產生過擬合現象,沒有足夠的邊緣區域來應對新樣本的波動。圖8(b)進一步描繪了每個數據點的變化區域,用方框來表示。當數據在這些方框內發生微小變動時,如果模型的泛化能力不足,可能導致錯誤的預測。圖中的星號示例顯示了模型的原始決策邊界錯誤地將本應屬于綠色類別的數據劃分為黃色類別(詳見電子版)。最終,圖8(c)展示了采用對抗訓練后的效果。在訓練過程中加入這些方框內的對抗樣本,迫使模型去重新調整和優化其決策邊界。通過這種方式,模型不僅學習了原始數據的模式,也涵蓋了潛在的數據變化,從而具備更好的泛化能力,最終能夠更準確地區分不同的數據類別。
一個經典的對抗樣本生成算法是FGM(fast gradient method),其原理是在模型訓練過程中,通過計算輸入樣本的梯度信息,然后在梯度方向上對輸入樣本進行微小的擾動。公式如下:
其中:x 表示原始的樣本數據;xadv表示添加擾動后樣本;ε 是人為設置的一個值來保證產生的擾動在一個很小范圍內; xJ(θ,x,y) 表示J(θ,x,y)損失值對x求偏導。計算擾動時使用L2范數對全局梯度數值進行了歸一化,這樣既保留了原始梯度的特征,也控制了擾動的大小。
為了解決模型在處理漏洞分類任務時可能出現的過擬合問題及泛化能力有限的挑戰,本文SWV-FGM通過專門設計的對抗樣本生成流程增強模型的魯棒性。與傳統的FGM相比,SWV-FGM考慮到單個詞向量的梯度信息,對每個詞產生針對性的擾動,而不是使用全局標量。這種針對單個詞向量的梯度信息處理允許模型在學習過程中考慮到詞匯層面的變化,可以更有效地捕獲文本數據的細微差異,從而降低過擬合風險且提升模型在未知數據上的泛化能力。本文SWV-FGM如式(3) 所示,與式(2)相比,后半部分不是對全局梯度歸一化,而是對單個詞向量梯度歸一化,θ 是可調參數,作用是防止某個詞向量梯度為0,可以根據不同數據集進行調整。該算法的框架如圖9所示,完整對抗訓練流程如算法1所示,具體解釋如下:
a)圖中第1步是第一次前向傳播過程和反向傳播過程。得到模型輸出的embedding層A并計算損失獲取梯度矩陣B,對應算法2~6行;
b)圖中第2步是對embedding層A進行備份,得到備份矩陣A′,對應于算法8行。備份矩陣A′用于后續梯度更新前,將embedding層A中的參數恢復成原始狀態,再進行梯度更新;
c)圖中第3步是梯度矩陣B以每一行向量為單位進行L2范數運算,得到范數梯度C,對應于算法9行;
d)圖中第4步是范數梯度C與一個可調參數 θ 相加,得到范數梯度D,對應于算法10行;
e)圖中第5步是梯度矩陣B和范數梯度D每一行分別進行向量相除,得到歸一化的擾動矩陣E,對應于算法11行;
f)圖中第6步是擾動矩陣E和原始的embedding層矩陣A相加,得到添加了擾動的embedding層,對應于算法12行;
g)繼續后面的第二次前向傳播和反向傳播,對應于算法13~15行。
h)然后先將模型參數恢復到添加對抗樣本之前,再在原始參數上更新梯度信息,對應于算法17、18行。
算法1 SWV-FGM對抗訓練流程
輸入:訓練數據train_data;總輪數epoch;當前輪數time;模型model;可調參數θ。
輸出:模型model。
1 while time lt; epoch do:
2 for trains, labels in train_data:
3 model.zero_grad() // 梯度清零
4 outputs← model(trains)
5 loss← 損失計算(outputs, labels)
6 loss.backward() //反向傳播
7 /* 對抗樣本生成模塊 */
8 backup← model.param.clone() //備份原始參數
9 c← L2(model.grad, dim=1) //L2范數計算
10 c← c + θ
11 radv ← model.grad / c
//生成擾動
12 model.param ← model.param + radv
13 outputs← model(trains)
14 loss_adv ← 損失計算(outputs, labels)
15 loss_adv.backward()
16 /* 對抗樣本恢復模塊 */
17 model.param ← backup //恢復參數
18 梯度更新(model, loss_adv)
19
time← time + 1
20 end while
21 return model
3 實驗與分析
3.1 數據集
本文在 NVD 網站收集了 70 819 條漏洞數據,每條漏洞數據集的組成包括漏洞文本描述、CVE 編號和 CWE 編號。其中漏洞文本描述介紹了該漏洞的相關信息,例如漏洞類型、軟件版本、系統版本和利用方式等。CWE 編號表示漏洞所屬類型,CVE 編號用于唯一表示某個漏洞。
本文以 CWE 編號作為標簽信息,以漏洞文本描述作為文本訓練數據來構建漏洞環境分類器。本文收集的漏洞數據一共包含 17 種漏洞類型,具體信息如表2所示。
每種漏洞類型的數量分布如圖10所示。本文以7∶1.5∶1.5的比例分為訓練集、驗證集和測試集,具體信息如表3所示。
3.2 實驗設置
3.2.1 評價標準
因為本實驗是多類別的分類任務,所以本文采用accuracy、macro-precision、macro-recall和macro-F1指標來評估模型表現。
3.2.2 實施細節
在本實驗中,使用word2vec生成詞向量,word2vec模型訓練的類型為skip-gram,上下文窗口大小為3,最小詞匯數為1。負采樣數設置為30,高頻詞下采樣閾值設置為1E-3,隨機種子為1,輸出詞嵌入的維度為100。
對于模型訓練過程的參數,本文設置dropout為0.6,epoch為60,batch size為128,學習率為1E-3,早停為1 000,卷積核為256。對于式(3)中的可變參數θ,不同模型設置不一樣,具體細節會在結果分析部分進行參數分析。所有模型訓練環境為Intel Xeon Silver 4214R CPU和NVIDIA GeForce RTX 3080 Ti GPU,Python和PyTorch的版本分別為3.10.9和2.0.1。
3.3 基線方法
本文使用TextCNN、DPCNN和TextRNN為基礎模型進行實驗對比。同時,為了表現出本文引入的空間注意力模塊和通道注意力模塊對實驗結果的影響,實驗針對 TextCNN-DA 模型進行了消融實驗的對比,在下文的實驗結果展示中:TextCNN-DA(c)表示只加入了通道注意力機制;TextCNN-DA(s)表示只加入了空間注意力機制;TextCNN-DA(cs)表示先進行通道注意力計算,再進行空間注意力計算;TextCNN-DA(sc)表示先進行空間注意力計算,再進行通道注意力計算。為了避免隨機性產生的影響,實驗選取了 1~5的數字作為隨機種子,對比實驗結果以 5 次實驗取平均為準。
3.4 實驗結果與分析
為證實本文TextCNN-DA(sc)+SWV-FGM方法的有效性,在漏洞文本數據集上對多種模型進行了比較實驗,每種模型都用了原始、添加FGM對抗樣本算法和SWV-FGM對抗樣本算法三種方法進行實驗評估,實驗結果以5次實驗取平均為準。得到的實驗結果如表4所示。
從表4可以看出,本文TextCNN-DA+SWV-FGM方法在所有指標上都優于其他三個baseline model。與TextCNN相比,本文TextCNN-DA(sc)+SWV-FGM方法在accuracy、macro-precision、macro-recall、macro-F1指標分別提升了1.5百分點、1.54百分點、1.84百分點、1.74百分點。所有模型在添加了對抗樣本算法后表現都有了明顯的提升,并且與添加FGM算法相比,添加SWV-FGM方法提升都更加明顯,提升從0.6百分點到3.19百分點不等。從實驗結果可以看出,在本文的漏洞數據集上,TextCNN-DA+SWV-FGM方法具有優勢,證明了該方法能夠關注到重要特征,并增強模型的泛化性。除此之外,本文對結果差距進行了可視化展示,展示了每個模型在漏洞數據集上相對于TextCNN-DA+SWV-FGM方法的指標對比,如圖11所示,可以明顯看出其他方法和本文方法的差距。
為了決定最終的漏洞分類模型,本文從5次實驗中選擇效果最優的模型來作為最終的漏洞分類器。每個模型在SWV-FGM算法基礎上的最優結果如表5所示。從實驗結果可以看出,TextCNN-DA(sc)模型綜合表現更好。
為了評估每種具體漏洞類型的分類效果,得到了該數據集的混淆矩陣,如圖12所示。從實驗結果可以看出,CWE-79和CWE-89漏洞種類的分類效果是最好的,CWE-79在2 484條測試數據中只有45條誤報和40條漏報,CWE-89在841條測試數據中只有8條誤報和4條漏報。這可能是因為XSS漏洞(CWE-79)和SQL注入漏洞(CWE-89)的特征比較明顯且常見,與其他漏洞的區別較大。然而,CWE-787、CWE-119、CWE-20、CWE-125和CWE-120的分類表現相比之下就不是很理想。為了判斷造成這種現象的原因,本文深入分析了CWE-119(緩存區錯誤)的混淆矩陣。在CWE-119的874個測試數據中,CWE-787(越界寫入)是最常被分類錯誤的漏洞類型,有58個。其次是CWE-20(不正確的輸入驗證)的43個,之后是CWE-120(經典緩存區溢出)和CWE-125(越界讀?。?。可以發現這幾個漏洞類型之間的相關性比較強。實際上,CWE-119是一個寬泛的類別,包含多種內存相關的安全漏洞,而CWE-120、CWE-125和CWE-787都是CWE-119漏洞下的細分項,也就是說緩存區錯誤會包括緩沖區溢出、越界讀取和越界寫入的錯誤。與此同時,CWE-20(不正確的輸入驗證)漏洞的主要特點是由于軟件沒有正確驗證輸入數據的有效性,從而可能被攻擊者利用觸發緩沖區溢出、執行代碼等多種攻擊。也就是說CWE-20漏洞可能會引發CWE-119漏洞,具體來說,如果一個惡意輸入由于沒有被正確驗證和清洗,最終觸發了緩沖區溢出,那么這個漏洞很可能會被分類為CWE-119,雖然其根源是輸入驗證問題,即CWE-20。綜上所述,漏洞CWE-119和CWE-20、CWE-120、CWE-125、CWE-787之間的界限很模糊,并且漏洞描述文本在某種程度上是相似的,所以它們更有可能被錯誤地分類,導致最后結果不佳。除此之外,還有一些CWE-20的漏洞與CWE-200和CWE-287的漏洞相互被錯分,這可能是由于不正確的輸入驗證(CWE-20)、信息泄漏(CWE-200)和身份驗證問題(CWE-287)使幾種漏洞的定義有所重疊,從而導致了漏洞描述文本的相似性,致使分類錯誤。
3.5 比較實驗
由于所選擇的漏洞類型及其數據的數量在不同的研究中存在顯著差異,所以無法直接將本文模型的性能與其他研究的性能進行比較。據此,本文選擇了與其他研究人員研究的漏洞類型有重疊的幾個最常見的漏洞類型,并在這些漏洞類型上將本文模型性能與文獻[18]進行了比較,這幾個漏洞的分類性能呈現在表6中。
實驗結果表明,與文獻[18]相比,盡管本文選取的測試數據數量要更多,本文提出的分類模型依然能保持一個相似的分類表現。在CWE-78、CWE-79、CWE-89、CWE-125上,本文方法macro-F1值稍低,但在CWE-190、CWE-352、CWE-787上,本文方法都要比文獻[18]的方法好,特別是對于CWE-787漏洞,本文方法的查準率為88.67%,高于文獻[18]的70.70%,且最終的F1值也有7.94百分點的提升。
3.6 消融實驗
對本文方法進行了消融實驗,結果如表4、5和圖11所示。為了驗證SWV-FGM的有效性,本文對每個模型都進行了原始和添加FGM對抗樣本算法的實驗對比。為了驗證TextCNN-DA(sc)的有效性,本文使用不同設置的模型進行對比,TextCNN-DA(c)表示只加入了通道注意力機制,TextCNN-DA(s)表示只加入了空間注意力機制,TextCNN-DA(cs)表示先進行通道注意力計算,再進行空間注意力計算,TextCNN-DA(sc)表示先進行空間注意力計算,再進行通道注意力計算。實驗結果顯示,SWV-FGM算法和TextCNN-DA模型都對結果提升有重要的作用,并且先進行空間注意力計算,再進行通道注意力計算的順序對漏洞分類效果的提升最好。
3.7 參數分析
本文對SWV-FGM中的可調參數θ提供了超參數分析。θ是一個較小的值,作用是避免范數梯度出現零的情況,該參數需要根據不同的數據集和模型進行調整。因此本文針對不同模型進行可調參數θ的確定,實驗以單次實驗結果為準,如圖13所示。θ的取值原則是:如果兩者之間的準確率相差較大,則選擇準確率高的參數值;如果兩者之間的準確率相差較小,則優先選擇參數在1E-5~1E-3的值,避免生成的擾動過大或過小。實驗結果顯示,除了 TextCNN-DA(sc)選取準確率第二高(89.11%) 時對應的參數 1E-5 外,其余都選擇準確率最高時對應的參數值。最后的參數選擇情況如表7所示。
4 結束語
本文研究了漏洞文本分類問題,主要針對兩個漏洞分類領域的挑戰:缺乏對重要特征的關注能力和面對未知文本時泛化性不佳的問題。為了解決這些問題,本文首先引入空間注意力機制和通道注意力機制,將其與TextCNN結合,使得模型可以關注更具有類別區分能力的關鍵詞特征和通道特征;然后,本文提出了改進的對抗樣本生成算法,根據梯度矩陣的每一行生成擾動數據,使得每個詞向量會在不同的擾動范圍內生成對抗樣本,更加符合文本數據的特點;最后通過對分類模型進行對抗訓練以提升模型的魯棒性和泛化性。本文在NVD漏洞數據集上對本文方法進行了評估,證明了與其他分類模型相比,本文方法在多數情況下都表現出了優異的效果。
盡管本文方法能夠有效提升漏洞分類效果,但是將兩個注意力機制引入到模型中也大大增加了模型的參數數量,并且SWV-FGM對每一個詞向量都計算擾動,這些都導致提出的方法需要更多的計算資源和訓練時間。未來研究將考慮解決這些問題。
參考文獻:
[1]Neuhaus S, Zimmermann T. Security trend analysis with CVE topic models[C]// Proc of the 21st International Symposium on Software Reliability Engineering. Piscataway, NJ: IEEE Press, 2010: 111-120.
[2]Wijayasekara D, Manic M, McQueen M. Vulnerability identification and classification via text mining bug databases[C]// Proc of the 40th Annual Conference of the IEEE Industrial Electronics Society. Piscataway, NJ: IEEE Press, 2014: 3612-3618.
[3]Na S, Kim T, Kim H. A study on the classification of common vulnera-bilities and exposures using Na?ve Bayes[C]// Proc of the 11th International Conference on Broad-Band Wireless Computing, Communication and Applications. Cham: Springer, 2017: 657-662.
[4]Davari M, Zulkernine M, Jaafar F. An automatic software vulnerability classification framework[C]// Proc of International Conference on Software Security and Assurance. Piscataway, NJ: IEEE Press, 2017: 44-49.
[5]Yang Huiting, Guo Wenbin, ZouZhenwan, et al. Research on vulnerability classification method based on DMO-PSO-SVM algorithm[C]// Proc of the 3rd Advanced Information Technology, Electronic and Automation Control Conference. Piscataway, NJ: IEEE Press, 2018: 1180-1183.
[6]Chen Jinfu, Kudjo P K, Mensah S, et al. An automatic software vulnerability classification framework using term frequency-inverse gravity moment and feature selection[J]. Journal of Systems and Software, 2020, 167: 110616.
[7]Aota M, Kanehara H, Kubo M," et al." Automation of vulnerability classification from its description using machine learning [C]// Proc of IEEE Symposium on Computers and Communications. Piscataway, NJ: IEEE Press, 2020: 1-7.
[8]Aivatoglou G, Anastasiadis M, Spanos G, et al. A tree-based machine learning methodology to automatically classify software vulnerabilities[C]// Proc of IEEE International Conference on Cyber Secu-rity and Resilience. Piscataway, NJ: IEEE Press, 2021: 312-317.
[9]Russo E R, Di Sorbo A, Visaggio C A, et al. Summarizing vulnerabili-ties’descriptions to support experts during vulnerability assessment activities[J]. Journal of Systems and Software, 2019, 156: 84-99.
[10]Terdchanakul P, Hata H, Phannachitta P, et al. Bug or not? Bug report classification using n-gram IDF[C]// Proc of IEEE International Conference on Software Maintenance and Evolution. Piscataway, NJ: IEEE Press, 2017: 534-538.
[11]Goseva-Popstojanova K, Tyo J. Identification of security related bug reports via text mining using supervised and unsupervised classification[C]// Proc of IEEE International Conference on Software Quality, Reliability and Security. Piscataway, NJ: IEEE Press, 2018: 344-355.
[12]Aghaei E, Al-Shaer E.ThreatZoom: neural network for automated vulnerability mitigation[C]// Proc of the 6th Annual Symposium on Hot Topics in the Science of Security. New York: ACM Press, 2019: 1-3.
[13]Huang Guoyang, Li Yazhou, Wang Qian, et al. Automatic classification method for software vulnerability based on deep neural network[J]. IEEE Access, 2019, 7: 28291-28298.
[14]Nakagawa S, Nagai T, Kanehara H, et al. Character-level convolutional neural network for predicting severity of software vulnerability from vulnerability description[J]. IEICE Trans on Information and Systems, 2019, 102(9): 1679-1682.
[15]Sharma R, Sibal R, Sabharwal S. Software vulnerability prioritization using vulnerability description[J]. International Journal of System Assurance Engineering and Management, 2021, 12: 58-64.
[16]Das S S, Serra E, Halappanavar M, et al. V2W-BERT: a framework for effective hierarchical multiclass classification of software vulnerabilities[C]// Proc of the 8th International Conference on Data Science and Advanced Analytics. Piscataway, NJ: IEEE Press, 2021: 1-12.
[17]Vishnu P R, Vinod P, Yerima S Y. A deep learning approach for classifying vulnerability descriptions using self attention based neural network[J]. Journal of Network and Systems Management, 2022, 30(1): article No. 9.
[18]Wang Qian, Gao Yuying, Ren Jiadong, et al. An automatic classification algorithm for software vulnerability based on weighted word vector and fusion neural network[J]. Computers amp; Security, 2023, 126: 103070.
[19]Dong Yukun, Tang Yeer, Cheng Xiaotong, et al. DeKeDVer: a deep learning-based multi-type software vulnerability classification framework using vulnerability description and source code[J]. Information and Software Technology, 2023, 163: 107290.
[20]Madry A,Makelov A, Schmidt L, et al. Towards deep learning models resistant to adversarial attacks[EB/OL]. (2019-09-04). https://arxiv.org/abs/1706.06083.