邵俊杰,董 偉,馮 志
(中國電子信息產業集團有限公司第六研究所,北京 100083)
近些年來,工業控制系統(Industrial Control System,ICS)面臨的網絡威脅日益嚴重。國內外ICS通信網絡被頻繁攻擊,不僅帶來重大經濟損失,更嚴重威脅到國家基礎設施和重要生產部門的安全。
2010年,伊朗遭受“震網(Stuxnet)”超級病毒攻擊,大量生產核燃料用的離心機遭到破壞,該事件也成為世界上首個“網絡超級武器”事件。2012年5月,俄羅斯安全專家發現“火焰(Flame)”電腦病毒,在中東地區大范圍傳播。據報道,該病毒是中東某國針對另一國實施攻擊的高科技網絡武器。2018年8月,臺積電新竹園區遭受網絡病毒攻擊,導致生產線全數停擺,造成經濟損失約19億元。類似的工業安全事件與日俱增。
ICS協議設計之初面向相對封閉的系統,并未考慮外界威脅,近些年隨著兩化融合的發展,ICS逐漸與外網連接,為保護關鍵基礎設施,針對ICS的異常檢測技術研究迫在眉睫。
ICS的正常數據、異常數據分布往往呈現出極度不平衡的特點,獲取異常樣本代價極高,加大了訓練出可靠的高精度檢測模型的難度,對于建立性能良好的檢測模型非常不利。單分類器可以規避上述問題,因此可將異常檢測看作單分類問題以無監督方式來解決[1]。作為單分類方法的代表,單分類支持向量機(One-Class Support Vector Machine,OCSVM)被廣泛應用于異常檢測[2]。
其次,許多工控協議格式并不固定,采用深度包檢測(Deep Packet Inspection,DPI)的網絡異常檢測費時費力。WANG等[3]首次提出PAYL(payload-based anomaly detector)模型,將n-gram算法作為特征工程引入異常檢測領域,并用馬氏距離衡量新的有效載荷(payload)與已知模型的相似度,從而對網絡異常做出識別。采用n-gram算法作為特征工程無需過多的先驗知識,近年來,在機器學習領域n-gram算法逐漸成為替代DPI的一種方式;但幾乎所有采用n-gram作為特征提取的入侵檢測方法均結合馬氏距離做出識別,如劉解放[4]等人,而馬氏距離主要優點在于不受量綱的影響,排除了變量之間相關性干擾,但其夸大了變化微小的變量的作用,并且不是每次都能順利計算出結果。
本文不再使用傳統PAYL模型,而是將n-gram方法用于特征提取,結合單分類器與集成學習訓練出二層分類模型,從而對Modbus網絡進行異常檢測。
Modbus協議是一項應用層報文傳輸協議,用于互聯工控系統各大軟硬件。該協議共有兩大類實現方式:串行鏈路上的Modbus協議以及TCP層的Modbus協議。
串行鏈路上的Modbus協議包含兩種傳輸模式:RTU和ASCII模式。每字節的Modbus RTU報文幀包含兩個4位十六進制的字符(0~F),Modbus RTU報文幀由以下幾部分組成:循環冗余校驗碼(Cyclic Redundancy Code,CRC)、設備地址、功能地址、功能碼以及數據域。Modbus ASCII模式與其相似,只是報文中的每字節以兩個4位的ASCII字符為單位進行傳輸。Modbus TCP在TCP/IP層上使用了一種專用的報文頭來識別MODBUS應用數據單元。將這種報文頭稱為MBAP報文頭,包含單元標識符、事物元標識符、長度以及協議標識符。兩種Modbus實現方式如圖1所示。

圖1 Modbus RTU和TCP報文
如圖2所示,本文異常檢測方法簡介如下:
(1)使用n-gram(n=1,1.5,2,2.5,3)對訓練集樣本X1(只含正常數據)進行特征提取,即對每一個Modbus報文幀有效載荷進行五種特征表述。設有X1中有數據xi,則對其進行五種n-gram特征提取后會產生五種不同的詞向量xij(j=0,1,2,3,4),對應的數據集記為Xj(j=0,1,2,3,4)。
(2)對5個Xj(j=0,1,2,3,4)分別使用主成成分分析(Principal Component Analysis,PCA)與OCSVM算法,訓練出5個不同的OCSVM初級分類器,記為OCi(i=0,1,2,3,4)。
(3)用OCi(i=0,1,2,3,4)對訓練集X2(含正常數據與異常數據)進行預測,對每一條數據xi,經過OCj(j=0,1,2,3,4)預測后,會得到中間結果yij(j=0,1,2,3,4),組成下一層的輸入向量yi(yi0,yi1,yi2,yi3,yi4,labeli),其中labeli為xi的標簽。yi組成的數據集記為X3。
(4)用X3作為第二層分類器的訓練集,訓練出第二層分類器。
(5)對測試數據,經過上述四個步驟的分析后,即可判定為正常或異常流量。

