曲瀧玉, 賈依真, 郝永樂
(中國(guó)信息安全測(cè)評(píng)中心,北京 100085)
隨著互聯(lián)網(wǎng)的飛速發(fā)展,人工智能、云計(jì)算、大數(shù)據(jù)等技術(shù)層出不窮,個(gè)人乃至社會(huì)對(duì)于信息化技術(shù)的依賴程度日趨加深,進(jìn)而導(dǎo)致大量數(shù)據(jù)泄露、網(wǎng)絡(luò)攻擊、木馬傳播等信息安全事件頻頻爆發(fā),給經(jīng)濟(jì)、政治、文化等諸多領(lǐng)域帶來了嚴(yán)重威脅,網(wǎng)絡(luò)空間安全形勢(shì)的嚴(yán)峻性不容忽視. 然而,導(dǎo)致網(wǎng)絡(luò)安全問題產(chǎn)生的主要根源在于網(wǎng)絡(luò)信息系統(tǒng)存在的安全漏洞. 安全漏洞是計(jì)算機(jī)信息系統(tǒng)在需求、設(shè)計(jì)、實(shí)現(xiàn)、配置、運(yùn)行等過程中,有意或無意產(chǎn)生的缺陷[1]. 網(wǎng)絡(luò)攻擊者可以利用漏洞對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行攻擊和破壞,從而影響計(jì)算機(jī)信息系統(tǒng)的正常運(yùn)行. 據(jù)國(guó)家信息安全漏洞庫(kù)(CNNVD)統(tǒng)計(jì),截至2018年6月,CNNVD收錄的信息安全漏洞已達(dá)110 000余個(gè),其中危害等級(jí)在中危及以上漏洞占比達(dá)93%,近5年新增漏洞數(shù)量總體呈上升趨勢(shì)[2]. 基于已有基數(shù)龐大的漏洞信息,關(guān)于漏洞自動(dòng)化分類模型的研究具有非常重大的研究意義和應(yīng)用價(jià)值,主要體現(xiàn)在以下兩方面:一方面,針對(duì)不同類型的漏洞,按其危害等級(jí)采取分類應(yīng)急措施方案,從而降低漏洞管理與系統(tǒng)維護(hù)成本,提高漏洞銷控的及時(shí)性;另一方面,不同類型的漏洞對(duì)信息系統(tǒng)所造成的危害程度不同,通過從現(xiàn)有大量漏洞描述中提取不同類型的漏洞特征屬性,進(jìn)而為未知漏洞的發(fā)現(xiàn)及解決方案的建立提供前瞻性的預(yù)警分析[3].
對(duì)于漏洞信息來說,除漏洞編碼之外,漏洞描述是區(qū)分信息安全漏洞的重要載體,以“短文本”的形式描述了該漏洞的漏洞宿主、產(chǎn)生原因、存在位置、受影響范圍等,是人們對(duì)于漏洞信息認(rèn)知和修復(fù)的最直接的信息來源. 近幾年,有關(guān)深度學(xué)習(xí)在文本分類方面的技術(shù)應(yīng)用已廣泛展開深入探索,并取得了一定的研究成果. Conneau等[4]在Y.Kim研究的基礎(chǔ)上提出一種深度卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行文本分類;杜昌順等[5]提出了使用分段卷積神經(jīng)網(wǎng)絡(luò)來進(jìn)行文本情感分析.
基于以上研究基礎(chǔ),一部分信息安全領(lǐng)域研究學(xué)者嘗試將機(jī)器學(xué)習(xí)方法應(yīng)用在漏洞自動(dòng)分類當(dāng)中,使用該方法可在一定程度上提高分類效率,避免手工分類的誤操作. Li[6]提出一種SOM聚類方法對(duì)漏洞信息進(jìn)行無監(jiān)督分類;Chen等[7]提出了一種基于支持向量機(jī)(SVM)的漏洞自動(dòng)分類模型,可對(duì)漏洞信息進(jìn)行分類、推廣和預(yù)測(cè);廖曉鋒等[8]提出一種隱含Dirichlet分布主題模型(LDA)和支持向量機(jī)(SVM)相結(jié)合的方法,在主題向量空間構(gòu)建一個(gè)自動(dòng)漏洞分類器,其準(zhǔn)確度提高8%. 其中,絕大部分研究工作以國(guó)外漏洞庫(kù)的漏洞信息作為實(shí)驗(yàn)數(shù)據(jù),僅在詞匯向量空間層面構(gòu)建漏洞分類模型,不足以應(yīng)對(duì)國(guó)內(nèi)信息安全漏洞分類需求.
為了更加適用于國(guó)內(nèi)漏洞的分析研究,并在已有的基礎(chǔ)上提高分類效率,本文以國(guó)家信息安全漏洞庫(kù)(以下簡(jiǎn)稱“CNNVD”)的漏洞信息作為實(shí)驗(yàn)數(shù)據(jù),建立基于CNN和文本語義的漏洞自動(dòng)分類模型. 通過自動(dòng)化判定威脅類型,進(jìn)一步對(duì)危害級(jí)別較高、影響較為嚴(yán)重的安全漏洞,及時(shí)快速開展預(yù)警通報(bào)和修復(fù)消控,從而提高漏洞處置效力.
根據(jù)漏洞的多方面屬性,目前國(guó)內(nèi)外針對(duì)多個(gè)維度已形成不同的漏洞分類標(biāo)準(zhǔn),主要有3大類,分別為基于利用位置的分類,基于生命周期的分類和基于技術(shù)類型的分類. 本文漏洞分類研究工作從技術(shù)類型的角度出發(fā),采用了CNNVD漏洞分類標(biāo)準(zhǔn). 該標(biāo)準(zhǔn)將信息安全漏洞按照其形成原因及危害影響劃分為5個(gè)層次26種類型,判別漏洞類型時(shí)可根據(jù)漏洞類型的層次關(guān)系,按照包含關(guān)系依次分別是:配置錯(cuò)誤、代碼問題、資源管理錯(cuò)誤、數(shù)字錯(cuò)誤、信息泄露、競(jìng)爭(zhēng)條件、輸入驗(yàn)證、緩沖區(qū)錯(cuò)誤、格式化字符串、跨站腳本、路徑遍歷、后置鏈接、SQL注入、注入、代碼注入、命令注入、操作系統(tǒng)命令注入、安全特征問題、授權(quán)問題、信任管理、加密問題、未充分驗(yàn)證數(shù)據(jù)可靠性、跨站請(qǐng)求偽造、權(quán)限許可和訪問控制、訪問控制錯(cuò)誤、資料不足. 目前,CNNVD所有收錄的漏洞信息均按照上述標(biāo)準(zhǔn)進(jìn)行分類.
卷積神經(jīng)網(wǎng)絡(luò)是一種深度監(jiān)督學(xué)習(xí)下的機(jī)器學(xué)習(xí)模型,具備善于挖掘數(shù)據(jù)局部特征、適應(yīng)性強(qiáng)的特點(diǎn),是近幾年計(jì)算機(jī)視覺、語音識(shí)別等眾多科學(xué)領(lǐng)域的研究熱點(diǎn)之一,并逐步在自然語言處理中得到廣泛應(yīng)用.
卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)由輸入層、卷積層(convolution)、池化層(pooling)、全連接層及輸出層構(gòu)成[9-12]. 其中,卷積層是特征提取的重要模塊,由多個(gè)特征映射圖組成,其主要特點(diǎn)是局部感知和權(quán)重共享. 卷積層的神經(jīng)元通過卷積核(kernel)與上一層特征面的局部區(qū)域相連,由卷積核在整個(gè)特征映射圖(feature map)上進(jìn)行卷積,捕捉整個(gè)圖像或者文本的特征. 而卷積核有深淺之分,淺層卷積核捕捉的是弱抽象類特征,如圖像邊緣,文本某個(gè)詞的類別等. 隨著層數(shù)增多,非線性程度開始增強(qiáng),卷積后得到的是較深層次的抽象特征,如圖像中的具有某些特定形狀的物體或者文本中上下文的關(guān)系等. 每一層的卷積輸出都是對(duì)輸入信息特征的進(jìn)一步提取和整合. 池化層位于卷積層之后,同樣由多個(gè)特征映射圖組成,并與上一層一一映射. 池化層用于獲取圖像或文本中最有價(jià)值的信息片段,忽略對(duì)模型有少量促進(jìn)甚至抑制的信息. 從而在保留顯著的特征信息的基礎(chǔ)上有效降低輸出結(jié)果的維度,減小了網(wǎng)絡(luò)規(guī)模和參數(shù)的作用,防止過擬合. 全連接層是將每一層結(jié)點(diǎn)都與上一層的所有結(jié)點(diǎn)相連,綜合以上提取的全部特征. 為防止此層參數(shù)過多而導(dǎo)致過擬合,多數(shù)網(wǎng)絡(luò)中在全連接后加入dropout層隨機(jī)對(duì)參數(shù)進(jìn)行舍棄不更新,以一定概率將全連接隱層結(jié)點(diǎn)的值設(shè)為0[11].
本文采用CNN模型針對(duì)漏洞描述的短文本進(jìn)行安全漏洞分類. 把漏洞分類模型分為3個(gè)模塊:文本詞向量預(yù)處理模塊;包含卷積層和池化層的特征提取模塊;回歸分類模塊. 結(jié)合CNN和文本語義的漏洞分類流程如圖1所示.
圖1 基于CNN的漏洞分類流程Fig.1 The process of vulnerability classification based on CNN
第一部分是詞向量預(yù)處理模塊,對(duì)輸入的漏洞文本數(shù)據(jù)進(jìn)行預(yù)處理,包括分詞與去除停用詞. 對(duì)漏洞描述文本進(jìn)行詞處理,然后根據(jù)每個(gè)詞的特征利用Word2vec算法提取每個(gè)詞的特征,作為CNN模型的輸入層. 使用詞向量層對(duì)文本信息進(jìn)行矢量化,將原始One-Hot編碼的詞(長(zhǎng)度為詞庫(kù)大小)映射到低維向量表達(dá),降低特征維數(shù). 本質(zhì)上是特征提取器,在指定維度中編碼語義特征,這樣語義相近詞之間的歐氏距離或余弦距離也比較近.
第二部分是特征提取模塊,將矢量層得到固定維度詞向量輸入到特征提取模塊,經(jīng)卷積層后送入、ReLU激活層、池化層和全連接層. 為防止模型過擬合并在測(cè)試集上達(dá)到很好的泛化效果,在每層卷積后增加batchnorm層通過batchnorm層對(duì)數(shù)據(jù)做歸一化操作去除數(shù)據(jù)相關(guān)性,減小數(shù)據(jù)的絕對(duì)差異,突出其相對(duì)差異,使模型更穩(wěn)定的同時(shí)加快收斂速度.
首先,求出當(dāng)前batch數(shù)據(jù)x的均值為
(1)
其次,計(jì)算當(dāng)前batch的方差為
(2)
再次,對(duì)當(dāng)前batch數(shù)據(jù)x做歸一化操作:
(3)
第三部分是回歸分類模塊,本文采用具有類間抑制作用的的softmax層對(duì)漏洞文本特征進(jìn)行分類預(yù)測(cè). 訓(xùn)練時(shí)采用交叉熵函數(shù)計(jì)算漏洞分類損失,公式如下所示.
(4)
(5)
m=maxzi.
以漏洞描述“遠(yuǎn)程攻擊者可通過提交特制的URL利用該漏洞繞過身份驗(yàn)證,訪問重要的服務(wù).”為例,其安全漏洞類型判定示意圖如圖2所示.
步驟1 對(duì)該段描述進(jìn)行預(yù)處理,輸出“遠(yuǎn)程 攻擊者 提交 利用 漏洞 繞過 身份 驗(yàn)證訪問 服務(wù)”,并將其進(jìn)行矢量化;
步驟2 通過CNN網(wǎng)絡(luò)的卷積層、池化層、全連接層,對(duì)該矢量層進(jìn)行特征提取;
步驟3 通過回歸分類計(jì)算,根據(jù)漏洞類型最大概率,該漏洞類型為授權(quán)問題.
圖2 基于CNN的漏洞分類模型結(jié)構(gòu)Fig.2 The structure of vulnerability classification model based on CNN
本實(shí)驗(yàn)數(shù)據(jù)來自國(guó)家信息安全漏洞庫(kù)(CNNVD)發(fā)布的互聯(lián)網(wǎng)公開漏洞信息,截止2018年6月13日,CNNVD收錄漏洞數(shù)據(jù)總量已達(dá)110 736個(gè). 本文選取其中最為常見的6個(gè)漏洞類型進(jìn)行實(shí)驗(yàn),分別是:輸入驗(yàn)證、授權(quán)問題、注入、緩沖區(qū)溢出、跨站腳本、信息泄露. 其中每個(gè)漏洞信息包含以下屬性項(xiàng):漏洞名稱、CNNVD編號(hào)、漏洞類型、危害等級(jí)等. 本文采用CNNVD的漏洞描述文本作為輸入,按照6∶1的比例分配訓(xùn)練集與測(cè)試集. 表1為CNNVD漏洞數(shù)據(jù)樣例,截取本文重點(diǎn)關(guān)注項(xiàng)目.
表1 CNNVD漏洞數(shù)據(jù)描述Tab.1 CNNVDD escription of vulnerability data
采用圖像分類任務(wù)中的F1值作為衡量漏洞分類的性能指標(biāo),計(jì)算F1值公式如下:
(6)
F1可以同時(shí)兼顧召回率R(recall)和準(zhǔn)確率P(precision)反映漏洞分類模型的整體性能.
實(shí)驗(yàn)采用facebook開源框架pytorch搭建CNN網(wǎng)絡(luò)進(jìn)行驗(yàn)證漏洞分類效果[13],在CNN模型中使用word2vec預(yù)先訓(xùn)練256位詞向量. 采用inception網(wǎng)絡(luò)結(jié)構(gòu)提取特征,選擇3、4、5三種尺度的卷積核,每種卷積核數(shù)目設(shè)置為相同的數(shù)值,最后分類輸出數(shù)目為6,使用自適應(yīng)梯度優(yōu)化算法ADAM訓(xùn)練模型. 同時(shí)為了驗(yàn)證batchnorm的有效性,本文嘗試兩種實(shí)驗(yàn)策略.
策略1:去除所有batchnorm層,在最后的全連接層后增加dropout層,dropout層隨機(jī)參數(shù)設(shè)為0.5.
策略2:去除dropout層,所有卷積層和全連接層增加batchnorm層. 經(jīng)試驗(yàn)表明如圖2所示,增加batchnorm層的分類模型在20 000次迭代即收斂到穩(wěn)定,而dropout達(dá)到相同的F1值需要40 000次迭代. 采用batchnorm層可以提升1倍以上的訓(xùn)練速度,性能較dropout網(wǎng)絡(luò)模型高1個(gè)點(diǎn),而且模型具有更好的穩(wěn)定性.
圖3 收斂速度曲線圖Fig.3 Curve of convergence rate
本文進(jìn)一步與傳統(tǒng)文本分類方法SVM模型進(jìn)行比較,在表2中,“Ours_DropOut”是在CNN基礎(chǔ)上增加DropOut層,“Ours_BatchNorm”是在CNN基礎(chǔ)上每個(gè)卷積層之后增加BatchNorm規(guī)范化數(shù)據(jù),由表2實(shí)驗(yàn)結(jié)果可知,基于CNN和文本語義的漏洞自動(dòng)分類方法顯著高于傳統(tǒng)SVM方法.
表2 漏洞分類測(cè)試結(jié)果Tab.2 Vulnerability classification test results
為解決大規(guī)模漏洞分類,提出了一種基于CNN和文本語義的信息安全漏洞分類方法,以國(guó)家信息安全漏洞庫(kù)(CNNVD)的漏洞數(shù)據(jù)作為實(shí)驗(yàn)對(duì)象,在文本預(yù)處理的基礎(chǔ)上利用CNN善于從短文本中挖掘特征的優(yōu)點(diǎn),對(duì)國(guó)家信息安全漏洞庫(kù)收錄的信息安全漏洞進(jìn)行自動(dòng)分類,實(shí)驗(yàn)結(jié)果表明相對(duì)于傳統(tǒng)的分類方法,CNN在準(zhǔn)確率、召回率等有了一定的提高. 未來的研究工作主要是將該算法應(yīng)用到重大安全漏洞的及時(shí)快速預(yù)警系統(tǒng)上,以便針對(duì)漏洞類型的不同危害識(shí)別采取有效的防范措施,維護(hù)良好的網(wǎng)絡(luò)安全環(huán)境.