任家東,王 倩+,王 菲,李亞洲,劉佳新
1.燕山大學(xué) 信息科學(xué)與工程學(xué)院,河北 秦皇島066001
2.河北省計(jì)算機(jī)虛擬技術(shù)與系統(tǒng)集成實(shí)驗(yàn)室,河北 秦皇島066001
計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,使得計(jì)算機(jī)網(wǎng)絡(luò)在經(jīng)濟(jì)生產(chǎn)、社會(huì)生活、教育、科技、國(guó)防等領(lǐng)域發(fā)揮著極其重要的作用。網(wǎng)絡(luò)在為人們帶來(lái)諸多便利的同時(shí),也隨之產(chǎn)生了一系列的安全問(wèn)題,如惡意攻擊、盜竊機(jī)密數(shù)據(jù)、種植病毒等。通過(guò)網(wǎng)絡(luò)漏洞進(jìn)行網(wǎng)絡(luò)攻擊是攻擊者最常采用的手段之一,不僅會(huì)對(duì)大眾的生活產(chǎn)生嚴(yán)重的影響,威脅人們的信息安全、財(cái)產(chǎn)安全,甚至?xí)孤﹪?guó)家機(jī)密等,嚴(yán)重危害國(guó)家安全。近年來(lái)新發(fā)現(xiàn)的未知漏洞數(shù)量相比過(guò)去增長(zhǎng)迅速,根據(jù)國(guó)家信息安全漏洞庫(kù)數(shù)據(jù)(China National Vulnerability Database,CNNVD),網(wǎng)址為http://www.cnnvd.org.cn/,2018 年每個(gè)月平均發(fā)現(xiàn)未知漏洞多達(dá)2 013 個(gè)。當(dāng)網(wǎng)絡(luò)管理者發(fā)現(xiàn)未知的漏洞時(shí),需要整合漏洞信息以郵件的方式提交到國(guó)家信息安全漏洞庫(kù),再由工作人員進(jìn)行漏洞分析,若干個(gè)工作日后才可以將漏洞的類別、危害值等信息發(fā)布在漏洞平臺(tái)。這不僅會(huì)給工作人員造成巨大的工作量,更重要的是無(wú)法及時(shí)獲取未知漏洞的類型及危險(xiǎn)值,進(jìn)而無(wú)法采取防護(hù)措施。面對(duì)海量增長(zhǎng)的漏洞,如何對(duì)新發(fā)現(xiàn)的未知漏洞進(jìn)行及時(shí)有效的分析和管理,是十分重要且有待解決的問(wèn)題。低效率的人工分類方法已無(wú)法滿足目前的需求,漏洞自動(dòng)化分類成為漏洞相關(guān)研究的重點(diǎn)。
目前,機(jī)器學(xué)習(xí)算法被大量應(yīng)用在文本數(shù)據(jù)的研究中[1-2],如分析文檔數(shù)據(jù)的相似度、文本的語(yǔ)義以及情感態(tài)度等。比如,Baharum等人總結(jié)了機(jī)器學(xué)習(xí)在文本分類領(lǐng)域的研究進(jìn)展[3],并探討了在處理文本分類中所遇常見(jiàn)問(wèn)題的可能解決方法,肯定了這項(xiàng)技術(shù)未來(lái)的發(fā)展。在計(jì)算機(jī)漏洞描述的文本信息中,也包含了大量關(guān)于漏洞特征的信息,因此很多研究者利用機(jī)器學(xué)習(xí)的方法,對(duì)漏洞文本進(jìn)行有效的分析,從而實(shí)現(xiàn)對(duì)漏洞的自動(dòng)分類,并取得了進(jìn)展。Li 等人提出了一種基于漏洞特征包括錯(cuò)誤、資源的積累消費(fèi)、嚴(yán)格的時(shí)間要求和復(fù)雜的環(huán)境與軟件之間的互動(dòng)的軟件漏洞分類方法[4]。Gawron 等人提出了基于機(jī)器學(xué)習(xí)的漏洞分類方法[5],該方法中應(yīng)用了文本預(yù)處理技術(shù)對(duì)漏洞文本進(jìn)行預(yù)處理,分別介紹和構(gòu)建了基于樸素貝葉斯和神經(jīng)網(wǎng)絡(luò)的漏洞分類器,評(píng)估了機(jī)器學(xué)習(xí)算法在漏洞分類上的可行性。Shuai 等人提出了一種基于隱含狄利克雷分布模型(latent Dirichlet allocation,LDA)和支持向量機(jī)算法(support vector machine,SVM)的漏洞自動(dòng)分類器[6],該方法將單詞位置信息引入加權(quán)位置LDA 模型(weighted location LDA,WL-LDA)中,通過(guò)在主題之外生成向量空間,然后再構(gòu)建基于漏洞分布的HTSVM(Huffman tree SVM)多分類器;在美國(guó)國(guó)家通用漏洞數(shù)據(jù)庫(kù)(National Vulnerability Database,NVD)上進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)表明該方法可以獲得更高的分類精度和效率。Davari 等人提出了一種基于激活漏洞條件的自動(dòng)漏洞分類框架[7],使用不同的機(jī)器學(xué)習(xí)技術(shù),來(lái)構(gòu)建具有最高F-度量的分類器,以標(biāo)記未知漏洞?;诼┒粗g相關(guān)性的漏洞分類方法被Zhang等人提出[8]。該方法是基于詞頻-逆文本頻率(term frequency-inverse document frequency,TFIDF)和貝葉斯算法的漏洞自動(dòng)分類模型,在Linux漏洞數(shù)據(jù)上進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明了該方法的有效性,使用這種方法能有效分析漏洞之間的相關(guān)性并將漏洞進(jìn)行分類。
這些機(jī)器學(xué)習(xí)分類算法在許多領(lǐng)域取得了很好的效果,而且許多研究人員已經(jīng)驗(yàn)證了機(jī)器學(xué)習(xí)算法在漏洞分類領(lǐng)域的有效性。但由于漏洞的描述信息為短文本,漏洞的數(shù)量和種類又較多,使得漏洞特征詞的提取變得困難,以至漏洞分類效果的提升并不明顯。因此本文提出的S-C特征提取方法,通過(guò)結(jié)合詞語(yǔ)的類間重要程度和類內(nèi)重要程度的綜合函數(shù)C,計(jì)算出詞語(yǔ)對(duì)于類別的重要程度。再利用詞語(yǔ)對(duì)于類別間的信息熵S,來(lái)弱化對(duì)于分類較為混亂的詞語(yǔ)的重要程度。最終選取得到較好的特征詞集。并利用關(guān)聯(lián)了特征詞集間相互關(guān)系的平均一階依賴貝葉斯模型(averaged one-dependence estimators,AODE)對(duì)漏洞數(shù)據(jù)集進(jìn)行分類。使用美國(guó)國(guó)家漏洞數(shù)據(jù)庫(kù)(National Vulnerability Database,NVD)中的文本數(shù)據(jù)進(jìn)行訓(xùn)練模型和測(cè)試,網(wǎng)址為http://nvd.nist.gov/。實(shí)驗(yàn)顯示,本文構(gòu)建的漏洞自動(dòng)分類模型能有效提高漏洞分類性能。
數(shù)據(jù)預(yù)處理是對(duì)數(shù)據(jù)分析的第一步。圖1 是數(shù)據(jù)預(yù)處理流程圖。首先,對(duì)漏洞數(shù)據(jù)進(jìn)行獲取,提取有效字段;其次,對(duì)描述漏洞的文本進(jìn)行分詞操作,去除停用詞以減少數(shù)據(jù)冗余;再次,利用基于熵改進(jìn)的S-C算法提取特征詞;最后,通過(guò)特征集合建立樣本的詞語(yǔ)向量,完成漏洞文本數(shù)據(jù)預(yù)處理。
Fig.1 Data preprocessing flow chart圖1 數(shù)據(jù)預(yù)處理流程圖
目前的漏洞數(shù)據(jù)庫(kù)主要是結(jié)構(gòu)化的漏洞數(shù)據(jù)庫(kù),結(jié)構(gòu)化漏洞庫(kù)中的漏洞數(shù)據(jù)具有統(tǒng)一的格式,以統(tǒng)一格式收集、存儲(chǔ)和發(fā)布。主要包括:美國(guó)國(guó)家漏洞數(shù)據(jù)庫(kù)NVD、開(kāi)源漏洞數(shù)據(jù)庫(kù)(Open Source Vulnerability Database,OSVDB)和中國(guó)國(guó)家漏洞數(shù)據(jù)庫(kù)CNNVD。中國(guó)國(guó)家信息安全漏洞庫(kù)將漏洞分為SQL(structured query language)注入、資源管理錯(cuò)誤、數(shù)字錯(cuò)誤、緩沖區(qū)溢出等26個(gè)類別,實(shí)現(xiàn)了對(duì)漏洞的分類化管理。本文以國(guó)際公認(rèn)的美國(guó)國(guó)家計(jì)算機(jī)通用漏洞數(shù)據(jù)庫(kù)NVD 中的descript 漏洞描述字段作為實(shí)驗(yàn)數(shù)據(jù)。并依據(jù)中國(guó)國(guó)家漏洞數(shù)據(jù)庫(kù)CNNVD 中的漏洞類別,根據(jù)NVD 與CNNVD 中每條漏洞的CVE(common vulnerabilities&exposures)編號(hào),確定漏洞的漏洞類型,完成漏洞數(shù)據(jù)的獲取。
文本特征提取[9]是指基于一定的評(píng)估標(biāo)準(zhǔn),從漏洞文本描述的詞語(yǔ)中,選擇出能夠有效描述漏洞的類別信息的關(guān)鍵詞。由于本文分析的數(shù)據(jù)是文本類型的數(shù)據(jù),在對(duì)漏洞進(jìn)行分詞后,產(chǎn)生了大量的詞語(yǔ),多達(dá)6萬(wàn)多個(gè)。這使得漏洞樣本在向量化時(shí)產(chǎn)生了巨大維度的向量,在后續(xù)利用機(jī)器學(xué)習(xí)算法進(jìn)行文本挖掘時(shí),效率以及準(zhǔn)確率變得異常低下。因此要對(duì)文本樣本進(jìn)行特征詞的提取,選出對(duì)分類貢獻(xiàn)較高的詞語(yǔ),作為樣本的特征。通過(guò)特征詞選取,可大大降低漏洞特征的向量維度,節(jié)省時(shí)間和空間資源,提高分類器的準(zhǔn)確率和效率。本文通過(guò)分析漏洞樣本文本的特征,定義了綜合函數(shù)C來(lái)表示詞語(yǔ)對(duì)于類別的重要程度,并結(jié)合信息熵S最終確定出S-C算法來(lái)提取數(shù)據(jù)集的特征集。
2.2.1 綜合函數(shù)C
一個(gè)詞語(yǔ)對(duì)于類別的重要程度,通過(guò)兩方面確定。一方面是詞語(yǔ)對(duì)于類別內(nèi)部的重要程度,詞語(yǔ)在本類中出現(xiàn)的文檔數(shù)越多,并且分布得越均勻,說(shuō)明這個(gè)詞語(yǔ)能夠很好地代表本類。但若某個(gè)詞語(yǔ)在其他多數(shù)類別中,都很頻繁地出現(xiàn),則也不能很好地代表本類漏洞。因此另一方面,是詞語(yǔ)在類間重要程度,若詞語(yǔ)在本類出現(xiàn)的頻率大于在全部樣本中出現(xiàn)的頻率,說(shuō)明這個(gè)詞語(yǔ)可以更好地代表本類漏洞,通過(guò)這兩方面確立出綜合函數(shù)C。以下給出公式中用到的符號(hào)說(shuō)明以及相關(guān)定義:N表示漏洞樣本的總數(shù)量;Di表示類別i的漏洞樣本數(shù)量;dit表示類別i中詞語(yǔ)t出現(xiàn)的漏洞樣本數(shù)量;ft表示詞語(yǔ)t出現(xiàn)的頻數(shù);fit表示類別i中詞語(yǔ)t出現(xiàn)的頻數(shù);pit=表示在類別i中詞語(yǔ)t的平均分布頻數(shù);pt=表示在總樣本中詞語(yǔ)t的平均分布頻數(shù)。
定義1(類內(nèi)重要程度I)若詞語(yǔ)t在第i類漏洞中頻繁出現(xiàn),且均勻分布在各個(gè)漏洞上,則說(shuō)明詞語(yǔ)t對(duì)i類內(nèi)的重要程度越高,對(duì)于漏洞類別i的判定有著更加重要的意義。公式如下:
定義2(類間重要程度E)若詞語(yǔ)t在第i類漏洞中的分布頻數(shù)大于詞語(yǔ)t在總樣本中分布頻數(shù),則認(rèn)為詞語(yǔ)t對(duì)第i類別有著比對(duì)其他類別更重要的意義。公式如下:
定義3(綜合函數(shù)C)代表詞語(yǔ)t對(duì)于類別i的重要程度,由類間重要程度與類內(nèi)重要程度相乘得出。公式如下:
2.2.2 S-C 特征提取算法
在選取漏洞特征詞時(shí),是根據(jù)詞語(yǔ)對(duì)分類的重要程度的值來(lái)選取,但是由于特征詞和漏洞類別之間不是非此即彼的關(guān)系,即同一特征詞可能對(duì)多個(gè)類別都表現(xiàn)出具有重要的意義。此時(shí)若依舊選取此詞語(yǔ)作為關(guān)鍵詞,則會(huì)對(duì)分類的效果產(chǎn)生負(fù)面影響。為了解決這一問(wèn)題,引入信息熵來(lái)弱化這些詞語(yǔ)的重要程度。使用信息熵S與綜合函數(shù)C相結(jié)合的方式,應(yīng)用于特征提取上。
定義4(信息熵[10])用于信息論中,是度量信息量大小的一個(gè)概念。越是有序的系統(tǒng),信息熵越低;相反,越是混亂的系統(tǒng),信息熵就越高。因此,也用信息熵來(lái)度量系統(tǒng)有序化的程度。其公式如下:
定義5(特征詞t的信息熵S(t))表示特征詞t隸屬類別的混亂程度。S(t)越大,表示特征詞t越無(wú)法較好地區(qū)分出類別。n表示漏洞類別數(shù),公式如下:
定義6(特征詞的S-C值)表示利用S-C算法計(jì)算出的特征詞t對(duì)于類別i的重要程度值。公式如下:
算法1S-C特征提取算法
目前有大量的機(jī)器學(xué)習(xí)模型以及算法應(yīng)用于文本分類的研究中,大量學(xué)者將貝葉斯分類器運(yùn)用到文本分類的領(lǐng)域中。貝葉斯是一種結(jié)構(gòu)簡(jiǎn)單且分類效率高的分類技術(shù),在應(yīng)用于某些領(lǐng)域的分類問(wèn)題中能夠與決策樹(shù)、神經(jīng)網(wǎng)絡(luò)相媲美,且運(yùn)行效率很高。貝葉斯分類器的原理,是根據(jù)樣本的先驗(yàn)概率以及條件概率,計(jì)算出待分樣本的后驗(yàn)概率。由于不是將樣本絕對(duì)地分給某一類,而是通過(guò)計(jì)算待分樣本的后驗(yàn)概率,去確定樣本的類別,具有最大概率的類就是待分樣本所屬的類別。這在理論上保證了分類器具有最小概率誤差。因此貝葉斯分類器非常適用于處理多分類問(wèn)題??紤]到本文研究數(shù)據(jù)集的特征,由于漏洞分類是多分類問(wèn)題,且數(shù)據(jù)量龐大,為了保證準(zhǔn)確率以及運(yùn)行效率,本文選取貝葉斯分類器作為研究對(duì)象。
樸素貝葉斯分類模型(naive Bayes classifier,NB)[11]的核心是具有條件獨(dú)立性假設(shè),也就是每一個(gè)屬性獨(dú)立地對(duì)分類結(jié)果發(fā)生影響。這樣的假設(shè)降低了模型計(jì)算過(guò)程的復(fù)雜性,從而大大提高了分類的效率。樸素貝葉斯分類模型的原理,是根據(jù)樣本中類別ci的先驗(yàn)概率p(ci)和類別ci與樣本X的條件概率p(X|ci),計(jì)算出后驗(yàn)概率p(ci|X),選擇后驗(yàn)概率最大的類別即為樣本所屬類別。
假設(shè)數(shù)據(jù)集D={(X1,X2,…,Xm,ci),…},其中X={X1,X2,…,Xm}為某一個(gè)樣本的特征向量,ci為此樣本所屬類別。在對(duì)一條未知類別的樣本x={x1,x2,…,xm}進(jìn)行分類時(shí),選取p(ci|x)最大的ci作為其所屬的類別。計(jì)算公式如下所示:
由于樸素貝葉斯分類模型的條件獨(dú)立性假設(shè),計(jì)算公式簡(jiǎn)化為:
樸素貝葉斯的條件獨(dú)立假設(shè),假定了屬性之間是相互獨(dú)立的,即詞與詞之間不存在任何依賴關(guān)系。顯然,這樣的獨(dú)立性假設(shè)在實(shí)際的漏洞描述文本中是不成立的。在有些類別中,多個(gè)詞語(yǔ)經(jīng)常同時(shí)出現(xiàn),因此不能忽略詞語(yǔ)之間的依賴關(guān)系。本文使用樸素貝葉斯的改進(jìn)算法——平均一階依賴貝葉斯模型(AODE)[12]來(lái)對(duì)漏洞進(jìn)行分類。AODE 的分類準(zhǔn)確度要優(yōu)于樸素貝葉斯,這主要得力于其自身的集成學(xué)習(xí)機(jī)制。AODE 是一個(gè)集成的一階依賴貝葉斯模型,在其每一個(gè)子模型中,令所有特征詞都依賴于同一個(gè)特征詞節(jié)點(diǎn),即超父節(jié)點(diǎn),每一個(gè)特征詞都輪流做一遍超父節(jié)點(diǎn)。這樣就關(guān)聯(lián)了所有特征詞之間的關(guān)系,改善了樸素貝葉斯中認(rèn)為每一個(gè)特征詞都相互獨(dú)立的缺點(diǎn)。
AODE分類器中有兩個(gè)公共的父節(jié)點(diǎn),除了類別節(jié)點(diǎn)作為父節(jié)點(diǎn)外,每個(gè)特征詞節(jié)點(diǎn)都會(huì)輪流作為其他剩余特征詞節(jié)點(diǎn)的父節(jié)點(diǎn)。若樣本的特征向量中,有m個(gè)特征,AODE分類器就會(huì)形成m個(gè)分類器子模型,其中每一個(gè)子分類器結(jié)構(gòu)都是一個(gè)1-依賴分類器,最終將這些1-依賴分類器進(jìn)行平均。假設(shè)給定一個(gè)具有4 個(gè)特征值的樣本集D={(X1,X2,X3,X4),(X1,X2,X3,X4)…},其AODE分類器中的4個(gè)子分類器如圖2 所示,4 個(gè)子分類器分別以類別和一個(gè)特征詞節(jié)點(diǎn)作為父節(jié)點(diǎn)。
Fig.2 AODE submodel diagram圖2 AODE子模型圖
具有m個(gè)特征{x1,x2,…,xm},n個(gè)類別的數(shù)據(jù)集,共構(gòu)成m個(gè)子模型。子模型的后驗(yàn)概率計(jì)算公式如下:
接下來(lái)對(duì)子模型求平均值,選擇后驗(yàn)概率最大的類別作為樣本所屬類別,AODE 分類器計(jì)算公式如下:
算法2AODE漏洞分類器算法
輸入:漏洞訓(xùn)練數(shù)據(jù)集D={X1,X2,…,Xm},漏洞測(cè)試數(shù)據(jù)集X。
輸出:每個(gè)漏洞測(cè)試樣本的類別C(X)。
步驟1輪流使每個(gè)特征詞節(jié)點(diǎn)作為父節(jié)點(diǎn),構(gòu)造m個(gè)1-依賴分類器;
步驟2對(duì)每一個(gè)1-依賴子分類器,利用式(9)計(jì)算漏洞樣本的后驗(yàn)概率;
步驟3得到每一個(gè)1-依賴子分類器后驗(yàn)概率后,利用式(10)求平均值;
步驟4選擇平均后驗(yàn)概率最大的漏洞類別存儲(chǔ)于C(X)中;
步驟5輸出測(cè)試集漏洞類別C(X)。
可以看出,與樸素貝葉斯相比,AODE 分類器關(guān)聯(lián)了屬性間的聯(lián)系,弱化了條件獨(dú)立性假設(shè),使分類器算法更加符合實(shí)際需求。
通過(guò)對(duì)實(shí)驗(yàn)數(shù)據(jù)的獲取,得到了漏洞文本分類實(shí)驗(yàn)所用的漏洞數(shù)據(jù)。包括漏洞ID、漏洞描述文本、漏洞對(duì)應(yīng)的類別標(biāo)簽。接下來(lái)要通過(guò)獲取的漏洞樣本,訓(xùn)練漏洞分類模型,要進(jìn)行以下步驟。首先,對(duì)漏洞文本數(shù)據(jù)進(jìn)行預(yù)處理,進(jìn)行分詞和停用詞過(guò)濾,去除數(shù)據(jù)冗余。其次,利用本文提出的S-C特征提取算法進(jìn)行漏洞特征詞的提取,利用獲取的特征詞集合對(duì)漏洞樣本進(jìn)行向量化。再次,利用AODE 分類器對(duì)漏洞樣本進(jìn)行分類。最后,利用準(zhǔn)確率指標(biāo)對(duì)比不同的特征提取算法和不同分類器模型,驗(yàn)證本文提出模型的優(yōu)越性。
為了驗(yàn)證本文提出的漏洞自動(dòng)分類算法的準(zhǔn)確性,實(shí)驗(yàn)在Windows 7操作系統(tǒng),Intel?CoreTMi7-4510U處理器,主頻為2.60 GHz,內(nèi)存為8.00 GB的PC上進(jìn)行。在Anaconda3版本的Spyder上進(jìn)行編程建模,完成建模。
本文以國(guó)際公認(rèn)的美國(guó)國(guó)家計(jì)算機(jī)通用漏洞數(shù)據(jù)庫(kù)NVD 中的descript 漏洞描述字段作為實(shí)驗(yàn)數(shù)據(jù)。并依據(jù)中國(guó)國(guó)家漏洞數(shù)據(jù)庫(kù)CNNVD 中的漏洞類別,根據(jù)NVD與CNNVD中每條漏洞的CVE編號(hào),確定出NVD 漏洞庫(kù)中每條漏洞的類型,得到帶有類別標(biāo)簽的實(shí)驗(yàn)數(shù)據(jù)。實(shí)驗(yàn)數(shù)據(jù)總共包含NVD漏洞庫(kù)在1999—2018年間發(fā)布的72 005條漏洞記錄。截至2018年年底,NVD漏洞數(shù)據(jù)庫(kù)共包含了24種漏洞類型。其中包含了1 個(gè)未知漏洞類型,這類漏洞多達(dá)15 521 條,且屬于未知類別的類型,因此對(duì)漏洞分類并無(wú)實(shí)際作用,將這類漏洞去除。最終得到本實(shí)驗(yàn)所用的56 484 條漏洞數(shù)據(jù)。從中選取20%的漏洞數(shù)據(jù)進(jìn)行實(shí)驗(yàn),利用其中90%的數(shù)據(jù)作為訓(xùn)練集,10%的數(shù)據(jù)作為測(cè)試集進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)所用漏洞數(shù)據(jù)的年份分布以及類別分布,如圖3和圖4所示。
Fig.3 Year distribution of experimental data圖3 實(shí)驗(yàn)數(shù)據(jù)年份分布圖
Fig.4 Class distribution diagram of experimental data圖4 實(shí)驗(yàn)數(shù)據(jù)類別分布圖
本文根據(jù)進(jìn)行實(shí)驗(yàn)所需的漏洞數(shù)據(jù),利用Python導(dǎo)入漏洞信息,包括CVE 編號(hào)、漏洞文本描述、漏洞類型三部分。部分?jǐn)?shù)據(jù)如表1所示。
4.3.1 漏洞數(shù)據(jù)預(yù)處理
(1)對(duì)漏洞文本數(shù)據(jù)進(jìn)行分詞
分詞是文本數(shù)據(jù)預(yù)處理過(guò)程中最關(guān)鍵的步驟之一,目的是將連貫漏洞文本描述語(yǔ)句切分成一個(gè)一個(gè)的獨(dú)立的單詞,以便將整個(gè)文本信息轉(zhuǎn)化為可以進(jìn)行數(shù)學(xué)統(tǒng)計(jì)及復(fù)雜分析的詞語(yǔ)集合。由于本文漏洞的描述信息是英文文本,而英文文本是以單詞為單位,詞與詞之間由空格或者標(biāo)點(diǎn)符號(hào)分隔開(kāi)來(lái),因此只需要以空格或者標(biāo)點(diǎn)作為分隔符,便可以將整個(gè)英文文本切分成獨(dú)立的詞語(yǔ)。
Table 1 Vulnerability data sheet表1 漏洞數(shù)據(jù)表
實(shí)驗(yàn)使用正則表達(dá)式進(jìn)行漏洞描述文本的分詞。如編號(hào)為CVE-1999-1431 的漏洞文本描述為“ZAK in Appstation mode allows users to bypass the"Run only allowed apps" policy by starting Explorer from Office 97...”。經(jīng)過(guò)分詞操作后,得到了單詞的集合為['zak','in','appstation','mode','allows','users','to','bypass','the','','run','only','allowed','apps','','policy','by','starting','explorer','from','office','97'...]。
(2)對(duì)漏洞文本數(shù)據(jù)進(jìn)行停用詞過(guò)濾
停用詞過(guò)濾是指去除掉在文檔樣本中頻繁出現(xiàn),但是對(duì)文本的內(nèi)容、類別等不提供或提供非常少量信息的詞,如連詞、助詞、介詞以及代詞等。另外,對(duì)于漏洞描述文本來(lái)說(shuō),“vulnerability”“allow”等詞對(duì)于漏洞的分類幾乎不能提供實(shí)質(zhì)性信息,因此這類詞語(yǔ)也應(yīng)去掉。通過(guò)去除停用詞,以大大減少文本數(shù)據(jù)的冗余信息,從而提高數(shù)據(jù)的處理效率以及后續(xù)分類算法的準(zhǔn)確性。
如編號(hào)為CVE-1999-1431 的漏洞文本經(jīng)過(guò)去除停用詞后得到的詞語(yǔ)集合為['zak','appstation','mode','users','bypass''run','only','allowed','apps','policy','starting','explorer','from','office','97','a pplications'...]。此漏洞文本經(jīng)過(guò)分詞處理后,得到52個(gè)詞,經(jīng)過(guò)過(guò)濾停用詞后詞語(yǔ)個(gè)數(shù)變?yōu)?0 個(gè)??梢?jiàn),去除停用詞可以減少數(shù)據(jù)的冗余。
4.3.2 使用S-C 特征提取法提取特征
實(shí)驗(yàn)數(shù)據(jù)通過(guò)上述的文本預(yù)處理操作之后,得到候選的特征詞集。使用本文提出的S-C特征提取法進(jìn)行特征詞的提取。首先計(jì)算每個(gè)詞語(yǔ)的綜合函數(shù)C與信息熵S,其次計(jì)算出每個(gè)詞語(yǔ)的S-C值。下面以SQL注入類別中的幾個(gè)詞語(yǔ)為例,可以看出,由于信息熵的作用,詞語(yǔ)的重要程度排序發(fā)生了改變。本實(shí)驗(yàn)中部分詞語(yǔ)的C值、S值、S-C值,以及詞語(yǔ)重要程度排序如表2所示。
Table 2 WordC/S/S-C value sort table表2 詞語(yǔ)C/S/S-C 值排序表
選取特征時(shí),將每個(gè)漏洞類別的特征詞根據(jù)S-C值進(jìn)行降序排序,每個(gè)類別分別選取前n個(gè)詞語(yǔ)共同構(gòu)成最終的特征詞集合。本實(shí)驗(yàn)最終選取每個(gè)類別前10個(gè)特征詞構(gòu)成特征集合,實(shí)驗(yàn)選取的特征如表3所示。
4.3.3 建立特征詞向量
要通過(guò)機(jī)器學(xué)習(xí)算法對(duì)文本數(shù)據(jù)進(jìn)行分析,要先把文本信息轉(zhuǎn)化成離散的數(shù)字表示的向量,以便利用算法對(duì)文本數(shù)據(jù)進(jìn)行操作。利用經(jīng)過(guò)預(yù)處理得到的一個(gè)個(gè)漏洞的詞集合,根據(jù)S-C特征提取法提取的n個(gè)特征,將每一個(gè)漏洞描述文本信息轉(zhuǎn)換成一個(gè)n維的向量vi={t1,t2,…,tn}。由于漏洞文本屬于短文本,特征詞是否出現(xiàn)是決定類別的關(guān)鍵,本實(shí)驗(yàn)并不關(guān)心特征詞出現(xiàn)的頻率。將漏洞樣本的向量化定義為:如果特征詞tj出現(xiàn)在第i個(gè)漏洞詞集中,則令vi(j)=1;如果特征詞tj沒(méi)有出現(xiàn)在第i個(gè)漏洞詞集中,則令vi(j)=0;以此完成漏洞的向量表示。例如,CVE-2001-1376的向量表示如表4所示。
4.3.4 使用AODE分類器分類
實(shí)驗(yàn)利用經(jīng)過(guò)預(yù)處理和向量化的漏洞數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),使用AODE分類器訓(xùn)練出分類模型。
為驗(yàn)證本文提出漏洞分類器的有效性,實(shí)驗(yàn)用不同的特征提取方法和不同的分類器算法分別對(duì)漏洞數(shù)據(jù)進(jìn)行分類,并利用準(zhǔn)確率Accuracy作為評(píng)價(jià)指標(biāo),評(píng)價(jià)分類器的優(yōu)劣。
Table 3 Set of feature words表3 特征詞集合
Table 4 CVE-2001-1376 vectors表4 CVE-2001-1376的向量表示
4.4.1 評(píng)價(jià)指標(biāo)
為了對(duì)特征提取算法以及分類器算法進(jìn)行優(yōu)劣的比較,需要統(tǒng)一評(píng)價(jià)標(biāo)準(zhǔn)。本文使用準(zhǔn)確率Accuracy作為評(píng)價(jià)指標(biāo),準(zhǔn)確率是指漏洞樣本屬于分類器所判定的漏洞類別的概率。公式如下所示:
其中,TPi是指屬于第i類的漏洞樣本被分類器判定為第i類的漏洞個(gè)數(shù);FPi是指屬于第i類的漏洞樣本被分類器判定為其他類別的漏洞個(gè)數(shù)。因此,利用準(zhǔn)確率這一評(píng)價(jià)指標(biāo),可以計(jì)算出分類器將漏洞分對(duì)類別的比例,以判定分類器的優(yōu)劣。
4.4.2 不同特征提取方法的比較
為了驗(yàn)證本文提出的S-C特征提取方法的有效性,實(shí)驗(yàn)使用TFIDF 特征提取法[13]、綜合函數(shù)C特征提取法和S-C特征提取法分別提取特征,利用樸素貝葉斯分類器進(jìn)行漏洞分類,最終將漏洞分類的準(zhǔn)確性進(jìn)行比較,實(shí)驗(yàn)結(jié)果如圖5所示。
Fig.5 Comparison chart of feature selection accuracy圖5 特征選擇準(zhǔn)確率對(duì)比圖
由實(shí)驗(yàn)結(jié)果可以看出,本文所提出的綜合函數(shù)C特征提取法相比較TFIDF 特征提取法,準(zhǔn)確率高出2.6 個(gè)百分點(diǎn)。驗(yàn)證了綜合函數(shù)C,利用漏洞詞語(yǔ)類間重要程度和類內(nèi)重要程度,共同作為判定漏洞詞語(yǔ)對(duì)區(qū)分類別的貢獻(xiàn)程度的合理性。其次,基于信息熵改進(jìn)的S-C特征提取法,相較TFIDF 特征提取法和綜合函數(shù)C特征提取法,準(zhǔn)確率分別高出5.6個(gè)百分點(diǎn)和3個(gè)百分點(diǎn)。驗(yàn)證了基于信息熵改進(jìn)的S-C特征提取法能夠有效地提高特征的選取質(zhì)量,選取出了對(duì)分類更加有意義的特征詞。
4.4.3 不同分類算法的比較
為了驗(yàn)證AODE 分類算法對(duì)于漏洞數(shù)據(jù)集的適用性,本文選取K近鄰分類算法(K-nearest neighbor,KNN)[14]、決策樹(shù)(decision tree,DT)[15]分類算法、樸素貝葉斯分類算法(na?ve Bayes,NB)與平均一階依賴貝葉斯分類算法(AODE)進(jìn)行對(duì)比。實(shí)驗(yàn)結(jié)果如圖6所示。
Fig.6 Comparison of classifier accuracy圖6 分類器準(zhǔn)確率對(duì)比圖
根據(jù)實(shí)驗(yàn)結(jié)果對(duì)比可以看出,決策樹(shù)分類算法和K近鄰分類算法在漏洞數(shù)據(jù)集上的準(zhǔn)確率分別為70.3%和74.8%,要低于樸素貝葉斯分類器和AODE分類器的準(zhǔn)確率。說(shuō)明在短文本的分類中,貝葉斯分類器有著良好的適用性。S-C-AODE 漏洞分類算法的準(zhǔn)確率為86.9%,分別高于S-C-KNN 分類器和S-C-DT 分類器12.1 個(gè)百分點(diǎn)、16.6 個(gè)百分點(diǎn),對(duì)比S-C-NB 分類器提高了2.1 個(gè)百分點(diǎn)。證明了SC-AODE 漏洞分類算法對(duì)于漏洞文本分類的準(zhǔn)確性,要優(yōu)于傳統(tǒng)的機(jī)器學(xué)習(xí)算法。
為了對(duì)海量增長(zhǎng)的計(jì)算機(jī)漏洞實(shí)現(xiàn)有效的自動(dòng)化分類管理,本文對(duì)計(jì)算機(jī)漏洞數(shù)據(jù)進(jìn)行了分析研究。獲取了NVD 和CNNVD 漏洞數(shù)據(jù)庫(kù)中的數(shù)據(jù),通過(guò)對(duì)漏洞描述字段的分析,本文定義了綜合函數(shù)C來(lái)表明詞語(yǔ)對(duì)類別的重要程度,并利用詞語(yǔ)對(duì)于類別的信息熵,修正詞語(yǔ)的重要程度。提出了基于S-C特征提取方法,并有效提取了漏洞的特征詞集合。結(jié)合AODE分類器對(duì)計(jì)算機(jī)漏洞進(jìn)行了文本分類。通過(guò)實(shí)驗(yàn)對(duì)比表明,S-C特征提取法能夠有效提取較優(yōu)特征詞集,并且結(jié)合AODE 分類器的分類效果要優(yōu)于傳統(tǒng)的分類器模型,驗(yàn)證了本文提出模型分類的準(zhǔn)確性。