毛 臣,謝鎧宇,高 鐳
(新疆大學 信息科學與工程學院,新疆 烏魯木齊 830046)
隨著針對物聯(lián)網(wǎng)的攻擊愈加頻繁,物聯(lián)網(wǎng)安全正越來越受到關(guān)注[1]。從技術(shù)方面看,物聯(lián)網(wǎng)存在網(wǎng)絡安全隱患。由于物聯(lián)網(wǎng)在很多場合需要無線傳輸,這種暴露在公共場所之中的信號容易被竊取,也容易被干擾,將直接影響到物聯(lián)網(wǎng)體系的安全。針對此方面的不足,在參考了文獻[2-3]的相關(guān)工作后,本文在FCM算法基礎上提出RFCM算法框架與實現(xiàn)。在此基礎上訓練出的半監(jiān)督學習模型在物聯(lián)網(wǎng)入侵檢測方面有良好的表現(xiàn)。
在數(shù)據(jù)集的選擇上,本文選擇使用NSL-KDD數(shù)據(jù)集。NSL-KDD數(shù)據(jù)集是在KDD99數(shù)據(jù)集基礎上改進得來的,解決了KDD99數(shù)據(jù)集中存在的固有問題。此數(shù)據(jù)集的優(yōu)點包括:在NSL-KDD數(shù)據(jù)集的訓練集中不包含冗余記錄,所以分類器不會偏向更頻繁的記錄;在測試集中沒有重復的記錄,使得檢測率更為準確;來自每個難度級別組的所選記錄的數(shù)量占比與原始KDD數(shù)據(jù)集中的記錄所占百分比成反比,因此,不同機器學習方法的分類率在更寬的范圍內(nèi)變化,這使得對不同學習技術(shù)的準確評估更有效;訓練和測試中的記錄數(shù)量設置合理,這使得在整套數(shù)據(jù)集上運行實驗成本低廉而無需隨機選擇一小部分。因此,不同研究工作的評估結(jié)果將是一致的和可比較的。
由于數(shù)據(jù)集中包含有符號型的數(shù)據(jù)屬性,不適合聚類測試,對于連續(xù)型特征屬性,各屬性的度量方法不一樣。一般而言,所用的度量單位越小,變量可能的值域就越大,對聚類結(jié)果的影響也越大,即在計算數(shù)據(jù)間距離時對聚類產(chǎn)生的影響越大。為了避免由于屬性度量的差異對聚類產(chǎn)生的影響,需要對屬性值進行標準化。
首先需要將數(shù)據(jù)集訓練集中的第2、第3、第4、第42列標記數(shù)據(jù)分別提取出來單獨制成一維列表,然后依據(jù)該標記在列表中的位置將文件行中3種協(xié)議類型、70種網(wǎng)絡服務類型、11種網(wǎng)絡連接狀態(tài)、23種攻擊類型(訓練集中共出現(xiàn)了22種攻擊類型,還有1種正常類型標記,而剩下的17種只在測試集中出現(xiàn))轉(zhuǎn)換成數(shù)字標識。
(1)
(2)
然后對每條數(shù)據(jù)記錄進行標準化度量,即:
(3)
其中,zik表示標準化后的第i條數(shù)據(jù)記錄的第k個屬性值。
將標準化后的每個數(shù)值歸一化到[0,1]區(qū)間,即:
(4)
其中,max為樣本數(shù)據(jù)的最大值,min為樣本數(shù)據(jù)的最小值,x為標準化后的數(shù)據(jù)。
在充分研究NSL-KDD數(shù)據(jù)集后,在特征提取上有兩種方法:
(1)用Wireshark捕獲流量包,通過Python開源庫Scapy讀取Pcap文件,分析流量包內(nèi)容,統(tǒng)計特征輸出特征矩陣。
(2)繼續(xù)沿用LEE W[4]教授提出的,即采用基于Linux系統(tǒng)下的IDS——zeek(Bro)的特征提取方法。
由于Scapy庫對于流量包對主機權(quán)限命令的試調(diào)用、登錄狀態(tài)的獲取不準確,且分析速度慢,使其效率相對于Bro來說大打折扣,因此對于U2R(user to root)和R2U(remote to user)攻擊不能起到很好的檢測作用,所以本文選擇第二種方案。
站點部署B(yǎng)ro最直接的好處就是獲得日志文件的擴展集,在高層次記錄網(wǎng)絡的行為。這些日志文件不僅全方位地記錄了所有線路上可見的每個連接,還記錄了應用層傳輸,例如HTTP會話以及請求的URL、關(guān)鍵頭、MIME類型、服務器反饋、DNS請求及反應、SSL證書、SMTP會話的關(guān)鍵內(nèi)容等。默認情況下Bro將這些信息結(jié)構(gòu)化寫入,用Tab鍵分隔日志文件內(nèi)容的格式使其他軟件的后續(xù)處理更方便。也可以選擇其他輸出格式和后端來與數(shù)據(jù)庫對接。
此外,除了日志,Bro還有內(nèi)建函數(shù)來完成分析和檢測任務,包括在HTTP會話中抽取文件、在與其他注冊點對接時檢測惡意軟件、報告脆弱的軟件版本、識別Web應用、檢測SSH暴力破解、認證SSL證書鏈等。
特征提取工作具體流程如圖1所示。
圖1 Bro捕獲數(shù)據(jù)包
Bro通過腳本運行提取出特征矩陣所需要的數(shù)據(jù),再通過Python的多個函數(shù)庫的加工處理,最終形成所需要的特征矩陣。
特征矩陣第一部分是流量包的基礎信息,包括主機端口、服務類型等一系列參數(shù),主要通過Python中的list數(shù)據(jù)結(jié)構(gòu)記錄并存儲。
特征矩陣第二部分是統(tǒng)計該鏈接對于主機的異常行為,所以要用Bro腳本分析流量包的信息,提取出對于shell命令的敏感字段,通過Python的os和cell庫進行分析、計數(shù)和存儲。
特征矩陣第三、四部分是統(tǒng)計該鏈接在特定鏈接時間和特定鏈接數(shù)量下的異常行為。
RFCM(Random Fuzzy C-means)算法是本文的核心部分,本節(jié)著重介紹RFCM算法的整個框架以及數(shù)據(jù)處理的流程。
RFCM主要分為兩部分:
(1)第一部分,使用監(jiān)督學習算法對少量有標記的樣本進行學習。在經(jīng)過對不同分類器分類效果的對比后,本文對這一部分的實現(xiàn)使用隨機森林來得到初步的模型。
(2)第二部分,參考PAL N R的工作[5]實現(xiàn)SFCM算法,針對沒有標記的樣本,通過指定兩個置信度參數(shù),每輪得到分類結(jié)果可信度高的無標記樣本。再將這些樣本加入到原始有標記的樣本集合里進行模型的二次訓練,從而緩解標簽樣本數(shù)量少的局面。模型最后在測試集上取得了良好的效果[6]。RFCM算法的流程圖如圖2所示。
圖2 RFCM流程圖
隨機森林的基礎是決策樹(Decision Tree)算法,決策樹是一種常見的機器學習方法,在已知各種情況發(fā)生概率的基礎上,通過樹的結(jié)構(gòu)進行分類決策。其基本思想是每次選取一個最優(yōu)劃分屬性,再迭代這個過程直到生成一個完備的決策樹結(jié)構(gòu)。決策樹使用信息增益或者信息增益率作為選擇屬性的依據(jù),以信息增益為例,先計算每個屬性的信息熵,再計算其信息增益,即:
(5)
(6)
其中,D表示當前樣本集合,k表示分類類別的第k類,pk表示當前樣本集合D中第k類樣本所占的比例。|Y|表示樣本類別數(shù)目,用aV表示離散屬性取值為第V個值,|DV|表示第V個分支節(jié)點包含了D中所有在屬性值上取值為aV的樣本。生成決策樹以后,每層根據(jù)屬性的取值進行劃分,最終遍歷到樹的某一個葉節(jié)點,得到分類結(jié)果。
隨機森林(Random Forest,RF)就是通過集成學習的思想將多棵樹進行集成的一種算法,它的基本單元是決策樹。隨機森林是機器學習方法中集成學習方法思想的體現(xiàn)。
RF是Bagging的一個拓展變體,它由若干個樹形結(jié)構(gòu)構(gòu)成森林,在每個決策樹的訓練過程中引入隨機屬性構(gòu)建決策樹。實踐證明,由于樣本擾動和屬性擾動的作用,它們使得最終集成的RF分類器泛化性能比一般的決策樹效果更好。
本文隨機森林方法的實現(xiàn)是導入了已經(jīng)開發(fā)并成熟的Sklearn庫里的隨機森林方法RandomForestClassifier,其內(nèi)置的主要參數(shù)為隨機狀態(tài)random_state和子樹個數(shù)n_estimators。
SFCM(Semi-supervised Fuzzy Cluster-Means)是對FCM的改進,F(xiàn)CM是一種基于劃分的聚類算法,其思想就是使得被劃分到同一簇的對象之間相似度最大,而不同簇之間的相似度最小。本文考慮有標記樣本和未標記樣本,最終生成SFCM模塊。
給定一個總的數(shù)據(jù)集D,它由部分有標簽和無標簽的數(shù)據(jù)組成。有標簽的數(shù)據(jù)集為DL,沒有標簽的數(shù)據(jù)集為DUL。SFCM對每個數(shù)據(jù)點屬于每個類別生成關(guān)聯(lián)置信度u,每個樣本對每個類別的關(guān)聯(lián)程度和為1。它可以很好地識別出不屬于類別集合的樣本,對屬于某個集合的樣本分類精度較高。
給定數(shù)據(jù)集合A={a1,a2,…,an},每個樣本是d維的,即在樣本集合里每個樣本由d個特征唯一標識,在FCM要最小化的目標公式為:
(7)
其中,P是類別集合里的數(shù)目,每一個類都有一個樣例vi,每個類別的樣例集合V={v1,…,vn}構(gòu)成了整個類別集合的樣例樣本。數(shù)據(jù)集合中的每個樣本和每個類別的樣例樣本的第二范式即代表這個樣本到這個類別的距離,也就是關(guān)聯(lián)程度。uij代表第j個樣本到第i個類別的關(guān)聯(lián)程度。顯然uij≥0,且和為1,如式(8)、式(9)所示。每輪訓練時需要構(gòu)建關(guān)聯(lián)矩陣U,這里需要引入在已標記的數(shù)據(jù)集中獲取的關(guān)聯(lián)矩陣M,關(guān)聯(lián)矩陣M的模糊度一般取值為1~2。
0≤uij≤1
(8)
(9)
半監(jiān)督聚類方法[7]是建立在使用不同類別的先驗知識去增強聚類性能這一事實的基礎上的。在入侵檢測問題上,本文使用原始已有的信息構(gòu)建入侵模型,而不同類別的先驗知識就是依靠樣本里的少量標記樣本。此處使用SFCM[8],它的目標函數(shù)是:
(10)
其中,u′ij要滿足以下兩個條件:
(11)
(12)
這個問題是有約束條件的優(yōu)化問題,使用拉格朗日乘子對模型的參數(shù)進行了相應的推導,對有標記樣本:
(13)
對無標記樣本:
(14)
對每個類別集合的樣本實例:
(15)
模型的超參數(shù)有M的取值和迭代的次數(shù),把每一次模型訓練后經(jīng)過比較置信度得到的樣本加入到原始有標記的樣本集合里進行模型的二次訓練。
算法偽代碼如下:
While (DUL!= 0) do
Initialize:setS1←{},S2←{}
M= RandomForest(DL) /* 使用隨機森林在有標記數(shù)
據(jù)集合上進行訓練*/
U= SFCM(DL+DUL) /* 獲得未標記數(shù)據(jù)集合的關(guān)
聯(lián)矩陣*/
for all instanceajin theDULdo
if(uij≥r1) then
S1←aj
end if
end for
ExamineM(S1)
/* 使用S1集合測試模型*/
for all instancexin theS1do
if(F(x)≥r2) then
S2←x
end if
end for
UpdateDL←DL∪S2
UpdateDUL←DUL-S2
if (S2!=0) then
Reduce (r1)
end if
end while
ExamineM(DT)
/*使用DT對M進行訓練*/
本文提出并實現(xiàn)了RFCM算法,通過使用半監(jiān)督學習算法對未標記數(shù)據(jù)進行訓練和檢驗,完成了物聯(lián)網(wǎng)環(huán)境下入侵檢測部分。本文將從另外兩個閉源測試集合里分別使用查準率、查全率、F-Score來描述算法的性能指標。
在本文的實驗中,分類模型評價術(shù)語的混淆矩陣如表1所示。
表1 分類混淆矩陣
準確率(accuracy)的計算:
(16)
召回率(recall)的計算:
(17)
F-score值的計算:
(18)
為了驗證RFCM算法的有效性,分別將其與隨機森林(RF)、邏輯回歸(LR)、神經(jīng)網(wǎng)絡(MLP)三種算法的分類結(jié)果做對比,結(jié)果如圖3所示。
圖3 檢測結(jié)果比較
由圖3可以看出,在查準率、召回率、F-Score三個評價指標對比中,RFCM算法均有更好的表現(xiàn)。實驗結(jié)果表明,RFCM算法可以更好地捕捉特征所包含的有用信息并對其更正確地分類。
本文提出了一個基于半監(jiān)督學習的入侵檢測框架RFCM。該算法是通過將SFCM算法與隨機森林算法相結(jié)合,來應用于檢測框架。算法對NSL- KDD數(shù)據(jù)集的實驗評價表明,框架實現(xiàn)了較好的性能。
但是,無論使用監(jiān)督學習方法還是非監(jiān)督學習方法,都需要復雜的特征工程過程,需要人為進行特征設計和提取。為了解決這個問題,未來的研究方向是通過使用深度學習算法來設計模型,以消除手動設計特征工程的要求并提供自學習和壓縮功能,從而產(chǎn)生更快的處理速度、更高的準確率。