劉烊僑,楊頻,王炎
(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都610065)
隨著信息技術(shù)的飛速發(fā)展,互聯(lián)網(wǎng)和計(jì)算機(jī)的應(yīng)用給社會(huì)帶來的影響是雙重的。它們帶來了便利,但也帶來了巨大的風(fēng)險(xiǎn)和隱患。近來,隨著各個(gè)行業(yè)的數(shù)字化水平的提高,信息安全問題變得越來越突出。漏洞的定義是指未經(jīng)授權(quán)的人員可以非法利用的系統(tǒng)軟件和硬件缺陷。一旦信息系統(tǒng)的漏洞被惡意攻擊者所利用,信息系統(tǒng)的安全性將面臨極大的風(fēng)險(xiǎn),可能造成不可估量的后果。例如,2017 年,黑客利用Windows系統(tǒng)漏洞,用比特幣勒索病毒對(duì)全球200 萬臺(tái)終端發(fā)起過攻擊,攻擊次數(shù)高達(dá)1700 萬余次。黑客可以利用辦公室漏洞進(jìn)行高級(jí)持久威脅(APT)攻擊,傳播僵尸網(wǎng)絡(luò),勒索軟件等。近年來,漏洞的數(shù)量和種類逐漸增多,因此軟件漏洞的管理和分析變得越來越重要。如果能夠有效地對(duì)漏洞進(jìn)行分類和管理,不僅可以提高漏洞修復(fù)和管理的效率,還可以降低系統(tǒng)受到攻擊和破壞的風(fēng)險(xiǎn),這對(duì)于系統(tǒng)的安全性能至關(guān)重要。因此,越來越多的研究將機(jī)器學(xué)習(xí)和深度學(xué)習(xí)應(yīng)用到漏洞自動(dòng)化分類中。但由于漏洞數(shù)量大、漏洞描述文本簡短且生成的詞向量空間具有高維和稀疏的特征,導(dǎo)致這些方法分類效果不理想。為解決上述問題,提出了一種基于深度學(xué)習(xí)的漏洞自動(dòng)化分類模型(Word2Vec-CNN),目的在于提高漏洞自動(dòng)化分類的準(zhǔn)確度。使用Word2Vec 方法構(gòu)建詞向量,利用CNN 神經(jīng)網(wǎng)絡(luò)模型構(gòu)造自動(dòng)漏洞分類器,實(shí)現(xiàn)漏洞自動(dòng)化分類。接著構(gòu)建了其他三個(gè)模型,分別是One-hot-CNN、One-hot-RNN 以及Word2Vec-RNN 作為實(shí)驗(yàn)對(duì)比的基線模型。然后將四種模型與傳統(tǒng)機(jī)器學(xué)習(xí)算法[1](神經(jīng)網(wǎng)絡(luò)、貝葉斯算法)在單個(gè)CVSS[2]屬性分類上進(jìn)行了比較,最后將四種模型在漏洞類別的分類效果上進(jìn)行了比較,測試結(jié)果表明,提出的漏洞自動(dòng)化分類模型(Word2Vec-CNN)綜合效果最優(yōu),有效地提高了漏洞分類的性能。
近年來,在文本分類[3]領(lǐng)域中已經(jīng)提出了許多機(jī)器學(xué)習(xí)方法。其中,許多研究將文本分類技術(shù)用于漏洞分類這一場景下。Davari 等人提出了一種基于激活漏洞條件的自動(dòng)漏洞分類框架[4],使用不同的機(jī)器學(xué)習(xí)技術(shù)(隨機(jī)森林、C4.5 決策樹、邏輯回歸和樸素貝葉斯)來構(gòu)造具有最高F 度量的分類器。并使用Firefox 項(xiàng)目中的580 個(gè)軟件安全漏洞來評(píng)估分類的有效性。Shuai Bo 等人將基于LDA 的SVM 多分類器[5]用于漏洞分類領(lǐng)域,實(shí)驗(yàn)結(jié)果表明SVM 分類方法在漏洞分類方面取得了較好的效果。Dumidu Wijayasekara 等人證明了樸素貝葉斯分類器根據(jù)漏洞的描述信息對(duì)漏洞進(jìn)行分類的可行性[6]。Marian Gawron 等人在相同的數(shù)據(jù)集中,用樸素貝葉斯算法和簡化的人工神經(jīng)網(wǎng)絡(luò)算法進(jìn)行漏洞分類[1]。實(shí)驗(yàn)結(jié)果表明,在漏洞分類中,人工神經(jīng)網(wǎng)絡(luò)算法優(yōu)于樸素貝葉斯算法。
盡管這些機(jī)器學(xué)習(xí)分類算法在許多領(lǐng)域都取得了令人滿意的結(jié)果,但是在漏洞分類這一場景下,由于漏洞數(shù)據(jù)量大、漏洞描述文本簡短且生成的詞向量空間具有高維和稀疏的特征,導(dǎo)致這些機(jī)器學(xué)習(xí)算法在處理這種高稀疏問題方面不是很有效。而且傳統(tǒng)方法大多基于人工提取特征,導(dǎo)致分類準(zhǔn)確性不高。近年來,深度學(xué)習(xí)已在許多領(lǐng)域得到應(yīng)用,對(duì)于自然語言領(lǐng)域也有重要的影響。Hwiyeol 等人將卷積神經(jīng)網(wǎng)絡(luò)(CNN)和遞歸神經(jīng)網(wǎng)絡(luò)(RNN)應(yīng)用于大規(guī)模文本分類領(lǐng)域并取得了成功[7]。Wu Fang 等人提出了三種深度學(xué)習(xí)的漏洞檢測模型[8]預(yù)測二進(jìn)制程序的漏洞,分別是卷積神經(jīng)網(wǎng)絡(luò)(CNN)、長短期記憶(LSTM)和卷積神經(jīng)網(wǎng)絡(luò)長短期記憶(CNNLSTM),實(shí)驗(yàn)結(jié)果表明,漏洞預(yù)測的準(zhǔn)確率達(dá)到了83.6%,優(yōu)于傳統(tǒng)方法??梢钥闯?,深度學(xué)習(xí)應(yīng)用于軟件漏洞檢測領(lǐng)域,并取得了良好的效果。
因此,為了更好地處理詞向量空間的高稀疏性并充分利用深度學(xué)習(xí)自動(dòng)提取特征的優(yōu)勢,提出了一種深度學(xué)習(xí)漏洞自動(dòng)分類模型(Word2Vec-CNN),旨在于提高漏洞自動(dòng)分類準(zhǔn)確率。
Word2Vec-CNN 模型框架如圖1 所示?;赪ord2Vec-CNN 的漏洞描述文本分類模型主要分為4個(gè)層面,包括詞嵌入層、卷積神經(jīng)網(wǎng)絡(luò)層、Max 池化層和全連接Softmax 分類層。①漏洞描述文本通過數(shù)據(jù)預(yù)處理劃分為單個(gè)詞并將單個(gè)詞送入詞嵌入層生成詞向量。②構(gòu)建維度為n×k 的輸入矩陣,其中n 為文本句子中單詞的數(shù)量,k 為每個(gè)詞的embedding 維度。③輸入矩陣進(jìn)入卷積層與m 個(gè)大小不同的卷積核分別做卷積。④在池化層采用max 池化的方式對(duì)卷積后的輸出結(jié)果做池化處理,壓縮數(shù)據(jù)。⑤池化層處理后得到的特征向量進(jìn)入全連接層,先flattening 扁平化,然后乘以權(quán)重求和加偏置,激活函數(shù)處理,梯度下降優(yōu)化權(quán)重,Softmax 輸出分類標(biāo)簽。
圖1 Word2Vec-CNN模型框架圖
為了驗(yàn)證有效性,使用國際認(rèn)可的國家漏洞數(shù)據(jù)庫(NVD)[9]作為實(shí)驗(yàn)數(shù)據(jù)。該數(shù)據(jù)集的源文件是一系列XML 文件,其中包含有關(guān)漏洞的全面信息,例如CVE 號(hào)、漏洞發(fā)布日期、CVSS_version、CVSS_score、CVSS_vector、漏洞文本描述等。NVD 漏洞數(shù)據(jù)庫的年度漏洞數(shù)量(2002 年-2019 年6 月)如圖2 所示,漏洞記錄總數(shù)為121164 條。
圖2 各年的漏洞數(shù)量
到2019 年6 月,CVE-Detail 中記錄了13 個(gè)漏洞類別,大部分漏洞可被標(biāo)記為多個(gè)漏洞類別,如CVE-2012-5835 漏洞被標(biāo)記為DoS、Exec Code 以及Overflow 三種漏洞類別,被分類為多個(gè)漏洞類別的漏洞對(duì)于模型訓(xùn)練沒有價(jià)值,實(shí)驗(yàn)中排除存在多個(gè)漏洞類別的漏洞。統(tǒng)計(jì)剩余漏洞信息,F(xiàn)ile Inclusion、Memory Corruption、Http Response Splitting 三種類別的漏洞分別只有69、60、163 條,由于數(shù)量過少對(duì)于深度學(xué)習(xí)模型訓(xùn)練沒有價(jià)值,也一并排除。其他10 個(gè)漏洞類別的漏洞記錄如圖3 所示。
圖3 各個(gè)類別的漏洞數(shù)量
從漏洞文件中提取所需的漏洞信息,包括CVE號(hào),漏洞文本描述以及攻擊矢量(access-vector)、機(jī)密性(confidentiality-impact)、完整性(integrity-impact)和可用性(availability-impact)四個(gè)CVSS 指標(biāo),以及從CVE-Detail 中提取漏洞類別。其中,機(jī)密性、完整性和可用性三種屬性均包括NONE、PARTIAL、COMPLETE三種取值作為分類的標(biāo)簽。攻擊矢量包括ADJACENT_NETWORK、LOCAL、NETWORK 三種取值作為分類的標(biāo)簽。
從NVD(National Vulnerability Database,國家漏洞數(shù)據(jù)庫)上獲取到的漏洞描述是計(jì)算機(jī)無法直接識(shí)別和計(jì)算的文本數(shù)據(jù),不能直接放進(jìn)CNN 卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行處理,需要進(jìn)行數(shù)據(jù)的預(yù)處理,預(yù)處理的過程如下:
(1)分詞
分詞是指將連貫的漏洞描述的文本信息切分為單個(gè)詞,將整個(gè)漏洞描述的文本信息轉(zhuǎn)化為可以由統(tǒng)計(jì)信息計(jì)算的最小語義單位。這個(gè)過程是漏洞文本預(yù)處理的第一步也是最重要的一步。對(duì)于用英文單詞描述的漏洞信息,單詞細(xì)分是很簡單的。只需要識(shí)別整段漏洞描述文本間的空格或標(biāo)點(diǎn)來劃分單詞。例如CVE-2016-6045 漏洞的描述為:"IBM Tivoli Storage Manager Operations Center is vulnerable to cross-site request forgery which could allow an attacker to execute malicious and unauthorized..."分詞之后變?yōu)閇"IBM","Tivoli","Storage","Manager","Operations","Center","is","vulnerable","to","cross","-","site","request","forgery","which", "would","allow","an","attacker","to","execute","malicious","and","unauthorized",...]。
(2)數(shù)據(jù)清洗與小寫化
數(shù)據(jù)清洗是指去除分詞后數(shù)據(jù)中的標(biāo)點(diǎn)符號(hào)以及單個(gè)字母,如“%”,“a”。小寫化是指對(duì)數(shù)據(jù)清洗后的單詞中的大寫字母轉(zhuǎn)變?yōu)樾?,如“Manager”經(jīng)過小寫化后變?yōu)椤癿anager”,方便更加準(zhǔn)確的對(duì)詞進(jìn)行統(tǒng)計(jì),并在此之后生成詞匯表。通過對(duì)漏洞數(shù)據(jù)庫中的漏洞報(bào)告分析,確定漏洞描述的最大長度約為400 個(gè)單詞,并對(duì)長度不夠400 個(gè)單詞的漏洞描述進(jìn)行補(bǔ)0。
(3)構(gòu)建單詞向量空間
詞向量又稱為詞嵌入,是自然語言處理中語言建模和特征學(xué)習(xí)的統(tǒng)稱,將詞匯表中的詞映射為實(shí)數(shù)域上的向量,以便計(jì)算機(jī)進(jìn)行處理和建模。Word2Vec[10]是一個(gè)多層的神經(jīng)網(wǎng)絡(luò),可以將詞向量化。在Word2Vec 中存在兩個(gè)模型CBOW 模型和Skip-gram模型,第一個(gè)模型的作用是已知當(dāng)前詞Wt 的前后單詞(Wt-2,Wt-1,Wt+1,Wt+2)來預(yù)測當(dāng)前詞,第二個(gè)模型的作用是根據(jù)當(dāng)前詞Wt 來預(yù)測上下文(Wt-2,Wt-1,Wt+1,Wt+2)。兩種模型都包含輸入層,投影層,輸出層如圖4 所示。由于漏洞描述信息復(fù)雜多變,生僻詞較多,而Skip-gram 模型比起CBOW 模型準(zhǔn)確率更高[10],更能準(zhǔn)確處理生僻詞。因此,選擇Word2Vec 中的Skipgram 模型來構(gòu)建詞向量。經(jīng)過反復(fù)的實(shí)驗(yàn),Word2Vec參數(shù)設(shè)置如下時(shí)效果最好,特征向量100 維,窗口大小為5,訓(xùn)練并行數(shù)為6。
圖4 Word2Vec兩種模型
CNN(卷積神經(jīng)網(wǎng)絡(luò))[11]最早應(yīng)用于圖像識(shí)別[12]的領(lǐng)域中,將一張圖像看作是一個(gè)個(gè)像素值組成的矩陣,那么對(duì)圖像的分析就是對(duì)矩陣的數(shù)字進(jìn)行分析,通過對(duì)矩陣做卷積運(yùn)算,從而得到圖像中的特征。CNN 最大優(yōu)勢在于網(wǎng)絡(luò)結(jié)構(gòu)簡單,這使得它網(wǎng)絡(luò)參數(shù)數(shù)目少,計(jì)算量少,訓(xùn)練速度快。之后,CNN 第一次被用于文本分類[13],并取得了不錯(cuò)的效果?;贑NN 的文本分類主要過程如下:
(1)卷積神經(jīng)網(wǎng)絡(luò)層將數(shù)據(jù)預(yù)處理后得到的400×100 矩陣作為輸入,400 為每條漏洞描述中單詞的個(gè)數(shù),100 為詞向量維度。將輸入矩陣與卷積核做卷積得到若干個(gè)列數(shù)為1 的特征圖。由于漏洞描述中每句話的單詞數(shù)較少,并且采用大小不同的卷積核能更好地提取文本信息中的特征,因此,卷積核窗口設(shè)置為3,4,5 三種大小合適,步長為1。
(2)池化層將卷積神經(jīng)網(wǎng)絡(luò)層中輸出的一維特征圖進(jìn)行采樣,提取出最大值。最終池化層的輸出為各個(gè)特征圖的最大值,即一個(gè)一維的向量。Max 池化操作能減少文本矩陣補(bǔ)零操作噪聲影響,實(shí)驗(yàn)得出的效果更好。
(3)最后一層采用全連接的方式,對(duì)池化后得到的文本特征向量進(jìn)行全連接后,送入Softmax 分類器,用來預(yù)測類別概率。
One-hot[14]又稱為熱獨(dú)編碼,用于單詞的向量化。近年來,One-hot 被廣泛應(yīng)用于文本分類領(lǐng)域中數(shù)據(jù)的預(yù)處理。因此,選擇One-hot 作為構(gòu)建詞向量的基線方法。采用字符級(jí)One-hot 編碼的方式,即維度為1×n 的向量,向量所有位置上都是0,只有在對(duì)應(yīng)字符的索引位置上是1,其中n 為字符表中所有字符的數(shù)量。如字符”b”索引位置為2,則對(duì)應(yīng)的one-hot 碼為[0 0 1 0...]。
RNN 循環(huán)神經(jīng)網(wǎng)絡(luò)[15]近年來被廣泛用于構(gòu)建文本分類器,因此,選擇RNN 循環(huán)神經(jīng)網(wǎng)絡(luò)作為分類器的基線方法。最終組合出三種基線模型,即One-hot-CNN、One-hot-RNN、Word2Vec-RNN。
實(shí)驗(yàn)是在PC 上進(jìn)行的,處理器為Intel E3-1230 V5,3.40 GHz 和8.00 GB。
內(nèi)存,運(yùn)行Windows 7 操作系統(tǒng)。編程使用PyCharm 2017 和TensorFlow 框架。
CNN 參數(shù)設(shè)定如下:
(1)卷積核設(shè)為3,4,5 三個(gè)大小,每個(gè)大小的卷積核數(shù)量設(shè)為128,每個(gè)卷積核步長設(shè)為1。
(2)輸入層的正向傳播和隱藏層使用ReLU 作為激活函數(shù),而輸出層使用Softmax 作為激活函數(shù)。
(3)使用TensorFlow 中的dropout 功能來防止過度擬合,dropout 值設(shè)為0.5。
(4)使用批量梯度下降優(yōu)化CNN 模型,批量大小設(shè)置為128,學(xué)習(xí)率設(shè)置為1e-3。
(5)訓(xùn)練輪數(shù)epoch 設(shè)置為20。
收集2000 年至2019 年6 月NVD 上所有漏洞的文本信息以進(jìn)行統(tǒng)計(jì),對(duì)于單個(gè)CVSS 屬性(Confidentiality、Integrity、Availability 以及Access)的分類,分別選擇其中20000 個(gè)作為訓(xùn)練集,2000 個(gè)作為驗(yàn)證集,2000個(gè)作為測試集。對(duì)于漏洞類別的分類,選擇其中40,000 個(gè)作為訓(xùn)練集,并使用5000 個(gè)作為驗(yàn)證集,5000個(gè)作為測試集。具體的數(shù)據(jù)樣本列于表1。
表1 數(shù)據(jù)樣本
(1)評(píng)估指標(biāo)
為了評(píng)估所提出的漏洞自動(dòng)分類模型(Word2Vec-CNN)的性能并比較不同算法之間的性能,需要統(tǒng)一的評(píng)估標(biāo)準(zhǔn)。采用多類混淆矩陣來評(píng)估模型分類性能,如表2 所示。
表2 混淆矩陣
其中i 代表漏洞的類別。根據(jù)混淆矩陣的準(zhǔn)確性、召回率、準(zhǔn)確率和F1 得分用作評(píng)估指標(biāo)TFI-DNN 模型。每個(gè)指標(biāo)的計(jì)算公式如下。
Accuracy(i):表示測試次數(shù)的比率實(shí)例按漏洞i 正確分類到總數(shù)中測試實(shí)例數(shù)。計(jì)算公式如下:
Recall(i):表示正數(shù)的比例按漏洞正確分類的示例到數(shù)字實(shí)際的正面例子。計(jì)算公式如下:
Precision(i):代表正數(shù)的比例按漏洞正確分類的示例到數(shù)字實(shí)例被歸類為積極實(shí)例。計(jì)算公式如下:
F1-score(i):結(jié)合了召回率和準(zhǔn)確率。計(jì)算公式如下:
F1 分?jǐn)?shù)的值介于0 到1 之間,并且數(shù)值越高,漏洞分類模型的性能越好。
(2)單個(gè)CVSS 屬性分類的比較結(jié)果
機(jī)密性、可用性、完整性以及攻擊矢量的比較結(jié)果如表3 所示。
比較結(jié)果中,可以看到,在機(jī)密性(Confidentiality)、可用性(Availability)、完整性(Integrity)三個(gè)屬性的分類中,Word2Vec-CNN 測試精度比傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)算法分別高出1.9%、1.3%、4.3%。對(duì)于攻擊矢量(Access)屬性則比神經(jīng)網(wǎng)絡(luò)算法低1.2%,由于Access 屬性相比于其他三個(gè)屬性的特征更易提取和識(shí)別,因此,機(jī)器學(xué)習(xí)算法在Access 屬性的分類上優(yōu)于深度學(xué)習(xí)算法,這個(gè)結(jié)果是合理的。從四個(gè)CVSS 屬性的分類結(jié)果中可以看出,Word2Vec-CNN 模型的分類效果均高于其他三個(gè)基線深度學(xué)習(xí)模型。
表3 單個(gè)CVSS 屬性的分類準(zhǔn)確率
(3)漏洞類別分類的比較結(jié)果
將提出的Word2Vec-CNN 模型與三個(gè)基線深度學(xué)習(xí)模型在漏洞類別的分類上進(jìn)行了比較。比較結(jié)果如表4 所示。
表4 漏洞類別分類結(jié)果
根據(jù)實(shí)驗(yàn)比較結(jié)果,可以看到,Word2Vec 漏洞的整體性能優(yōu)于其他三種模型。具體而言,與One-hot-CNN、One-hot-RNN 和 Word2Vec-RNN 相 比,Word2Vec-CNN 模型分類準(zhǔn)確度分別高1.4%、1.2%和0.4%,F(xiàn)1 評(píng)分指標(biāo)分別高1.7%、1.2%和0.7%。以上實(shí)驗(yàn)結(jié)果驗(yàn)證了Word2Vec-CNN 在漏洞自動(dòng)分類中的有效性。同時(shí),Word2Vec-RNN 模型的分類效果接近Word2Vec-CNN 模型,比One-hot-CNN 模型與Onehot-RNN 模型的分類效果更好。
取得以上效果的原因,可以歸納為以下2 點(diǎn):①由于One-hot 生成向量空間并不全面,沒有考慮到上下文詞語間的關(guān)系,而Word2Vec 則是根據(jù)上下文的詞向量來生成當(dāng)前詞向量,這樣更好地保留了上下文語義間的關(guān)系,使得Word2Vec 的模型在實(shí)驗(yàn)中表現(xiàn)更好。②由于RNN 模型的復(fù)雜性,在處理長序列時(shí)容易出現(xiàn)梯度爆炸問題,在模型訓(xùn)練的過程中,RNN 循環(huán)神經(jīng)網(wǎng)絡(luò)模型比起CNN 卷積神經(jīng)網(wǎng)絡(luò)模型更難訓(xùn)練,所消耗的時(shí)間更長。因此,提出的Word2Vec-CNN 模型在漏洞類別分類的過程中取得的效果更好。
為了根據(jù)漏洞的所屬類別以及單個(gè)漏洞屬性更好地分析和管理漏洞,提高系統(tǒng)的安全性能,降低系統(tǒng)被攻擊和損壞的風(fēng)險(xiǎn),將深度神經(jīng)網(wǎng)絡(luò)應(yīng)用于軟件漏洞的分類,提出了一種漏洞自動(dòng)分類模型(Word2Vec-CNN),并詳細(xì)討論了Word2Vec 和CNN 的構(gòu)建過程。用NVD 上的數(shù)據(jù)集比較了Word2Vec-CNN 模型與三個(gè)基線深度學(xué)習(xí)模型(One-hot-CNN、One-hot-RNN 和Word2Vec-RNN)和傳統(tǒng)的機(jī)器學(xué)習(xí)算法(神經(jīng)網(wǎng)絡(luò)、貝葉斯算法)在單個(gè)漏洞屬性上的分類效果,接著比較了Word2Vec-CNN 模型與三個(gè)基線深度學(xué)習(xí)模型在漏洞類別上的分類效果。在這兩方面的綜合評(píng)價(jià)指標(biāo)上,Word2Vec-CNN 模型取得的效果更好,展示了Word2Vec-CNN 在漏洞分類中的有效性。