邱 鵬, 劉漢忠, 黃曉華
(南京工程學院a.計算機工程學院;b.先進工業技術研究院,南京 211167)
隨著工業控制系統越來越頻繁地連接到企業局域網和互聯網,系統管理變得更加便捷,維護成本大大降低,也更容易面臨各種網絡攻擊。例如工業控制系統的監控與數據采集(Supervisory Control And Data Acquisition,SCADA),它不同于傳統的互聯網運行維護,安全軟件補丁和頻繁的軟件更新并不適合SCADA的安全維護,它通常要求高可用性、靜態拓撲和常規通信的運行模式。鑒于SCADA 的特殊性,如何快速檢測系統異常,如何采用高效的異常檢測方法確保系統的安全性,已成為目前工業控制系統異常檢測中所面臨的一個重要問題。
目前適用于SCADA的異常檢測方法主要有:
(1)監督神經網絡法[1-3]。將訓練數據標記為“正?!被颉爱惓!保缓笥柧毾到y區分“正?!被颉爱惓!辈⒂^察結果,將新的數據結果分類為“正?!被颉爱惓!鳖悇e,但是,對龐大的數據集采用人工標記的方法本身難以實現,并且會耗費大量時間,同時增加出錯的概率。
(2)流量異常檢測法[4-5]。使用技術手段學習系統的正常行為,并試圖識別流量中的異常,即區別于正常行為的流量。這種檢測方法準確率低,誤檢率高。
(3)基于模型或規范的檢測法[6]。創建一個獲得授權的工業控制系統模型并制定系統運行的相應規則,當觀察到模型的行為與規則不匹配時發出警報。其缺點是在現實中很難百分之百模擬一個工業控制系統模型。
本文提出的混合深度神經網絡的異常檢測方法,在SCADA遭到入侵攻擊或發生異常時,構建棧式稀疏去噪自編碼器深度神經網絡(Stacked Sparse Denoising Auto-encoder-Deep Neural Network, SSDADNN)模型并為其添加監督層,進行無監督特征學習,使用分布式訓練策略來加快異常檢測進程,可解決現有技術中異常檢測方法準確率低、誤檢率高以及需要消耗大量時間等問題。
基于混合深度神經網絡的異常檢測模型如圖1 所示,由數據預處理引擎和異常檢測引擎組成。在進行異常檢測之前需要預處理特征數據,包括歸一化特征標準、數據拆分與均衡以及獨熱編碼等一系列預處理措施。

圖1 基于混合深度神經網絡的異常檢測模型
將數據集特征值按比例縮放,使得數據落在特定區間[0,1]之內,即歸一化值[7]
式中:F為系統某一特征;x為描述F特征的數據集中的某一特征值;max(F)和min(F)分別為F的特征值的最大值和最小值。
將數據分割成互不相交的訓練數據集、驗證數據集和測試數據集,占比分別是60%、20%和20%;在訓練集對模型進行訓練并周期性使用驗證數據集對模型性能進行評估,以避免過度擬合,如神經網絡發生過度擬合,即當驗證數據集正確率持平或下降時,則停止訓練并調整神經網絡本身的參數和超參數;利用測試數據集評估神經網絡訓練完成后的最終預測模型,且測試數據集只使用一次。
數據均衡預處理操作是依據數據分布,從占較少的一類樣本中重復隨機抽樣[8],將所得樣本擴充至數據集,以改善由于建模產生的數據集失衡,實現類別平衡。獨熱編碼操作是在表示特征分類時,編碼一組由位信息組成的向量表示,只設置一個列值為1,其余列值全為0,與輸出函數輸出的概率向量進行損失分數計算[9]。
圖1 中的異常檢測引擎模塊混合深度神經網絡由SSDA-DNN構建而成,其結構如圖2 所示。

