曹春明,何 戡+,宗學軍,連 蓮
(1.沈陽化工大學 信息工程學院,遼寧 沈陽 110142;2.沈陽化工大學 遼寧省石油化工行業(yè)信息安全重點實驗室,遼寧 沈陽 110142)
基于機器學習的入侵檢測方法[1]近年來成為學者們研究的熱點,主流的如算法K近鄰[2]、XGBoost[3]、支持向量機[4,5]、決策樹[6]和隨機森林[7,8]等應用到入侵檢測中均取得了一定的效果。
目前,工控系統(tǒng)入侵檢測在取得成功的同時還存在兩個問題亟需解決:①樣本不平衡導致模型輸出的預測結(jié)果傾向于多數(shù)類,弱化了模型的實際分類能力;②模型訓練復雜,現(xiàn)實中的網(wǎng)絡流量傳輸速度很快,現(xiàn)有方法大多只關(guān)注模型的預測精度而忽略了檢測速率。針對樣本不平衡問題,本文采用變分自編碼器(variational auto-encoders,VAE)對數(shù)據(jù)集中的少數(shù)類樣本進行擴充,變分自編碼器是一種深度生成模型,其重構(gòu)原始輸入樣本概率密度分布的能力可以用來生成攻擊樣本。針對模型結(jié)構(gòu)復雜導致檢測速率低的問題,本文提出了一種基于深度漏積回聲狀態(tài)網(wǎng)絡(deep leaky integrator echo state networks,DLIESN)的入侵檢測分類模型,漏積回聲狀態(tài)網(wǎng)絡(leaky integrator echo state network,LIESN)由于舍棄了反向傳播機制,極大縮短了訓練時間,并且通過堆疊儲備池可以使模型獲得更好的動態(tài)特性。選用天然氣管道數(shù)據(jù)集進行仿真實驗,實驗結(jié)果驗證了所提方法的優(yōu)越性。
圖1 變分自編碼器結(jié)構(gòu)
LIESN是一種帶有儲備池結(jié)構(gòu)的遞歸神經(jīng)網(wǎng)絡,它由一個儲備池和一個讀出層組成[10]。儲備池內(nèi)部通常由大量的神經(jīng)元組成,神經(jīng)元之間的連接具有隨機性和稀疏性,主要功能是將外部輸入映射到高維動態(tài)空間中,由此來獲得較好的動態(tài)性能。LIESN的結(jié)構(gòu)如圖2所示。
圖2 漏積回聲狀態(tài)網(wǎng)絡結(jié)構(gòu)
設NU、NR分別為輸入特征維度和儲備池內(nèi)神經(jīng)元個數(shù),u(t)∈RNU和x(t)∈RNR分別表示t時刻的外部輸入和神經(jīng)元狀態(tài),儲備池中神經(jīng)元狀態(tài)更新方程如下
(1)
讀出層是一個線性層,是整個網(wǎng)絡唯一可訓練的部分,輸入為儲備池得到的狀態(tài)x(t),用來計算網(wǎng)絡的輸出。設NY為輸出維度,y(t)∈RNY表示t時刻的輸出,f為輸出激活函數(shù),輸出層計算公式為:y(t)=f(Woutx(t)),其中Wout∈RNY×NR為輸出權(quán)重矩陣。
樣本不平衡一直是機器學習中普遍存在的問題,如果使用不平衡的數(shù)據(jù)集訓練分類模型,模型極有可能學習不到正常樣本與攻擊樣本之間的差異,弱化了模型的實際分類能力。近年來,深度生成模型成為研究熱門,生成對抗網(wǎng)絡[11](generative adversarial networks,GAN),變分自編碼器[12]等在圖像生成領(lǐng)域取得了巨大成功,實際上,VAE重構(gòu)原始輸入樣本概率密度分布的能力也可以用來生成異常流量。為了降低樣本不平衡給模型帶來的影響,本文使用變分自編碼器對數(shù)據(jù)集中的罕見攻擊類樣本進行擴充。
2.1.1 VAE網(wǎng)絡結(jié)構(gòu)
為生成與源數(shù)據(jù)相似的數(shù)據(jù),VAE的層級結(jié)構(gòu)設置必須合理,本文中VAE的網(wǎng)絡結(jié)構(gòu)如圖3所示。所有層級均采用全連接層,編碼器部分:第一層神經(jīng)元個數(shù)為9,第二層為兩個獨立的全連接層,神經(jīng)元個數(shù)均為2,一個用來計算均值μ,一個用來計算方差σ,均由第一層引出,中間的隱藏變量z=μ+e0.5σ×eps,eps代表正態(tài)分布。解碼器部分:輸入為z,第一層神經(jīng)元個數(shù)為9,第二層神經(jīng)元個數(shù)為輸入維度。
圖3 VAE層級結(jié)構(gòu)
2.1.2 VAE損失函數(shù)的構(gòu)建
損失函數(shù)的構(gòu)建可分為兩部分:一部分負責計算輸入數(shù)據(jù)與生成數(shù)據(jù)之間的誤差,在本文中采取二分類交叉熵(binary cross entropy);另一部分負責計算相對熵(Kullback-Leibler divergence)。
2.1.3 基于VAE的樣本生成
首先將原始數(shù)據(jù)集按照標簽類別(0,1,2,…,N)拆分為N個子集,分別送入變分自編碼器進行訓練,訓練完畢后,保存每個模型的解碼器部分,最后輸入隨機生成的服從正態(tài)分布的兩個數(shù)生成對應類別的仿真數(shù)據(jù)。
2.1.4 數(shù)據(jù)增強思路
數(shù)據(jù)增強的目的是改善樣本總集中正負樣本差距過大的情況,平衡樣本分布。添加數(shù)據(jù)就意味著改變了原始樣本的分布,所以,在數(shù)據(jù)增強前,劃分好數(shù)據(jù)集,只增強訓練集,使模型能夠充分學習到罕見攻擊類樣本的內(nèi)部特性,而測試集不做任何改動,盡可能保留原有的樣本分布。
工控系統(tǒng)入侵檢測與普通的網(wǎng)絡入侵檢測相比,檢測指標要求更加苛刻,工控系統(tǒng)入侵檢測在保證高精確率的同時還要求高檢出率,同時為了適應工業(yè)環(huán)境,模型的訓練不能過于復雜?;芈暊顟B(tài)網(wǎng)絡具有很強的非線性擬合能力,在時序預測領(lǐng)域應用廣泛[13-15],作為遞歸神經(jīng)網(wǎng)絡的一種,相比于LSTM、GRU等網(wǎng)絡,它的訓練要簡單很多,本文選擇回聲狀態(tài)網(wǎng)絡作為入侵檢測方法的核心。
2.2.1 DLIESN網(wǎng)絡結(jié)構(gòu)
計算機算力的提升使人們可以搭建更深層次的網(wǎng)絡,單個儲備池提供的動態(tài)性能有限,提出一種基于深度漏積回聲狀態(tài)網(wǎng)絡(DLIESN)的入侵檢測分類模型,DLIESN的網(wǎng)絡結(jié)構(gòu)特點是儲備池堆疊層次化,如圖4所示。
圖4 深度漏積回聲狀態(tài)網(wǎng)絡結(jié)構(gòu)
2.2.2 儲備池神經(jīng)元狀態(tài)更新設置
t時刻,第一層儲備池由外部輸入u(t) 輸入,之后每一層輸入都是由堆棧中前一層的輸出提供的,不同儲備池內(nèi)的參數(shù)設置具有很強的靈活性,設有n個儲備池,每個儲備池內(nèi)的神經(jīng)元個數(shù)均為NR,x(l)(t)∈RNR表示t時刻第l層的神經(jīng)元狀態(tài)。第一層儲備池的神經(jīng)元狀態(tài)更新方程如下
x(1)(t)=(1-a(1))x(1)(t-1)+
(2)
第二層及以后儲備池的神經(jīng)元狀態(tài)更新方程如下
x(l)(t)=(1-a(l))x(l)(t-1)+
(3)
2.2.3 輸出層設置
與標準的LIESN一樣,DLIESN的輸入權(quán)重矩陣與每個層間的連接矩陣,儲備池內(nèi)部的循環(huán)權(quán)重矩陣經(jīng)過預設的初始化后,均不需要再訓練,需要訓練的只有輸出層。為了簡化訓練,本文選用神經(jīng)網(wǎng)絡中的全連接層作為輸出層,激活函數(shù)設置為Softmax。輸出層的輸入為每個儲備池狀態(tài)的加權(quán)和,即最后輸出層的輸入表示為x(t)=(x(1)(t),x(2)(t),…,x(l)(t))∈Rl×NR,這樣設置的優(yōu)點是使輸出層能夠接受多個儲備池的運動狀態(tài),輸出層最后的輸出維度為標簽類別。
2.2.4 DLIESN訓練流程
工控系統(tǒng)入侵檢測本質(zhì)上是一個多分類問題,設ρ為儲備池的譜半徑,c為儲備池內(nèi)神經(jīng)元的連接度,DLIESN的訓練流程如下:
Algorithm 1 DLIESN training
Input:feature vector
Output:Label
# Customize each LIESN Class
Cell_1= LIESN_1(NR,ρ,a,c)
Cell_2= LIESN_2(NR,ρ,a,c)
…
Cell_N= LIESN_N(NR,ρ,a,c)
# LIESN Layer
First_input=Input(input_shape)
Layer_1=RNN(Cell_1)(First_input)
Layer_2=RNN(Cell_2)(Layer_1)
…
Layer_N=RNN(Cell_N)(Layer_N-1)
# Output Layer
X=concat((Layer_1,Layer_2,…,Layer_N),axis=2)
X=reshape(X,(-1,NR×N)
所選用的天然氣管道數(shù)據(jù)集來自2014年密西西比州立大學的SCADA安全實驗室,該實驗室搭建了一個天然氣管道控制系統(tǒng),用來模擬將天然氣或其它石油產(chǎn)品輸送到市場的真實工業(yè)現(xiàn)場,研究人員通過攻擊該系統(tǒng)收集工業(yè)流量,最后由專家整理制備而成。
表1 天然氣管道數(shù)據(jù)集描述
去除標準差為零的無關(guān)特征,由于數(shù)據(jù)集特征數(shù)并不多,故不需要進行特征選擇,為消除不同特征間的數(shù)值影響,對數(shù)據(jù)集進行歸一化處理,將標簽進行one-hot編碼。
實驗平臺配置為windows 10 64位系統(tǒng),Intel Core I5-9600KF,運行內(nèi)存16 G,深度學習框架為tensorflow2.3,采用NVIDIA GTX980 TI顯卡加速訓練。為客觀評價模型的性能,采用入侵檢測領(lǐng)域中常用的準確率(Accuracy,ACC)、精確率(Precision,P)、檢出率(Recall,R)和綜合評價指標(F1-Measure,F(xiàn))來評價分類結(jié)果
(4)
(5)
(6)
(7)
其中,TP表示正確識別的攻擊類別數(shù)目,F(xiàn)N表示漏報即未正確識別攻擊類別的數(shù)目,F(xiàn)P表示誤報即錯誤識別正常類別的數(shù)目,TN表示正確識別的正常類別數(shù)目。
3.4.1 VAE參數(shù)設置與訓練
變分自編碼器的優(yōu)化器為Adam,學習率為0.001,batch_size設置為1024,訓練epoch設置1000。分別使用不同類別的樣本數(shù)據(jù)訓練VAE,保存VAE中的解碼器部分,之后使用一批服從正態(tài)分布的兩個數(shù)送入解碼器生成仿真數(shù)據(jù)。
3.4.2 生成數(shù)據(jù)評價
在圖像生成領(lǐng)域,人可以憑借自身的視覺觀察生成圖像的好壞,目前在數(shù)據(jù)生成領(lǐng)域很難判斷生成的數(shù)據(jù)是否真的合理,為驗證生成數(shù)據(jù)的有效性,選用Data1訓練一個網(wǎng)絡深度為3,層內(nèi)神經(jīng)元個數(shù)為30的LSTM網(wǎng)絡模型。從生成的數(shù)據(jù)中每類均選取2500條組成一個樣本總數(shù)為20 000的測試集,記為Data3。驗證用Data1訓練好的模型識別生成的數(shù)據(jù)集Data3的效果,經(jīng)過100個周期的訓練后,LSTM模型在訓練集上的準確率和損失如圖5所示,模型已經(jīng)達到深度收斂狀態(tài)。
圖5 訓練結(jié)果
通過輸出混淆矩陣來分析模型對Data3的分類情況,如圖6所示。對角線上的元素表示預測類別等于實際類別的個數(shù),可以直觀看出,除代號為1的類別,其余類別LSTM模型都取得了較高的精確率。經(jīng)計算,LSTM模型在Data3上的準確率為0.7901,檢出率為0.8233,f1值為0.7916,說明使用真實數(shù)據(jù)訓練的模型可以很好識別仿真數(shù)據(jù),驗證了變分自編碼器生成的數(shù)據(jù)樣本是有效的。
3.4.3 數(shù)據(jù)增強前后對比
在有了上述實驗的基礎上,添加部分仿真數(shù)據(jù)平衡數(shù)據(jù)集,只對訓練集進行數(shù)據(jù)增強。為了防止過擬合,設置數(shù)量限制,增加Data1中MSCI、MFCI類別的數(shù)量,使其個數(shù)達到600,得到新的數(shù)據(jù)集Data4。分別使用Data1和Data4訓練上文的LSTM模型,經(jīng)5次實驗取平均值后,模型在測試集Data2上的分類結(jié)果見表2。
表2 數(shù)據(jù)增強前后對比
根據(jù)表2,使用Data4訓練的分類模型在測試集上的準確率、檢出率、F值均有了一定的提升。
選用Data4和Data2作為之后實驗的訓練集與測試集,開始對DLIESN進行深入研究,分析不同網(wǎng)絡結(jié)構(gòu)和超參數(shù)設置下模型的性能,最后與目前主流的算法對比。
3.5.1 DLIESN網(wǎng)絡結(jié)構(gòu)分析
深度學習領(lǐng)域,網(wǎng)絡結(jié)構(gòu)的設置影響直接模型的輸出結(jié)果,通常更深的網(wǎng)絡層可以學習到更多的數(shù)據(jù)規(guī)律,但是過深的網(wǎng)絡層會給訓練帶來困難。在設置Epoch為200,batch_size為1024,儲備池激活函數(shù)為tanh,輸出層激活函數(shù)為Softmax,損失函數(shù)為多分類交叉熵(categorical crossentropy),優(yōu)化器為Adam,學習率為0.001,固定漏積參數(shù)a為0.6,譜半徑ρ為0.99的條件下,設置20種不同的網(wǎng)絡結(jié)構(gòu),經(jīng)過5次實驗取平均值后,不同網(wǎng)絡結(jié)構(gòu)設置下DLIESN模型在測試集Data2上的準確率如圖7所示。
圖7 不同網(wǎng)絡結(jié)構(gòu)設置下模型的準確率
根據(jù)圖7所示,只考慮神經(jīng)元數(shù)量方面:儲備池神經(jīng)元個數(shù)NR為10時,在測試集上的準確率較低,而且當網(wǎng)絡深度為5時,準確率出現(xiàn)了大幅下降,模型提取特征的能力有限,過少的神經(jīng)元無法為模型提供足夠的動態(tài)性能,學習能力較差。網(wǎng)絡深度方面,不同NR數(shù)量時的模型性能并沒有特定的規(guī)律,不考慮NR=10時的情況,起初,隨著網(wǎng)絡深度的增加,模型的性能都有所提高,但是當網(wǎng)絡深度為4時,NR=100、NR=200和NR=300的模型準確率都出現(xiàn)了略微下降。在20種不同的網(wǎng)絡結(jié)構(gòu)設置下,網(wǎng)絡深度為3,NR=200時的模型性能最佳,后續(xù)實驗默認DLIESN的網(wǎng)絡深度為3,儲備池神經(jīng)元個數(shù)為200。
3.5.2 漏積參數(shù)分析
漏積參數(shù)a決定了儲備池結(jié)構(gòu)中的神經(jīng)元響應速度,a的值越大,儲備池對輸入的響應越快,在固定DLIESN的網(wǎng)絡深度為3,儲備池神經(jīng)元個數(shù)為200時,設置4個不同的漏積參數(shù)(每個儲備池中的漏積參數(shù)默認相同),不同漏積參數(shù)下模型在訓練集上的損失如圖8所示。
圖8 不同漏積參數(shù)下的損失
根據(jù)圖8所示,當a為0.2時,模型在前100個周期內(nèi)并沒有收斂的趨勢,當a為0.6時,模型在第200個周期的損失最低。
3.5.3 DLIESN參數(shù)設置
在與其它算法對比前,需確定DLIESN的參數(shù),由于本文還未采用參數(shù)尋優(yōu)方法,故采用經(jīng)驗調(diào)參法。結(jié)合3.5.1節(jié)和3.5.2節(jié)實驗的結(jié)果,最終選取的參數(shù)匯聚成表3。
表3 DLIESN模型參數(shù)設置
3.5.4 對比實驗分析
為驗證DLIESN在工控系統(tǒng)入侵檢測算法中的優(yōu)越性,設置對比實驗與其它經(jīng)典模型作比較,均采用相同的數(shù)據(jù)集和相同的數(shù)據(jù)處理方式,得到結(jié)果匯總成表4和表5。
表4 不同方法的精確率對比
表5 不同方法的檢出率對比
由表4和表5可知,DLIESN對Normal類樣本的精確率為0.9792,明顯高于其它算法。對于NMRI(簡單惡意響應注入)攻擊類別的檢測結(jié)果,各類算法的表現(xiàn)均不是很好,盡管1d_CNN和SVM算法在此類攻擊的精確率達到了1,可是對應的檢出率全是0,通過查閱此數(shù)據(jù)集的報告發(fā)現(xiàn),該攻擊方式會使特征Measurement(測量值)遠遠高于100或低于-1,這嚴重偏離了正常運行時的數(shù)值,只有DLIESN學習到了這類攻擊與其它類別之間的界限,在維持高精確率的同時其檢出率也達到了0.9114。此外,DLIESN對其它類別的檢測結(jié)果也都很優(yōu)秀。
為測試在不同網(wǎng)絡深度下DLIESN的訓練復雜度,與同為深度學習領(lǐng)域的1d-CNN算法和LSTM算法對比,結(jié)果如圖9所示。
圖9 不同方法的訓練時間對比
根據(jù)圖9,3種算法中DLIESN的增長率最低,LSTM算法由于其每個時間步的計算都依賴上一個時間步的結(jié)果,導致訓練緩慢,1d-CNN算法因為其卷積核的機制影響了訓練時間,DLIESN在不同網(wǎng)絡深度下均取得了最短耗時。
本文介紹了機器學習理論在入侵檢測中的應用,引出了當前領(lǐng)域中存在樣本不平衡和模型訓練復雜的問題。針對樣本不平衡問題,提出了一種基于VAE的樣本均衡化策略;針對模型訓練復雜問題,提出了一種基于DLIESN的分類模型。首先使用變分自編碼器生成仿真數(shù)據(jù)平衡樣本,之后通過實驗分析了不同網(wǎng)絡結(jié)構(gòu)和漏積參數(shù)對DLIESN模型分類性能的影響,最后與其它主流算法進行對比,不論是訓練耗時還是入侵檢測指標,DLIESN模型均取得了良好的結(jié)果。在未來的工作中需將參數(shù)尋優(yōu)算法應用到DLIESN的調(diào)參過程。