楊 安 胡 堰 周 亮 鄭為民 石志強 孫利民
1(物聯(lián)網(wǎng)信息安全技術(shù)北京市重點實驗室(中國科學院信息工程研究所) 北京 100093) 2(中國科學院大學網(wǎng)絡空間安全學院 北京 100049) 3(北京科技大學計算機與通信工程學院 北京 100083) 4(中國電力科學研究院 北京 100192) 5 (中國科學院信息工程研究所 北京 100093) (yangan@iie.ac.cn)
工業(yè)控制系統(tǒng)(industrial control system, ICS)是一類用于工業(yè)生產(chǎn)的控制系統(tǒng)的統(tǒng)稱,它包含監(jiān)視控制與數(shù)據(jù)采集系統(tǒng)(supervisory control and data acquisition, SCADA)、分布式控制系統(tǒng)和其他一些常見于工業(yè)部門與關(guān)鍵基礎(chǔ)設施的小型控制系統(tǒng)(如可編程邏輯控制器)等[1].ICS廣泛應用社會的各行各業(yè)中,包括機械制造、石油石化等工業(yè)生產(chǎn)企業(yè)以及污水處理、核電系統(tǒng)等基礎(chǔ)設施. 目前,內(nèi)部惡意人員、敵對企業(yè)、國家級組織等攻擊者日益增多,自動化工具、零日漏洞等攻擊技術(shù)迅猛發(fā)展,ICS的安全直接關(guān)系到企業(yè)的正常運轉(zhuǎn)和國家的安全穩(wěn)定.
隨著ICS的開放化和標準化,其與外部網(wǎng)絡的聯(lián)系越來越緊密,業(yè)務處理更加方便.然而其脆弱點也更多地暴露到互聯(lián)網(wǎng)中,導致所受到的網(wǎng)絡攻擊也急劇增加.序列攻擊是針對ICS的一種特殊攻擊.該攻擊依賴控制流程、被控物理設備的知識,試圖對物理世界造成最大化的破壞.該攻擊主要針對由寫、執(zhí)行等操作組成的周期性操作序列.它通過將正常操作以非正常次序出現(xiàn),使目標設備出現(xiàn)問題.
目前針對序列攻擊的主要檢測算法是通過旁路監(jiān)聽ICS中的信息流,從中捕獲、提取操作命令以形成操作命令序列,進而采用有限狀態(tài)機、Markov模型等數(shù)學檢測模型,正確構(gòu)建多個操作之間正常合理的對應關(guān)系,從操作次序上識別異常操作.
然而上述檢測模型嚴重依賴于數(shù)據(jù)的完整性和真實性.由于ICS在設計之初未考慮安全性,且與互聯(lián)網(wǎng)緊密關(guān)聯(lián),易遭受攻擊.攻擊者可通過注入、阻斷、篡改操作命令等方式,偽造虛假的操作序列,導致檢測算法產(chǎn)生漏報,造成檢測算法的失效.
為解決上述問題,本文引入設備狀態(tài)流的思想.設備狀態(tài)流是利用大量不同的感知信息表示系統(tǒng)設備的實時狀態(tài),其與信息流相互獨立,可保證設備狀態(tài)流不受數(shù)據(jù)篡改的影響,保證數(shù)據(jù)的真實性、獨立性.
因此,本文根據(jù)ICS與物理環(huán)境的緊密關(guān)系,提出一種新型的序列攻擊檢測算法ADISF(anomaly detection based on information flow and state flow fusion),將信息流(控制系統(tǒng))和設備狀態(tài)流(設備狀態(tài))相融合,以實現(xiàn)對序列攻擊的精確檢測.該算法針對操作序列,以概率后綴樹(probabilistic suffix tree, PST)的思想檢測操作次序的異常;依據(jù)樹中節(jié)點所攜帶的設備狀態(tài)變化屬性信息,采用閾值匹配方法判斷該節(jié)點(操作)前、后設備狀態(tài)取值及其變化差值的合法性,實現(xiàn)對操作時序異常的檢測;依據(jù)樹中節(jié)點所攜帶的設備狀態(tài)發(fā)展趨勢屬性信息,采用閾值匹配和自回歸(auto regressive, AR)模型方法,判斷該節(jié)點與下個節(jié)點之間的設備狀態(tài)取值變化形式,以及時發(fā)現(xiàn)操作間隔中的設備狀態(tài)異常.
本文的主要貢獻有3點:
1) 提出了信息流和設備狀態(tài)流相融合的序列攻擊檢測算法,可防止虛假操作對檢測結(jié)果的影響;
2) 提出了全操作周期的異常檢測機制,在傳統(tǒng)操作次序異常檢測的基礎(chǔ)上,利用設備狀態(tài)流維度識別操作時序異常的操作,并增加對操作間隔中的異常檢測,擴充了傳統(tǒng)序列攻擊檢測的檢測范圍;
3) 依據(jù)該算法實現(xiàn)了雙流檢測方案,并在燃氣管網(wǎng)系統(tǒng)測試床中驗證了該檢測算法的有效性.
目前針對序列攻擊檢測的研究,大多是從工業(yè)控制網(wǎng)絡中提取操作序列,采用確定性或概率性檢測方法,檢測操作次序.
確定性檢測方式是基于訓練數(shù)據(jù)構(gòu)建唯一的、無隨機成分的檢測模型,如有限狀態(tài)機. Sekar等人[2]將傳統(tǒng)有限狀態(tài)機擴展到傳輸層協(xié)議,實現(xiàn)對TCP和UDP等協(xié)議的檢測;Krueger等人[3]針對會話序列,利用n-grams算法分析消息間的相似性以形成事件狀態(tài)空間,并形成最小的確定性有限狀態(tài)機(deterministic finite automaton, DFA),實現(xiàn)對正常網(wǎng)絡通信行為規(guī)則的建模;此外,Goldenberg等人[4]將確定性有限狀態(tài)機擴展到應用層,實現(xiàn)對高周期性的Modbus協(xié)議的檢測.
概率性檢測方法是采用概率統(tǒng)計的方法計算各個操作出現(xiàn)的概率,以構(gòu)建ICS的操作概率模型,常用的有貝葉斯模型和Markov模型.Yoon等人[5]采用PST,針對Modbus協(xié)議的請求/應答序列進行建模,并根據(jù)實時計算結(jié)果與閾值的偏移程度識別異常;Caselli等人[6]針對工控協(xié)議(Modbus, IEC104)、日志文件和運行變量,分別采用離散Markov鏈進行建模,并采用帶權(quán)重的距離公式計算實時偏移量以識別異常.
此外,部分研究者還依據(jù)網(wǎng)絡數(shù)據(jù),從其他角度檢測攻擊.Sommer等人[7]從網(wǎng)絡通信中實時提取物理位置、傳感器取值等可編程邏輯控制器(pro-grammable logic controller, PLC)的運行變量,采用自回歸模型或變量取值范圍匹配,對這些變量值進行監(jiān)控.Xiao等人[8]提出一個位于SCADA系統(tǒng)之上的工作流層,采用模擬器檢測下發(fā)的控制命令,識別已知攻擊;監(jiān)控物理層狀態(tài)信息,利用系統(tǒng)健康檢查識別潛在威脅.
本節(jié)所述方案均是在網(wǎng)絡數(shù)據(jù)安全可靠的前提下提出的.目前工業(yè)控制網(wǎng)絡較為脆弱,易受攻擊,導致檢測失效.本文提出了基于信息流和設備狀態(tài)流相融合的序列攻擊檢測算法,將獨立的設備狀態(tài)流信息融入到信息流中,從次序和時序2個維度檢測操作序列的異常.該方法在操作序列次序檢測的基礎(chǔ)上,實現(xiàn)了操作序列時序異常的檢測,提升了對序列攻擊的檢測精度.
在實際工業(yè)生產(chǎn)中,存在明確的操作順序以及嚴格的時限要求,用于確保系統(tǒng)正常的生產(chǎn)過程;一旦操作出現(xiàn)問題,會導致業(yè)務邏輯混亂,破壞生產(chǎn)流程的穩(wěn)定,從而造成設備損害、資源浪費,甚至人員傷害.
序列攻擊可分為2類:基于次序的攻擊和基于時序的攻擊.基于次序的攻擊是將消息、命令以非法、惡意的次序發(fā)送;基于時序的攻擊是將消息、命令在非法的時間內(nèi)發(fā)送.
Carcano等人[9]列舉了一個基于次序的序列攻擊實例.他們選用一條輸氣管道,其壓強由2個開關(guān)V1和V2控制.他們通過2條錯位的合法控制消息,將系統(tǒng)置于危險狀態(tài).具體來講,攻擊者訪問該網(wǎng)絡并向PLC注入寫消息,導致V2完全關(guān)閉且V1完全打開,迫使輸氣量及管道壓強最大化.在此操作中,每條命令在獨立檢測時都是合法的,但將它們以特定順序發(fā)送會導致系統(tǒng)進入臨界狀態(tài).
美國總統(tǒng)關(guān)鍵基礎(chǔ)設施保護委員會的報告中提及了一個基于時序的攻擊實例.該攻擊場景是一個配水部門,其輸水管道由大量閥門進行控制.一旦這些閥門快速開關(guān),則會形成水錘效應,導致大量管道同時破裂.因此,攻擊者可給PLC發(fā)送異常速率的合法寫命令序列,命令這些閥門以異常速率進行開關(guān)操作,迫使水流在慣性等因素的作用下,對閥門和管道產(chǎn)生正常工作壓強幾十倍以上的瞬時壓強,造成閥門損壞或管道破裂.
基于PST的檢測算法是針對序列攻擊的一種常用的、基于樹的檢測算法,其結(jié)構(gòu)較為靈活,易于擴展,且便于進行故障診斷與排除.PST本質(zhì)上是一個變階的Markov模型[10],其假設當前操作僅與前多個操作有關(guān).該算法在功能上避免了單階Markov模型因跳轉(zhuǎn)概率相同而產(chǎn)生的節(jié)點跳轉(zhuǎn)誤判問題,并避免了N階Markov模型復雜的訓練過程;在性能上,避免了因Markov模型的訓練時間復雜度隨階次的增加呈指數(shù)形式增長而導致的內(nèi)存爆炸問題,且其學習時間相對于隱馬爾可夫模型(hidden Markov model, HMM)[11]有著顯著的降低.
PST是一個非空的樹,用于表示某個序列P=(P1P2…Pm…),Pm∈C的概率特征,其中C表示該序列的符號集.該樹上的邊為C中的某個符號標記,且某個節(jié)點發(fā)出的邊的符號標記各不相同.該樹上的節(jié)點表示一個符號串Q,其中根節(jié)點為ROOT,其余節(jié)點的Q是從該節(jié)點回溯到根節(jié)點所經(jīng)過的邊生成的.此外每個節(jié)點還存儲一個概率向量,它是該節(jié)點符號串的下個符號出現(xiàn)的條件概率.圖1是由“ABRAFAGABRA”序列生成的深度為2的PST.
Fig. 1 PST trained by “ABRAFAGABRA”圖1 由“ABRAFAGABRA”訓練生成的PST
在檢測過程中,由于訓練數(shù)據(jù)中可能存在噪音或少量異常數(shù)據(jù),故PST主要采用閾值比較的方法,將周期性操作中出現(xiàn)概率較小的操作序列認為是異常.針對獲取到的操作Pm,根據(jù)L長度的歷史操作序列HP=(Pm-LPm-L+1…Pm-1),計算概率p(Pm|HP)并與預先給定的閾值θ(多為經(jīng)驗值)進行比較,若小于則認為異常,產(chǎn)生警報.
Fig. 2 ADISF tree structure圖2 ADISF樹形結(jié)構(gòu)
ADISF模型是借鑒了PST的理念,用于描述、存儲操作序列、操作執(zhí)行時的設備狀態(tài)變化和操作之后的設備狀態(tài)發(fā)展趨勢的一個樹形結(jié)構(gòu).該樹中的邊為操作集合中的某個操作,樹上的節(jié)點表示由該節(jié)點到根節(jié)點所經(jīng)過的邊所組成的操作序列.此外,對每個節(jié)點構(gòu)造了復雜的屬性集合,用于存儲操作序列信息、操作與設備狀態(tài)之間的關(guān)聯(lián)性以及設備狀態(tài)自身的發(fā)展趨勢,利于實現(xiàn)對序列攻擊的檢測.圖2是由本算法生成的ADISF模型實例,其中僅以節(jié)點F為例顯示其屬性信息.
在本文中,我們以操作序列及其出現(xiàn)概率表示信息流數(shù)據(jù).同時,我們采用由多個狀態(tài)信息組成的狀態(tài)向量表示設備狀態(tài),其值主要由傳感器數(shù)值組成,分別表示液位、溫度、流速等含義.
具體來說,本文樹上各節(jié)點的屬性集合由五大部分組成,包括了信息流相關(guān)的下一跳狀態(tài)向量及其轉(zhuǎn)移概率向量,以及設備狀態(tài)流相關(guān)的狀態(tài)集合、權(quán)重向量、特征變換對應集合,如圖3所示.其中根據(jù)狀態(tài)信息類型的不同,設備狀態(tài)流相關(guān)的屬性又可劃分成離散和連續(xù)2個子屬性.具體來說,屬性集合包括:
1) 下一跳狀態(tài)向量.表示所有可能的下一跳節(jié)點狀態(tài)信息.
2) 下一跳的轉(zhuǎn)移概率向量.表示從當前狀態(tài)跳轉(zhuǎn)到對應下一跳節(jié)點的發(fā)生概率,其每個向量元素取值為
p′=n′m′,
(1)
其中,m′為當前節(jié)點狀態(tài)的出現(xiàn)次數(shù),n′為對應下一跳節(jié)點狀態(tài)的出現(xiàn)次數(shù).
3) 狀態(tài)信息集合.執(zhí)行對應操作前、后的所有合法的狀態(tài)信息集合.本文根據(jù)該狀態(tài)信息的取值個數(shù)與閾值的比較,將其劃分為離散和連續(xù)2個類型,以采用不同的分析方法:
① 離散狀態(tài)信息集合.記錄由操作前、后的離散狀態(tài)信息向量sfdb,k=(fdb,1,fdb,2,…,fdb,z)和sfda,k=(fda,1,fda,2,…,fda,z)組成的前離散狀態(tài)信息集合SFdb={sfdb,1,sfdb,2,…,sfdb,q}和后離散狀態(tài)信息集合SFda={sfda,1,sfda,2,…,sfda,r},其中f表示某一離散狀態(tài)信息,z表示離散狀態(tài)信息的個數(shù),q和r分別表示前、后離散狀態(tài)信息向量的個數(shù).此外,該操作執(zhí)行后到下個操作執(zhí)行前,對應的離散狀態(tài)信息向量應保持不變,故無需記錄離散狀態(tài)信息在操作執(zhí)行后的變化情況.
② 連續(xù)狀態(tài)信息變化集合. 根據(jù)特征采集時間又可分為2類.Ⅰ)針對操作執(zhí)行時的連續(xù)狀態(tài)信息取值的變化情況,計算操作前、后連續(xù)狀態(tài)信息向量的平均差值sfcb=(fc,1,fc,2,…,fc,v),其中v表示連續(xù)狀態(tài)信息個數(shù),fc,i表示第i個連續(xù)狀態(tài)信息的平均差值;確定操作前、后連續(xù)狀態(tài)信息向量的固定取值情況sfcbf=(fcbf,1,fcbf,2,…,fcbf,v)和sfcaf=(fcaf,1,fcaf,2,…,fcaf,v),其中fcbf,i和fcaf,i表示第i連續(xù)狀態(tài)信息的前、后固定取值.Ⅱ)針對操作執(zhí)行后的連續(xù)狀態(tài)信息的變化情況,形成連續(xù)狀態(tài)信息變化趨勢向量Ca=(ca,1,ca,2,…,ca,v),其中ca,i表示該段時間對應的第i個連續(xù)狀態(tài)信息值的變化趨勢.
4) 權(quán)重向量.表示各狀態(tài)信息取值的變化情況.對于離散狀態(tài)信息集合,采用變量Wd表示離散狀態(tài)信息向量在操作執(zhí)行前后的數(shù)值變化情況,包括無變化、一一對應、一對多、多對一和多對多這5種情況.對應連續(xù)狀態(tài)信息變化集合,采用Wc=(wc,1,wc,2,…,wc,v)表示各連續(xù)狀態(tài)信息在該時間間隔中的數(shù)值變化情況,包括操作執(zhí)行前后數(shù)值固定、操作執(zhí)行前后無變化和操作執(zhí)行前后有變化這3種情況;采用Wcl=(wcl,1,wcl,2,…,wcl,v)表示各連續(xù)狀態(tài)信息在該操作執(zhí)行后的數(shù)值變化趨勢,包括操作執(zhí)行后穩(wěn)定、操作執(zhí)行后特定波動、操作執(zhí)行后隨機波動這3種情況.
5) 信息變換對應集合.表示該時刻各狀態(tài)信息的前后狀態(tài)取值的對應情況.對于離散狀態(tài)信息,表示操作執(zhí)行前、后2個離散狀態(tài)信息集合的對應情況CSF;對于連續(xù)狀態(tài)信息,表示其后續(xù)變化趨勢對應的AR模型參數(shù)集ARcl或者取值范圍SCcl.
Fig. 3 Node attribute of ADISF圖3 ADISF節(jié)點屬性列表
ADISF檢測算法首次將設備狀態(tài)信息融入序列攻擊檢測中,在操作次序檢測基礎(chǔ)上,利用存儲于ADISF模型的操作執(zhí)行前后的設備狀態(tài)數(shù)值的合法變化關(guān)系,檢測操作時序的合理性.同時針對傳統(tǒng)序列檢測算法無法檢測操作間隔中的異常問題,本算法在操作執(zhí)行后實時跟蹤檢測設備狀態(tài)的發(fā)展變化,結(jié)合ADISF模型存儲的設備狀態(tài)合法變化趨勢數(shù)據(jù),采用AR和閾值匹配方法及時發(fā)現(xiàn)設備異常,從整體上兼顧了ICS所有的運轉(zhuǎn)時間,彌補了現(xiàn)有操作序列檢測在檢測范圍上的不足,也縮短了序列攻擊檢測的異常識別時間.
如圖4所示,該檢測算法主要由2部分組成:模型的訓練和實時數(shù)據(jù)檢測.
Fig. 4 Overview of ADISF圖4 ADISF算法架構(gòu)圖
ADISF算法從訓練數(shù)據(jù)中提取相應的操作序列以及實時設備狀態(tài)信息,先根據(jù)操作序列采用信息熵確定ADISF樹的深度,再構(gòu)建ADISF.構(gòu)建ADISF又可分為:1)根據(jù)操作序列,從根節(jié)點開始,構(gòu)建ADISF樹形結(jié)構(gòu);2)在樹中各節(jié)點中添加狀態(tài)信息以及對應的數(shù)值變化;3)提取該操作與下一個操作之間的狀態(tài)向量集合,并采用閾值分析和AR模型確定該間隔中各狀態(tài)信息取值的變化趨勢.
4.1.1 ADISF深度確定
ADISF的深度是該樹可匹配的最長序列長度,其值的設定很大程度上決定檢測的準確性.若深度過深,導致計算和存儲開銷呈指數(shù)增長,且久遠、無用的歷史數(shù)據(jù)會消耗大量的檢測時間,降低檢測效率和實時性;若深度過淺,則需要匹配的序列段長度短,易造成誤判,影響檢測精度.
由于ICS的業(yè)務流程多存在周期性,故樹的深度可設為對應業(yè)務流程的周期值.在缺少相關(guān)信息的情況下,操作員可通過分析多周期的操作命令序列獲得周期值.除少量由于操作員臨時操作調(diào)整等原因?qū)е轮芷陂L短發(fā)生變化,絕大多數(shù)操作仍按照業(yè)務流程以固定周期的形式執(zhí)行.因此,通過尋找對應操作變化最小的間隔長度,可較為精準地確定周期值.
信息熵是用來描述信源的不確定度,當信源的不確定性越大、越混亂,信息熵即越大;反之亦然.故本文依據(jù)信息熵的思想,針對不同長度間隔形成的多個操作集合,選取熵值最小的操作集合對應的長度間隔為周期值.具體計算過程如下所示:
1) 將采集到的、長度為lP的操作序列P按照不同的長度l=1,2,…,lP2劃分成多個操作子集,其中每個子集SPl={Pl,P2×l,…,Po×l}是由間隔為l的操作組成的集合(算法1行②).
2) 針對各個SPl,分別計算其對應的信息熵El,形成向量EN=(E1,E2,…,ElP2)(算法1行③).
3) 選取EN中最小值El對應的固定長度l作為該序列的周期長度(算法1行⑤).
算法1. 序列周期長度計算算法.
為了準確全面地對滑坡位移特征進行研究,本次選取滑坡監(jiān)測初始的約2.5個水文年作為代表性時間段(見圖3)。分析該滑坡位移與庫水及降雨間的相關(guān)性發(fā)現(xiàn),該滑坡的位移明顯增加現(xiàn)象并非發(fā)生在強降雨時期,而是庫水位強烈波動時期。由此可知,該滑坡的主控外因是庫水位波動,即在后續(xù)數(shù)值模擬研究中,忽略降雨對滑坡變形的影響是合理的。
輸入:操作序列P、序列長度lP;
輸出:周期長度L.
② 生成集合SPl;
③ 計算集合SPl的熵值;
④ end for
⑤ 確定周期長度L.
4.1.2 構(gòu)建ADISF
1) 利用操作序列P,從根節(jié)點開始,依次計算各候選子節(jié)點的概率向量,逐層建立候選子節(jié)點,直到樹的最大深度,并在各節(jié)點中記錄下一跳狀態(tài)向量Next_state和其轉(zhuǎn)移概率向量Probability(算法2行①).
2) 根據(jù)設備狀態(tài)信息序列OS,確定各設備狀態(tài)信息的類型,生成狀態(tài)類型向量TO(算法2行②);針對ADISF各節(jié)點,從設備狀態(tài)信息序列OS中,提取該節(jié)點對應的操作執(zhí)行前、后的狀態(tài)集合Ob,Oa,以及該操作與下個操作之間的設備狀態(tài)序列D(算法2行④);根據(jù)TO的取值將狀態(tài)信息劃分為2類并分別進行分析:
① 離散狀態(tài)信息向量Od
從集合Ob和Oa中提取Od對應的Odb和Oda,計算SFdb和SFda及其之間的對應關(guān)系CSF,以此確定權(quán)重Wd(一對一、一對多、多對一、多對多)(算法2行⑤).
② 各連續(xù)狀態(tài)信息Oci
Ⅰ) 從Ob,Oa,D中提取Oci對應的部分Ocb,i,Oca,i,Di;判斷Ocb,i和Oca,i各自的取值個數(shù),確定是否為定值;計算Oci對應的fc,i,并將其與對應的連續(xù)狀態(tài)信息變化閾值向量τcm中的τcm,i進行比較,以確定wc,i(算法2行⑦).
Ⅱ) 計算Oci的變化趨勢ca,i,并與其對應的連續(xù)狀態(tài)信息趨勢閾值向量τlm中的τlm,i進行比較,確定wcl,i(算法2行⑧).其中l(wèi)c是Di的長度,d1,i是Di的第1個取值.
(2)
Ⅲ) 根據(jù)Di和wcl,i等信息判斷Oci是否適用于AR模型,若適用則訓練對應AR模型的參數(shù)集ARcl,i;否則記錄SCcl,i用于閾值檢測(算法2行⑨).
算法2. ADISF訓練算法.
輸入:操作序列P、操作序列長度lP、設備狀態(tài)信息序列OS;
輸出:生成的ADISF樹ADISF-tree.
① 生成ADISF的樹形結(jié)構(gòu)ADISF-tree;
② 確定各狀態(tài)信息的類型;
③ for每個樹節(jié)點p_n
④ 提取節(jié)點前后狀態(tài)信息集合;
⑤ 針對離散狀態(tài)信息,生成狀態(tài)信息集合、權(quán)重向量及信息變換對應集合;
⑥ for每個連續(xù)狀態(tài)信息Oci
⑦ 判斷節(jié)點前、后信息向量的相關(guān)取值及權(quán)重;
⑧ 確定其后續(xù)變化趨勢及權(quán)重信息;
⑨ 確定后續(xù)變化趨勢的對應關(guān)系;
⑩ end for
當算法訓練結(jié)束后,即可利用已構(gòu)建出的ADISF模型,針對實時捕獲的雙流數(shù)據(jù),判斷是否存在序列攻擊或設備狀態(tài)的異常. 其核心思想是將實時捕獲的操作和設備狀態(tài)信息作為輸入,判斷ADISF中是否存在對應的跳轉(zhuǎn)節(jié)點,以及跳轉(zhuǎn)條件和變化趨勢是否正確,若出現(xiàn)錯誤,即認為產(chǎn)生操作次序、時序或設備狀態(tài)的異常,以此檢測當前命令是否合乎業(yè)務流程.
本算法在剛開始檢測或檢測出異常時會清空歷史操作序列,此時在捕獲到第1個操作之前的設備狀態(tài)信息均無法確定其對應的ADISF節(jié)點信息,只能將其過濾.因此在無歷史操作序列情況下,只能簡單地檢測操作時序、次序的合法性;而在有歷史操作序列情況下,可精確地檢測操作次序、時序和設備狀態(tài)的異常.故本算法根據(jù)歷史操作序列是否為空,將檢測流程分為起始檢測、后續(xù)實時檢測2部分.其具體流程如下:
判斷歷史操作序列的內(nèi)容,若歷史操作序列為空,執(zhí)行起始檢測;若存在歷史操作序列,則執(zhí)行后續(xù)實時檢測.
起始檢測:
1) 過濾捕獲到的數(shù)據(jù),直到獲取到第1個操作P_T_C,在ADISF-tree中確定其對應的節(jié)點,判斷是否為非法操作(算法3行②~⑤).
2) 當對應操作正常時,認為該操作P_T_C前一時刻的狀態(tài)信息是正常的,故獲取該操作前、后對應的狀態(tài)信息向量OBb和OBa,判斷各狀態(tài)信息(操作時序)是否正確.
① 針對離散狀態(tài)信息向量Od,根據(jù)其權(quán)重取值Wd在信息變換對應集合中提取對應集合CSF,并以此對應向量判斷該離散狀態(tài)信息Od在操作前后的變化是否合法.
② 針對連續(xù)狀態(tài)信息Oci,根據(jù)其權(quán)重取值wc,i選取對應的fcbf,i,fcaf,i,fc,i,以此判斷該連續(xù)狀態(tài)信息Oci在操作前、后的取值和其差值是否合法(算法3行⑦~).
后續(xù)實時檢測:
1) 根據(jù)當前時刻t獲取到的數(shù)據(jù)類型判斷檢測對象(算法3行).若被檢測對象是設備狀態(tài),則在ADISF中找到對應節(jié)點,針對各狀態(tài)信息,執(zhí)行步驟2;若被檢測對象是具體操作,則執(zhí)行步驟3.
2) 針對離散狀態(tài)信息向量Od,判斷其取值是否保持一致,若不一致則產(chǎn)生異常警報;針對連續(xù)狀態(tài)信息Oci,根據(jù)對應的權(quán)重取值wcl,i及連續(xù)狀態(tài)信息變化趨勢ca,i,提取信息變換對應集合中的AR模型參數(shù)集ARcl,i或取值范圍SCcl,i,并采用AR模型閾值匹配方法判斷提取的連續(xù)狀態(tài)信息是否合法.當所有狀態(tài)信息均檢測完畢后結(jié)束對該數(shù)據(jù)的檢測(算法3行~).
3) 根據(jù)當前指令Pm,獲取長度為L的歷史指令序列HP=(Pm-L…Pm-2Pm-1)(算法3行),計算從歷史序列跳轉(zhuǎn)到當前操作的跳轉(zhuǎn)概率βt,判斷操作序列的次序是否合法.若βt>λmin(λmin為指令跳轉(zhuǎn)概率閾值)則認為序列正常,否則產(chǎn)生序列異常警報(算法3行~).跳轉(zhuǎn)概率可計算為
βt=p(Pm|HP).
(3)
4) 采用起始檢測中的步驟2檢測操作時序是否合法(算法3行~).
算法3. 實時檢測算法.
輸入:ADISF樹ADISF-tree、實時操作序列P_T、設備狀態(tài)信息序列O_T、當前檢測節(jié)點p_n、檢測時刻t;
輸出:序列檢測結(jié)果Result.
① ifp_n=?
② 獲取第1個操作P_T_C;
③ 檢測首個操作的合法性;
④ if操作節(jié)點檢測異常
⑤ 在Result中寫入警報信息并結(jié)束檢測;
⑥ else
⑦ 獲取該操作執(zhí)行前后狀態(tài)信息;
⑧ 檢測操作執(zhí)行前后的狀態(tài)信息;
⑨ if操作節(jié)點前后狀態(tài)值變化異常
⑩ 在Result中寫入警報信息并結(jié)束檢測;
Fig. 5 Overview of GPNS testbed圖5 燃氣管網(wǎng)測試床的架構(gòu)圖
本文中我們構(gòu)建了一個燃氣管網(wǎng)測試床(gas pipe network system, GPNS),如圖5所示.該燃氣管網(wǎng)系統(tǒng)的目標是將天然氣從門站傳送到居民住所中.其物理環(huán)境由1個模仿門站的氣泵,一段壓力管道,3個壓力轉(zhuǎn)換器,4個閥門,多個用于監(jiān)測壓力、流速和溫度的傳感器組成.其中,氣泵為物理環(huán)境提供高壓氣體;氣體管道分為3部分,分別為高壓管道、中壓管道和低壓管道,每段管道通過1對壓力轉(zhuǎn)換器和開關(guān)來控制氣體壓強的降低;多個傳感器負責收集管道的溫度、流速和壓力等狀態(tài)信息.此外,該場景還利用2個PLC和1個操作員控制站來控制整個合法的業(yè)務流程.其業(yè)務流程由2個部分組成:
1) 正常情況.打開氣泵生成高壓;依次打開所有閥門,構(gòu)建從門站到居民住所的氣體管道輸送路徑;打開所有壓力轉(zhuǎn)換器使氣體壓強降低到居民可使用的范圍.
2) 泄漏.當管道損壞(由泄漏閥模擬實現(xiàn))后發(fā)生燃氣泄漏,對應壓力急劇下降,導致距該損壞處最近的2個閥門以及氣泵立即關(guān)閉;當管道修復(同樣由泄漏閥模擬實現(xiàn))后,打開氣泵,壓力逐漸恢復正常,進而相繼打開關(guān)閉的閥門,恢復管道的連通.
為測試ADISF的檢測效果,我們針對其檢測對象,將序列攻擊細分為3種:
1) 操作次序變更攻擊.即改變合法操作序列,常見攻擊方法包括增加新的操作、阻斷正常操作的下發(fā)、改變部分操作的次序以及篡改操作指令的內(nèi)容等.該攻擊類型主要針對ADISF節(jié)點的次序檢測.
2) 操作時序變更攻擊.即調(diào)整操作指令的時序,在系統(tǒng)保持正常的情況下,使操作執(zhí)行在合法時間段之外,導致操作執(zhí)行時對應的設備狀態(tài)不在合理范圍內(nèi)(例如應在100℃時停止加熱的鍋爐,且其溫度允許范圍為0~100℃.但因受到攻擊,它在80℃時就停止了加熱).該攻擊類型主要針對ADISF節(jié)點的狀態(tài)檢測.
3) 操作滯后攻擊(又稱為操作間隔攻擊).是操作時序變更攻擊中的一個特例,它主要通過延誤操作指令的下發(fā),致使設備的狀態(tài)在等待下個操作的過程中發(fā)生了異常.該攻擊類型主要針對ADISF節(jié)點的操作間隔狀態(tài)檢測.
具體實現(xiàn)方面,本文在GPNS實際運行中,通過改變閥門開關(guān)順序來實現(xiàn)操作次序變更攻擊;通過調(diào)整閥門開關(guān)執(zhí)行時的設備狀態(tài)流信息來實現(xiàn)操作時序變更攻擊和操作滯后攻擊.
在實驗中,我們采用基于HMM的檢測算法、基于PST的檢測算法和ADISF共3種檢測方法進行對比實驗. 其中,依據(jù)先驗知識以及經(jīng)驗,PST和ADISF均采用以下參數(shù)進行訓練:λc=10,τcm=(τcm,1,τcm,2,…,τcm,v)=(0.5,0.5,…,0.5),τlm=(τlm,1,τlm,2,…,τlm,v)=(0.6,0.6,…,0.6),λmin=0.7.基于HMM的檢測算選取相關(guān)參數(shù):隱狀態(tài)個數(shù)Qh=4,連續(xù)觀測量個數(shù)Ohc=6,離散觀測量個數(shù)Ohd=11,正常匹配閾值βlog_min=-850.
異常檢測系統(tǒng)的性能主要采用誤報率和漏報率2個指標進行分析.其中,誤報率是將正常行為誤判斷為異常行為的概率;漏報率是將異常行為誤判斷為正常行為的概率[12].本文延續(xù)采用這2個指標評價ADISF的性能.
本節(jié)我們通過2個實驗來驗證ADISF的檢測全面性和檢測高效性.
5.4.1 序列周期判定
第1個實驗用來驗證利用信息熵計算序列周期長度的準確性.
根據(jù)對GPNS測試床設計、實現(xiàn)方案的分析,我們獲知該測試床的理論周期長度Lt=10.在實際循環(huán)運行中,其周期長度在9~12之間波動.為此我們采用信息熵方法進行周期測量.表1是不同周期長度下的熵值,我們可以看到長度lt=10時對應熵值最小,即該間隔長度下的操作最為穩(wěn)定、一致.故該方法確定的周期長度L=10與理論值吻合.
Table 1 Entropy Value of Different Length 表1 不同周期長度下的熵值
5.4.2 ADISF檢測精度
第2個實驗是通過對3種序列攻擊的檢測效果驗證ADISF的檢測精度.具體實驗流程如下:
首先構(gòu)建了3個攻擊庫分別對應3種序列攻擊,每個攻擊庫包括20個不同的攻擊實例;然后在測試床長達1 h、大約1 200條記錄左右的正常運行中,選取前0.5 h作為訓練數(shù)據(jù),并在后0.5 h的不同時刻中注入上述所有攻擊以產(chǎn)生測試數(shù)據(jù);最終我們記錄所有信息流和設備狀態(tài)流的相關(guān)數(shù)據(jù),形成實驗數(shù)據(jù).
表2是采用系統(tǒng)參數(shù)設置的3種檢測算法在此實驗數(shù)據(jù)中的識別率.表3和圖6是這3種檢測算法針對實驗數(shù)據(jù)、通過調(diào)節(jié)系統(tǒng)參數(shù)形成的受試者工作特征曲線(receiver operating characteristic curve, ROC)及相關(guān)數(shù)據(jù).
Table 2 Recognition Rate of Three Detection Algorithms Under Different Attacks
Table 3 Detection Results for Sequence Attack Detection表3 針對序列攻擊的檢測結(jié)果
從表2、表3和圖6中我們可發(fā)現(xiàn)基于HMM的檢測算法對3種攻擊的識別能力較差.該算法可識別因異常、非法操作而導致的非法設備狀態(tài),但因受Markov特性的影響,不易根據(jù)歷史操作序列,從多個合法狀態(tài)跳轉(zhuǎn)中選取正確的狀態(tài)跳轉(zhuǎn)對象,影響對序列攻擊的識別.同時該算法需要對離散狀態(tài)信息和連續(xù)狀態(tài)信息分別構(gòu)建HMM模型,其隱狀態(tài)變化的一致性也影響對序列攻擊的檢測精度.
Fig. 6 ROC curves of different attack圖6 針對不同攻擊的ROC曲線
此外基于PST的檢測算法主要針對操作序列的次序進行檢測,與ADISF算法一樣均能較高地檢測出第1種攻擊且二者無明顯檢測性能差異;然而后2種攻擊中的操作序列次序未發(fā)生變化,故其無法識別這2種攻擊,其檢測性能與本文提出的ADISF算法有較大的差距.因此,本算法在序列攻擊檢測精度方面優(yōu)于基于PST的檢測算法和基于HMM的檢測算法,能全面地檢測序列攻擊.
從圖6中我們可發(fā)現(xiàn)本算法針對3種序列攻擊,除對指令滯后攻擊的檢測效果較差外,其他2種攻擊的檢測精度較好.其主要原因分為2部分:1)當該算法檢測到異常時,為保證對后續(xù)數(shù)據(jù)檢測的準確性,舍棄其保存的歷史數(shù)據(jù),重新開始檢測.這導致該時刻到下一個操作之間的數(shù)據(jù)被忽略,影響對指令滯后攻擊的檢測.2)生成的AR模型不精確,易產(chǎn)生誤報和漏報,影響整體的檢測準確率.
此外本算法主要用于識別與正常操作序列有異的序列,無法區(qū)分該異常產(chǎn)生的根本原因(內(nèi)部人員故意為之、正常的業(yè)務調(diào)節(jié)或誤操作等)以及具體的攻擊類型(如重放攻擊、命令注入攻擊等).
本文聚焦ICS中特有的序列攻擊,針對傳統(tǒng)信息流檢測算法易受虛假數(shù)據(jù)影響導致準確性下降的問題,創(chuàng)新性地引入設備狀態(tài)流數(shù)據(jù),形成信息流和狀態(tài)流融合的ICS異常檢測算法.該算法基于PST的思想,結(jié)合設備狀態(tài)流數(shù)據(jù),實現(xiàn)對操作序列的次序、時序以及操作間隔全流程的異常行為檢測.實驗結(jié)果表明:本算法可較好地檢測出序列攻擊以及部分的設備異常.