趙智陽,夏筱筠
1(中國科學院大學,北京 100049)
2(中國科學院 沈陽計算技術研究所,沈陽 110168)
電網工控系統是控制管理電網的中樞系統,原本是相對封閉的內部環境,遭受的網絡入侵行為相對較少.但是隨著網絡互聯在電網系統中的不斷應用,系統智能化加深的同時,將越來越多的部件暴露在外部網絡之中,面臨著越來越多的網絡入侵行為.2010年,“震網”病毒攻擊了伊朗核電站中的計算機控制部件,導致離心機轉動受到極大影響[1].2015年,烏克蘭遭受兩次針對電力系統的網絡入侵行為,造成重大損失[2].電網工控系統中控制中心和傳感器等設備之間并未采取安全隔離措施,缺乏入侵檢測防護層,極易造成重大損失[3].電網工控系統內部流量主要為內網采集的處于網絡邊緣位置設備的信息,系統內部缺乏對網絡包的深度解析.因此,有效的檢測出電網工控系統中的網絡入侵行為,才能保證電網系統的高效安全運轉.
入侵檢測技術是一種獲取并分析網絡中的數據,并判斷其為合法訪問或網絡入侵的技術.其中,基于特征的入侵檢測將網絡行為與已知的攻擊行為進行比較,常用的方法有規則匹配、模式識別等;基于異常的入侵檢測,首先通過歷史數據建立數學模型,之后將數據包與已建立的數學模型設定的閾值進行比較,若超過安全閾值則視為網絡入侵,常用的方法有支持向量機和機器學習等[4].針對電網工控系統的網絡入侵主要有:針對工業網絡協議漏洞的攻擊;入侵者通過外聯網絡進入內網形成入侵,如未授權訪問;針對環境中廣泛采用的無線傳輸進行攻擊等.本文選取KDD99 數據集作為實驗數據集,其中入侵數據主要包括DoS、非法網絡探測和未授權訪問等4 種,其中未授權訪問會對電網工控系統造成更大危害.
卷積神經網絡由多組神經元組成,神經元之間的局部連接,有效的傳遞了數據特征,結合權值共享和局部連接等自身優點,可以簡化人工神經網絡的訓練,同時使得程序具有較強的魯棒性[5].電網工控系統與變壓器、發電站等實際物理設備相聯系,一方面,系統與實際生活息息相關,需要保證控制信息實時傳遞;另一方面,系統不能宕機,因此需要保證實時性和穩定性.使用卷積神經網絡模型,在經過良好的數據訓練之后,模型穩定且計算快速,可以在系統層面達到實用要求.本文設計卷積層參數(卷積核大小和卷積核個數),池化層參數(池化核大小和池化核個數),網絡層數,并加入級聯卷積層優化網絡結構.使用篩選之后的訓練集對網絡進行訓練.最終進行實驗,與傳統的K-means 聚類和SVM 方法對比準確率和誤報率,實驗結果表明本文算法提高了入侵檢測效果.
Anderson 于1980年首次提出“入侵檢測”概念,將未經授權訪問和篡改信息等行為歸為網絡入侵[6].早期的入侵檢測手段主要通過專家和技術人員建立入侵特征數據庫,進而將網絡數據與數據庫數據進行比較.若特征匹配,則判定為入侵數據;否則,判定為正常訪問數據[7].
近年來,隨著機器學習的迅猛發展,越來越多的研究人員將其應用到入侵檢測之中,提出新型入侵檢測技術.Tang 等采用一種基于支持向量機的層次異常入侵檢測技術,可以在較少先驗知識的前提下,用于檢測新型網絡入侵攻擊[8].Hatim 等基于K-means聚類提出一種融合的機器學習技術,并構建一個低延時入侵檢測系統[9].Su 等將層次分類算法和SVM融合,結合特征選取技術和SVM 算法特性,消除不重要數據特征,從而達到縮短訓練時間,同時提高DoS和非法探測兩種入侵行為的正確率[10].Raman 指出目前的入侵檢測技術在穩定性和能否檢測出新型網絡入侵之間需要做出取舍,提出一種基于Hypergraph和概率的神經網絡,可以有效解決網絡入侵的分類問題,在算法穩定性和檢測正確率上都有所提升[11].楊昆朋采用深度信念網絡(DBN)進行特征學習,將其與支持向量機相融合,驗證了深度學習在數據集豐富場景中,具有更高的準確率[12].卷積神經網絡在多個應用領域都有良好表現,但是網絡層次過深,網絡復雜度太高,最終則不能在實際應用場景中使用,只有設計符合特定應用場景的網絡結構,才能真正在實際應用中發揮效果[13].
本文完整算法流程如下所示:
Step 1.篩選KDD99 中通信協議為TCP和UDP數據集,剔除無效數據集,增加未授權入侵行為數據比例,使得四種入侵行為所占比例相同;
Step 2.將字符型數據轉化為多維數值向量,同時使用PCA 算法,降低數據維度;
Step 3.設計卷積核、池化核和全連接層等卷積神經網絡參數,加入級聯卷積層優化網絡架構;
Step 4.使用處理后的訓練集和測試集訓練網絡,比較準確率和誤檢率指標表現,調整參數使得網絡結構最優;
Step 5.增加epoch 數量,當epoch 數量增加使得準確率有下降趨勢時,停止訓練;
Step 6.將預測后的數據每隔一段時間加入到數據集中,用于下一步訓練.流程圖如圖1所示.

