◆何 鋼 周安民
?
西門子SCADA網(wǎng)絡(luò)場景指紋自提取及異常檢測
◆何 鋼 周安民
(四川大學(xué)電子信息學(xué)院 四川 610065)
本文針對Supervisory Control And Data Acquisition(SCADA)系統(tǒng)中廣泛使用的S7協(xié)議 ,在有限狀態(tài)機(jī)(DFA)模型的基礎(chǔ)上提出了SCADA網(wǎng)絡(luò)場景指紋的方法,結(jié)合圖論的中鄰接矩陣的概念,實現(xiàn)了SCADA網(wǎng)絡(luò)場景指紋的自提取,并利用該方法對工控系統(tǒng)SCADA網(wǎng)絡(luò)實時數(shù)據(jù)進(jìn)行監(jiān)測,該方法減少了大量的人工分析并有效的提升了SCADA系統(tǒng)的安全性。
S7協(xié)議;場景指紋;自提取;安全
SCADA系統(tǒng),即數(shù)據(jù)采集與監(jiān)視控制系統(tǒng)。廣泛應(yīng)用于工業(yè)生產(chǎn)的各個領(lǐng)域,例如電力、冶金、石油、水利、化工、燃?xì)?、鐵路等,對現(xiàn)代工業(yè)的生產(chǎn)起著至關(guān)重要的作用。SCADA系統(tǒng)主要包括HMI(人機(jī)界面)、PLC(可編程邏輯控制器組成)和RTU(遠(yuǎn)程控制終端)。其中,數(shù)據(jù)采集由RTU或PLC負(fù)責(zé),包括讀取感測器數(shù)據(jù)、根據(jù)SCADA系統(tǒng)需求發(fā)送設(shè)備的狀態(tài)報告。控制室中的操作員采用HMI了解系統(tǒng)狀態(tài),并決定是否要對PLC或RTU進(jìn)行控制。
很多SCADA系統(tǒng)存在安全性方面的不足,如沒有針對惡意攻擊的檢測、網(wǎng)絡(luò)沒有認(rèn)證機(jī)制、所有數(shù)據(jù)傳輸都是明文。目前,對SCADA系統(tǒng)網(wǎng)絡(luò)進(jìn)行異常檢測是非常必要的。西門子的SCADA系統(tǒng)作為全球應(yīng)用最廣泛的SCADA系統(tǒng)之一,對其進(jìn)行異常檢測的研究也是眾多研究熱點之一。
SCADA系統(tǒng)網(wǎng)絡(luò)是由多個HMI-PLC網(wǎng)絡(luò)組成的。Goldenberg[1-3]和Wool[1-3]在2013年和2015年針對Modbus和S7 SCADA網(wǎng)絡(luò)分別提出了基于DFA的入侵檢測模型。但是其模型基于的是Modbus和S7協(xié)議的高度周期特性。本文通過對S7 SCADA網(wǎng)絡(luò)進(jìn)行分析,發(fā)現(xiàn)在HMI與PLC通信中,S7協(xié)議并沒有保持高度周期特性,因此,針對S7協(xié)議應(yīng)用層數(shù)據(jù),在DFA模型的基礎(chǔ)上提出場景指紋的概念,為每一個HMI-PLC的數(shù)據(jù)交互建立場景指紋,實現(xiàn)了場景指紋的自提取,并利用場景指紋成功檢測出SCADA網(wǎng)絡(luò)異常。
1.1 數(shù)據(jù)采集
本文的數(shù)據(jù)來自西門子工控實驗平臺。圖1為西門子工控實驗平臺網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖。整個系統(tǒng)仿真了發(fā)電廠的發(fā)電過程。現(xiàn)場工控層包含一臺工程師站、一臺操作員站和一臺實時服務(wù)器,其中,工程師站主要對PLC進(jìn)行程序編寫下載,操作員站和實時服務(wù)器安裝了西門子HMI軟件,用于監(jiān)控現(xiàn)場設(shè)備層;現(xiàn)場設(shè)備層包含了兩臺S7-200和一臺S7-300,S7-200控制蜂鳴器報警系統(tǒng),S7-300控制電機(jī)轉(zhuǎn)速,從而實現(xiàn)發(fā)電的功能?,F(xiàn)場控制層和現(xiàn)場設(shè)備層通過核心交換機(jī)相互連接。利用Tcpdump的網(wǎng)絡(luò)嗅探能力在核心交換機(jī)處采集工控系統(tǒng)HMI與PLC實時交互數(shù)據(jù),并保存成PCAP文件。
圖1 西門子工控實驗平臺網(wǎng)絡(luò)托補(bǔ)圖
1.2 S7協(xié)議數(shù)據(jù)內(nèi)部結(jié)構(gòu)
工業(yè)控制網(wǎng)絡(luò)的托補(bǔ)結(jié)構(gòu)相對靜態(tài),其通信模式具有規(guī)律的特性。其中,S7協(xié)議集是西門子SCADA系統(tǒng)網(wǎng)絡(luò)的專有協(xié)議。在西門子SCADA系統(tǒng)網(wǎng)絡(luò)中,S7協(xié)議根據(jù)作用可分為兩大類,第一類是由HMI組態(tài)過程中與PLC協(xié)商的由PLC定時發(fā)送給HMI組態(tài)軟件的工控現(xiàn)場實時數(shù)據(jù);第二類是由HMI發(fā)送給PLC,對工控現(xiàn)場進(jìn)行控制的實時數(shù)據(jù)。兩類數(shù)據(jù)的可通過S7協(xié)議的ROSCTR字段不同的值進(jìn)行劃分。第一類數(shù)據(jù)ROSCTR固定值為0x07,第二類數(shù)據(jù)ROSCTR的值為0x01和0x03。通常針對SCADA網(wǎng)絡(luò)的攻擊都是通過獲取上位機(jī)權(quán)限控制PLC[6],因此,本文只針對第二類數(shù)據(jù)進(jìn)行分析研究。通過Wireshark軟件分析,可得到S7協(xié)議數(shù)據(jù)包內(nèi)部數(shù)據(jù)結(jié)構(gòu),如圖2所示。
圖2 S7 協(xié)議數(shù)據(jù)包結(jié)構(gòu)
S7 PDU由Header、Parameter和Data三部分組成。其中Data字段是可選的。S7 PDU的Header部分主要由以下幾個字段組成:
(1)Protocol Id,值固定為0x32;
(2) ROSCTR(Remote Operating Service Control),通常取值為0x01(job)、0x02(acknowledge)、0x03(ack_data)、0x07(userdata)或者0x08(request server control);
(3)Protocol Data Unit Reference,主要用來同步j(luò)ob和ack_data;Data Length,Data部分字節(jié)長度Parameter Length,Parameter部分字節(jié)長度。
因為在S7協(xié)議應(yīng)用層中,Protocol Data Unit Reference字段隨著時間遞增。因此,定義S7協(xié)議數(shù)據(jù)包特征為S7協(xié)議應(yīng)用層除了Protocol Data Unit Reference字段以外的所有數(shù)據(jù)集合。
1.3 S7協(xié)議特性分析
圖3以時間為橫軸,10s為刻度,顯示了HMI與PLC之間數(shù)據(jù)交互每10秒通信字節(jié)數(shù)的變化圖。圖中可以觀察到HMI與PLC之間數(shù)據(jù)通信并沒有遵循高度周期性,通信流量在兩個值之間變化。其原因是HMI與PLC之間的數(shù)據(jù)交互是由HMI中的腳本控制,一個HMI上可以運(yùn)行多個腳本。根據(jù)工藝場景的需要,多個腳本之間運(yùn)行周期可能不一致,導(dǎo)致了HMI與PLC之間數(shù)據(jù)交互并不遵循高度周期特性。
圖3 S7協(xié)議數(shù)據(jù)IO圖
為進(jìn)一步確認(rèn)S7協(xié)議在HMI與PLC之間交互時的非周期性,針對S7協(xié)議應(yīng)用層數(shù)據(jù)觀察分析。圖4以包序號為橫軸,每一個數(shù)據(jù)包S7協(xié)議特征集合為縱軸,說明了一段時間內(nèi)HMI與PLC之間通信時每個數(shù)據(jù)包中S7協(xié)議特征集合的變化。圖5以包序號為橫軸,HMI與PLC之間通信數(shù)據(jù)包類別個數(shù)為縱軸,說明了一段時間內(nèi)HMI與PLC之間通信數(shù)據(jù)包類別個數(shù)的變化情況。圖4和圖5說明了在HMI與PLC數(shù)據(jù)交互過程中,S7協(xié)議特征集合沒有遵循高度周期性,并且通信數(shù)據(jù)只在這有限個數(shù)據(jù)包之間來回變動。
圖4 S7應(yīng)用層數(shù)據(jù)絡(luò)變化趨勢圖
圖5 數(shù)據(jù)包類別變化圖
2.1 場景指紋定義
為了將DFA應(yīng)用于S7協(xié)議,對DFA進(jìn)行優(yōu)化,提出了場景指紋的概念。場景指紋中規(guī)定了以下兩點:
(1)場景指紋中一個狀態(tài)表示一個S7數(shù)據(jù)包,其中,一個狀態(tài)定義為S7協(xié)議應(yīng)用層中除Protocol Data Unit Reference字段以外所有數(shù)據(jù)的集合;
(2)為了應(yīng)用場景指紋達(dá)到檢測異常的目的,不限定場景指紋能夠接收的狀態(tài)集合。
為了場景指紋能夠更好的表示SCADA網(wǎng)絡(luò)中數(shù)據(jù)交互情況。將場景指紋定義為一個六元組。其中,為每一個的有限個狀態(tài)集合;為有限個符號集合,即對于每一個狀態(tài)的定義,在場景指紋中為S7協(xié)議應(yīng)用層除了Protocol Data Unit Reference字段以外的所有數(shù)據(jù)集合;為狀態(tài)轉(zhuǎn)移函數(shù);為初始狀態(tài);為當(dāng)前狀態(tài);為每個狀態(tài)的經(jīng)過狀態(tài)轉(zhuǎn)移作用后的輸出狀態(tài)集合。
2.2 狀態(tài)轉(zhuǎn)移函數(shù)
當(dāng)場景指紋中當(dāng)前狀態(tài)接收到一個輸入信號后,狀態(tài)轉(zhuǎn)移函數(shù)根據(jù)輸入信號的特征將當(dāng)前狀態(tài)轉(zhuǎn)變到目的狀態(tài)。以下定義了Normal,Retrans,MissTrans,Unknown四種狀態(tài)轉(zhuǎn)移函數(shù),在場景指紋運(yùn)行的過程中,通過不同的狀態(tài)轉(zhuǎn)移函數(shù)被觸發(fā),能夠判斷當(dāng)前S7協(xié)議數(shù)據(jù)包是否是正常數(shù)據(jù)。假設(shè)場景指紋的當(dāng)前狀態(tài)為,輸入信號為,目的狀態(tài)為:
Python的Scapy是一款功能強(qiáng)大的交互式數(shù)據(jù)包處理程序,不僅可以用來發(fā)送、嗅探、解析和構(gòu)造網(wǎng)絡(luò)數(shù)據(jù)包,還能解析網(wǎng)絡(luò)數(shù)據(jù)包文件,提取有用信息。通過Scapy庫強(qiáng)大的功能將PCAP文件處理,并為HMI-PLC建立場景指紋。場景指紋的自提取過程如下:
(1)采集數(shù)據(jù)
首先利用Tcpdump或者Wireshark等工具獲取西門子SCADA網(wǎng)絡(luò)中HMI與PLC之間的交互數(shù)據(jù),以PCAP文件形式進(jìn)行保存,并且保證該P(yáng)CAP文件中沒有異常數(shù)據(jù),數(shù)據(jù)交互情況能夠完整描述整個HMI與PLC之間的工業(yè)控制過程。
(2)生成順序列表
提取PCAP文件中的所有S7協(xié)議應(yīng)用層數(shù)據(jù),并剔除掉其中的Protocol Data Unit Reference字段,然后按照PCAP文件中的數(shù)據(jù)包序號順序,生成順序列表。
(3)構(gòu)建鄰接矩陣
遍歷順序列表,對其中的數(shù)據(jù)種類進(jìn)行計數(shù),假設(shè)計數(shù)為N類,即表明該信道的場景指紋總共包含了N個狀態(tài)。此時構(gòu)建N為方陣A(即鄰接矩陣),并且Aij=1表示第i個狀態(tài)的下一個狀態(tài)是第j個狀態(tài),Aij=0表示第i個狀態(tài)與第j個狀態(tài)沒有邏輯關(guān)系。得到了鄰接矩陣,就可以通過鄰接矩陣為HMI-PLC生成場景指紋。
4.1 異常檢測流程
在工控系統(tǒng)運(yùn)行正常的情況下通過Tcpdump的網(wǎng)絡(luò)嗅探能力在核心交換機(jī)處采集工控系統(tǒng)采集HMI與PLC之間的實時交互數(shù)據(jù);提取S7協(xié)議特征,按照數(shù)據(jù)包到達(dá)序號生成順序列表;利用順序列表構(gòu)建鄰接矩陣并生成場景指紋,最后通過scapy在核心交換機(jī)處抓取HMI與PLC通信數(shù)據(jù)流量,并利用場景指紋對HMI與PLC之間的交互數(shù)據(jù)進(jìn)行實時監(jiān)測。場景指紋接收到實時數(shù)據(jù)包之后,提取S7協(xié)議特征,并將其作為輸入信號發(fā)送至場景指紋當(dāng)前狀態(tài),當(dāng)前狀態(tài)根據(jù)輸入信號以及自身輸出狀態(tài)集合觸發(fā)狀態(tài)轉(zhuǎn)移函數(shù),四個狀態(tài)轉(zhuǎn)移函數(shù)中被觸發(fā)的狀態(tài)轉(zhuǎn)移函數(shù)即可表明數(shù)據(jù)包是否屬于正常流量。數(shù)據(jù)正常會觸發(fā)Normal狀態(tài)轉(zhuǎn)移函數(shù),數(shù)據(jù)異常會觸發(fā)Unknown狀態(tài)轉(zhuǎn)移函數(shù),邏輯異常會觸發(fā)MissTrans和Miss狀態(tài)轉(zhuǎn)移函數(shù)。過程如圖6所示:
4.2 異常檢測實驗結(jié)果分析
在實驗平臺的工控系統(tǒng)SCADA網(wǎng)絡(luò)正常運(yùn)行的情況下,通過實驗平臺核心交換機(jī)處采集實時數(shù)據(jù)。利用場景指紋對正常的SCADA網(wǎng)絡(luò)進(jìn)行監(jiān)測,實驗兩次,實驗結(jié)果如表1所示,在5855個數(shù)據(jù)包中5844個為正常數(shù)據(jù),7387個數(shù)據(jù)包中有7366個正常數(shù)據(jù),其中的重傳數(shù)據(jù)是由于Scapy嗅探數(shù)據(jù)包時發(fā)生了丟包。場景指紋能夠很好的識別SCADA網(wǎng)絡(luò)中的正常流量。
表1 實驗結(jié)果
為了驗證場景指紋對SCADA網(wǎng)絡(luò)中異常流量的檢測能力。通過中間人攻擊的方式篡改工控系統(tǒng)中的數(shù)據(jù),例如修改HMI發(fā)送給PLC數(shù)據(jù)中指示電機(jī)轉(zhuǎn)速的值,以及修改電機(jī)轉(zhuǎn)速變化的控制邏輯。其數(shù)據(jù)變化趨勢如圖7所示,工控實驗平臺控制電機(jī)轉(zhuǎn)動實驗過程為HMI通過PLC控制電機(jī)以600、800、1000(r/min)的速度轉(zhuǎn)動。中間人攻擊攻擊目的過程分為兩種:第一種為修改HMI發(fā)送至PLC轉(zhuǎn)速的順序,如將600、800、1000(r/min)的轉(zhuǎn)速修改為800、600、1000(r/min)以達(dá)到修改控制邏輯的目的;第二種是修改HMI發(fā)送至PLC轉(zhuǎn)速的值,即將協(xié)議中表示轉(zhuǎn)速的字段修改成除600、800、1000以外的值,以達(dá)到造成數(shù)據(jù)異常的目的。為比較正常流量與異常流量的區(qū)別,同時在HMI處和核心交換機(jī)處抓取數(shù)據(jù)包,其中,核心交換機(jī)處抓取到的數(shù)據(jù)流量為通過中間人攻擊篡改的異常數(shù)據(jù)流量。相比于正常流量,異常流量的數(shù)據(jù)發(fā)生了位移,證明數(shù)據(jù)包達(dá)到順序發(fā)生了變化;并且相比與正常流量,還出現(xiàn)峰值異常突出的點,表明此處出現(xiàn)異常數(shù)據(jù)。
圖7 異常情況下S7協(xié)議層數(shù)據(jù)變化趨勢圖
表2 實驗結(jié)果
如表2所示,為方便觀察,分別進(jìn)行了兩次實驗。第一次實驗:HMI控制電機(jī)的轉(zhuǎn)速,分別發(fā)送600,800,1000(r/min)的指令通過PLC控制電機(jī)轉(zhuǎn)速,利用中間人攻擊,篡改HMI與PLC之間的通訊數(shù)據(jù)中表示電機(jī)轉(zhuǎn)速的字段,將轉(zhuǎn)速的控制邏輯修改為800,600,1000,其中不會出現(xiàn)觸發(fā)狀態(tài)轉(zhuǎn)移函數(shù)Unknown,因此,通過計算得出準(zhǔn)確率為97.04%,誤報率為2.95%;第二次實驗:將HMI控制電機(jī)轉(zhuǎn)速的指令中表示電機(jī)轉(zhuǎn)速的字段部分修改為除了600,800,1000三個值之外的其它任意值,其中不會觸發(fā)狀態(tài)轉(zhuǎn)移函數(shù)Normal,因此,通過計算得出準(zhǔn)確率為97.40%,誤報率為2.60%。
綜上所述,基于場景指紋的工控系統(tǒng)SCADA網(wǎng)絡(luò)異常檢測能夠有效的檢測出SCADA網(wǎng)絡(luò)中的流量異常,并對異常中的類別進(jìn)行劃分,能夠成功的檢測出邏輯異常和數(shù)據(jù)異常。并通過實驗觀察到,造成誤報的原因是中間人攻擊并沒有成功的修改HMI與PLC之間的交互數(shù)據(jù),以及Scapy嗅探數(shù)據(jù)時發(fā)生了丟包的現(xiàn)象。
工業(yè)控制系統(tǒng)SCADA網(wǎng)絡(luò)的安全有著重要的現(xiàn)實意義。本文在優(yōu)化了DFA模型的基礎(chǔ)上,重新定義了場景指紋;并基于工業(yè)控制系統(tǒng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)簡單特性,結(jié)合圖論中鄰接矩陣的概念,實現(xiàn)了場景指紋的自提取。該方法最大的優(yōu)點在于在有效減少了大量人工分析的同時,保證了較高的準(zhǔn)確率。如何將該方法應(yīng)用于更加復(fù)雜的工業(yè)場景并提高場景指紋自提取效率是下一步的研究重點。
[1]Goldenberg N,Wool A. Accurate modeling of Mo-dbus/TCP for intrusion detection in SCADA systems[J]. International Journal of Critical Infrastructure Pro-tection,2013.
[2]Kleinman A,Wool A. Accurate modeling of the Siemens S7 SCADA protocol for intrusion detection and digital forensics[J]. The Journal of Digital Forensi-cs,Security and Law:JDFSL,2014.
[3]Kleinmann A,Wool A. A Statechart-Based Anoma-ly Detection Model for Multi-Threaded SCADA Systems[C] //International Conference on Critical Information Infrastructures Security. Springer International Publishing,2015.
[4]Kleinmann A,Wool A. Automatic Construction o-f Statechart-Based Anomaly Detection Models for Mult-i-Threaded SCADA via Spectral Analysis[C] //Proceedings of the 2nd ACM Workshop on Cyber-Physical Systems Security and Privacy. ACM,2016.
[5]Barbosa R R R,Sadre R,Pras A. Flow whitelisting in SCADA networks[J]. International journal of critical infrastructure protection,2013.
[6]Beresford D. Exploiting Siemens Simatic S7 PL-Cs[J]. Black Hat USA,2011.
[7]張騰飛,范啟富,劉偉.基于支持向量機(jī)的SCADA系統(tǒng)入侵檢測[J].化工自動化及儀表,2015.
[8]張云貴,張偉,薛向榮,楊小軍.基于自學(xué)習(xí)半監(jiān)督單類支持向量機(jī)的SCADA入侵檢測系統(tǒng)[J].冶金自動化,2013.
[9]王婧.工業(yè)控制系統(tǒng)的入侵檢測系統(tǒng)研究[D].華北電力大學(xué)(北京),2014.
[10]彭勇,江常青,謝豐,戴忠華,熊琦,高洋.工業(yè)控制系統(tǒng)信息安全研究進(jìn)展[J].清華大學(xué)學(xué)報(自然科學(xué)版),2012.
[11]趙華.工業(yè)控制系統(tǒng)異常檢測算法研究[D].冶金自動化研究設(shè)計院,2013.
[12]張曉玉.SCADA系統(tǒng)安全通信面臨的挑戰(zhàn)及未來發(fā)展趨勢[J].通信技術(shù),2014.
[13]袁文波,洪波,尤萬方,殷召生,蔣彥,溫柳.S7-PLC基于Modbus/TCP協(xié)議通信研究[J].計算機(jī)工程與設(shè)計,2014.
[14]賈濤.西門子S7-200以太網(wǎng)通訊協(xié)議研究[J].電子技術(shù)與軟件工程,2014.
[15]廖常初.“S7-200SMARTPLC”講座第7講:S7-200SMART基于以太網(wǎng)的S7協(xié)議通信[J].電世界,2015.