方鼎鼎,鄭榮鋒,周安民
(1.四川大學電子信息學院,成都 610065;2.四川大學網絡空間安全學院,成都 610065)
工業(yè)控制系統是國家安全戰(zhàn)略的重要組成部分,然而,工業(yè)控制系統的工作特點、運行環(huán)境、操作模式等特性讓傳統的IT防護解決方案無法實施,許多關鍵性基礎設施的控制系統很少有防范突發(fā)事故和惡意攻擊的保護措施。工業(yè)控制系統一旦受到攻擊往往會導致極其嚴重的后果,美國埋下的“軟件炸彈”摧毀了前蘇聯的經濟命脈、波蘭電車脫軌、伊朗核電站因電腦被病毒入侵而癱瘓。因此,加強工業(yè)控制系統的安全防護具有重要的戰(zhàn)略、經濟價值。
目前對于工業(yè)控制系統安全性的研究都集中于兩方面,一是工業(yè)控制系統入侵檢測,二是工業(yè)控制系統固有脆弱性分析[1]。在入侵檢測技術中,分析工控中的異常流量是入侵檢測最主要的手段之一。但基于系統安全性的考慮,目前絕大部分工控協議都是私有協議,這為構建正常流量模型帶來了障礙。西門子公司的S7協議雖然是私有協議,但網絡上已經有相當多的關于S7的協議內容分析,因此利用S7協議流量進行協議特征提取和流量建模,可以驗證協議特征提取的有效性和準確性。
不同于傳統IT網絡流量復雜多變的特性,為了滿足特定的工業(yè)生產流程,工業(yè)控制網絡的流量具有一些鮮明的特點。工業(yè)現場設備一般都利用輪訓機制收集并上傳數據,網絡中的流量因此呈現出高度的周期性[2]。Barbosa 等人[3]、Pleijsier等人[4]就實證展示了工業(yè)控制系統在網絡流量所顯示的以高度周期性方式產生流量、有非常穩(wěn)定的連接圖等特性。基于工業(yè)控制網絡流量的周期性的特點,Goldenberg[5]和Wool[6]在2013年和2015年針對Modbus和S7 SCADA網絡分別提出了基于DFA的入侵檢測模型,有效地識別出了工控網絡中的攻擊行為。隨后,在2016年彭勇等人借鑒傳統IT網絡中的指紋識別技術提出了工業(yè)控制系統中場景指紋模型的建立和異常檢測的方法。這些研究都指明了工控系統流量具有周期性,相對簡單、穩(wěn)定的特點,因此,從流量特性出發(fā)是研究工控流量很好的切入點。
有限狀態(tài)機(DFA)模型就是利用工控流量周期性特點建立的一個異常檢測模型。傳統的DFA的構建,對于協議的先驗知識依賴頗為嚴重,本文通過分析工控流量的特性,利用自然語言處理模型和統計學的相關算法直接提取出工控協議的特征,無需先驗知識就可以完成數據包狀態(tài)的標記,從而實現DFA模型的構建,并同過實驗檢測了模型的效果。
工控異常檢測模型是用來監(jiān)控檢測工業(yè)控制系統中流量的模型。通過分析正常的工業(yè)控制系統工作流量,利用特定的方法提取出正常的流量模型,該模型可以對工業(yè)控制網絡中的異常流量進行檢測并報警。工控異常檢測模型如圖1所示。
圖1 工控異常檢測模型
在傳統的DFA檢測模型中,在數據處理階段,都需要協議的先驗知識來提取數據流中的關鍵字段,并以關鍵字段為特征,為各類數據包打上唯一的“狀態(tài)標簽”,形成數據流的狀態(tài)集。本文通過自然語言處理中常用的N-Gram模型提取出數據流中的N-Gram單元頻繁集,利用關聯規(guī)則算法確定頻繁集與其在數據包應用層具體位置的聯系,提取出數據包的特征字段,以特征字段標識數據包,形成狀態(tài)集,再通過狀態(tài)轉移來實現異常流量的檢測。
在模型檢測過程中分別會將異常行為分為以下幾類:
(1)未知信道,表示會話的雙方出現IP地址的改變。
(2)未知狀態(tài),出現了場景中從未出現過的狀態(tài)。
(3)未知轉移,出現了錯誤的數據包狀態(tài)轉換。
S7協議是西門子工業(yè)設備中人機交互界面(HMI)與PLC之間常用的通訊協議,作為私有協議,S7協議的格式并未公開,同時S7協議在數據包中是以明文形式存在,對其進行二進制數據分析是可行的[7]。在工業(yè)控制環(huán)境中,PLC與HMI的通信都是相對獨立的,以每個PLC與不同上位機之間的連接建立單獨的信道對S7協議進行研究,可以濾除信道中無關數據包的干擾,使檢測模型更加簡單高效。
彭勇等人在對工業(yè)控制系統研究中提出了場景指紋模型,其中有一個關鍵概念是“工控協議數據包的包大小類型有限”[8]。在本地搭建的模擬真實發(fā)電廠工作模式的西門子仿真實驗平臺中,獲取到的數據訓練集也驗證了這一點。在仿真平臺多個工作周期的數十萬交互數據包中,也只發(fā)現了8種長度的數據包,長度分別為 76、86、87、91、94、97、115、131。數據包各長度在數據集中的占比如圖2所示。
圖2 各長度數據包在訓練集中的占比
因此,在數據預處理階段,先提取出工控數據流中的S7協議部分,再將S7協議數據流按信道劃分,最后在不同信道下,以數據包長度大小再次進行劃分得到協議特征提取樣本。流程如圖3所示。
圖3 協議樣本提取流程
工控數據流是由Wireshark工具捕獲的,而S7協議是應用層協議,故分析時應當剔除掉樣本中應用層以上的數據,只對應用層二進制數據進行分析。
N-Gram是一種自然語言處理模型,在自然語言處理中基于一定的語料庫,可以利用N-Gram對句子的合理性進行有效地判斷[9]。二進制數據作為機器間進行指令、信息的傳輸載體,是一種公認的機器語言。因此本文利用自然語言處理模型N-Gram對二進制數據進行切分。N-Gram切分的基本思想是利用一個長為n的窗口,這個窗口從語言處理文本的第一個字符開始向后移動,每次移動一個字符單元。這個窗口中包含的n個字符即為一個N-Gram數據單元。圖4為n=3時的切分示意圖。
本文利用N-Gram模型對S7協議進行分析,要完成以下兩步:
(1)n值的確定,不同的n值會直接影響特征字段的提取。
(2)計算N-Gram字段出現的頻率確定頻繁項集,這需要設定一個合適的閾值。
圖4 3-Gram單元切分圖解
首先為了便于分析,將二進制數據流轉化為16進制形式,就如圖4所示,然后利用N-Gram對16進制數據進行切分。如何進行切分,關鍵還是在于確定合適的n值,以保證切分后的數據串能涵蓋較為完整的協議信息。實踐中,一般很少利用高于4元的,因為訓練它需要龐大的語料,并且數據稀疏嚴重,時間復雜度高,最后精度也提升不了多少。因此本文中分別對n=1,n=2,n=3時進行S7協議應用層數據切分,最后利用齊夫分布[10]來確定合適的n值。如圖5是n=1,n=2,n=3時的齊夫分布圖,可以發(fā)現當n=1時最接近于直線。因此選定n=1來進行切分,可以提取出最多的協議信息。
圖5 齊夫分布圖
利用n=1對數據幀進行切分,可想而知會得到大量的1-Gram單元,這些獲取的1-Gram單元中必然包含具有一定意義且頻繁出現的數據單元,首先可以將頻次明顯極低,不符合特征要求的串刪除。其次再利用基于基礎相似度計算模型中的向量空間模型,計算1-Gram單元間的相似度,最終得到篩選后的頻繁數據單元。本文利用Jaccard參數[11]來比較1-Gram樣本的相似性和分散性的概率,獲得1-Gram頻繁數據單元,Jaccard參數的計算公式如下。
將切分好的1-Gram集合隨機的分成A和B兩部分,在兩部分分別統計每個單元出現的次數,而后按照降序排列,此時,降序排列號就是和A(A1,A2…),B(B1,B2…)按照公式(1)代入計算得到兩部分的相似度。計算長度為91的數據包1-Gram單元Jaccard參數,結果如圖6所示。
圖6 1-Gram單元Jaccard系數值
將圖6中(Ai+Bi)/2升序排列,當其對應的Jaccard參數值最大時其對應的(Ai+Bi)/2即為閾值,然后依據閾值進行篩選,低于閾值的就刪去,對高于或者等于閾值的數據單元進行存儲,這些被存儲的數據單元就是1-Gram頻繁數據單元,之后再進行下一步處理。
關聯規(guī)則挖掘的目的在于從海量數據中找尋數據間的有價值的規(guī)律和關系[12]。本文利用Apriori關聯規(guī)則算法進行關聯數據挖掘。關聯規(guī)則的獲取就必須引入兩個關鍵的概念支持度和置信度,設有兩個事件A和B,以及發(fā)生過的總事件的集合T,支持度定義如下:
即為A事件發(fā)生時B事件也發(fā)生占總的發(fā)生事件的比例。
置信度定義如下:
即當A事件發(fā)生時B事件也發(fā)生的事件總數與A事件發(fā)生的總數的比值。
因此,根據這兩個指標,關聯規(guī)則的挖掘有兩個基本步驟,首先找出所有的頻繁項,獲得頻繁項集,也就是根據最小項集支持度,在集合中找出頻繁項集。其次根據最小置信度,尋找符合條件的關聯規(guī)則。
在一個工控場景中S7協議數據包長度類型有限,出現的1-Gram頻繁數據單元同其出現在數據包中的位置可能有著一定的關聯規(guī)則,通過統計每個1-Gram單元同其在每個數據幀中的位置信息,并利用關聯規(guī)則算法可以獲得1-Gram單元與其存在位置信息的某種聯系。
因此對于1-Gram數據單元進行關聯規(guī)則分析的步驟如下:
設1-Gram頻繁數據單元在數據包中出現的事件為P,并設1-Gram單元在數據包位置N出現的事件為K。
它們的關聯規(guī)則定義為R:p->k。它表示當頻繁數據單元在數據包出現后,同時頻繁數據單元又在數據幀位置N出現的概率。如果這個事件出現的概率很大,那么就可以認為1-Gram數據單元只要在數據幀中出現,則它大概率在數據幀的位置N上,在本文中就可以認為如果1-Gram數據單元出現在數據包位置N上,則它屬于數據包的特征單元,按出現位置次序拼接特征單元得到數據包特征串。
圖7 關聯規(guī)則計算結果
如圖7所示,以長度為91的S7協議數據包為例,通過計算發(fā)現除了位于66,67及90,91位置的1-Gram單元以外,其他位置的頻繁項單元置信度都為100%,這意味著在整個工作流程中這些位置的字節(jié)并沒有發(fā)生過變化。顯然,這些字節(jié)對于S7協議的研究并沒有任何幫助,故我們將頻繁1-Gram單元與位置之間關聯規(guī)則置信度的篩選閾值設為10-75%。同時,由于66,67位置出現的頻繁項單元置信度低于閾值,所以如表所示,滿足條件的只有90,91位置的頻繁項單元。
置信度太低,則表明字節(jié)與位置的關聯不強,字節(jié)沒有代表性,但置信度閾值的下限需根據工控場景的復雜度動態(tài)調整,如果場景足夠復雜,則特征位中的特征值種類可能會比較多導致每個特征值的占比降低。由于工業(yè)控制系統流量的周期性,置信度太高則可能會受一些周期出現的無用字節(jié)的干擾。作為一個周期性工業(yè)流程的特征串,特征串提取后必然也應當具有周期性,故最后還需對特征串進行周期性檢驗。
至此,完成了S7協議應用層特征串提取的整個過程,圖8為流程圖。
圖8 S7協議應用層特征串提取流程
特征串提取后,就可以利用特征串來區(qū)分一個信道下的數據包的不同狀態(tài),相同特征串的數據包歸為一類,以字符si標記這類數據包的狀態(tài),實現單個數據包狀態(tài)標記。
在工業(yè)控制網絡環(huán)境中,為了滿足特定的工藝生產流程,網絡流量具有明顯的規(guī)律性,因此可以用一個五元組:(q,Σ,δ,s,t)來描述網絡中各個連接的數據交互情況,這就是一個有限確定自動機模型。其中q為一個信道中下行數據流量有限狀態(tài)的集合;Σ為導入模型的數據流;δ為狀態(tài)轉移函數;s為當前狀態(tài),是q的一個子集,t為s轉移到下一個狀態(tài)的可能性的集合,當s完成一個正常狀態(tài)轉移時,有如下公式:
建立狀態(tài)機的流程圖如圖9所示:
圖9 有限狀態(tài)機建立流程圖
在工業(yè)控制網絡中,網絡流量一般分為兩大類,一類是上位機發(fā)送給PLC對工控現場進行實時控制的下行數據,一類是上位機HMI軟件與PLC協商由PLC定時發(fā)送給HMI軟件工控現場實時數據,能實時反映工控現場的工作情況。因為針對工控網絡的攻擊通常都是通過獲取上位機權限進而控制PLC的,為了降低模型的復雜度,所以在傳統的有限狀態(tài)機的構建中,只考慮下行數據。
本地搭建的西門子工業(yè)控制系統實驗仿真平臺是模擬實際的發(fā)電廠的工作模式,仿真平臺由3臺上位機同 3個西門子 PLC(2個 S7-200,一個 S7-300),還有燈、蜂鳴器、發(fā)電機構建而成。整個系統分為兩部分,一是控制端,由3臺上位機構成,上位機分為工程師站、操作員站、還有實時服務器,在工程師站安裝了PLC編程軟件,可對3個PLC進行編程。第二部份是設備端,即由3個PLC、燈、蜂鳴器、發(fā)電機構成,S7-200控制蜂鳴器報警,S7-300控制發(fā)電機運作。
3臺上位機中安裝了西門子公司提供的人機交互界面組態(tài)軟件(HMI),通過HMI可以實時監(jiān)測控制整個系統的運行情況,并收集系統運行過程中的數據流。通過路由器端口將流量鏡像到檢測主機中,再利用Wireshark工具就可以將數據流輸出成pcap類型文件。當系統正常運作時,這些抓取的數據流就是本文的模型訓練數據,當對系統模擬攻擊時,抓取的數據就是本文需要的異常檢測數據。工控實驗平臺的網絡拓撲圖如圖10。
圖10 西門子仿真實驗平臺網絡拓撲
當工控實驗平臺正常運轉時,連續(xù)抓取了8個小時左右的數據包作為正常數據集進行模型訓練,按照上文所述的數據處理規(guī)則,數據集中總共有3個信道,工程師站與S7-200、工程師站與S7-300、操作員站與S7-300,將這3個信道分別編碼為信道1、信道2、信道3。在不同信道下按長度劃分數據包并分別提取每個長度數據包的特征,每個特征構成一個數據包狀態(tài)。從而構建不同信道下,下行數據包DFA狀態(tài)機模型。以信道2為例,下行數據包只有長度為91、87的S7協議數據包如圖11所示。
圖11 信道2下行數據包
分別對兩種長度數據包提取特征,則得到91數據包特征 4種(s1、s2、s3、s4),87數據包特征 1種(s5)。從而得到DFA有限狀態(tài)機模型的正常狀態(tài)轉移如圖12。
圖12 有限狀態(tài)機正常狀態(tài)轉移
圖12是信道2下行流量有限狀態(tài)機模型狀態(tài)轉移,其中的帶箭頭的線段表示正常的狀態(tài)轉移,其中標明的數字表示狀態(tài)轉移條件概率。同理其他信道也是如此構建有限狀態(tài)機模型,當信道中出現未知的狀態(tài),未知的狀態(tài)轉移則模型報警。
在仿真平臺上通過實施以下幾種異常操作獲取異常數據流量進行異常檢測:
中間人攻擊,通過攔截HMI與PLC之間正常工作時的網絡通信數據,并對數據進行篡改和嗅探,可以同時達到欺騙HMI與PLC的目的。
響應注入攻擊,HMI組態(tài)軟件除了對系統進行數據收集的功能外,也會同時對PLC返回的各項參數如發(fā)電機轉速值進行監(jiān)測,如果轉速超過一定閾值,HMI軟件就會對操作人員進行告警,通過捕獲PLC發(fā)往HMI的響應數據包,并修改數據包中的關鍵內容,可以掩蓋PLC的異常運行信息。
序列攻擊,通過修改數據包的傳送次序,來達到篡改工業(yè)控制系統運行邏輯的目的,因為數據包是網絡中出現的正常數據包,對單一數據包的檢驗方式無法發(fā)現這種異常
Snap7攻擊,工業(yè)控制場景中往往缺乏PLC對于HMI設備的檢測認證機制,因此同過在局域網內的另一臺主機上安裝S7協議的編程軟件,對PLC進行編程操作。
正常流量數據集,一個合格的入侵檢測模型的建立不僅要能識別流量的異常,對于正常流量也應具有足夠低的誤檢率。
通過表1中的實驗結果可知,本文提出的基于工業(yè)控制系統流量特性有限狀態(tài)機模型在西門子工控仿真實驗平臺上運行良好,不僅可以準確識別出工業(yè)控制網絡中的常見異常,對于正常流量也未產生誤報警。
表1 流量檢測結果
基于工業(yè)控制系統流量特性的有限狀態(tài)機,利用了工業(yè)控制系統流量周期性和工業(yè)控制系統中包長度類型有限的特點,在傳統的DFA模型中,改進了協議特征提取方式,無需先驗知識就可對未知格式的工控協議進行特征提取,能很好地識別系統的邏輯異常行為,提高了模型的檢測精度和適用范圍。