圖1 算法流程
神經元是神經網絡中基礎單元,數據通過神經元之間的不同權重進行傳遞,之后進行輸出,神經元基本結構如圖2所示.

圖2 神經元架構
網絡數據流通過神經元被提出數據特征后,傳遞到下一個神經元.經典卷積神經網絡架構如圖3所示.

圖3 卷積神經網絡
輸入Input 通過中間的卷積層、池化層和全連接層,最終輸出Output,本文中Input為訓練數據,Output為預測入侵行為和正常行為的概率.本文神經網絡采用的結構為:4 個卷積層、4 個池化層和1 個級聯卷積層,另外還有1 個全連接層,其中級聯卷積層包括4 個卷積層,每個卷積層之后相連1 個激活層,最終相連1 個池化層.
輸入數據通過卷積層卷積操作之后,數據不同維度特征將被提取出來,卷積核一般設置為n×n權值矩陣(n一般取值為3、5 或7),本網絡采用3×3 卷積核,4 層卷積層分別有4、8、16和32 個卷積核.卷積操作公式如下:

其中,為神經元輸入值,為偏置值,為輸出值.卷積層之后的池化層,用于對其之前的卷積層特征進行篩選降維,常用的操作為最大池化和平均池化[14].本文神經網絡池化核大小為1×1,每一層有8 個池化核.池化公式如下:


圖4 級聯卷積層
數據經過神經網絡傳遞,最終全連接層用于采集之前網絡的局部信息.為了提升卷積神經網絡的性能,網絡中神經單元的激活函數采用ReLU 函數.公式如下:

ReLU 函數在輸入值小于0 時,輸出值為0;當輸出值大于0 時,輸出值與輸入值相等.常用激活函數比較如圖5所示.

圖5 激活函數對比
輸出層采用Softmax 邏輯回歸,網絡輸出5 個概率,分別對應于Normal、Dos、Probe、U2R和R2L,選取其中概率最大的標簽作為最終的預測結果.
本文卷積神經網絡通過減小卷積核尺寸、增加級聯卷積層和減少網絡層數等技術,保持整體參數規模不大.采用3×3 卷積核,相對于傳統7×7 卷積核,減少了運算量.級聯卷積層在保持參數量變小的前提下,保持網絡可以獲得相同的感受野.采用較少的網絡層數,減少了計算的復雜度.結合卷積神經網絡權值共享等特性,本文實驗表明網絡可以達到實時性要求.
卷積神經網絡經常采用BP 算法進行訓練[15].開始訓練之前,使用小的隨機數對網絡中的參數進行初始化設置,之后訓練過程主要分成兩個步驟.首先,訓練集中帶標簽的數據傳入神經網絡,經過神經網絡中連接參數的運算,輸出層結果與數據標簽進行對比;然后,輸出結果與標簽的誤差經過反向傳播,進而調整網絡中的參數.經過不斷訓練,網絡中的參數得到不斷調整,使得損失函數結果得到優化,最終停止訓練.
梯度下降法每次使用全部數據進行參數更新,運算量非常大,使用訓練時間較長.進一步采用隨機梯度下降,每次選取其中一條數據進行更新,訓練速度大大提升,但是會陷入局部最優解.采用批量更新,每次選取部分樣本數據,在運算時間和效果之間取得平衡.學習率的選取深刻影響模型訓練的時間和效果,初始采用較大學習率,訓練一段時間后,降低學習率,以完成最終的網絡訓練[16].本文采用初始學習率0.01,之后降低學習率.
電網工控系統中數據主要分為2 種:從傳感器傳入控制中心的數據和從控制中心對各個傳感器發送的命令指令,具有數據格式固定、數據包小而多等特點[17].本文使用公開權威數據集KDD99.數據集格式如圖6所示.