圖2 混合深度神經網絡
步驟1 將系統數據集特征值作為第一個稀疏去噪自編碼器的輸入,用x=(x1,x2,…,xn,n>0)表示,該編碼器的隱藏層h1帶有一定數量的節點,同時丟棄該編碼器的解碼器部分。
步驟2 將第1 個稀疏去噪自編碼器隱藏層h1作為第2 個稀疏去噪自編碼器的輸入,用h2表示第2 個稀疏去噪自編碼器的隱藏層,同時丟棄該編碼器的解碼器部分。依此類推,一直進行堆棧處理至第d個稀疏去噪自編碼器,其輸入層是第d-1 個編碼器的隱藏層hd-1,其隱藏層是hd。輸出層節點用y=(y1,y2,…,yn,n>0)表示。SSDA-DNN的輸入層到隱藏層的權重矩陣和偏差項分別用wn×d和b=(b1,b2,…,bd-1)表示。
步驟3 在設置深度神經網絡層數時,深度神經網絡越深,則訓練深度神經網絡模型需要的時間就越長[10],在模型中利用稀疏參數,設置隱藏層的節點數大于輸入維度。
對SSDA-DNN中每一個自編碼器的編碼部分進行單獨訓練,重建其輸入特征值,進行混合深度神經網絡無監督特征學習。
使用均方差代價函數[11]優化自編碼器模型的參數
式中:θ 為參數變量;m為訓練樣本的個數;hw為連接輸入到隱藏層的權重;B是隱藏層的偏差向量;xi為訓練樣本第i個輸入特征值;yi為訓練樣本第i個網絡輸出值。(hw,B(xi))則為真實標簽。
只允許隱藏層的少量神經元激活狀態稀疏參數
式中:g為隱藏層的神經元數量;ρ 為模型學習隱藏層中輸入數據的稀疏參數所有訓練樣本隱藏層第i個單元的平均激活值。
在式(2)的基礎上加入一個權值衰減進行正則化,加入稀疏參數后的代價函數:
式中,j、β為控制稀疏性懲罰因子的權重。
為混合深度神經網絡添加監督分類器[12],主要是用來解決多元分類模型問題。將數據集按照多元分類標簽進行分類,其中正常行為記錄的分類標簽為0,異常攻擊記錄的分類標簽為(1,2,…,z,z>0);再將Softmax函數層作為一個監督分類器,用于混合深度神經網絡輸出層的激活函數。
由Softmax 函數層計算出所有類的概率分布,換句話說就是通過Softmax函數層的argmax 函數獲得所有類中的最大概率值。具體方法是在給定輸入向量x中計算第u類的預測概率:
式中:W為權重向量;k為輸出類別數量;Wu、Wv分別為第u、v類的權重向量;bu、bv分別為第u、v類Softmax函數每一個輸出單元從輸入層到隱藏層的偏差項。模型的預測值(具有最大概率值的類):
異常檢測引擎模塊由混合深度神經網絡和監督分類器組成,如圖3 所示。通過訓練異常檢測引擎模塊來完成異常檢測。

圖3 異常檢測引擎模塊
利用交叉熵代價函數[13]訓練混合深度神經網絡和監督分類器,以最小化交叉熵。利用交叉熵代價函數D(L,Q)測量獨熱編碼標簽數據的真實分布概率L={l1,l2,…,lN}和Softmax函數輸出的分類數據的分布概率Q={q1,q2,…,qN}之間的相似性:
式中:N為樣本類別數;r為樣本中的第r類屬性。
訓練混合深度神經網絡的第1 個稀疏去噪自編碼器,第1 個隱藏層h1的編碼表示特征作為第2 個編碼器的輸入,訓練第2 個稀疏去噪自編碼器,第2 個隱藏層h2的特征作為下一個編碼器的輸入抽象表示,訓練最后一個自動編碼器d,第d—1 個隱藏層hd-1作為它的輸入特征抽象表示。
對監督分類器的Softmax 函數層進行監督訓練,Softmax函數層有n個節點,對應著n個不同類型的記錄數據集,這一層作為輸出層附加在混合深度神經網絡之后,訓練該層時使用帶有標簽的數據集。
通過之前完成無監督特征學習和分類訓練確定混合深度神經網絡參數,如:權重、偏差項和標簽訓練集。應用梯度下降法,對異常檢測引擎實行進一步微調,使用標簽測試數據集評估系統的異常檢測能力,直至網絡收斂,最小化重建誤差,提高分類精度。
采用數據平行的分布式訓練[14]來加快計算隨機梯度下降,以減少異常檢測時間?;赥ensorFlow 框架,訓練數據集在變量服務器和工作點A、B和C之間來回傳輸。變量服務器保存權重向量W 并分配給工作點作為工作負荷,工作點則負責在反向傳播訓練算法中計算梯度。把來自工作點的梯度計算結果c反饋給變量服務器,用于優化權值并再次傳播給工作點,最終得到梯度加權平均值,用于更新整個模型的參數,以縮短梯度計算耗時,圖4 為混合深度神經網絡分布式數據訓練過程圖。

