張如雪 繆祥華,b
(昆明理工大學a.信息工程與自動化學院;b.云南省計算機技術(shù)應(yīng)用重點實驗室)
基于已知攻擊特征的傳統(tǒng)靜態(tài)安全方法在網(wǎng)絡(luò)入侵檢測中已經(jīng)取得了不錯的效果,但是傳統(tǒng)靜態(tài)方法不能有效防御新的攻擊, 如0day攻擊、后門攻擊及高級持續(xù)威脅(APT)等,這些攻擊者可以發(fā)動有針對性的持久滲透攻擊,表現(xiàn)出較強的隱蔽性,潛伏期特別長。 針對這些新的攻擊需要研究新方法來應(yīng)對[1,2]。
Logit、KNN、SVM、神經(jīng)網(wǎng)絡(luò)、決策樹及隨機森林[3]等機器學習模型被廣泛應(yīng)用于入侵檢測研究,并取得了較好的效果[4]。 2014年,張陽和姚原崗提出的XGBoost算法具有效果好、 速度快及能處理大規(guī)模數(shù)據(jù)等特點[5]。 但是基于單個學習器只能學習到一個假設(shè), 存在泛化能力不強的問題。因此,筆者采用XGBoost和GBDT[6]構(gòu)成集成學習模型,以期多個假設(shè)在同一個訓練集上達到較高的性能。
自動編碼器(AutoEncoder,AE)是一種無監(jiān)督神經(jīng)網(wǎng)絡(luò)模型[7],它可以學習到輸入數(shù)據(jù)的隱含特征, 使用Encoder對輸入進行編碼, 并使用Decoder對輸出進行解碼,如圖1所示。 AE可以提取到更有效的特征,比傳統(tǒng)降維方法主成分分析(Principal Components Analysis,PCA) 效果更好,除了降低函數(shù)的維數(shù)外,提取的特征還可以整合到一個有監(jiān)督的學習模型中,這表明自動編碼器可以在特征提取中發(fā)揮作用。
圖1 自動編碼器的基本結(jié)構(gòu)
AE對輸入X進行編碼以獲得一個新的函數(shù)Y,并希望新的函數(shù)Y可以重建初始的輸入X。 編碼過程如下:
其中,W表示權(quán)重,b表示參數(shù)。
解碼過程為:
其中,X′表示輸出,W′表示權(quán)重,b′表示參數(shù)。
希望X′被重新構(gòu)建后能盡可能與原來一致,還可以使用損失函數(shù)L來訓練模型:
通常會對自動編碼器的使用增加一些限制,最常見的方法是使W′=WT,即所謂的“綁定權(quán)重”,這一限制同樣適用于本研究中的自動編碼器。
梯度提升決策樹 (Gradient Boost Decision Tree,GBDT)是一種循環(huán)重復的決策樹算法,由許多決策樹構(gòu)成,所有樹的結(jié)論聚合而成得到最終答案。 GBDT經(jīng)過幾個循環(huán),會得到若干個弱分類器,由若干個弱分類器構(gòu)成最終的分類器。
GBDT分類算法主要應(yīng)用了以下公式:
其中,f(x)為預(yù)測結(jié)果;y為實際結(jié)果,y∈{-1,1};ft-1(x)表示前t-1個基學習器的輸出結(jié)果,yi為第i個實際結(jié)果;xi為第i個輸入。
對于最終的決策樹,每個葉子節(jié)點的最佳負梯度Ctj的計算式為:
其中,Rtj為輸入集合;tj為葉子結(jié)點。
極限梯度提升決策樹(eXtreme Gradient Boosting,XGBoost)是一種Boosting算法,它將許多弱分類器整合在一起,形成一個強大的分類器。
XGBoost是一個加法模型,它包含了k個基學習器,循環(huán)重復第t次迭代的樹模型是ft(x),則第t次重復訓練后樣本i的預(yù)測結(jié)果y^i(t)的計算式為:
其中,y^i(t-1)表示前t-1棵樹的預(yù)測結(jié)果;ft(xi)表示第t棵樹的模型。
XGBoost的損失函數(shù)可由預(yù)測值y^i和真實值yi表示:其中,n為樣本數(shù)量。
集成方法是一種元算法,把不同的機器學習算法組合到一個預(yù)測模型中, 能減小系統(tǒng)方差、系統(tǒng)誤差或提高系統(tǒng)預(yù)測精度,其特點如下:
a. 將多種相同或不同的分類方法相結(jié)合,以提高分類精度;
b. 集成學習方法是從訓練數(shù)據(jù)中構(gòu)建一組基分類器,然后將預(yù)測數(shù)據(jù)應(yīng)用到每個基分類器進行分類;
c. 集成學習不是一種分類,而是一種將分類器結(jié)合的方法。
深度提升網(wǎng)絡(luò)(Deep Boosting Network,DBN)擁有基于梯度增量策略中仍然存在的關(guān)鍵決策的深度耦合結(jié)構(gòu)[8~10]。 以XGBoost和GBDT為基學習器創(chuàng)建深度提升網(wǎng)絡(luò), 在第1層輸入中對特征向量進行整合和改進,從第2層開始,每層接收來自前一層處理后的數(shù)據(jù),允許進一步改進,并將結(jié)果傳遞到下一層,以此類推,流程如圖2所示。為了減少過度擬合風險,每次創(chuàng)建一個新的隱含層, 都計算出當前類輸出的預(yù)測精度C和每個基學習器輸出的準確預(yù)測矩陣的收斂性η。 將η與自適應(yīng)因子α(α是學習結(jié)果變化的參數(shù))做比較,如果有η<α或者當前平均準確率低于前一級別的平均準確率,則訓練結(jié)束。
圖2 深度提升網(wǎng)絡(luò)流程
設(shè)N為樣本數(shù)量,H是基學習器在隱含層的數(shù)量, 第i層的第r個基學習器的輸出和預(yù)測精度分別為Air和Ci,則收斂性η和當前層預(yù)測精度Ci的計算式為:
由于本研究將GBDT和XGBoost基學習器整合應(yīng)用到集成學習中,這些基學習器都會有自己的結(jié)果,那么輸出層的結(jié)果就必須通過對這些結(jié)果進行投票得出。 本研究選擇的是相對多數(shù)投票策略,該策略的思想是少數(shù)服從多數(shù),只要基學習器中有某一個結(jié)果所占比例與其他結(jié)果相比是多的,那么就選擇該結(jié)果。
2.4.1 自動編碼器降維算法
為了滿足深度提升網(wǎng)絡(luò)中一個輸入向量維數(shù)的要求,AE網(wǎng)絡(luò)的隱含層神經(jīng)元數(shù)m=n×n。 為了最大限度地保留數(shù)據(jù)中的信息,m可以被賦值為64、81、100及121等。 當m=64時,自動編碼器的結(jié)構(gòu)模型如圖3所示。
圖3 自動編碼器的結(jié)構(gòu)模型
為評價AE網(wǎng)絡(luò)的降維效果,引入重構(gòu)誤差的概念。 重構(gòu)誤差是特征重構(gòu)的輸出值和輸入值降維后得到的誤差。 在AE網(wǎng)絡(luò)降維中,需確定降維后的數(shù)據(jù)能否很好地恢復到原始輸入數(shù)據(jù),重構(gòu)誤差用均方誤差MSE表示:
其中,p表示輸入變量,p′表示輸出變量。
為了優(yōu)化自動編碼器網(wǎng)絡(luò)的結(jié)構(gòu), 通過調(diào)整GBDT和XGBoost模型個數(shù)、優(yōu)化函數(shù)等參數(shù),觀察自動編碼器網(wǎng)絡(luò)在迭代過程中重構(gòu)誤差的變化,最后確定自動編碼器網(wǎng)絡(luò)的最優(yōu)結(jié)構(gòu)。 在不同維度下, 利用自動編碼器結(jié)構(gòu)重構(gòu)誤差的結(jié)果如圖4所示。
圖4 利用自動編碼器結(jié)構(gòu)重構(gòu)誤差
自動編碼器的結(jié)構(gòu)確定后,通過輸入預(yù)處理后的數(shù)據(jù),計算出網(wǎng)絡(luò)的重構(gòu)誤差。 通過BP算法調(diào)整網(wǎng)絡(luò)參數(shù),最終通過隱含層獲得降維數(shù)據(jù)。
精準醫(yī)療是針對于患者醫(yī)療保健和健康的個性化醫(yī)學模式,它通過醫(yī)生的醫(yī)療決策和實踐制定出適合不同疾病人群的治療方案。隨著對CRSwNP的發(fā)病機制的不斷深入了解,精準醫(yī)療分析整合疾病的診斷和治療并能制定出最優(yōu)化的治療方案[28]。而實現(xiàn)精準醫(yī)療的基礎(chǔ)必須具備的要素有:患者參與治療方案的決定;預(yù)判初始治療的成功率;防治疾病進展的有效策略和疾病內(nèi)在型為驅(qū)動的個性化治療[29]。為了實現(xiàn)疾病內(nèi)在型為驅(qū)動的治療目的,必須對疾病的內(nèi)在型有著充分且標準化的認識,而且能夠洞察用于評估或預(yù)測療效、指導完善臨床策略的生物標記物[10]。
2.4.2 深度提升網(wǎng)絡(luò)算法
深度提升網(wǎng)絡(luò)的結(jié)構(gòu)如圖5所示。
圖5 深度提升網(wǎng)絡(luò)結(jié)構(gòu)框圖
深度提升網(wǎng)絡(luò)的算法步驟如下:
a. x0、x1、 …、xm分別代表GBDT和XGBoost模型,對其輸入訓練集形成m個基學習器(前一個的輸出是下一個的輸入);
b. 輸入測試集,m個基學習器分別得出m個預(yù)測結(jié)果;
c. 對步驟b中的m個預(yù)測結(jié)果使用投票策略,得出綜合預(yù)測結(jié)果。
深度提升網(wǎng)絡(luò)在第1層輸入中對特征向量進行整合和改進;從第2層開始,每層接收來自前一層處理后的數(shù)據(jù),允許進一步進行改進,并將結(jié)果傳遞到下一層,以此類推。
實驗所用的主機處理器為Intel(R)Core(TM)i5-7200U CPU@2.50 GHz,內(nèi)存16 GB,操作系統(tǒng)Win10專業(yè)版,在Pycharm環(huán)境下使用pytorch框架完成仿真實驗。
分類問題常用的評價指標是精確率和召回率。 正常類被標記為正類,所有攻擊類被標記為負類。 分類器對數(shù)據(jù)集的預(yù)測是正確的還是錯誤的,結(jié)果存在4種情況:
a. TP(True Positive),把正類預(yù)測為正類;
b. FP(False Positive),把負類預(yù)測為正類;
c. TN(True Negative),把負類預(yù)測為負類;
d. FN(False Negative),把正類預(yù)測為負類。
評價指標的計算式如下:
F1分數(shù)為精確率和召回率的調(diào)和平均,即有:
CICIDS2017是一種入侵檢測數(shù)據(jù)集,由加拿大網(wǎng)絡(luò)安全研究所收集,包含良性攻擊網(wǎng)絡(luò)流和7 種公開可用的常見攻擊類型。 它包括使用CICFlowMeter的網(wǎng)絡(luò)流量分析結(jié)果, 使用基于時間戳、源和目的IP地址、源和目的端口、協(xié)議和攻擊(CSV文件)的標記流。因此,CICIDS2017數(shù)據(jù)集更具代表性[6]。
CICIDS2017數(shù)據(jù)集中共有15種類別的數(shù)據(jù),其中包含1種正常類別和14種攻擊,詳見表1。
表1 數(shù)據(jù)集類別和數(shù)目
為了提高模型的準確性,加快模型的收斂速度,對所創(chuàng)建的數(shù)據(jù)集進行數(shù)據(jù)預(yù)處理,具體步驟如下:
a. 檢測數(shù)據(jù)集中的空值。因為本研究中的一些算法對缺失的值很敏感,所以將數(shù)據(jù)集中元素列的平均值替換為空值。
b. 將處理后的數(shù)據(jù)集分為兩部分, 分別為80%的訓練集和20%的測試集, 其中正常流量和攻擊流量在數(shù)據(jù)集和測試集中的占比見表2、3。
表2 訓練集占比情況
c. 對多分類標簽進行one-hot編碼。
d. 為了消除不同特征尺度對模型精度的影響,對數(shù)據(jù)集的特征進行正則化處理。
表3 測試集占比情況
本研究的模型在分類過程中設(shè)置GBDT和XGBoost的總數(shù)目后的損失值如圖6所示。
圖6 GBDT和XGBoost的總數(shù)目對損失值的影響
為了證明GBDT-XGBoost模型在相同實驗環(huán)境下與其他模型相比的優(yōu)越性, 選擇KNN、DT、RF、GBDT和確定結(jié)果較好的XGBoost進行比較,檢測結(jié)果見表4、5。
表4 二分類任務(wù)下模型的對比結(jié)果
表5 多分類任務(wù)下模型的對比結(jié)果
從表4、5可以看出,KNN在二分類和多分類任務(wù)下的分類效果較弱,DT其次,RF、單獨GBDT和單獨XGBoost在精確率和F1分數(shù)的結(jié)果上不相上下, 但在召回率上有出入。 筆者提出的GBDTXGBoost模型在所有3個指標上,無論是二分類還是多分類,都高于其他模型,證實該模型分類的整體效果優(yōu)于其他算法。
筆者提出基于GBDT-XGBoost的網(wǎng)絡(luò)入侵檢測算法, 獲得了入侵檢測的強分類器。 與傳統(tǒng)KNN、DT、RF、GBDT、XGBoost算法對比的結(jié)果可知,GBDT-XGBoost算法在精確率、 召回率和F1分數(shù)上都有所提升。 但該方法對于未知攻擊的檢測還存在精確率不高的問題, 下一步計劃改進該方法,提高該方法在未知攻擊檢測方面的精確率。