圖6 數據格式
KDD99 數據集共500 萬余條,每條數據代表一次網絡行為,每條初始數據由42 維組成,其中38 維為數值特征,4 維為符號特征.每一個維度之間用逗號分隔,用來刻畫網絡協議、字節數、流量統計等特征,最后一維標簽為normal (正常網絡訪問)或者attack (網絡入侵).
根據第二維度代表的通信協議,選取其中TCP和UDP 協議數據.考慮只有數值維度可以通過卷積神經網絡處理,將字符型的數據維度通過熱編碼技術轉化為數值.處理之后數據維度提升至64 維,維度過多,影響訓練時間.考慮U2R和R2L 入侵對電網造成危害更大,提高數據集中U2R和R2L 數據比例,使得4 種入侵行為數量均衡.不同維度數據大小相差過多,如圖6中第一行數據,數值型最大值為397,而部分維度為0.04、0.02.PCA 算法為常見降維算法,利用方差理論,根據不同特征維度對結果的影響,選取影響較大的維度,將多維數據映射為低維數據.采用Min-Max 標準歸一化算法,在不破壞原有映射關系的情況下,將數據映射到0和1 之間:

根據PCA 算法,選取其中重要的52 維數據.符合條件數據選取訓練集樣本95136 個,其中正常樣本49603個,入侵樣本45533 個.測試集46331 個樣本,其中正常樣本27743 個,入侵樣本18588 個.其中U2R和R2L在原始集中樣本量就非常少,全部選取,處理后放入數據集.
SVM (Support Vector Machine,支持向量機)是一種有監督的機器學習算法,常用于二分類問題,在本實驗中用于將數據判定為正常數據或者入侵數據.學習目標為二元變量1(入侵)或者–1(正常),輸入數據為電網數據和數據標簽.算法求解過程是給定決策函數求超平面(ω×x+b=0),轉化為數學函數優化問題.SVM 算法有嚴格的數學推導過程,在深度學習之前一直是常用的機器學習算法,但是依賴于計算能力和數據量的提升,卷積神經網絡能達到更好的效果[18].
K-means 算法核心思想是,選取k個對象作為聚類的中心,進而算出其余對象與中心的距離并劃分到最近的中心,不斷更新中心位置直到聚類中心不再變化為止[19].實驗中對于K-means 算法的應用使用sklearn中相關的庫,將數據分為5 個中心,分別對應于1 個正常數據中心和4 個入侵行為中心.
實驗評價指標定義如下所示:

其中,TP:實際為入侵行為,預測為入侵行為;TN:實際為正常行為,預測為正常行為;FP:實際為正常行為,預測為入侵行為;FN:實際為入侵行為,預測為正常行為.準確率即算法模型判斷數據正確所占的比例,誤檢率用于衡量算法模型錯誤分類的比例,即將數據通過相應訓練之后的模型得出為正常或者入侵行為,進而與數據標簽對比得出此兩者指標大小.兩者組合可以反映出模型對于入侵數據的判斷準確率,同時誤檢率作為參考.
本文使用Tensorflow 深度學習框架進行神經網絡訓練,訓練集的全部數據訓練一次稱為一次epoch,實驗不斷增加epoch 數量,如圖7所示.其中,準確率先上升,準確率上升的速率先上升后減緩,達到450 次之后,有下降趨勢,此時網絡模型達到最優結構,停止訓練.

圖7 訓練結果
圖8所示為SVM 算法和K-means 算法與本文網絡模型對比正確率和誤檢率實驗數據.
圖8中展示了不同方法的入侵檢測準確率和誤檢率,其中基于K-means 算法的實驗準確率為75.63%,誤檢率為9.46%;基于SVM 算法的實驗準確率為87.79%,誤檢率為8.33%.本文基于卷積神經網絡的算法準確率為95.37%,誤檢率為8.09%,相較于另外兩種算法具有更高的準確率和更低的誤檢率,其中準確率的提升相較于誤檢率的下降更為明顯.分析原因如下:傳統SVM算法和K-means 算法相較于深度學習算法,如本文卷積神經網絡算法,本文算法模型復雜度更高,因此具有更強的表達能力.

圖8 實驗結果對比
針對如何在電網工控系統中檢測出入侵行為這一問題,本文提出一種基于卷積神經網絡的入侵檢測算法.本文采用KDD99 數據集作為原始數據集,根據電網工控系統自身實時性和穩定性的要求,系統數據流向固定、數據包小等特點,在數據處理過程剔除不重要的特征維度,篩選出訓練集和測試集.構建不同的卷積神經網絡架構,選取不同的卷積核、池化核和網絡層數等參數進行實驗.加入級聯卷積層優化網絡結構,最終與傳統SVM 算法和K-means 算法進行對比,在準確率和誤檢率方面顯示本文算法有良好表現.