劉銀 沈輝
摘要:為了提高網(wǎng)絡(luò)漏洞靜態(tài)檢測(cè)的準(zhǔn)確性,設(shè)計(jì)一個(gè)基于機(jī)器學(xué)習(xí)的網(wǎng)絡(luò)漏洞靜態(tài)檢測(cè)方法。首先對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行預(yù)處理,將其轉(zhuǎn)化為序列表示,對(duì)網(wǎng)絡(luò)數(shù)據(jù)特征量化及特征選擇,并對(duì)漏洞序列相似度計(jì)算,最后采用機(jī)器學(xué)習(xí)的方法對(duì)昂羅漏洞靜態(tài)檢測(cè)。實(shí)驗(yàn)以檢測(cè)準(zhǔn)確性與檢測(cè)時(shí)間作為對(duì)比對(duì)象,結(jié)果表明,此次研究的基于機(jī)器學(xué)習(xí)的網(wǎng)絡(luò)漏洞靜態(tài)檢測(cè)方法較傳統(tǒng)方法檢測(cè)準(zhǔn)確性高,并且檢測(cè)時(shí)間少,滿足了網(wǎng)絡(luò)漏洞靜態(tài)檢測(cè)方法的設(shè)計(jì)需求。
關(guān)鍵詞:機(jī)器學(xué)習(xí);網(wǎng)絡(luò)漏洞;靜態(tài)檢測(cè);
中圖分類號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)26-0042-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
機(jī)器學(xué)習(xí)是一種科學(xué)研究,其中計(jì)算機(jī)系統(tǒng)依靠模式和推理所用的算法和統(tǒng)計(jì)模型來有效地完成特定的任務(wù),而無須明確的指令。在沒有明確規(guī)劃任務(wù)執(zhí)行的情況下,機(jī)器學(xué)習(xí)算法根據(jù)樣本數(shù)據(jù)建立被稱為“訓(xùn)練數(shù)據(jù)”的數(shù)學(xué)模型來進(jìn)行預(yù)測(cè)或決策。在電子郵件過濾和計(jì)算機(jī)視覺等多種應(yīng)用中,機(jī)器學(xué)習(xí)算法被廣泛使用,而在這些應(yīng)用中,無法開發(fā)執(zhí)行特定任務(wù)指令的算法?;跈C(jī)器學(xué)習(xí)這一特性,對(duì)網(wǎng)絡(luò)漏洞靜態(tài)檢測(cè)方法進(jìn)行設(shè)計(jì)。
1 網(wǎng)絡(luò)數(shù)據(jù)預(yù)處理
所采集的網(wǎng)絡(luò)漏洞不能直接聚類,需要在序列聚類之前對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,將其轉(zhuǎn)化為序列表示[1]。具體方法如下:
軟件目標(biāo)代碼的反匯編,以形成更易于理解和分析的反匯編代碼,接著將產(chǎn)生軟件漏洞的代碼從反匯編代碼中提取出網(wǎng)絡(luò)漏洞的特征序列[2]。所得到的漏洞特征序列是有長(zhǎng)有短的,因此如何度量不同長(zhǎng)度的漏洞序列之間的相似性就顯得至關(guān)重要。在收集已知漏洞信息后,建立網(wǎng)絡(luò)漏洞特征庫(kù),在有漏洞需要檢測(cè)的情況下,通過與數(shù)據(jù)庫(kù)中漏洞的特征進(jìn)行比較,確定漏洞類型。在漏洞特征庫(kù)中,漏洞以序列的形式被存儲(chǔ),每一個(gè)序列由組成漏洞的基本事件組成[3]。
缺陷序列是從網(wǎng)絡(luò)反匯編代碼中提取的一組導(dǎo)致網(wǎng)絡(luò)缺陷的指令,它們是一系列軟件漏洞的特征序列,缺陷序列數(shù)據(jù)庫(kù)即為網(wǎng)絡(luò)漏洞序列數(shù)據(jù)庫(kù)[4]。
當(dāng)創(chuàng)建漏洞模式庫(kù)時(shí),通過定義漏洞父類和漏洞子類來表示漏洞序列類型,通過定義原子代碼類來表示匯編代碼段,從而生成產(chǎn)生漏洞的行為。
2 網(wǎng)絡(luò)數(shù)據(jù)特征量化及特征選擇
特征處理模塊的主要任務(wù)是處理原始特征并獲取標(biāo)準(zhǔn)數(shù)據(jù),適合于訓(xùn)練機(jī)器學(xué)習(xí)算法。特性處理的關(guān)鍵在于特性的量化與選取[5]。其具體過程如下:
特征量化:由于存儲(chǔ)在數(shù)據(jù)庫(kù)中的特征都是網(wǎng)絡(luò)的原始特征,不能直接對(duì)特征進(jìn)行分析和輸入算法,所以特征量化部分的主要工作就是將原始特征轉(zhuǎn)換成數(shù)據(jù)分析包或機(jī)器學(xué)習(xí)算法可以分析的特征向量。數(shù)字特征不需要量化就可以直接,作為程序的輸入,而分類、文本特征則需要根據(jù)具體情況轉(zhuǎn)換成數(shù)字特征[6]。在目標(biāo)向量方面,由于本文旨在于檢測(cè)網(wǎng)絡(luò)中是否存在漏洞,樣本主要分為0和1兩種類型,因此樣本標(biāo)簽采用0或1表示。最終,特征量化階段將為每個(gè)網(wǎng)絡(luò)樣本特征形成一個(gè)[m]維的特征向量。由全部樣本特征向量組成的數(shù)據(jù)集將存儲(chǔ)為 CSV文件格式,該文件的第一行是選擇的特征屬性名,然后是每種行為的樣本特征向量。儲(chǔ)存方式的選擇主要考慮數(shù)據(jù)分析庫(kù)的功能,可直接裝載 CSV文件,便于特征分析和訓(xùn)練。
特征選擇:在所用特征數(shù)達(dá)到一定值的情況下,模型精度開始下降。對(duì)于神經(jīng)網(wǎng)絡(luò)模型,如果在訓(xùn)練過程中使用了大量的特征,但是樣本很少,很容易導(dǎo)致模型的過度擬合,所以需要進(jìn)行特征選擇。該方法首先根據(jù)已知漏洞知識(shí)和漏洞之間的高度相關(guān)性,構(gòu)造漏洞特征子集,然后根據(jù)特征子集中所包含的特征子數(shù)目選擇特征選擇方法。
3 漏洞序列相似度計(jì)算
軟體攻擊順序是有序基本事件的集合,構(gòu)成序列的基本事件,以及它們發(fā)生的次序,影響著序列的相似性。在兩個(gè)序列中,如果基本事件是相同的,但基本事件順序不同,則它們之間的相似度就會(huì)降低。相反,如果兩個(gè)序列中某一部分的基本事件的次序相同,組成該序列的基本事件也大不相同,則這兩個(gè)序列之間的相似度也可能很低,這就是說,它們表示不同類型的漏洞。
我們必須同時(shí)考慮序列中所包含的基本事件和事件的順序。將漏洞序列的全局相似度記作:
[G=max∑Tj=1INjn2j-n1jmaxS1,S2]? ? ? ? ? ? ? ? ? ?(1)
公式(1)中,[S1]、[S2]分別代表軟件漏洞序列,[∑Tj=1INj]代表第[N]個(gè)基本時(shí)間的集合。
計(jì)算局部相似度,局部相似度反映了基本事件序列中各個(gè)漏洞序列之間的相似程度,由全局相似度和局部相似度給出的漏洞序列總體相似度為:
[GLSMS1,S2=q×LSimS1,S2]? ? ? ? ? ? ? ?(2)
公式(2)中,[q]代表參數(shù)相似度衡量參數(shù)。
易攻擊的低熵序列最有可能成為序列聚類的中心,以此通過上述過程完成漏洞序列相似度的計(jì)算,為網(wǎng)絡(luò)漏洞檢測(cè)提供基礎(chǔ)依據(jù)。
4 網(wǎng)絡(luò)漏洞靜態(tài)檢測(cè)實(shí)現(xiàn)
在上述特征檢測(cè)的基礎(chǔ)上,對(duì)網(wǎng)絡(luò)漏洞靜態(tài)檢測(cè),對(duì)可能被劫持的網(wǎng)絡(luò)數(shù)據(jù)來說,它們被認(rèn)為是暴露的網(wǎng)絡(luò)內(nèi)容,如果這些危險(xiǎn)的組件能夠訪問敏感設(shè)備,或者該組件能夠通過調(diào)用應(yīng)用程序中的其他接口或組件訪問網(wǎng)絡(luò)中的敏感數(shù)據(jù),危險(xiǎn)的組件就會(huì)被惡意應(yīng)用程序利用,使惡意應(yīng)用程序有可能訪問、獲取甚至修改應(yīng)用程序關(guān)鍵區(qū)域的敏感數(shù)據(jù)。
基于內(nèi)容跟蹤和風(fēng)險(xiǎn)識(shí)別,并以自編碼網(wǎng)絡(luò)為基礎(chǔ)構(gòu)建支持向量機(jī)入侵檢測(cè)模型,運(yùn)用RBM算法實(shí)現(xiàn)高維非線性原始數(shù)據(jù)向低維度的轉(zhuǎn)變,由此形成了一個(gè)雙向映射結(jié)構(gòu),聯(lián)通了高維空間與低維空間之間,利于數(shù)據(jù)的映射傳輸,運(yùn)用BP算法將高維數(shù)據(jù)信息轉(zhuǎn)化為低位數(shù)據(jù),得到相應(yīng)的低維表示。