圖4 混合深度神經網絡分布式數據訓練過程
實驗平臺是通過Openstack 云計算管理平臺建立云基礎架構服務,設置一個海杜普(Hadoop)分布式系統基礎架構集群,它包括1 個主節點和5 個工作節點,每個節點含8 核心虛擬CPU,8GB內存,10GB硬盤,運行Ubuntu 18.04.2 LTS服務器操作系統,深度學習訓練由基于Python 2.7 語言的分布式TensorFlow 2.0 支持,主節點上的海杜普分布式文件系統用于存儲SCADA數據集。實驗數據使用某大學建立的實驗室規模的燃氣管道系統作為工業控制系統SCADA 數據集來源。燃氣管道系統使用PID控制器來保持管道中的空氣壓力,系統的數據集包含正常記錄和攻擊記錄,見表1。

表1 數據記錄分類表
表1 數據集按照多元分類方式分成了1 類正常行為(標簽是0)和5 類攻擊行為(標簽為1 ~5)。為避免不必要的訓練偏差,對占比60%的訓練數據集進行數據平衡處理,占比20%的測試數據集則使用原始系統數據。圖5 所示為將異常數據進行多元分類時燃氣管道數據訓練集和測試集類型圖,使用獨熱編碼計算方法處理所有數據標簽。

圖5 分類燃氣管道數據訓練集和測試集類型
設計SSDA-DNN 時,定義訓練參數和超參數,其中學習率為1%,稀疏參數為0.05,噪聲水平為35%。采用多元分類劃分數據集,隱藏層數為2,設置的第1層隱藏層節點數是58,第2 層隱藏層節點數是34,輸入層節點數為24,輸出層節點數為6,訓練迭代次數為50。
選用精度與召回率的協調平均值(F1-score)和假陽性率作為評估異常檢測方法的評價指標,精度表示衡量異常百分比的精確程度,召回率為正確檢測出異常的比例,由于精度和召回率是相互制約的兩項指標,所以使用精度與召回率的協調平均值綜合權衡精度和召回率,假陽性率是將正常行為錯誤地識別為異常行為的比例。
通過混合深度神經網絡的異常檢測方法與其他異常檢測算法進行比較,用于對比的標準異常檢測算法包括決策樹算法[15],樸素貝葉斯算法[16]以及隨機森林算法[17]。仿真結果如圖6 所示,所提異常檢測方法無論是在檢測正常行為特征還是在檢測5 種異常攻擊,獲得的精度與召回率的協調平均值百分比幾乎都高于其他幾種標準異常檢測算法,特別是相較于決策樹算法和樸素貝葉斯算法優勢更加明顯。此外,圖7所示仿真結果進一步表明所提方法在檢測5 種異常攻擊特征方面,假陽性率指標基本低于其他標準異常檢測算法。

圖7 不同算法的假陽性率對比
圖8 所示為使用單機和分布式集群2 種方式訓練混合深度神經網絡異常檢測模型,在不同訓練迭代次數下的耗時。由圖8 可見,使用分布式訓練混合深度神經網絡模型用時明顯少于單機訓練方式,提高了計算效率,加快了異常檢測進程。

圖8 單機訓練與分布式集群訓練耗時對比
為提高SCADA 中的異常檢測精度和效率,本文提出一種異常檢測方法,首先預處理數據集,然后構建SSDA-DNN,再進行無監督特征學習并為混合深度神經網絡添加監督分類器,完成異常檢測,此方法尤其適用異常行為呈現多類的情況。仿真結果表明,在精度與召回率的協調平均值以及假陽性率指標上都優于其他傳統異常檢測方法,在異常檢測的時間效率上也有所提高,表明該方法可行且有效。未來將圍繞在擴大實驗數據集和進一步加快訓練時間上進行優化。