周宇,鄭榮鋒,劉嘉勇
(1.四川大學(xué)電子信息學(xué)院,成都 610065;2.四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都610065)
在工業(yè)控制系統(tǒng)ICS發(fā)展過(guò)程中,采取的是封閉隔離形式,具有固定的業(yè)務(wù)流程,是自動(dòng)閉環(huán)的處理方式,并采用大量私有協(xié)議,但是隨著ICS開(kāi)放性的提升和協(xié)議逆向技術(shù)的發(fā)展,安全的私有協(xié)議漸漸變成暴露在網(wǎng)絡(luò)上極易受到攻擊的公有協(xié)議。
ICS需要符合其特殊性的入侵檢測(cè)系統(tǒng),Golden?berg和Wool分別提出了針對(duì)Modbus和S7協(xié)議的基于狀態(tài)機(jī)的入侵檢測(cè)方法[1-2],但只是在HMI到PLC方向的下行信道建立DFA(有限狀態(tài)自動(dòng)機(jī)),不能檢測(cè)PLC到HMI方向的數(shù)據(jù)。Zhang J[3]等人提出了基于工控流量數(shù)據(jù)周期性的特點(diǎn)進(jìn)行異常檢測(cè),并將請(qǐng)求數(shù)據(jù)的響應(yīng)時(shí)間也加入?yún)⒖紬l件,但并沒(méi)有檢測(cè)上行信道的數(shù)據(jù)。Xu J、Feng D[4]提出了SF-FSM模型(包含響應(yīng)參數(shù)的有限狀態(tài)機(jī))將下行信道PLC響應(yīng)HMI的數(shù)據(jù)作為狀態(tài)機(jī)的參數(shù),但如果通過(guò)中間人構(gòu)造響應(yīng)數(shù)據(jù),則此狀態(tài)機(jī)就會(huì)失效。
針對(duì)上述的問(wèn)題,提出了R-DFA模型,R-DFA模型是特殊的有限自動(dòng)機(jī),其輸入?yún)?shù)包含請(qǐng)求數(shù)據(jù)信息,響應(yīng)數(shù)據(jù)信息和響應(yīng)時(shí)間信息三元組。最后為了彌補(bǔ)一般自動(dòng)機(jī)的狀態(tài)轉(zhuǎn)移只依賴前一個(gè)狀態(tài)的缺點(diǎn),在R-DFA模型后面添加周期狀態(tài)序列模型以提高準(zhǔn)確率??紤]到S7協(xié)議語(yǔ)義公開(kāi),便于提取特征,本文實(shí)驗(yàn)環(huán)境基于S7協(xié)議的工控系統(tǒng),實(shí)驗(yàn)結(jié)果表明R-DFA模型具有較高的準(zhǔn)確率,也能夠有效的對(duì)上行異常流量進(jìn)行檢測(cè)。
本文將工控系統(tǒng)的一個(gè)PLC和一個(gè)上位機(jī)的通信稱為一個(gè)信道,R-DFA模型異常流量檢測(cè)是建立在單一信道中。數(shù)據(jù)預(yù)處理有兩個(gè)目的,一是獲得所有信道信息,建立信道白名單模型,過(guò)濾異常的信道,二是提取出單一信道,并從單一信道中提取次信道的工控規(guī)則信息數(shù)據(jù),為后續(xù)訓(xùn)練R-DFA模型。
數(shù)據(jù)預(yù)處理分為二步:
(1)通過(guò)三元組(s_port,m_IP,s_IP)分離通信信道。其中s_port為S7協(xié)議的端口號(hào),s_IP為PLC的IP,m_IP為上位機(jī)的IP,并將正常信道的三元組進(jìn)行記錄,組建會(huì)話白名單;
(2)在一個(gè)信道會(huì)話中提取會(huì)話規(guī)則,過(guò)濾掉對(duì)規(guī)則無(wú)用的包,例如心跳包(PLC定時(shí)對(duì)HMI發(fā)送的工控現(xiàn)場(chǎng)實(shí)時(shí)的數(shù)據(jù),ROSCTR為0x07)等,過(guò)濾這些包根據(jù)S7 PDU的Header中的ROSCTR字段來(lái)過(guò)濾,僅僅保留 ROSCTR字段為 0x01(JOB packet)和 0x03(ACK packet)的數(shù)據(jù)包。
先對(duì)S7協(xié)議字段和語(yǔ)義進(jìn)行分析,根據(jù)先驗(yàn)知識(shí)確定S7協(xié)議中的關(guān)鍵字段來(lái)作為特征,提取出一個(gè)能代表這個(gè)數(shù)據(jù)包和PLC狀態(tài)的唯一特征,并記錄。
圖1 S7協(xié)議PDU結(jié)構(gòu)
本文將S7協(xié)議的數(shù)據(jù)包特征定義為S7 PDU除去Header字段包含的Protol Data Unit Reference字段的其他所有數(shù)據(jù)的集合。提取后數(shù)據(jù)包字段特征進(jìn)行md5產(chǎn)生一個(gè)32位的數(shù)據(jù),本文稱為特征指紋,用特征指紋來(lái)代替原始的特征數(shù)據(jù),這樣既能夠用特征指紋表現(xiàn)出不同數(shù)據(jù)包的唯一性,也能夠忽略請(qǐng)求數(shù)據(jù)包和響應(yīng)數(shù)據(jù)包的不同所表現(xiàn)出來(lái)的特征長(zhǎng)度的區(qū)別。
工業(yè)控制系統(tǒng)網(wǎng)絡(luò)一般具有明顯的規(guī)律性,可以將工控系統(tǒng)一個(gè)信道的工作流程定義為一個(gè)有限自動(dòng)機(jī),R-DFA和普通的DFA一樣定義一個(gè)五元組(S,s0,∑,δ,F(xiàn))。
S是一個(gè)有限非空的狀態(tài)集合,需要用PLC的實(shí)際狀態(tài)來(lái)定義,第二個(gè)參數(shù)s0為狀態(tài)機(jī)的初始狀態(tài),是S的一個(gè)元素,所以S為:
∑為輸入的信號(hào),是本文狀態(tài)機(jī)的特點(diǎn),一般的工控系統(tǒng)的狀態(tài)機(jī)的輸入信號(hào)都是單向的請(qǐng)求(JOB)數(shù)據(jù)包,這樣不能檢測(cè)出由PLC向上位機(jī)HMI的注入攻擊,例如響應(yīng)注入攻擊?!频脑亍苅是一個(gè)三元組為(Preq,i,Presp,i,ΔTi),因此S為:
Preq是從JOB(request)數(shù)據(jù)包中提取的特征指紋,Presp是從ACK(response)數(shù)據(jù)包中提取的特征指紋。ΔT是JOB包和ACK包的到達(dá)時(shí)間差,稱為響應(yīng)時(shí)間。使用信道流量上下行的特征作為輸入信號(hào),能夠建立一個(gè)信道上下行的關(guān)系,有效的檢測(cè)出響應(yīng)注入攻擊,響應(yīng)時(shí)間ΔT的加入是為了防止攻擊者構(gòu)造響應(yīng)數(shù)據(jù)包,從而欺騙上位機(jī)HMI。
δ為狀態(tài)轉(zhuǎn)移函數(shù),能夠通過(guò)現(xiàn)在的狀態(tài)si,三維輸入?yún)?shù)Si,轉(zhuǎn)移到下個(gè)狀態(tài)si+1。F為狀態(tài)機(jī)的最后一個(gè)狀態(tài)。
定義了狀態(tài)機(jī)的各項(xiàng)參數(shù)后,開(kāi)始建立狀態(tài)機(jī)模型。建立一個(gè)二維的狀態(tài)轉(zhuǎn)換表,第一行為前一個(gè)狀態(tài),第一列為后一個(gè)狀態(tài),如果兩個(gè)狀態(tài)能夠轉(zhuǎn)化則對(duì)應(yīng)表中位置寫(xiě)入輸入信號(hào)參數(shù),異常檢測(cè)模型根據(jù)狀態(tài)轉(zhuǎn)換表來(lái)確定狀態(tài)轉(zhuǎn)換是否異常。
例如假設(shè)一共有三種狀態(tài),建立的狀態(tài)轉(zhuǎn)換表如表1所示。
表1 狀態(tài)轉(zhuǎn)換表
可以看出,s1可以通過(guò)三維輸入信號(hào)(Preq,2,Presp,2,ΔT)轉(zhuǎn)換為s2,且s1只能轉(zhuǎn)換為s2狀態(tài),如果s1收到其他輸入信號(hào),會(huì)觸發(fā)異常狀態(tài)轉(zhuǎn)化函數(shù),從而報(bào)出異常。s1狀態(tài)轉(zhuǎn)化為穩(wěn)定的s2狀態(tài)過(guò)程如圖2所示。
圖2 s1到s2穩(wěn)定狀態(tài)轉(zhuǎn)換過(guò)程
異常狀態(tài)轉(zhuǎn)化函數(shù)能夠根據(jù)不同的錯(cuò)誤輸入信號(hào)觸發(fā)不同的異常狀態(tài),例如Preq錯(cuò)誤則報(bào)請(qǐng)求異常,Presp和DT錯(cuò)誤,則報(bào)響應(yīng)異常。此狀態(tài)機(jī)模型理論上能夠有效檢測(cè)出以往的工控狀態(tài)機(jī)模型無(wú)法檢測(cè)的響應(yīng)注入攻擊。
狀態(tài)機(jī)模型雖然能夠檢測(cè)出異常攻擊,但狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換是依賴于上一個(gè)狀態(tài)的,因此狀態(tài)機(jī)模型有一定的局限性,當(dāng)發(fā)生圖3情況時(shí),狀態(tài)機(jī)模型可能會(huì)出錯(cuò)。
圖3 狀態(tài)機(jī)模型無(wú)法檢測(cè)的狀態(tài)順序
在圖4中,s2和s3都能轉(zhuǎn)化為s1狀態(tài)或者從s1轉(zhuǎn)化而來(lái),都保存在了狀態(tài)轉(zhuǎn)化表中。只使用狀態(tài)機(jī)模型進(jìn)行異常檢測(cè),則上圖中錯(cuò)誤的順序也會(huì)被狀態(tài)機(jī)認(rèn)為是正確的,產(chǎn)生漏報(bào)。為了解決這種問(wèn)題,完善異常檢測(cè)模型,本文又在狀態(tài)機(jī)模型之后添加了周期狀態(tài)序列模型。
周期狀態(tài)序列模型由下面步驟建立。
(1)找到單一信道中工控?cái)?shù)據(jù)流量的最小正周期n,根據(jù)JOB數(shù)據(jù)包的特征指紋順序建立一個(gè)周期內(nèi)的狀態(tài)序列模型;
(2)周期狀態(tài)序列模型會(huì)在一開(kāi)始進(jìn)行檢測(cè)時(shí)進(jìn)行計(jì)數(shù)標(biāo)記,確保預(yù)測(cè)的狀態(tài)和狀態(tài)機(jī)模型將要正確轉(zhuǎn)化的下一個(gè)狀態(tài)一致;
(3)當(dāng)狀態(tài)機(jī)模型轉(zhuǎn)化為下一個(gè)狀態(tài)時(shí),就會(huì)與當(dāng)前周期狀態(tài)序列模型所預(yù)測(cè)的狀態(tài)進(jìn)行比對(duì),以確保當(dāng)前轉(zhuǎn)化狀態(tài)的正確性。
周期狀態(tài)序列模型的位于狀態(tài)機(jī)模型后面,當(dāng)一個(gè)周期的狀態(tài)預(yù)測(cè)完成后,周期狀態(tài)序列模型又會(huì)從周期初始狀態(tài)開(kāi)始預(yù)測(cè),循環(huán)反復(fù),減低了異常檢測(cè)系統(tǒng)的負(fù)擔(dān)。
如果只用周期狀態(tài)序列模型進(jìn)行異常檢測(cè),無(wú)法確定工控系統(tǒng)即時(shí)的狀態(tài),而且少了輸入信號(hào)量的檢測(cè),模型檢測(cè)不出響應(yīng)注入等攻擊。將狀態(tài)機(jī)模型和周期狀態(tài)序列模型結(jié)合起來(lái),能夠避免圖3的漏報(bào),也能夠有效地提高異常檢測(cè)系統(tǒng)的準(zhǔn)確性。
圖4 周期狀態(tài)序列的檢測(cè)
以R-DFA為核心的異常檢測(cè)系統(tǒng)由以下步驟建立:
(1)通過(guò)正常流量建立會(huì)話白名單,提取目標(biāo)信道的數(shù)據(jù)包,過(guò)濾掉其中的心跳包。
(2)提取目標(biāo)信道上下行流量的特征,根據(jù)目標(biāo)信道的通信規(guī)則建立狀態(tài)轉(zhuǎn)換表,訓(xùn)練R-DFA模型。
(3)根據(jù)目標(biāo)信道通信規(guī)則,提取出周期,建立周期序列模型。
(4)將以上的模型按照?qǐng)D5順序組合起來(lái),對(duì)實(shí)時(shí)的流量進(jìn)行檢測(cè),對(duì)不正常的行為發(fā)出警告。
圖5 異常流量檢測(cè)系統(tǒng)
異常警告可以告知檢測(cè)出的異常行為發(fā)生在異常檢測(cè)系統(tǒng)的哪個(gè)階段,也能將對(duì)應(yīng)的異常的行為記錄。這樣能夠通過(guò)異常警告的記錄獲得流量中異常行為個(gè)數(shù),從而驗(yàn)證本文異常檢測(cè)系統(tǒng)的性能。表2為異常警告階段會(huì)記錄的異常行為及其階段。
表2 異常警告記錄的行為和對(duì)應(yīng)階段
為了檢測(cè)以上方法的可行性,在本地搭建一個(gè)小型的工控系統(tǒng)仿真環(huán)境進(jìn)行實(shí)驗(yàn)。本文的實(shí)驗(yàn)場(chǎng)景如圖5示的西門(mén)子工控實(shí)驗(yàn)平臺(tái)的網(wǎng)絡(luò)拓?fù)鋱D?,F(xiàn)場(chǎng)設(shè)備包含兩個(gè)S7-200和一個(gè)S7-300的PLC。S7-300控制發(fā)電機(jī)的轉(zhuǎn)速,S7-200控制蜂鳴器。其中工程師站能夠根據(jù)設(shè)定的流程邏輯編寫(xiě)PLC對(duì)應(yīng)的程序。
在控制設(shè)備和現(xiàn)場(chǎng)設(shè)備之間有換機(jī),能夠鏡像工控網(wǎng)絡(luò)中的流量到工控異常檢測(cè)服務(wù)器中,并用抓包工具捕獲PLC與HMI的實(shí)時(shí)數(shù)據(jù)。
實(shí)驗(yàn)先通過(guò)正常的工控流量數(shù)據(jù)在服務(wù)器中訓(xùn)練出本文提出的異常檢測(cè)模型,然后將訓(xùn)練完成的異常檢測(cè)模型監(jiān)聽(tīng)鏡像端口的實(shí)時(shí)數(shù)據(jù),驗(yàn)證異常檢測(cè)模型的效果。
圖6 工控網(wǎng)絡(luò)仿真拓?fù)鋱D
在本次實(shí)驗(yàn)中,選取S7-300與上位機(jī)的通信信道,此信道能夠體現(xiàn)出工控系統(tǒng)的流量數(shù)據(jù)的特征。
本文實(shí)驗(yàn)數(shù)據(jù)是通過(guò)Python的Scapy庫(kù)嗅探正常流量和異常的攻擊流量,使用正常流量來(lái)建立模型,使用惡意的攻擊流量驗(yàn)證異常流量檢測(cè)系統(tǒng)的性能。本文使用以下的攻擊方式進(jìn)行攻擊,并捕獲異常流量,表3為獲取實(shí)驗(yàn)數(shù)據(jù)集,數(shù)量和實(shí)際攻擊的單位都是數(shù)據(jù)包個(gè)數(shù)。
序列攻擊:修改數(shù)據(jù)包的傳送順序,導(dǎo)致工控邏輯出現(xiàn)異常,從而影響正常的工控系統(tǒng)的運(yùn)作。
snap7連接:通過(guò)在工控網(wǎng)絡(luò)中用另外一臺(tái)設(shè)備編寫(xiě)S7的程序,利用PLC不會(huì)對(duì)HMI設(shè)備認(rèn)證的缺點(diǎn),控制PLC達(dá)到攻擊的目的。
手動(dòng)操作:手動(dòng)的從HMI向PLC發(fā)送一些數(shù)據(jù)包,使其與正常情況的狀態(tài)不符合,例如在本實(shí)驗(yàn)場(chǎng)景中,HMI向PLC發(fā)送的不正常的請(qǐng)求包。
響應(yīng)構(gòu)造:通過(guò)中間人攻擊,構(gòu)造PLC到HMI的響應(yīng)包,讓HMI誤以為PLC已經(jīng)改變狀態(tài),達(dá)到欺騙HMI的目的。
異常響應(yīng):直接通過(guò)中間人構(gòu)造異常的響應(yīng)數(shù)據(jù)包,從而從上行信道對(duì)HMI的主機(jī)進(jìn)行攻擊。
表3 實(shí)驗(yàn)數(shù)據(jù)集
利用表3的正常數(shù)據(jù)流,建立信道白名單模型,RDFA模型和周期序列模型,并將三者根據(jù)圖5串聯(lián)起來(lái),形成異常檢測(cè)系統(tǒng),對(duì)表3的異常數(shù)據(jù)流進(jìn)行檢測(cè),本實(shí)驗(yàn)使用工具是Python3。
其中R-DFA模型的三元輸入?yún)?shù)中的響應(yīng)時(shí)間DT需要一個(gè)可靠的取值范圍,在本文實(shí)驗(yàn)環(huán)境中,正常的S7數(shù)據(jù)流量的響應(yīng)時(shí)間如圖7所示。
圖7 正常流量的響應(yīng)時(shí)間
可以看出在本文的實(shí)驗(yàn)環(huán)境中工控?cái)?shù)據(jù)響應(yīng)時(shí)間集中在0.002s到0.005s之間,但也會(huì)有些超過(guò)0.005s,這些響應(yīng)時(shí)間也是正常的,原因可能是網(wǎng)絡(luò)延遲。
為了規(guī)避正常的網(wǎng)絡(luò)延遲的情況,實(shí)驗(yàn)使用核密度估計(jì)ΔT的概率密度估計(jì),從而定義其取值范圍,核密度估計(jì)是一種用于估計(jì)概率密度函數(shù)的非參數(shù)方法,正常 n 個(gè)樣本點(diǎn) Δ T1,Δ T2,…,Δ Tn為獨(dú)立同分布的,設(shè)其概率密度函數(shù)為f,則其核密度估計(jì)為:
K為核函數(shù),根據(jù)實(shí)驗(yàn),K選用Epanechnikov函數(shù),此核函數(shù)的均方誤差是最優(yōu)的。h為帶寬,根據(jù)實(shí)驗(yàn)得出帶寬的最優(yōu)值為0.001。實(shí)驗(yàn)使用Python 3的scikit-learn機(jī)器學(xué)習(xí)庫(kù)對(duì)圖6的正常響應(yīng)時(shí)間數(shù)據(jù)集進(jìn)行訓(xùn)練得出ΔT的核密度估計(jì),如圖8所示,選用ΔT 的范圍為(0.0017,0.0095)。
圖8 響應(yīng)時(shí)間核密度估計(jì)
將每個(gè)異常數(shù)據(jù)集的數(shù)據(jù)包分為兩類,正常數(shù)據(jù)包(normol)和異常數(shù)據(jù)包(abnormol),經(jīng)過(guò)實(shí)驗(yàn)后得到以下的數(shù)據(jù),TP為真陽(yáng)性,即abnormol被識(shí)別為ab?normol;TN 為真陰性,即 normol被識(shí)別為 normol;FP 為假陽(yáng)性,即normol被識(shí)別為abnormal;FN為假陰性,即abnormal被識(shí)別為normal。
本實(shí)驗(yàn)采用精確召回率調(diào)和平均數(shù)(F)、召回率(Rec)、精確率(Pre)來(lái)衡量:
對(duì)異常數(shù)據(jù)集進(jìn)行異常檢測(cè)實(shí)驗(yàn)結(jié)果如表4所示,表5還包括此類攻擊被檢測(cè)到的階段和對(duì)應(yīng)的異常警報(bào)。
表4 異常攻擊流量檢測(cè)結(jié)果
根據(jù)表4的結(jié)果,可以看出基于R-FSM異常檢測(cè)系統(tǒng)性能良好,對(duì)常見(jiàn)的攻擊的異常檢測(cè)精確率Pre,召回率Rec和精確召回率調(diào)和平均數(shù)F都在90%以上,也能夠檢測(cè)出PLC對(duì)上位機(jī)方向上行行道的流量異常,也有很高的精確率Pre,召回率Rec和精確召回率調(diào)和平均數(shù)F。
本文在普通的DFA模型上添加了PLC到HMI的數(shù)據(jù)信息,能夠檢測(cè)出普通工控DFA模型無(wú)法檢測(cè)的響應(yīng)注入的問(wèn)題,并在DFA模型后添加了周期狀態(tài)序列模型,解決了DFA狀態(tài)轉(zhuǎn)移僅僅依靠前一個(gè)狀態(tài)的不足。在本地基于S7協(xié)議仿真實(shí)驗(yàn)中,異常檢測(cè)模型運(yùn)行效果良好,能夠準(zhǔn)確地識(shí)別出工控網(wǎng)絡(luò)的異常流量。另外此方法也應(yīng)該能夠用在不是S7協(xié)議的工業(yè)控制系統(tǒng)中,這需要后續(xù)的研究和確定。