圖2 方法架構
2.1.1 n-gram特征提取
特征工程的好壞決定了模型的上限。如何對原始問題進行特征提取在機器學習中至關重要[5]。n-gram算法對連續的n個字節進行分詞處理,提取出一組特征,顯然該算法具有線性時間復雜度。
在Modbus RTU中每字節由2個4位字符組成,每個字符占0.5字節,所以采用n-gram進行特征提取時,n的最小粒度為0.5字節。對給定數據幀有效載荷進行n-gram特征提取,最多有256n種可能的字符串組合。
本文方法的第一層模型采用單分類器訓練模型,只需正常數據即可產生模型輪廓。故對正常數據的payload進行n-gram特征提取,統計每個詞出現的次數并進行逆序排列,選出出現次數前90%的詞集作為特征,組成詞向量x=(x1,x2,…,xn)。該詞向量無法作為特征向量直接使用,本文使用報文幀的詞向量詞頻作為特征向量。
對每一個報文幀,令f=(f1,f2,…,fn)作為其特征向量。其中:
其中s(xi)為該報文中xi出現的次數。
2.1.2 PCA降維
2.1.1小節中詞向量維度依然較高,數據較為稀疏,會造成訓練速度過慢,且存在冗余信息。因此對產生的詞向量使用主成分分析(Principal Component Analysis,PCA)方法進行降維分析。
PCA通過找到一個超平面,使得樣本在其上的投影方差和最小。假設有總體x={x1,x2,…,xn}。
經過去中心化以及拉格朗日乘子法分析后,原問題轉化為求樣本協方差矩陣的特征值λ=(λ1,λ2,…,λn)。對λ逆序排列后取前d個λ對應的維度,即將數據降至d維。
OCSVM算法作為VC維理論下的算法,以結構風險最小化作為訓練原則,在有限樣本下仍具有較好的泛化能力。
OCSVM將數據映射到核函數所表示的特征空間中,找出一個距離原點盡可能遠的超平面,將原點與樣本點盡可能分開,為保證模型泛化能力,引入松弛變量ξi,允許部分點錯分在超平面內側。
假設樣本x={x1,x2,…,xl},OCSVM的凸二次規劃問題如下:
(1)
s.t.wΦ(xi)≥ρ-ξi,ξi≥0
其中Φ為原特征空間到高維空間的映射函數。w,ρ分別為超平面的法向量和偏移。v∈(0,1)為允許劃分到超平面內側的點的比例。
求解出w,ρ,代入決策面(2)即可對新樣本進行判定。
F=sgn((wΦ(xi))-ρ)
(2)
對式(1)引入拉格朗日乘子法,原問題轉化為:
L(w,ξ,ρ,α,β)=

(3)
分別對w,ρ,ξi求導并賦值為0得:
(4)
將式(4)代入拉格朗日式子并引入對偶問題,滿足KKT條件的情況下,最終將原問題轉化為:
(5)
解出α=(α1,α2,…,αl),其中αi>0的對應樣本點為支持向量。至此,w,ρ均可由α得出。
集成學習可以解決單個分類器性能不佳的問題,被廣泛應用于機器學習領域[6]。次級學習器一般采用邏輯回歸模型;SVM與其主要區別在于損失函數的不同,在實踐中發現SVM與LR效果相差無幾。但SVM轉化為對偶問題后,分類只需要計算與少數幾個支持向量的距離,在進行復雜核函數計算時優勢很明顯,能夠大大簡化模型和計算。因此本文選用SVM作為次級學習器。
本實驗采用密西西比州立大學提供的氣體管道數據集[7]。數據集作者提供了兩套數據集:原始數據集和作者處理過的數據集。在處理過的數據集中作者提出了20個特征,并對原始數據集進行加工后做成新數據集。
本文采用原始數據集,共274 627條數據,包含60 000條不同類型的攻擊。該數據集均為Modbus RTU報文幀。
本文選用誤報率(False Positive Rate,FPR)、準確率(Precison)、召回率(Recall)、漏報率(False Negative Rate,FNR)作為評價指標。
(6)
(7)
(8)
(9)
一般將異常樣本作為正類,正常樣本作為負類,式(6)~(9)中TP為異常樣本識別為異常樣本的數量,FP為正常樣本誤報為異常樣本的數量,FN為異常樣本漏報為正常樣本的數量,TN為正常樣本識別為正常樣本的數量。
3.3.1 詞向量產生
因本次實驗數據集中數據均為Modbus RTU報文幀,其報頭僅含地址信息,本文認為與攻擊并無關聯,故去掉報文幀前1字節與最后2字節(CRC)。本實驗完全基于payload對攻擊進行識別,對于Modbus TCP報文,可以加上基于報頭的特征。
對210 000條正常Modbus RTU幀采用n-gram(n=0,1,2,3,4)特征提取后,對出現的詞進行計數,提取出現頻率前90%的詞分別作為每個n-gram的詞向量。對2-gram來說,本文選用的詞向量共249維。
3.3.2 初級學習模塊
選用100 000條數據對初級學習器進行學習,調節參數后,每個OCSVM分類器性能如表1所示。

表1 不同單分類器性能
3.3.3 次級學習模塊
因只有6萬條攻擊樣本,為保證次級學習器樣本均衡問題,選擇剩余數據的4萬條正常和攻擊數據,共8萬條數據,利用5個初級學習器的輸出作為次級學習器的輸入,進行次級學習器的學習。
將剩余數據作為測試集,進行測試,最終模型效果如表2所示。

表2 整個模型性能
劉萬軍[2]等人采用作者進行特征處理后的數據集,其實驗結果為:FPR=0.097,FNR=0.067,與本實驗模型性能相差無幾。但本文方法從Modbus RTU原始報文幀入手,采用詞頻作為特征,對不同的工控協議移植性較好。
本文對ModbusRTU的payload進行了多個n-gram特征提取,產生多個同質單分類器,因n-gram產生的特征向量較為粗糙,單個分類器效果并不理想。故用“學習法”對多個分類器進行結合。實驗結果表明,本文的方法在ICS入侵檢測領域具有重要的理論和實踐意義。