本發(fā)明涉及工業(yè)控制系統(tǒng)的安全領(lǐng)域,尤其涉及針對工業(yè)控制系統(tǒng)中PLC的攻擊的檢測與防御方法,具體公開了一種非侵入式基于功耗分析的PLC異常檢測方法。
背景技術(shù):
工業(yè)控制系統(tǒng)是一個國家的重要基礎(chǔ)設(shè)施,在滿足人民物質(zhì)需求,保障經(jīng)濟可持續(xù)發(fā)展以及維護社會穩(wěn)定方面具有重要作用。工業(yè)控制系統(tǒng)如果遭到惡意攻擊者的破壞,可能影響國民經(jīng)濟的正常發(fā)展,甚至造成社會動蕩。因此研究與工業(yè)控制系統(tǒng)相關(guān)的安全監(jiān)控技術(shù),是一項與國計民生息息相關(guān)的工作,具有重大意義。
最初的工業(yè)控制系統(tǒng)是以孤島方式運行的,使用專用設(shè)備與協(xié)議并且與外界物理環(huán)境相對隔絕,因此在很長一段時間內(nèi)都是相對安全的。但是為了滿足企業(yè)不斷提高的經(jīng)營管理要求,順應(yīng)信息化以及工業(yè)化深度融合的潮流,隨著近年來信息技術(shù)以及物聯(lián)網(wǎng)的飛速發(fā)展,信息技術(shù)大范圍的應(yīng)用于工業(yè)控制系統(tǒng)中?!畠苫诤稀瘞砹松a(chǎn)力的極大提升的同時,也給工業(yè)控制系統(tǒng)帶來了巨大的安全問題,由于外界網(wǎng)絡(luò)的接入,現(xiàn)在的工業(yè)控制系統(tǒng)不僅需要面臨來自企業(yè)內(nèi)部的安全威脅,還可能遭受來自互聯(lián)網(wǎng)的攻擊。
據(jù)ICS-CERT公布的數(shù)據(jù)顯示,2010-2013四年的時間里,全球工業(yè)控制領(lǐng)域相關(guān)的安全事件高達623件,這些事件中59%都發(fā)生在石油化工、核電、電力等能源行業(yè),作為典型的技術(shù)密集型行業(yè),一旦其工業(yè)控制系統(tǒng)因遭受惡意攻擊而出現(xiàn)安全問題,不僅會影響生產(chǎn)活動的順利進行,還有可能引起設(shè)備爆炸,工作人員傷亡等重大安全事故。工業(yè)控制系統(tǒng)所面臨的嚴峻安全形勢,引起了各界的廣泛關(guān)注。
傳統(tǒng)的工業(yè)控制系統(tǒng)安全防護手段中,大多是將信息系統(tǒng)領(lǐng)域的安全防護手段移植到工業(yè)控制系統(tǒng)中來。由于硬件結(jié)構(gòu)以及軟件系統(tǒng)的限制,工業(yè)控制系統(tǒng)中很多專有設(shè)備無法應(yīng)用傳統(tǒng)的安全防護手段,由于資源的限制也無法經(jīng)受頻繁的漏洞掃描;另一方面,侵入式的安全防護方法如安裝第三方軟件,很可能會給工業(yè)控制系統(tǒng)帶來新的潛在風(fēng)險,而且工業(yè)控制系統(tǒng)運行過程中無法容忍哪怕短暫的停機或中斷。因此,傳統(tǒng)的安全防護方法無法很好地應(yīng)用于實際中,一種非侵入式的安全防護方法則顯得尤為必要。PLC作為工業(yè)控制系統(tǒng)中的關(guān)鍵設(shè)備,直接與現(xiàn)場傳感器及執(zhí)行器相連,控制工業(yè)現(xiàn)場的實施過程,一旦其運行指令遭到惡意篡改,就會造成巨大災(zāi)難,今年來針對PLC的攻擊大幅度增加,而目前尚無針對PLC特性而設(shè)計的有效安全防護手段。因此,針對PLC本身的特性設(shè)計出一套安全防護系統(tǒng),用于檢測對PLC的攻擊,能夠很好地加強針對工業(yè)控制系統(tǒng)的安全防護。
技術(shù)實現(xiàn)要素:
針對上述存在的問題,本發(fā)明在對工業(yè)控制系統(tǒng)本身的特點進行深入研究的基礎(chǔ)上,提供了一種非侵入式基于功耗分析的PLC異常檢測方法,該方法能夠在不改變原系統(tǒng)的軟硬件的基礎(chǔ)上,對PLC運行的惡意指令進行實時監(jiān)測。同時,該方法不需要對異常樣本進行學(xué)習(xí),基于PLC正常運行時的功耗信息,就能實現(xiàn)對已知和未知攻擊進行檢測。
由于PLC直接與控制現(xiàn)場進行通信,讀取傳感器中的現(xiàn)場信息并發(fā)送控制指令,因此針對工業(yè)控制系統(tǒng)的攻擊往往會通過獲取PLC的控制權(quán)限的方式,使其運行錯誤的控制指令,從而導(dǎo)致控制現(xiàn)場紊亂。該方法通過對PLC運行時的功耗進行分析,從而識別出PLC中運行的是正常程序的指令,還是遭到攻擊被篡改后的惡意指令。
該方法通過在PLC的電源模塊與CPU模塊之間串聯(lián)一個電阻來獲取PLC運行時的功耗信息,由于現(xiàn)在普遍應(yīng)用的PLC大多為模塊式的,因此串聯(lián)電阻不會對PLC的軟硬件做出修改,只需要在不同模塊的供電線之間接入一個電阻即可。通過以太網(wǎng)可以將PLC的功耗信息傳輸給上位機進行處理,上位機通過分析PLC的實時運行功耗可以判斷PLC是否遭到攻擊,因此,該方法是非侵入式的異常檢測方法,基于該方法可以完成實時監(jiān)控系統(tǒng),監(jiān)控系統(tǒng)與原工業(yè)控制系統(tǒng)相對獨立,不會互相影響。
該方法在進行異常檢測的過程中,不需要采集PLC遭到攻擊時的異常樣本進行學(xué)習(xí),僅僅通過一段時間的正常樣本進行訓(xùn)練,就可以實現(xiàn)對異常程序進行檢測的目的,因此它既可以檢測已知攻擊,也可以檢測未知攻擊。因而,該方法部署簡單,訓(xùn)練方便,實用性強。
該方法具體如下:
步驟1:首先在PLC的電源模塊與CPU模塊之間串聯(lián)一個電阻(如0.1歐姆),然后用數(shù)據(jù)采集器對電阻兩端的電壓降進行采集,采樣率為γ。由于電阻兩端的電壓降能反映其電流變化,而PLC的輸出電壓是穩(wěn)定的,所以電壓降可以反映PLC的CPU功耗信息。
步驟2:讓PLC運行正常的程序一段時間t1并對PLC的功耗信息進行持續(xù)采集,將采集到的功耗信息傳到上位機用于訓(xùn)練模型,具體訓(xùn)練步驟如下:
1)將接收到的功耗信息按照t2的時長進行切分,切分后得到了一系列的正樣本S={s1,s2,…,st,…,sn},其中st表示第t個樣本,包含t2時長的功耗信息。
2)對得到的正樣本S進行預(yù)處理,過濾掉直流信號和高頻噪聲,得到有用的功耗信息樣本S′={s1′,s2′,…st′,…,sn′}用于后續(xù)分析。
3)得到樣本S′后,先提取每個樣本的概率密度分布信息,然后利用LibXtract庫提取峰值、平均值、方差等基本時域和頻域的特征,將這些特征一起構(gòu)成一個原始的特征樣本庫。
4)由于特征樣本庫具有豐富但冗余的特征信息,所以接下來使用稀疏編碼算法從中提取具有區(qū)分度的特征組合f={f1,f2,…,fi,…,fm},,其中,fi表示第i個特征,總的特征維數(shù)為m。因此,對于每一個功耗信息樣本st′,根據(jù)特征組合f,可以提取出一個對應(yīng)的特征值樣本組合這樣,從最初得到的功耗信息樣本S={s1,s2,…,sn}中提取出最終的特征值樣本X={x(1),x(2),…,x(n)},并將該樣本用于后續(xù)的訓(xùn)練。
5)用上述特征值樣本X={x(1),x(2),…,x(n)}訓(xùn)練一個基于長短記憶單元(LSTM)的神經(jīng)網(wǎng)絡(luò)模型,該模型可以學(xué)習(xí)PLC正常運行時功耗變化的信息,模型訓(xùn)練好之后可以用于異常樣本的檢測。
上述參數(shù)中,γ、t1、t2、m均可以根據(jù)實際需求自行設(shè)定,我們通過實驗得到一組較好的參數(shù)組合,其中γ為250KSa/s,t1為18小時,t2為5秒鐘,m為13。
步驟3:完成初始LSTM網(wǎng)絡(luò)的訓(xùn)練后,就可以對PLC進行實時檢測,采集PLC當前的功耗信息,傳送給上位機進行檢測,判斷PLC是否遭到攻擊,具體檢測過程包括如下步驟:
1)將PLC運行時當前的功耗信息傳輸至上位機,上位機將得到的功耗信息按照t2的時長進行切分,得到待測樣本st+1。
2)對于得到的每一個待測樣本st+1,首先進行預(yù)處理,然后按照特征組合f={f1,f2,…,fm}提取相應(yīng)的特征值,最終得到一個特征值樣本
3)用根據(jù)特征值樣本X={x(1),x(2),…,x(n)}訓(xùn)練得到的LSTM網(wǎng)絡(luò)對時間序列進行預(yù)測,即根據(jù)前t個樣本的特征對下一個時間步(t+1)的樣本進行預(yù)測,即LSTM網(wǎng)絡(luò)會根據(jù)學(xué)習(xí)到的前t時刻的樣本序列信息來預(yù)測(t+1)時刻每一個特征值的大小,從而可以得到一個預(yù)測樣本
4)對比LSTM網(wǎng)絡(luò)預(yù)測的樣本x(t+1)′與真實獲得的樣本x(t+1),由于每一個特征值之間都會存在一定的預(yù)測誤差,因此最后可以得到一個誤差矩陣對于每一個特征的誤差而言
5)根據(jù)得到的誤差矩陣對當前樣本進行判斷,如果誤差矩陣滿足關(guān)系則當前樣本為異常樣本,如果不滿足該關(guān)系,則當前樣本為正常樣本。
其中,參數(shù)t和τ可以自行設(shè)定,t的意義為每次LSTM網(wǎng)絡(luò)都會根據(jù)前t個樣本來預(yù)測第(t+1)個樣本,τ為區(qū)分正樣本與負樣本的閾值,我們通過實驗發(fā)現(xiàn),令t為100,τ為0.02時能取得較好的效果。
步驟4:由于LSTM網(wǎng)絡(luò)每次都是根據(jù)前t個樣本來預(yù)測第(t+1)個樣本,因此在進行樣本檢測的時候,我們需要對前t個樣本進行實時更新,更新方法如下:
1)首先將第1個樣本排除掉,將第t個樣本視為第(t-1)個樣本,因此原來用于預(yù)測的樣本組合本X={x(1),x(2),…,x(t)}就變?yōu)樾碌臉颖窘M合X={x(2),…,x(t)},其中包含(t-1)個樣本。
2)當?shù)?t+1)個樣本x(t+1)為正樣本時,將其加入用于預(yù)測的樣本組合中,從而得到用于預(yù)測的樣本組合為X={x(2),…,x(t),x(t+1)},進而可以對下一個時間點(t+2)的樣本特征值進行預(yù)測。
3)當?shù)?t+1)個樣本x(t+1)為負樣本時,將LSTM預(yù)測得到的樣本x(t+1)′加入用于預(yù)測的樣本組合中,從而得到新的用于預(yù)測的樣本組合為X={x(2),…,x(t),x(t+1)′},進而可以對下一個時間點(t+2)的樣本特征值進行預(yù)測。
4)按照上述規(guī)律,可以持續(xù)對監(jiān)控期間新采集到的功耗樣本進行預(yù)測。
步驟5:持續(xù)對PLC進行檢測,一旦連續(xù)發(fā)現(xiàn)三個檢測樣本均為異常樣本時,則可以判定當前PLC中運行的指令并非原來的正常指令,而是遭到攻擊后的惡意指令,因此說明PLC已經(jīng)遭到攻擊。
本發(fā)明的有益效果在于:
1.該異常檢測系統(tǒng)可以在線實時地檢測針對PLC的攻擊,對PLC的運行情況進行實時判斷,一旦PLC遭到攻擊,能立即發(fā)現(xiàn)異常并報警,以便于及時進行處理,防止攻擊造成實質(zhì)性的破壞。
2.該系統(tǒng)為非侵入式的防護系統(tǒng),安裝及檢測過程中不需要對原工業(yè)系統(tǒng)進行軟硬件的修改,無需在原系統(tǒng)中安裝任何軟件,也無需對原系統(tǒng)的部署進行任何改變,因此不會帶來潛在的安全風(fēng)險,也不會對PLC的正常運行造成影響。
3.該系統(tǒng)在部署期間不需要對PLC異常運行時的樣本進行學(xué)習(xí),因此無需消耗額外的資源,只需要對PLC正常運行的情況進行學(xué)習(xí)就能實現(xiàn)檢測異常的目的,從而很好地克服了工業(yè)控制系統(tǒng)難以獲得異常樣本的困難。
4.該系統(tǒng)在實際運用過程中無需連接網(wǎng)絡(luò),只需單機就可以運行,從而能夠很好地適應(yīng)工業(yè)控制系統(tǒng)環(huán)境,無需網(wǎng)絡(luò)資源的配置與消耗。
5.該系統(tǒng)能夠?qū)崿F(xiàn)很高的檢測準確率,對程序的微小改動也能識別出來,對于修改PLC控制指令的攻擊都能及時發(fā)現(xiàn)并發(fā)出警報。
6.該系統(tǒng)是一套獨立運行的系統(tǒng),不會與原系統(tǒng)互相影響,可以在不影響PLC正常運行的情況下進行系統(tǒng)自身的更新,一旦發(fā)現(xiàn)更好的檢測算法,可以在不影響監(jiān)控的情況下實時進行更新,從而達到更好的檢測效果。
7.該系統(tǒng)配置簡單,成本低廉,相對于其他非侵入式的方法更實用,一套監(jiān)控系統(tǒng)只需要一個電阻,一個數(shù)據(jù)采集設(shè)備,一臺計算機即可實現(xiàn);對于多PLC的監(jiān)控,多臺監(jiān)控系統(tǒng)可以共享一臺計算機。
附圖說明
圖1是PLC異常檢測系統(tǒng)部署示意圖;
圖2是異常檢測系統(tǒng)組成模塊圖;
圖3是異常檢測算法運行流程圖。
具體實施方式
以下結(jié)合附圖進一步說明本發(fā)明。
如圖1所示,PLC作為工業(yè)控制系統(tǒng)中的關(guān)鍵設(shè)備,會面臨各種各樣的攻擊,這些攻擊可能直接來自生產(chǎn)管理層和現(xiàn)場控制層,也有可能來自于互聯(lián)網(wǎng)。這些攻擊會獲取PLC的控制權(quán)限,然后讓PLC運行一些惡意的指令,從而破壞現(xiàn)場的控制流程。而我們提出的異常檢測系統(tǒng)在不改變PLC本身的軟硬件結(jié)構(gòu)的同時,在其供電端接入一個0.1歐姆的小電阻,該電阻的接入既不會影響PLC的運行,也不會給它帶來潛在的風(fēng)險。而異常檢測系統(tǒng)是通過將電阻兩端壓降傳輸?shù)缴衔粰C來進行工作的,因此整個異常檢測系統(tǒng)相當于和原系統(tǒng)是獨立運行的,不會互相影響。
如圖2是整個異常檢測系統(tǒng)的組成模塊圖,該系統(tǒng)的具體部署及工作方式如下:
1.在PLC的電源模塊和CPU模塊之間串聯(lián)取樣電阻,用一個250KSa/s采樣率的數(shù)據(jù)采集器采集電阻兩端的壓降,然后將該電壓信號傳輸?shù)缴衔粰C中。
2.上位機中異常檢測過程主要分為三步,第一步是將接收到的電壓信號按照5秒鐘進行切分,得到切分后的一系列樣本,然后對樣本進行預(yù)處理;第二步是從預(yù)處理后的樣本中提取特征值,用提取的特征值樣本代替原樣本進行分類;第三步是根據(jù)提取的特征值樣本進行LSTM網(wǎng)絡(luò)的訓(xùn)練和異常樣本的檢測。
如圖3為整個異常檢測算法的工作流程圖。整個算法分為兩步,第一步是進行LSTM網(wǎng)絡(luò)的訓(xùn)練,第二步是進行樣本的實時監(jiān)測。對算法的工作流程具體描述如下:
1.LSTM網(wǎng)絡(luò)訓(xùn)練過程。該過程首先對采集到的功耗信息進行切分和預(yù)處理后,得到訓(xùn)練用的正常樣本S′={s1′,s2′,…,sn′},然后根據(jù)特征向量f={f1,f2,…,fm}提取對應(yīng)的特征,得到對應(yīng)的特征值樣本用于訓(xùn)練X={x(1),x(2),…,x(n)},根據(jù)這些樣本可以訓(xùn)練一個LSTM網(wǎng)絡(luò),當訓(xùn)練過程中誤差到達要求則訓(xùn)練結(jié)束,得到的LSTM網(wǎng)絡(luò)可以用于異常檢測。
2.異常檢測過程。檢測過程首先對采集到的當前功耗信息進行切分和預(yù)處理,得到有效的功耗信息樣本s′,然后根據(jù)特征矩陣f提取該樣本對應(yīng)的特征值,得到特征值樣本用于檢測。根據(jù)訓(xùn)練好的LSTM網(wǎng)絡(luò),結(jié)合當前時刻的前100個樣本進行學(xué)習(xí),預(yù)測當前時刻正常樣本的理論特征值組合將預(yù)測的正常樣本特征值組合x(t)′與實際采集得到的特征值樣本x(t)進行比較,得到其誤差向量根據(jù)誤差向量是否滿足條件來判斷當前樣本是否為正常樣本。若當前樣本為正常樣本,則當前PLC運行正常,連續(xù)負樣本數(shù)清零,并將當前樣本結(jié)合其前面的99個樣本用于訓(xùn)練下一個時間點的樣本。若當前樣本為異常樣本,則判斷其是否為連續(xù)的第三個異常樣本,如果不是,則將連續(xù)負樣本數(shù)加一,并將預(yù)測的正常樣本特征值組合用于對下一個正常樣本的特征值組合進行預(yù)測;如果是,則確認PLC運行異常,遭到攻擊,發(fā)出警報。
3.基于上述流程,該系統(tǒng)可以持續(xù)不斷的對PLC進行攻擊的檢測,當確認PLC遭到攻擊后,會發(fā)出警報,以提醒使用人員注意采取防護措施,以免攻擊給控制系統(tǒng)造成破壞。