邱 鵬, 劉漢忠, 黃曉華
(南京工程學(xué)院a.計(jì)算機(jī)工程學(xué)院;b.先進(jìn)工業(yè)技術(shù)研究院,南京 211167)
隨著工業(yè)控制系統(tǒng)越來越頻繁地連接到企業(yè)局域網(wǎng)和互聯(lián)網(wǎng),系統(tǒng)管理變得更加便捷,維護(hù)成本大大降低,也更容易面臨各種網(wǎng)絡(luò)攻擊。例如工業(yè)控制系統(tǒng)的監(jiān)控與數(shù)據(jù)采集(Supervisory Control And Data Acquisition,SCADA),它不同于傳統(tǒng)的互聯(lián)網(wǎng)運(yùn)行維護(hù),安全軟件補(bǔ)丁和頻繁的軟件更新并不適合SCADA的安全維護(hù),它通常要求高可用性、靜態(tài)拓?fù)浜统R?guī)通信的運(yùn)行模式。鑒于SCADA 的特殊性,如何快速檢測(cè)系統(tǒng)異常,如何采用高效的異常檢測(cè)方法確保系統(tǒng)的安全性,已成為目前工業(yè)控制系統(tǒng)異常檢測(cè)中所面臨的一個(gè)重要問題。
目前適用于SCADA的異常檢測(cè)方法主要有:
(1)監(jiān)督神經(jīng)網(wǎng)絡(luò)法[1-3]。將訓(xùn)練數(shù)據(jù)標(biāo)記為“正?!被颉爱惓!?,然后訓(xùn)練系統(tǒng)區(qū)分“正?!被颉爱惓!辈⒂^察結(jié)果,將新的數(shù)據(jù)結(jié)果分類為“正常”或“異?!鳖悇e,但是,對(duì)龐大的數(shù)據(jù)集采用人工標(biāo)記的方法本身難以實(shí)現(xiàn),并且會(huì)耗費(fèi)大量時(shí)間,同時(shí)增加出錯(cuò)的概率。
(2)流量異常檢測(cè)法[4-5]。使用技術(shù)手段學(xué)習(xí)系統(tǒng)的正常行為,并試圖識(shí)別流量中的異常,即區(qū)別于正常行為的流量。這種檢測(cè)方法準(zhǔn)確率低,誤檢率高。
(3)基于模型或規(guī)范的檢測(cè)法[6]。創(chuàng)建一個(gè)獲得授權(quán)的工業(yè)控制系統(tǒng)模型并制定系統(tǒng)運(yùn)行的相應(yīng)規(guī)則,當(dāng)觀察到模型的行為與規(guī)則不匹配時(shí)發(fā)出警報(bào)。其缺點(diǎn)是在現(xiàn)實(shí)中很難百分之百模擬一個(gè)工業(yè)控制系統(tǒng)模型。
本文提出的混合深度神經(jīng)網(wǎng)絡(luò)的異常檢測(cè)方法,在SCADA遭到入侵攻擊或發(fā)生異常時(shí),構(gòu)建棧式稀疏去噪自編碼器深度神經(jīng)網(wǎng)絡(luò)(Stacked Sparse Denoising Auto-encoder-Deep Neural Network, SSDADNN)模型并為其添加監(jiān)督層,進(jìn)行無監(jiān)督特征學(xué)習(xí),使用分布式訓(xùn)練策略來加快異常檢測(cè)進(jìn)程,可解決現(xiàn)有技術(shù)中異常檢測(cè)方法準(zhǔn)確率低、誤檢率高以及需要消耗大量時(shí)間等問題。
基于混合深度神經(jīng)網(wǎng)絡(luò)的異常檢測(cè)模型如圖1 所示,由數(shù)據(jù)預(yù)處理引擎和異常檢測(cè)引擎組成。在進(jìn)行異常檢測(cè)之前需要預(yù)處理特征數(shù)據(jù),包括歸一化特征標(biāo)準(zhǔn)、數(shù)據(jù)拆分與均衡以及獨(dú)熱編碼等一系列預(yù)處理措施。
圖1 基于混合深度神經(jīng)網(wǎng)絡(luò)的異常檢測(cè)模型
將數(shù)據(jù)集特征值按比例縮放,使得數(shù)據(jù)落在特定區(qū)間[0,1]之內(nèi),即歸一化值[7]
式中:F為系統(tǒng)某一特征;x為描述F特征的數(shù)據(jù)集中的某一特征值;max(F)和min(F)分別為F的特征值的最大值和最小值。
將數(shù)據(jù)分割成互不相交的訓(xùn)練數(shù)據(jù)集、驗(yàn)證數(shù)據(jù)集和測(cè)試數(shù)據(jù)集,占比分別是60%、20%和20%;在訓(xùn)練集對(duì)模型進(jìn)行訓(xùn)練并周期性使用驗(yàn)證數(shù)據(jù)集對(duì)模型性能進(jìn)行評(píng)估,以避免過度擬合,如神經(jīng)網(wǎng)絡(luò)發(fā)生過度擬合,即當(dāng)驗(yàn)證數(shù)據(jù)集正確率持平或下降時(shí),則停止訓(xùn)練并調(diào)整神經(jīng)網(wǎng)絡(luò)本身的參數(shù)和超參數(shù);利用測(cè)試數(shù)據(jù)集評(píng)估神經(jīng)網(wǎng)絡(luò)訓(xùn)練完成后的最終預(yù)測(cè)模型,且測(cè)試數(shù)據(jù)集只使用一次。
數(shù)據(jù)均衡預(yù)處理操作是依據(jù)數(shù)據(jù)分布,從占較少的一類樣本中重復(fù)隨機(jī)抽樣[8],將所得樣本擴(kuò)充至數(shù)據(jù)集,以改善由于建模產(chǎn)生的數(shù)據(jù)集失衡,實(shí)現(xiàn)類別平衡。獨(dú)熱編碼操作是在表示特征分類時(shí),編碼一組由位信息組成的向量表示,只設(shè)置一個(gè)列值為1,其余列值全為0,與輸出函數(shù)輸出的概率向量進(jìn)行損失分?jǐn)?shù)計(jì)算[9]。
圖1 中的異常檢測(cè)引擎模塊混合深度神經(jīng)網(wǎng)絡(luò)由SSDA-DNN構(gòu)建而成,其結(jié)構(gòu)如圖2 所示。
圖2 混合深度神經(jīng)網(wǎng)絡(luò)
步驟1 將系統(tǒng)數(shù)據(jù)集特征值作為第一個(gè)稀疏去噪自編碼器的輸入,用x=(x1,x2,…,xn,n>0)表示,該編碼器的隱藏層h1帶有一定數(shù)量的節(jié)點(diǎn),同時(shí)丟棄該編碼器的解碼器部分。
步驟2 將第1 個(gè)稀疏去噪自編碼器隱藏層h1作為第2 個(gè)稀疏去噪自編碼器的輸入,用h2表示第2 個(gè)稀疏去噪自編碼器的隱藏層,同時(shí)丟棄該編碼器的解碼器部分。依此類推,一直進(jìn)行堆棧處理至第d個(gè)稀疏去噪自編碼器,其輸入層是第d-1 個(gè)編碼器的隱藏層hd-1,其隱藏層是hd。輸出層節(jié)點(diǎn)用y=(y1,y2,…,yn,n>0)表示。SSDA-DNN的輸入層到隱藏層的權(quán)重矩陣和偏差項(xiàng)分別用wn×d和b=(b1,b2,…,bd-1)表示。
步驟3 在設(shè)置深度神經(jīng)網(wǎng)絡(luò)層數(shù)時(shí),深度神經(jīng)網(wǎng)絡(luò)越深,則訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型需要的時(shí)間就越長(zhǎng)[10],在模型中利用稀疏參數(shù),設(shè)置隱藏層的節(jié)點(diǎn)數(shù)大于輸入維度。
對(duì)SSDA-DNN中每一個(gè)自編碼器的編碼部分進(jìn)行單獨(dú)訓(xùn)練,重建其輸入特征值,進(jìn)行混合深度神經(jīng)網(wǎng)絡(luò)無監(jiān)督特征學(xué)習(xí)。
使用均方差代價(jià)函數(shù)[11]優(yōu)化自編碼器模型的參數(shù)
式中:θ 為參數(shù)變量;m為訓(xùn)練樣本的個(gè)數(shù);hw為連接輸入到隱藏層的權(quán)重;B是隱藏層的偏差向量;xi為訓(xùn)練樣本第i個(gè)輸入特征值;yi為訓(xùn)練樣本第i個(gè)網(wǎng)絡(luò)輸出值。(hw,B(xi))則為真實(shí)標(biāo)簽。
只允許隱藏層的少量神經(jīng)元激活狀態(tài)稀疏參數(shù)
式中:g為隱藏層的神經(jīng)元數(shù)量;ρ 為模型學(xué)習(xí)隱藏層中輸入數(shù)據(jù)的稀疏參數(shù)所有訓(xùn)練樣本隱藏層第i個(gè)單元的平均激活值。
在式(2)的基礎(chǔ)上加入一個(gè)權(quán)值衰減進(jìn)行正則化,加入稀疏參數(shù)后的代價(jià)函數(shù):
式中,j、β為控制稀疏性懲罰因子的權(quán)重。
為混合深度神經(jīng)網(wǎng)絡(luò)添加監(jiān)督分類器[12],主要是用來解決多元分類模型問題。將數(shù)據(jù)集按照多元分類標(biāo)簽進(jìn)行分類,其中正常行為記錄的分類標(biāo)簽為0,異常攻擊記錄的分類標(biāo)簽為(1,2,…,z,z>0);再將Softmax函數(shù)層作為一個(gè)監(jiān)督分類器,用于混合深度神經(jīng)網(wǎng)絡(luò)輸出層的激活函數(shù)。
由Softmax 函數(shù)層計(jì)算出所有類的概率分布,換句話說就是通過Softmax函數(shù)層的argmax 函數(shù)獲得所有類中的最大概率值。具體方法是在給定輸入向量x中計(jì)算第u類的預(yù)測(cè)概率:
式中:W為權(quán)重向量;k為輸出類別數(shù)量;Wu、Wv分別為第u、v類的權(quán)重向量;bu、bv分別為第u、v類Softmax函數(shù)每一個(gè)輸出單元從輸入層到隱藏層的偏差項(xiàng)。模型的預(yù)測(cè)值(具有最大概率值的類):
異常檢測(cè)引擎模塊由混合深度神經(jīng)網(wǎng)絡(luò)和監(jiān)督分類器組成,如圖3 所示。通過訓(xùn)練異常檢測(cè)引擎模塊來完成異常檢測(cè)。
圖3 異常檢測(cè)引擎模塊
利用交叉熵代價(jià)函數(shù)[13]訓(xùn)練混合深度神經(jīng)網(wǎng)絡(luò)和監(jiān)督分類器,以最小化交叉熵。利用交叉熵代價(jià)函數(shù)D(L,Q)測(cè)量獨(dú)熱編碼標(biāo)簽數(shù)據(jù)的真實(shí)分布概率L={l1,l2,…,lN}和Softmax函數(shù)輸出的分類數(shù)據(jù)的分布概率Q={q1,q2,…,qN}之間的相似性:
式中:N為樣本類別數(shù);r為樣本中的第r類屬性。
訓(xùn)練混合深度神經(jīng)網(wǎng)絡(luò)的第1 個(gè)稀疏去噪自編碼器,第1 個(gè)隱藏層h1的編碼表示特征作為第2 個(gè)編碼器的輸入,訓(xùn)練第2 個(gè)稀疏去噪自編碼器,第2 個(gè)隱藏層h2的特征作為下一個(gè)編碼器的輸入抽象表示,訓(xùn)練最后一個(gè)自動(dòng)編碼器d,第d—1 個(gè)隱藏層hd-1作為它的輸入特征抽象表示。
對(duì)監(jiān)督分類器的Softmax 函數(shù)層進(jìn)行監(jiān)督訓(xùn)練,Softmax函數(shù)層有n個(gè)節(jié)點(diǎn),對(duì)應(yīng)著n個(gè)不同類型的記錄數(shù)據(jù)集,這一層作為輸出層附加在混合深度神經(jīng)網(wǎng)絡(luò)之后,訓(xùn)練該層時(shí)使用帶有標(biāo)簽的數(shù)據(jù)集。
通過之前完成無監(jiān)督特征學(xué)習(xí)和分類訓(xùn)練確定混合深度神經(jīng)網(wǎng)絡(luò)參數(shù),如:權(quán)重、偏差項(xiàng)和標(biāo)簽訓(xùn)練集。應(yīng)用梯度下降法,對(duì)異常檢測(cè)引擎實(shí)行進(jìn)一步微調(diào),使用標(biāo)簽測(cè)試數(shù)據(jù)集評(píng)估系統(tǒng)的異常檢測(cè)能力,直至網(wǎng)絡(luò)收斂,最小化重建誤差,提高分類精度。
采用數(shù)據(jù)平行的分布式訓(xùn)練[14]來加快計(jì)算隨機(jī)梯度下降,以減少異常檢測(cè)時(shí)間?;赥ensorFlow 框架,訓(xùn)練數(shù)據(jù)集在變量服務(wù)器和工作點(diǎn)A、B和C之間來回傳輸。變量服務(wù)器保存權(quán)重向量W 并分配給工作點(diǎn)作為工作負(fù)荷,工作點(diǎn)則負(fù)責(zé)在反向傳播訓(xùn)練算法中計(jì)算梯度。把來自工作點(diǎn)的梯度計(jì)算結(jié)果c反饋給變量服務(wù)器,用于優(yōu)化權(quán)值并再次傳播給工作點(diǎn),最終得到梯度加權(quán)平均值,用于更新整個(gè)模型的參數(shù),以縮短梯度計(jì)算耗時(shí),圖4 為混合深度神經(jīng)網(wǎng)絡(luò)分布式數(shù)據(jù)訓(xùn)練過程圖。
圖4 混合深度神經(jīng)網(wǎng)絡(luò)分布式數(shù)據(jù)訓(xùn)練過程
實(shí)驗(yàn)平臺(tái)是通過Openstack 云計(jì)算管理平臺(tái)建立云基礎(chǔ)架構(gòu)服務(wù),設(shè)置一個(gè)海杜普(Hadoop)分布式系統(tǒng)基礎(chǔ)架構(gòu)集群,它包括1 個(gè)主節(jié)點(diǎn)和5 個(gè)工作節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)含8 核心虛擬CPU,8GB內(nèi)存,10GB硬盤,運(yùn)行Ubuntu 18.04.2 LTS服務(wù)器操作系統(tǒng),深度學(xué)習(xí)訓(xùn)練由基于Python 2.7 語言的分布式TensorFlow 2.0 支持,主節(jié)點(diǎn)上的海杜普分布式文件系統(tǒng)用于存儲(chǔ)SCADA數(shù)據(jù)集。實(shí)驗(yàn)數(shù)據(jù)使用某大學(xué)建立的實(shí)驗(yàn)室規(guī)模的燃?xì)夤艿老到y(tǒng)作為工業(yè)控制系統(tǒng)SCADA 數(shù)據(jù)集來源。燃?xì)夤艿老到y(tǒng)使用PID控制器來保持管道中的空氣壓力,系統(tǒng)的數(shù)據(jù)集包含正常記錄和攻擊記錄,見表1。
表1 數(shù)據(jù)記錄分類表
表1 數(shù)據(jù)集按照多元分類方式分成了1 類正常行為(標(biāo)簽是0)和5 類攻擊行為(標(biāo)簽為1 ~5)。為避免不必要的訓(xùn)練偏差,對(duì)占比60%的訓(xùn)練數(shù)據(jù)集進(jìn)行數(shù)據(jù)平衡處理,占比20%的測(cè)試數(shù)據(jù)集則使用原始系統(tǒng)數(shù)據(jù)。圖5 所示為將異常數(shù)據(jù)進(jìn)行多元分類時(shí)燃?xì)夤艿罃?shù)據(jù)訓(xùn)練集和測(cè)試集類型圖,使用獨(dú)熱編碼計(jì)算方法處理所有數(shù)據(jù)標(biāo)簽。
圖5 分類燃?xì)夤艿罃?shù)據(jù)訓(xùn)練集和測(cè)試集類型
設(shè)計(jì)SSDA-DNN 時(shí),定義訓(xùn)練參數(shù)和超參數(shù),其中學(xué)習(xí)率為1%,稀疏參數(shù)為0.05,噪聲水平為35%。采用多元分類劃分?jǐn)?shù)據(jù)集,隱藏層數(shù)為2,設(shè)置的第1層隱藏層節(jié)點(diǎn)數(shù)是58,第2 層隱藏層節(jié)點(diǎn)數(shù)是34,輸入層節(jié)點(diǎn)數(shù)為24,輸出層節(jié)點(diǎn)數(shù)為6,訓(xùn)練迭代次數(shù)為50。
選用精度與召回率的協(xié)調(diào)平均值(F1-score)和假陽性率作為評(píng)估異常檢測(cè)方法的評(píng)價(jià)指標(biāo),精度表示衡量異常百分比的精確程度,召回率為正確檢測(cè)出異常的比例,由于精度和召回率是相互制約的兩項(xiàng)指標(biāo),所以使用精度與召回率的協(xié)調(diào)平均值綜合權(quán)衡精度和召回率,假陽性率是將正常行為錯(cuò)誤地識(shí)別為異常行為的比例。
通過混合深度神經(jīng)網(wǎng)絡(luò)的異常檢測(cè)方法與其他異常檢測(cè)算法進(jìn)行比較,用于對(duì)比的標(biāo)準(zhǔn)異常檢測(cè)算法包括決策樹算法[15],樸素貝葉斯算法[16]以及隨機(jī)森林算法[17]。仿真結(jié)果如圖6 所示,所提異常檢測(cè)方法無論是在檢測(cè)正常行為特征還是在檢測(cè)5 種異常攻擊,獲得的精度與召回率的協(xié)調(diào)平均值百分比幾乎都高于其他幾種標(biāo)準(zhǔn)異常檢測(cè)算法,特別是相較于決策樹算法和樸素貝葉斯算法優(yōu)勢(shì)更加明顯。此外,圖7所示仿真結(jié)果進(jìn)一步表明所提方法在檢測(cè)5 種異常攻擊特征方面,假陽性率指標(biāo)基本低于其他標(biāo)準(zhǔn)異常檢測(cè)算法。
圖7 不同算法的假陽性率對(duì)比
圖8 所示為使用單機(jī)和分布式集群2 種方式訓(xùn)練混合深度神經(jīng)網(wǎng)絡(luò)異常檢測(cè)模型,在不同訓(xùn)練迭代次數(shù)下的耗時(shí)。由圖8 可見,使用分布式訓(xùn)練混合深度神經(jīng)網(wǎng)絡(luò)模型用時(shí)明顯少于單機(jī)訓(xùn)練方式,提高了計(jì)算效率,加快了異常檢測(cè)進(jìn)程。
圖8 單機(jī)訓(xùn)練與分布式集群訓(xùn)練耗時(shí)對(duì)比
為提高SCADA 中的異常檢測(cè)精度和效率,本文提出一種異常檢測(cè)方法,首先預(yù)處理數(shù)據(jù)集,然后構(gòu)建SSDA-DNN,再進(jìn)行無監(jiān)督特征學(xué)習(xí)并為混合深度神經(jīng)網(wǎng)絡(luò)添加監(jiān)督分類器,完成異常檢測(cè),此方法尤其適用異常行為呈現(xiàn)多類的情況。仿真結(jié)果表明,在精度與召回率的協(xié)調(diào)平均值以及假陽性率指標(biāo)上都優(yōu)于其他傳統(tǒng)異常檢測(cè)方法,在異常檢測(cè)的時(shí)間效率上也有所提高,表明該方法可行且有效。未來將圍繞在擴(kuò)大實(shí)驗(yàn)數(shù)據(jù)集和進(jìn)一步加快訓(xùn)練時(shí)間上進(jìn)行優(yōu)化。