邵俊杰,董 偉,馮 志
(中國電子信息產(chǎn)業(yè)集團有限公司第六研究所,北京 100083)
近些年來,工業(yè)控制系統(tǒng)(Industrial Control System,ICS)面臨的網(wǎng)絡(luò)威脅日益嚴重。國內(nèi)外ICS通信網(wǎng)絡(luò)被頻繁攻擊,不僅帶來重大經(jīng)濟損失,更嚴重威脅到國家基礎(chǔ)設(shè)施和重要生產(chǎn)部門的安全。
2010年,伊朗遭受“震網(wǎng)(Stuxnet)”超級病毒攻擊,大量生產(chǎn)核燃料用的離心機遭到破壞,該事件也成為世界上首個“網(wǎng)絡(luò)超級武器”事件。2012年5月,俄羅斯安全專家發(fā)現(xiàn)“火焰(Flame)”電腦病毒,在中東地區(qū)大范圍傳播。據(jù)報道,該病毒是中東某國針對另一國實施攻擊的高科技網(wǎng)絡(luò)武器。2018年8月,臺積電新竹園區(qū)遭受網(wǎng)絡(luò)病毒攻擊,導(dǎo)致生產(chǎn)線全數(shù)停擺,造成經(jīng)濟損失約19億元。類似的工業(yè)安全事件與日俱增。
ICS協(xié)議設(shè)計之初面向相對封閉的系統(tǒng),并未考慮外界威脅,近些年隨著兩化融合的發(fā)展,ICS逐漸與外網(wǎng)連接,為保護關(guān)鍵基礎(chǔ)設(shè)施,針對ICS的異常檢測技術(shù)研究迫在眉睫。
ICS的正常數(shù)據(jù)、異常數(shù)據(jù)分布往往呈現(xiàn)出極度不平衡的特點,獲取異常樣本代價極高,加大了訓(xùn)練出可靠的高精度檢測模型的難度,對于建立性能良好的檢測模型非常不利。單分類器可以規(guī)避上述問題,因此可將異常檢測看作單分類問題以無監(jiān)督方式來解決[1]。作為單分類方法的代表,單分類支持向量機(One-Class Support Vector Machine,OCSVM)被廣泛應(yīng)用于異常檢測[2]。
其次,許多工控協(xié)議格式并不固定,采用深度包檢測(Deep Packet Inspection,DPI)的網(wǎng)絡(luò)異常檢測費時費力。WANG等[3]首次提出PAYL(payload-based anomaly detector)模型,將n-gram算法作為特征工程引入異常檢測領(lǐng)域,并用馬氏距離衡量新的有效載荷(payload)與已知模型的相似度,從而對網(wǎng)絡(luò)異常做出識別。采用n-gram算法作為特征工程無需過多的先驗知識,近年來,在機器學(xué)習(xí)領(lǐng)域n-gram算法逐漸成為替代DPI的一種方式;但幾乎所有采用n-gram作為特征提取的入侵檢測方法均結(jié)合馬氏距離做出識別,如劉解放[4]等人,而馬氏距離主要優(yōu)點在于不受量綱的影響,排除了變量之間相關(guān)性干擾,但其夸大了變化微小的變量的作用,并且不是每次都能順利計算出結(jié)果。
本文不再使用傳統(tǒng)PAYL模型,而是將n-gram方法用于特征提取,結(jié)合單分類器與集成學(xué)習(xí)訓(xùn)練出二層分類模型,從而對Modbus網(wǎng)絡(luò)進行異常檢測。
Modbus協(xié)議是一項應(yīng)用層報文傳輸協(xié)議,用于互聯(lián)工控系統(tǒng)各大軟硬件。該協(xié)議共有兩大類實現(xiàn)方式:串行鏈路上的Modbus協(xié)議以及TCP層的Modbus協(xié)議。
串行鏈路上的Modbus協(xié)議包含兩種傳輸模式:RTU和ASCII模式。每字節(jié)的Modbus RTU報文幀包含兩個4位十六進制的字符(0~F),Modbus RTU報文幀由以下幾部分組成:循環(huán)冗余校驗碼(Cyclic Redundancy Code,CRC)、設(shè)備地址、功能地址、功能碼以及數(shù)據(jù)域。Modbus ASCII模式與其相似,只是報文中的每字節(jié)以兩個4位的ASCII字符為單位進行傳輸。Modbus TCP在TCP/IP層上使用了一種專用的報文頭來識別MODBUS應(yīng)用數(shù)據(jù)單元。將這種報文頭稱為MBAP報文頭,包含單元標識符、事物元標識符、長度以及協(xié)議標識符。兩種Modbus實現(xiàn)方式如圖1所示。
圖1 Modbus RTU和TCP報文
如圖2所示,本文異常檢測方法簡介如下:
(1)使用n-gram(n=1,1.5,2,2.5,3)對訓(xùn)練集樣本X1(只含正常數(shù)據(jù))進行特征提取,即對每一個Modbus報文幀有效載荷進行五種特征表述。設(shè)有X1中有數(shù)據(jù)xi,則對其進行五種n-gram特征提取后會產(chǎn)生五種不同的詞向量xij(j=0,1,2,3,4),對應(yīng)的數(shù)據(jù)集記為Xj(j=0,1,2,3,4)。
(2)對5個Xj(j=0,1,2,3,4)分別使用主成成分分析(Principal Component Analysis,PCA)與OCSVM算法,訓(xùn)練出5個不同的OCSVM初級分類器,記為OCi(i=0,1,2,3,4)。
(3)用OCi(i=0,1,2,3,4)對訓(xùn)練集X2(含正常數(shù)據(jù)與異常數(shù)據(jù))進行預(yù)測,對每一條數(shù)據(jù)xi,經(jīng)過OCj(j=0,1,2,3,4)預(yù)測后,會得到中間結(jié)果yij(j=0,1,2,3,4),組成下一層的輸入向量yi(yi0,yi1,yi2,yi3,yi4,labeli),其中l(wèi)abeli為xi的標簽。yi組成的數(shù)據(jù)集記為X3。
(4)用X3作為第二層分類器的訓(xùn)練集,訓(xùn)練出第二層分類器。
(5)對測試數(shù)據(jù),經(jīng)過上述四個步驟的分析后,即可判定為正?;虍惓A髁俊?/p>
圖2 方法架構(gòu)
2.1.1 n-gram特征提取
特征工程的好壞決定了模型的上限。如何對原始問題進行特征提取在機器學(xué)習(xí)中至關(guān)重要[5]。n-gram算法對連續(xù)的n個字節(jié)進行分詞處理,提取出一組特征,顯然該算法具有線性時間復(fù)雜度。
在Modbus RTU中每字節(jié)由2個4位字符組成,每個字符占0.5字節(jié),所以采用n-gram進行特征提取時,n的最小粒度為0.5字節(jié)。對給定數(shù)據(jù)幀有效載荷進行n-gram特征提取,最多有256n種可能的字符串組合。
本文方法的第一層模型采用單分類器訓(xùn)練模型,只需正常數(shù)據(jù)即可產(chǎn)生模型輪廓。故對正常數(shù)據(jù)的payload進行n-gram特征提取,統(tǒng)計每個詞出現(xiàn)的次數(shù)并進行逆序排列,選出出現(xiàn)次數(shù)前90%的詞集作為特征,組成詞向量x=(x1,x2,…,xn)。該詞向量無法作為特征向量直接使用,本文使用報文幀的詞向量詞頻作為特征向量。
對每一個報文幀,令f=(f1,f2,…,fn)作為其特征向量。其中:
其中s(xi)為該報文中xi出現(xiàn)的次數(shù)。
2.1.2 PCA降維
2.1.1小節(jié)中詞向量維度依然較高,數(shù)據(jù)較為稀疏,會造成訓(xùn)練速度過慢,且存在冗余信息。因此對產(chǎn)生的詞向量使用主成分分析(Principal Component Analysis,PCA)方法進行降維分析。
PCA通過找到一個超平面,使得樣本在其上的投影方差和最小。假設(shè)有總體x={x1,x2,…,xn}。
經(jīng)過去中心化以及拉格朗日乘子法分析后,原問題轉(zhuǎn)化為求樣本協(xié)方差矩陣的特征值λ=(λ1,λ2,…,λn)。對λ逆序排列后取前d個λ對應(yīng)的維度,即將數(shù)據(jù)降至d維。
OCSVM算法作為VC維理論下的算法,以結(jié)構(gòu)風(fēng)險最小化作為訓(xùn)練原則,在有限樣本下仍具有較好的泛化能力。
OCSVM將數(shù)據(jù)映射到核函數(shù)所表示的特征空間中,找出一個距離原點盡可能遠的超平面,將原點與樣本點盡可能分開,為保證模型泛化能力,引入松弛變量ξi,允許部分點錯分在超平面內(nèi)側(cè)。
假設(shè)樣本x={x1,x2,…,xl},OCSVM的凸二次規(guī)劃問題如下:
(1)
s.t.wΦ(xi)≥ρ-ξi,ξi≥0
其中Φ為原特征空間到高維空間的映射函數(shù)。w,ρ分別為超平面的法向量和偏移。v∈(0,1)為允許劃分到超平面內(nèi)側(cè)的點的比例。
求解出w,ρ,代入決策面(2)即可對新樣本進行判定。
F=sgn((wΦ(xi))-ρ)
(2)
對式(1)引入拉格朗日乘子法,原問題轉(zhuǎn)化為:
L(w,ξ,ρ,α,β)=
(3)
分別對w,ρ,ξi求導(dǎo)并賦值為0得:
(4)
將式(4)代入拉格朗日式子并引入對偶問題,滿足KKT條件的情況下,最終將原問題轉(zhuǎn)化為:
(5)
解出α=(α1,α2,…,αl),其中αi>0的對應(yīng)樣本點為支持向量。至此,w,ρ均可由α得出。
集成學(xué)習(xí)可以解決單個分類器性能不佳的問題,被廣泛應(yīng)用于機器學(xué)習(xí)領(lǐng)域[6]。次級學(xué)習(xí)器一般采用邏輯回歸模型;SVM與其主要區(qū)別在于損失函數(shù)的不同,在實踐中發(fā)現(xiàn)SVM與LR效果相差無幾。但SVM轉(zhuǎn)化為對偶問題后,分類只需要計算與少數(shù)幾個支持向量的距離,在進行復(fù)雜核函數(shù)計算時優(yōu)勢很明顯,能夠大大簡化模型和計算。因此本文選用SVM作為次級學(xué)習(xí)器。
本實驗采用密西西比州立大學(xué)提供的氣體管道數(shù)據(jù)集[7]。數(shù)據(jù)集作者提供了兩套數(shù)據(jù)集:原始數(shù)據(jù)集和作者處理過的數(shù)據(jù)集。在處理過的數(shù)據(jù)集中作者提出了20個特征,并對原始數(shù)據(jù)集進行加工后做成新數(shù)據(jù)集。
本文采用原始數(shù)據(jù)集,共274 627條數(shù)據(jù),包含60 000條不同類型的攻擊。該數(shù)據(jù)集均為Modbus RTU報文幀。
本文選用誤報率(False Positive Rate,FPR)、準確率(Precison)、召回率(Recall)、漏報率(False Negative Rate,FNR)作為評價指標。
(6)
(7)
(8)
(9)
一般將異常樣本作為正類,正常樣本作為負類,式(6)~(9)中TP為異常樣本識別為異常樣本的數(shù)量,F(xiàn)P為正常樣本誤報為異常樣本的數(shù)量,F(xiàn)N為異常樣本漏報為正常樣本的數(shù)量,TN為正常樣本識別為正常樣本的數(shù)量。
3.3.1 詞向量產(chǎn)生
因本次實驗數(shù)據(jù)集中數(shù)據(jù)均為Modbus RTU報文幀,其報頭僅含地址信息,本文認為與攻擊并無關(guān)聯(lián),故去掉報文幀前1字節(jié)與最后2字節(jié)(CRC)。本實驗完全基于payload對攻擊進行識別,對于Modbus TCP報文,可以加上基于報頭的特征。
對210 000條正常Modbus RTU幀采用n-gram(n=0,1,2,3,4)特征提取后,對出現(xiàn)的詞進行計數(shù),提取出現(xiàn)頻率前90%的詞分別作為每個n-gram的詞向量。對2-gram來說,本文選用的詞向量共249維。
3.3.2 初級學(xué)習(xí)模塊
選用100 000條數(shù)據(jù)對初級學(xué)習(xí)器進行學(xué)習(xí),調(diào)節(jié)參數(shù)后,每個OCSVM分類器性能如表1所示。
表1 不同單分類器性能
3.3.3 次級學(xué)習(xí)模塊
因只有6萬條攻擊樣本,為保證次級學(xué)習(xí)器樣本均衡問題,選擇剩余數(shù)據(jù)的4萬條正常和攻擊數(shù)據(jù),共8萬條數(shù)據(jù),利用5個初級學(xué)習(xí)器的輸出作為次級學(xué)習(xí)器的輸入,進行次級學(xué)習(xí)器的學(xué)習(xí)。
將剩余數(shù)據(jù)作為測試集,進行測試,最終模型效果如表2所示。
表2 整個模型性能
劉萬軍[2]等人采用作者進行特征處理后的數(shù)據(jù)集,其實驗結(jié)果為:FPR=0.097,F(xiàn)NR=0.067,與本實驗?zāi)P托阅芟嗖顭o幾。但本文方法從Modbus RTU原始報文幀入手,采用詞頻作為特征,對不同的工控協(xié)議移植性較好。
本文對ModbusRTU的payload進行了多個n-gram特征提取,產(chǎn)生多個同質(zhì)單分類器,因n-gram產(chǎn)生的特征向量較為粗糙,單個分類器效果并不理想。故用“學(xué)習(xí)法”對多個分類器進行結(jié)合。實驗結(jié)果表明,本文的方法在ICS入侵檢測領(lǐng)域具有重要的理論和實踐意義。