郭軍軍,王 樂(lè),王正源,姚大春,王長(zhǎng)元
(1.西安工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,陜西 西安 710021; 2.長(zhǎng)安大學(xué) 信息工程學(xué)院,陜西 西安 710064)
隨著社會(huì)信息化的不斷發(fā)展,軟件已成為促進(jìn)經(jīng)濟(jì)增長(zhǎng)的支柱產(chǎn)業(yè)。軟件帶來(lái)巨大經(jīng)濟(jì)效益的同時(shí),風(fēng)險(xiǎn)和挑戰(zhàn)并存。2020年上半年,據(jù)《第46次中國(guó)互聯(lián)網(wǎng)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》顯示,國(guó)家互聯(lián)網(wǎng)應(yīng)急中心(CNCERT)檢測(cè)到我國(guó)境內(nèi)被篡改的網(wǎng)站數(shù)量為147 682個(gè),是2019年同期的近3倍,其中包括政府網(wǎng)站581個(gè),較上年同期增長(zhǎng)57%。軟件安全問(wèn)題十分嚴(yán)峻,信息竊取、程序崩潰等安全事件層出不窮,尤其是政府單位、醫(yī)療機(jī)構(gòu)、科技企業(yè)等成為攻擊的重要目標(biāo),造成較大的負(fù)面影響和經(jīng)濟(jì)損失[1,2]。
Google公司于2012年提出知識(shí)圖譜(Knowledge Graph),開(kāi)啟了知識(shí)圖譜的序章,在信息安全、語(yǔ)義搜索等眾多領(lǐng)域具有廣泛的應(yīng)用價(jià)值[3-5]。從本質(zhì)上講,知識(shí)圖譜是一種語(yǔ)義網(wǎng)絡(luò),旨在描繪客觀實(shí)體和實(shí)體之間的關(guān)系,挖掘隱藏在實(shí)體之間的語(yǔ)義信息,促進(jìn)了人工智能的發(fā)展,同時(shí)也為軟件安全研究領(lǐng)域指引了新的研究方向。
本文針對(duì)漏洞數(shù)據(jù)利用價(jià)值低、漏洞語(yǔ)義不夠豐富、分析手段欠缺等問(wèn)題,提出一種軟件安全漏洞知識(shí)圖譜構(gòu)建方法。從碎片化、海量化漏洞數(shù)據(jù)中提取關(guān)鍵信息,用于構(gòu)建漏洞知識(shí)圖譜,提高了漏洞數(shù)據(jù)利用價(jià)值,且豐富了漏洞語(yǔ)義信息,使用Cypher查詢結(jié)果分析漏洞實(shí)體間的關(guān)系,提高了分析效率,且能挖掘出隱藏的知識(shí),彌補(bǔ)了分析手段的不足。
知識(shí)圖譜(Knowledge Graph)是一種用圖模型來(lái)刻畫知識(shí)和建模世界萬(wàn)物之間的關(guān)聯(lián)關(guān)系,由節(jié)點(diǎn)和邊組成[6]。知識(shí)圖譜構(gòu)建關(guān)鍵技術(shù)包括知識(shí)抽取、知識(shí)融合以及知識(shí)計(jì)算。通過(guò)知識(shí)抽取可以從半結(jié)構(gòu)化及非結(jié)構(gòu)化的數(shù)據(jù)中提取實(shí)體、關(guān)系以及屬性等;知識(shí)融合將多元信息進(jìn)行整合,獲得實(shí)體的整體描述;知識(shí)計(jì)算則是通過(guò)推理、分析挖掘隱藏的知識(shí)[7]。
本體作為知識(shí)圖譜實(shí)體的抽象表達(dá),其起源于哲學(xué)領(lǐng)域,用于描述特定領(lǐng)域的概念、屬性、公理等[8]。良好的本體設(shè)計(jì)有利于知識(shí)圖譜的構(gòu)建。例如,謝敏容[9]針對(duì)現(xiàn)有的網(wǎng)絡(luò)安全本體側(cè)重點(diǎn)不同,難以適用于復(fù)雜多樣系統(tǒng)的網(wǎng)絡(luò)安全數(shù)據(jù)源,在現(xiàn)有的基礎(chǔ)上,結(jié)合網(wǎng)絡(luò)安全數(shù)據(jù),綜合考慮了不同維度要素,設(shè)計(jì)了具有通用性強(qiáng)的網(wǎng)絡(luò)安全領(lǐng)域本體,為網(wǎng)絡(luò)安全知識(shí)圖譜的構(gòu)建奠定了基礎(chǔ)。
在軟件安全研究領(lǐng)域中,知識(shí)圖譜可以用來(lái)表示供應(yīng)商、產(chǎn)品、漏洞等,以及復(fù)雜漏洞之間的關(guān)系,可應(yīng)用于漏洞跟蹤、推理、挖掘等[10-12]。針對(duì)漏洞應(yīng)用范圍的不同,部分學(xué)者從不同的角度構(gòu)建了軟件安全漏洞知識(shí)圖譜。例如,Lin等[13]提出了軟件知識(shí)圖譜,用來(lái)表示軟件領(lǐng)域、項(xiàng)目和系統(tǒng)中相關(guān)知識(shí),節(jié)點(diǎn)表示軟件知識(shí)實(shí)體,有向邊表示實(shí)體之間的各種關(guān)系;王飛等[14]詳細(xì)闡述了代碼知識(shí)圖譜的建模表示、存儲(chǔ)與演化管理以及智能化應(yīng)用等5個(gè)方面研究發(fā)展趨勢(shì),為代碼知識(shí)圖譜進(jìn)行智能化軟件開(kāi)發(fā)提供了保障;Xiao等[15]提出一種知識(shí)圖譜的嵌入方法,將軟件安全實(shí)體、關(guān)系以及描述信息嵌入到向量空間中,可以預(yù)測(cè)軟件安全實(shí)體關(guān)系;Zhang等[16]利用知識(shí)圖譜嵌入的方法提取代碼之間的相互關(guān)系,結(jié)合關(guān)鍵字雙向監(jiān)督機(jī)制進(jìn)行Bug定位;Yin等[17]針對(duì)PHP語(yǔ)言Web應(yīng)用系統(tǒng)進(jìn)行各種漏洞檢測(cè),提出了一種基于知識(shí)圖譜的半自動(dòng)化系統(tǒng),該系統(tǒng)能夠有效檢查Web系統(tǒng)中常見(jiàn)的漏洞。
知識(shí)圖譜能夠反映出實(shí)體和實(shí)體之間的關(guān)系,而本體(Ontology)是對(duì)實(shí)體以及實(shí)體間的關(guān)系的一種抽象性表達(dá),因此優(yōu)良的本體構(gòu)建能夠明確知識(shí)圖譜中包含信息和關(guān)系的種類。本體通常用五元組來(lái)表示,即O=(C,A,R,F,I)。 其中,O表示本體,C表示概念類集合,A表示屬性集合,R表示類與類之間的關(guān)系集合,F(xiàn)表示公理集合,I表示實(shí)例集合。
本文在現(xiàn)有本體構(gòu)建的基礎(chǔ)上[18],總結(jié)出本體構(gòu)建4步法,具體步驟如下:
(1)明確本體的領(lǐng)域和范疇。本文面向的是軟件安全領(lǐng)域,范疇是NVD(national vulnerability database)和CVE(common vulnerabilities exposures)軟件安全領(lǐng)域內(nèi)的知識(shí)。
(2)考查對(duì)現(xiàn)有的軟件安全本體進(jìn)行復(fù)用,有利于本體的構(gòu)建效率。
(3)依據(jù)現(xiàn)有數(shù)據(jù)源的特性,對(duì)軟件安全領(lǐng)域概念類集合、類之間關(guān)系集合以及屬性集合3部分的確定。
(4)針對(duì)構(gòu)建的軟件安全領(lǐng)域本體評(píng)估,檢驗(yàn)是否能夠覆蓋數(shù)據(jù)源,并不斷對(duì)本體進(jìn)行調(diào)整、優(yōu)化和完善。
如圖1所示,構(gòu)建了軟件安全漏洞知識(shí)圖譜的本體模型。其中,概念類包括供應(yīng)商(Vendor,Ven)、受影響的產(chǎn)品(Product,Prod)、漏洞(Vulnerability,Vul)和漏洞類型(Vulnerability Type,VT);類和類之間的關(guān)系包括屬于(BelongTO)、影響(Affect)和存在CWE(HasCWE);屬性集合包括版本號(hào)(Version)、漏洞描述(Description)等;公理集合,通常用于知識(shí)推理,如緩沖區(qū)溢出會(huì)導(dǎo)致程序崩潰;實(shí)例集合,如軟件安全本體中的“漏洞”類中具體的漏洞,如CVE-2019-12980、CVE-2018-3719等。
以漏洞實(shí)例CVE-2017-9796展現(xiàn)實(shí)體之間存在的關(guān)系,結(jié)合形式化定義則如下:
其中Apache表示的是具體廠商,Commons1.2.0表示具體產(chǎn)品以及版本號(hào),該漏洞屬于不正確的輸入驗(yàn)證,漏洞的本體模型中涵蓋了多維數(shù)據(jù)標(biāo)簽,所有實(shí)體的屬性標(biāo)簽都是從NVD、CVE等漏洞庫(kù)中抽取而來(lái)。因此,某個(gè)特定的CVE-ID漏洞能夠直接或間接影響一個(gè)以及一系列產(chǎn)品,該產(chǎn)品屬于某個(gè)供應(yīng)商,屬于某一種類型的漏洞。
漏洞知識(shí)圖譜構(gòu)建是以數(shù)據(jù)的獲取為起點(diǎn),通過(guò)網(wǎng)絡(luò)爬蟲進(jìn)行數(shù)據(jù)的采集,然后經(jīng)過(guò)知識(shí)抽取、知識(shí)融合形成統(tǒng)一的知識(shí),最后將獲取到的知識(shí)存儲(chǔ)到Neo4j圖數(shù)據(jù)庫(kù)中,并實(shí)現(xiàn)存儲(chǔ)、查詢以及可視化展示,構(gòu)建框架如圖2所示。
圖1 漏洞知識(shí)圖譜本體模型
圖2 漏洞知識(shí)圖譜構(gòu)建框架
漏洞樣本數(shù)據(jù)的采集是構(gòu)建漏洞知識(shí)圖譜的第一步,本文主要面向的是NVD和CVE漏洞數(shù)據(jù)庫(kù),這些信息通常是以非結(jié)構(gòu)化的文本形式存在。CVE漏洞披露規(guī)范是信息安全行業(yè)常用的標(biāo)準(zhǔn)。在CVE中,每個(gè)漏洞都有確定的ID、漏洞描述、漏洞來(lái)源、發(fā)布時(shí)間等信息,便于實(shí)現(xiàn)數(shù)據(jù)的共享。一個(gè)漏洞在CVE網(wǎng)站中披露,首先安全人員提交漏洞,然后安全專家進(jìn)行審查和驗(yàn)證,一旦被安全專家確認(rèn),將會(huì)分配漏洞編號(hào)并在CVE站點(diǎn)公布。NVD是與CVE兼容的,收錄了所有CVE條目,且提供了除CVE之外的信息,如危害等級(jí)、CWE分類等。
目前,軟件漏洞以不同的形式存在于不同的位置,具有數(shù)據(jù)規(guī)模龐大,分布不同,種類復(fù)雜多樣,參差不齊,且異構(gòu)多源。針對(duì)以上漏洞數(shù)據(jù)的特點(diǎn),考慮到數(shù)據(jù)信息量較大,故對(duì)于漏洞數(shù)據(jù)的采集主要以網(wǎng)絡(luò)爬蟲為主,通過(guò)深入分析NVD和CVE公開(kāi)披露的漏洞數(shù)據(jù)庫(kù)網(wǎng)站發(fā)布機(jī)制,獲取漏洞信息,一旦發(fā)現(xiàn)新漏洞的發(fā)布,立即進(jìn)行爬取,因此具有較強(qiáng)的實(shí)時(shí)性。
通過(guò)上述步驟獲取到的數(shù)據(jù)存在冗余無(wú)序,無(wú)層次邏輯關(guān)系等問(wèn)題,不便于漏洞知識(shí)圖譜的構(gòu)建,故需要對(duì)獲取到的數(shù)據(jù)進(jìn)行預(yù)處理。預(yù)處理的具體過(guò)程如下:
(1)數(shù)據(jù)清洗
對(duì)于個(gè)別漏洞數(shù)據(jù),通過(guò)網(wǎng)絡(luò)爬蟲獲取得到信息相關(guān)性較小,無(wú)用信息也被下載。對(duì)于這一部分信息可以通過(guò)優(yōu)化爬蟲代碼,也可以通過(guò)手工方式進(jìn)行人工篩選剔除,經(jīng)處理后的漏洞數(shù)據(jù)仍存儲(chǔ)在本地漏洞源代碼數(shù)據(jù)庫(kù)中。
(2)數(shù)據(jù)的分類
經(jīng)數(shù)據(jù)清洗后得到的漏洞數(shù)據(jù)文件雜亂無(wú)序,不利于后續(xù)的研究,需要對(duì)清洗后的漏洞數(shù)據(jù)進(jìn)行分類。因漏洞庫(kù)中每個(gè)漏洞都有確定的CWE-ID和CVE-ID,故分類的標(biāo)準(zhǔn)是以CWE-ID為根節(jié)點(diǎn),CVE-ID為葉子節(jié)點(diǎn)。
(3)分詞
漏洞數(shù)據(jù)描述中包含了漏洞重要的信息,如受影響的產(chǎn)品、漏洞類型以及部分供應(yīng)商等,因此在漏洞描述中提取重要的漏洞信息至關(guān)重要。文本分詞以自然語(yǔ)言為基礎(chǔ),是將連續(xù)的字符串序列按照一定規(guī)則轉(zhuǎn)為詞序列的過(guò)程。本文主要通過(guò)Python調(diào)用SpaCy庫(kù)進(jìn)行分詞,SpaCy分詞具有速度較快,準(zhǔn)確率較高,分詞是為了便于后續(xù)分析及實(shí)體識(shí)別。
(4)文本特征提取
在自然語(yǔ)言處理中,要將文本數(shù)據(jù)轉(zhuǎn)為計(jì)算機(jī)可以理解的一種數(shù)據(jù),才能通過(guò)模型不斷地學(xué)習(xí)、訓(xùn)練。特征提取作為文本分類中的關(guān)鍵技術(shù),特征提取的質(zhì)量直接影響到文本分類的效果。詞向量作為自然語(yǔ)言處理技術(shù)的一種,采用詞向量技術(shù)對(duì)軟件安全漏洞訓(xùn)練得到的詞向量作為模型的輸入,有利于提高模型訓(xùn)練的性能。詞向量將待標(biāo)注序列的每個(gè)詞進(jìn)行嵌入處理,并將其轉(zhuǎn)為向量,采用數(shù)學(xué)表達(dá)式獲取詞的語(yǔ)法和語(yǔ)義相關(guān)特征,便于后續(xù)實(shí)體識(shí)別。
目前,主要包括基于規(guī)則和詞典、基于機(jī)器學(xué)習(xí)的方法以及基于深度學(xué)習(xí)的方法。面向軟件漏洞實(shí)體識(shí)別主要針對(duì)供應(yīng)商、受影響的產(chǎn)品、漏洞、漏洞類型4類實(shí)體進(jìn)行識(shí)別。其中,供應(yīng)商表示如微軟、蘋果、思科等公司,供應(yīng)商的屬性標(biāo)簽包括公司名稱、編號(hào)以及對(duì)應(yīng)的URL鏈接等;受影響的產(chǎn)品表示的是如谷歌Chrome、360瀏覽器等,產(chǎn)品的屬性標(biāo)簽包括產(chǎn)品名、產(chǎn)品的版本號(hào),如Apache下的分布式內(nèi)存系統(tǒng)內(nèi)核Mesos,對(duì)應(yīng)的版本如Mesos 1.1.2、Mesos 1.2.0、Mesos 1.3.0等;漏洞實(shí)體則表示的是某一特定的漏洞CVE-ID,如CVE-2018-16976、CVE-2018-18397;漏洞類型的屬性標(biāo)簽中包含CWE-ID,例如,CWE-79表示的是跨站腳本攻擊,CWE-22表示的是目錄遍歷等,面向軟件的實(shí)體以及相關(guān)屬性具體信息見(jiàn)表1。
表1 面向軟件實(shí)體及屬性
漏洞的相關(guān)屬性標(biāo)簽主要是來(lái)自于公開(kāi)漏洞庫(kù)CVE和NVD等信息的分析、總結(jié)和歸納,豐富多樣的屬性標(biāo)簽更有利于分析漏洞的相關(guān)特征,挖掘潛在的漏洞之間的關(guān)系。本文在漏洞的屬性中涵蓋了多種標(biāo)簽如漏洞文件名(PathName)、風(fēng)險(xiǎn)數(shù)值(Cvss)、編程語(yǔ)言(Language)等漏洞屬性信息,具體漏洞描述見(jiàn)表2。
在軟件安全領(lǐng)域中,通過(guò)對(duì)非結(jié)構(gòu)化的文本數(shù)據(jù)進(jìn)行大量的研究和分析,得出部分實(shí)體及屬性具有一定的規(guī)則。例如,NVD和CVE漏洞編號(hào)遵循特定的命名方式,都是以“CVE+年份+任意數(shù)字”,基于規(guī)則的實(shí)體識(shí)別具有高精度、高召回率和可擴(kuò)展性,因此對(duì)于具體某個(gè)漏洞編號(hào)可以通過(guò)設(shè)計(jì)正則表達(dá)式進(jìn)行提取該實(shí)體,不再需要其它的方法進(jìn)行實(shí)體識(shí)別,漏洞的其它屬性通過(guò)漏洞庫(kù)中分析的相關(guān)屬性一一對(duì)應(yīng),部分實(shí)體和屬性的正則表達(dá)式規(guī)則模板見(jiàn)表3。
表2 漏洞屬性描述
表3 部分實(shí)體與屬性正則表達(dá)式
因NVD、CVE每一個(gè)漏洞編號(hào)都代表著一種特定的漏洞,每一個(gè)特定漏洞都包含漏洞相關(guān)描述,而漏洞描述是部分領(lǐng)域?qū)<医o出的高質(zhì)量非結(jié)構(gòu)化文本信息,具有一定的權(quán)威性。漏洞描述中涵蓋了受影響的產(chǎn)品、漏洞類型以及部分供應(yīng)商,故需要對(duì)這3類實(shí)體進(jìn)行識(shí)別,具體如下所示:
(1)實(shí)體標(biāo)注策略
目前,以深度學(xué)習(xí)為代表的人工智能得到了快速的發(fā)展,規(guī)范的數(shù)據(jù)集標(biāo)注對(duì)知識(shí)圖譜的構(gòu)建以及計(jì)算能力的提升起到了重要作用。針對(duì)知識(shí)圖譜構(gòu)建的數(shù)據(jù)集,一方面基于小樣本的學(xué)習(xí)算法已經(jīng)成為了主流,另一方面,如何統(tǒng)一標(biāo)注的方法以及標(biāo)注的質(zhì)量已經(jīng)成為了重要的內(nèi)容。
因漏洞編號(hào)具有一定的規(guī)則性,故只需要對(duì)廠商、產(chǎn)品名和漏洞類型進(jìn)行實(shí)體識(shí)別。針對(duì)以上3類軟件安全領(lǐng)域的相關(guān)實(shí)體,采用BIOES方法進(jìn)行標(biāo)注,Ven、Prod、VT分別表示廠商、產(chǎn)品、漏洞類型,用X表示這3類實(shí)體。B-X代表實(shí)體的開(kāi)始部分,I-X表示實(shí)體的中間部分,E-X表示實(shí)體的結(jié)束部分,S-X表示單個(gè)字符的實(shí)體,O表示其它非實(shí)體部分,實(shí)體的標(biāo)注集見(jiàn)表4。
表4 軟件安全實(shí)體標(biāo)注集
圖3截取了某一特定漏洞描述的標(biāo)注示例,該漏洞描述中包含了漏洞類型Integer Overflow標(biāo)記為(B-VT,E-VT),其它與標(biāo)注無(wú)關(guān)的詞則標(biāo)記為非實(shí)體(O)。盡管手工標(biāo)注的方法耗費(fèi)大量時(shí)間和精力,但標(biāo)注的數(shù)據(jù)集準(zhǔn)確,便于后續(xù)模型的識(shí)別。
圖3 部分實(shí)體標(biāo)注示例
(2)實(shí)體識(shí)別模型
本文通過(guò)BiLSTM-CRF進(jìn)行軟件實(shí)體識(shí)別,該模型使用了通過(guò)長(zhǎng)短記憶神經(jīng)網(wǎng)絡(luò)與CRF相結(jié)合的方法進(jìn)行實(shí)體識(shí)別,自頂向下包括CRF、前向LSTM網(wǎng)絡(luò)層、后向LSTM網(wǎng)絡(luò)層和Embedding層,模型架構(gòu)如圖4所示。
圖4 BiLSTM-CRF實(shí)體識(shí)別模型
首先將特定漏洞的相關(guān)描述中的單詞為基本單位,經(jīng)過(guò)分詞后按照字或者詞為輸入,對(duì)于給定包含n個(gè)詞的句子s={w1,w2,w3,…wn}, 其中wn表示輸入句中的第n個(gè)單詞,將單詞映射到多維連續(xù)值的詞向量中。經(jīng)過(guò)詞向量化后,將初始值傳入到BiLSTM網(wǎng)絡(luò)層中,前向LSTM和后向LSTM分別作為初始的順序序列和逆序序列。然后通過(guò)BiLSTM層進(jìn)行有監(jiān)督訓(xùn)練學(xué)習(xí),以此獲得輸入單詞序列基本特征,并將預(yù)測(cè)結(jié)果歸一化輸出提供給最終的CRF層,最后通過(guò)CRF層將上一層的輸入預(yù)測(cè)標(biāo)簽進(jìn)行約束矯正,實(shí)現(xiàn)對(duì)標(biāo)簽數(shù)據(jù)的準(zhǔn)確分類。
由于軟件安全領(lǐng)域中的實(shí)體關(guān)系種類繁多,不利于實(shí)體關(guān)系的抽取。面向軟件的漏洞關(guān)系抽取主要針對(duì)供應(yīng)商、受影響的產(chǎn)品、漏洞和漏洞類型這4類實(shí)體。因此,本文對(duì)軟件安全實(shí)體關(guān)系進(jìn)行了泛化,人工篩選并定義了較為全面的關(guān)系種類,能夠保證覆蓋軟件安全實(shí)體識(shí)別中的實(shí)體,所識(shí)別出的實(shí)體互相都存在著一定的關(guān)系。面向軟件關(guān)系抽取包括屬于(BelongTo)、影響(Affect)、存在CWE-ID(HasCWE)詳細(xì)信息見(jiàn)表5。
表5 面向軟件實(shí)體之間的關(guān)系
知識(shí)融合本質(zhì)就是將多元信息進(jìn)行整合,完成整體實(shí)體的描述,主要的技術(shù)包括實(shí)體消歧、實(shí)體對(duì)齊和屬性對(duì)齊等。因本文所獲取的軟件安全實(shí)體來(lái)自于專有的實(shí)體知識(shí)庫(kù),故有效減少了“一詞多義”現(xiàn)象,避免了實(shí)體之間可能存在的歧義性,因此重點(diǎn)考慮實(shí)體對(duì)齊和屬性融合。
本文的實(shí)體和屬性來(lái)自于NVD和CVE之間交叉互補(bǔ)信息,同一漏洞實(shí)體字段信息有所差異。在漏洞知識(shí)圖譜構(gòu)建過(guò)程中可能因此產(chǎn)生歧義,從而導(dǎo)致實(shí)體語(yǔ)義粒度不一致,存在冗余,造成系統(tǒng)較大的開(kāi)銷。因此需要將兩個(gè)漏洞庫(kù)之間交叉互補(bǔ)的實(shí)體信息進(jìn)行對(duì)齊,統(tǒng)一為本文所構(gòu)建規(guī)范的實(shí)體和屬性字段。例如,在CVE中字段“CVE-ID”對(duì)應(yīng)的字段是NVD中“CVE_ID”,表示的是具體某一特定的實(shí)體,統(tǒng)一規(guī)范為“CVE-ID”;CVE中的屬性字段“Description”對(duì)應(yīng)是NVD中的“Current Description”,表示的是對(duì)特定漏洞的描述,統(tǒng)一規(guī)范為“Description”;CVE中的屬性字段“Date Record Crated”對(duì)應(yīng)的是NVD中“Published Date”表示的是漏洞的發(fā)布時(shí)間,統(tǒng)一規(guī)范為“Publish Date”,時(shí)間格式統(tǒng)一規(guī)范為“年-月-日”等,通過(guò)對(duì)實(shí)體對(duì)齊,使信息能夠更加規(guī)范,更加準(zhǔn)確,有效減少了系統(tǒng)的開(kāi)銷。在CVE中部分屬性字段不存在,但在NVD能夠有效的互補(bǔ),如漏洞類型,該字段是區(qū)分漏洞的類型,“Base Score”字段表示的是基礎(chǔ)得分等等,CVE和NVD互補(bǔ)提供了豐富可靠的字段信息。此外,部分實(shí)體存在異構(gòu)問(wèn)題,不同的實(shí)體可能指代同一個(gè)實(shí)體,大量共指性問(wèn)題造成不必要的開(kāi)銷,如漏洞類型為“Integer Overflow”又稱“Wraparound”表示的是整數(shù)溢出,統(tǒng)一為“Integer Overflow”。通過(guò)知識(shí)融合有效地將多元信息進(jìn)行整合,有解決了冗余等問(wèn)題。
(1)實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)在Python語(yǔ)言下進(jìn)行編程,所使用電腦CPU為英特爾酷睿i7,顯卡為英偉達(dá)GTX 1070,內(nèi)存128 GB,固態(tài)硬盤256 GB,機(jī)械硬盤4 T,系統(tǒng)使用的是Windows10和CentOS 7.0操作系統(tǒng),Neo4j使用的版本為Neo4j-community-4.1.3,擴(kuò)展包添加了APOC和ALGO。
(2)實(shí)驗(yàn)數(shù)據(jù)
通過(guò)網(wǎng)絡(luò)爬蟲,從CVE和NVD中獲取到漏洞的數(shù)據(jù)信息,經(jīng)數(shù)據(jù)預(yù)處理后,得到SQL注入(SQL Injection)、命令注入(Command Injection)等8種常見(jiàn)類型的漏洞,涵蓋21種常見(jiàn)類型的CWE,1176個(gè)CVE-ID,17 640個(gè)屬性信息(其中包括漏洞描述、編程語(yǔ)言、路徑名、漏洞粒度、發(fā)布時(shí)間等),詳細(xì)見(jiàn)表6。
(3)構(gòu)建步驟及結(jié)果
本文根據(jù)上述3.1~3.5步驟將網(wǎng)絡(luò)爬蟲獲取到的數(shù)據(jù)依次進(jìn)行實(shí)體抽取、關(guān)系抽取和知識(shí)融合,通過(guò)實(shí)體抽取得到知識(shí)圖譜的節(jié)點(diǎn)集及屬性,關(guān)系抽取得到實(shí)體和實(shí)體之間的關(guān)系為邊集,通過(guò)Python調(diào)用Py2neo庫(kù)及結(jié)合Load-CSV語(yǔ)句兩種方式將漏洞語(yǔ)義信息批量存儲(chǔ)在Neo4j圖形數(shù)據(jù)庫(kù)中,可視化展示節(jié)點(diǎn)和節(jié)點(diǎn)之間的關(guān)系。
表6 數(shù)據(jù)統(tǒng)計(jì)
單獨(dú)從導(dǎo)入方式來(lái)說(shuō),第一種方式使用方便,可實(shí)時(shí)插入,但速度相對(duì)較慢。第二種方式是官方提供的導(dǎo)入工具,速度相對(duì)較快,但在執(zhí)行的過(guò)程中,需要將CSV文件放在Neo4j/import目錄下,默認(rèn)編碼轉(zhuǎn)為UTF-8,且當(dāng)字段過(guò)多時(shí),導(dǎo)入語(yǔ)句比較繁瑣,不能動(dòng)態(tài)創(chuàng)建節(jié)點(diǎn)和關(guān)系。故本文將漏洞語(yǔ)義信息在導(dǎo)入數(shù)據(jù)過(guò)程中時(shí),首先通過(guò)Load-CSV語(yǔ)句將確定數(shù)據(jù)導(dǎo)入到Neo4j數(shù)據(jù)庫(kù)中,然后再結(jié)合Python調(diào)用Py2neo庫(kù),實(shí)現(xiàn)將數(shù)據(jù)批量的導(dǎo)入。
因所構(gòu)建的知識(shí)圖譜節(jié)點(diǎn)和相關(guān)屬性較多,數(shù)據(jù)量過(guò)大導(dǎo)致無(wú)法全面地、清楚地展示軟件安全漏洞知識(shí)圖譜的相關(guān)節(jié)點(diǎn)和邊,故本文在漏洞知識(shí)圖譜的可視化過(guò)程中通過(guò)Cypher查詢語(yǔ)句查找具體某個(gè)局部節(jié)點(diǎn)和邊之間的關(guān)系。在圖中部分節(jié)點(diǎn)看似孤立單獨(dú)的點(diǎn),實(shí)際上每個(gè)節(jié)點(diǎn)都存在關(guān)系。在下圖中,用圓形節(jié)點(diǎn)表示漏洞,即特定漏洞CVE對(duì)象,方形節(jié)點(diǎn)表示受影響的產(chǎn)品,五邊形節(jié)點(diǎn)表示供應(yīng)商,八邊形節(jié)點(diǎn)表示漏洞類型。圖5通過(guò)Cypher查詢語(yǔ)句,查詢指向影響漏洞廠商Ming的所有產(chǎn)品版本,圖中展示了其中包括節(jié)點(diǎn)和邊之間的關(guān)系,影響Ming的版本包括libming0.4.8和libming0.4.7兩個(gè)版本,漏洞廠商和產(chǎn)品之間的關(guān)系為屬于,通過(guò)BelongTo將漏洞廠商和產(chǎn)品關(guān)聯(lián)在一起。
圖5 影響Ming的所有產(chǎn)品
通過(guò)分析可知,每一種特定的漏洞能影響一個(gè)或多個(gè)廠商或者產(chǎn)品,圖6經(jīng)Cypher查詢語(yǔ)句查詢Ming所有受影響的產(chǎn)品以及具體漏洞信息,每個(gè)漏洞節(jié)點(diǎn)都包含特定漏洞的屬性信息,如漏洞編號(hào)、漏洞文件名、風(fēng)險(xiǎn)數(shù)值、漏洞的粒度、漏洞描述等漏洞的相關(guān)節(jié)點(diǎn)屬性信息,漏洞和產(chǎn)品之間的關(guān)系是影響(Affect),通過(guò)Affect將漏洞和產(chǎn)品節(jié)點(diǎn)之間關(guān)聯(lián)在一起。
因每一個(gè)特定的漏洞都包含CWE-ID,圖7展示的是通過(guò)Cypher查詢語(yǔ)句查詢漏洞類型為SQL注入所包含CVE-ID,漏洞和漏洞類型通過(guò)HasCWE關(guān)聯(lián)在一起。
通過(guò)Cypher查詢結(jié)果可間接驗(yàn)證本文方法的有效性和可行性。
圖6 影響Ming漏洞節(jié)點(diǎn)
圖7 SQL注入
軟件安全漏洞知識(shí)圖譜可廣泛應(yīng)用于漏洞分析、推理、挖掘等領(lǐng)域,具體如下:
(1)漏洞分析:在漏洞分析領(lǐng)域中,通過(guò)Cypher 查詢語(yǔ)句查找出特定漏洞之間的關(guān)系,為深入分析、追溯漏洞成因提供了可靠的支撐。
(2)漏洞推理:在漏洞推理領(lǐng)域中,特定漏洞和漏洞之間存在著一定的聯(lián)系,可能屬于同一種受影響的產(chǎn)品或者廠商,也可能屬于同一種類型的漏洞,具有相同或者不同的CWE-ID,通過(guò)推理揭示隱藏的語(yǔ)義信息。
(3)漏洞挖掘:在漏洞挖掘領(lǐng)域中,通過(guò)推理函數(shù)挖掘出潛在的關(guān)系和知識(shí),避免因漏洞造成的危害。
此外,漏洞知識(shí)圖譜也可以用于漏洞追蹤與溯源等方面。
本文針對(duì)實(shí)際漏洞形成的原因和表現(xiàn)方式多樣,特征項(xiàng)之間關(guān)系復(fù)雜,現(xiàn)有漏洞數(shù)據(jù)利用價(jià)值低、漏洞語(yǔ)義信息不夠豐富、分析手段欠缺等問(wèn)題,提出了一種軟件安全漏洞知識(shí)圖譜構(gòu)建方法,通過(guò)對(duì)漏洞數(shù)據(jù)的采集、知識(shí)抽取、知識(shí)融合等手段,將獲取到的知識(shí)存儲(chǔ)到Neo4j圖數(shù)據(jù)庫(kù)中,通過(guò)Cypher查詢并將結(jié)果可視化展示。結(jié)果表明,所提出的方法能夠更好地構(gòu)建漏洞知識(shí)圖譜。在后續(xù)的研究過(guò)程中,進(jìn)一步豐富和完善,借助于程序分析,知識(shí)圖譜的推理、挖掘等方法,分析漏洞語(yǔ)義之間的關(guān)系,探究漏洞的根本特征,挖掘出軟件中潛在的漏洞。