何 戡,曲 超,宗學軍,鄭洪宇,紀勝龍
1(沈陽化工大學 信息工程學院,沈陽 110142)
2(黃淮學院 智能制造學院,河南 駐馬店 463000)
3(奇安信科技集團股份有限公司,北京 100000)
在工業信息技術的高速發展下,工業控制網絡(Industrial Control Network,ICN)日趨成熟,但與此同時,威脅網絡安全的木馬、病毒等計算機惡意程序已不再局限于傳統互聯網之中,工業控制網絡安全正經受著嚴峻考驗.無論是2010年的“震網”病毒事件還是“WannaCry”永恒之藍勒索蠕蟲事件都表明,解決工業控制網絡安全問題刻不容緩[1].
相較于傳統IT網絡,在工業控制網絡中建立安全體系要保證生產的穩定性和實時性,進一步考慮工業網絡環境的特殊性,如在工業設備之間專用的工業通信協議和工業控制網絡獨特的結構.威脅狩獵(Threat Hunting)作為近年來如claroty,dragos等國際新型公司的工業安全檢測手段,在2020年的全球信息安全大會(RSAC-2020)的ICS village中被重點關注,Sherri Davidoff等人在會上的報告中發表了以威脅狩獵為核心的FireEye Managed Denfense安全產品.
入侵檢測系統(Intrusion Detection System,IDS)與威脅狩獵在原理上有很高的相似性,是判斷網絡狀態的一種常見網絡安全技術,兩者都能以機器學習算法作為核心,快速有效的辨識樣本數據類型,檢測入侵行為.在我國網絡安全等級2.0保護標準中將入侵檢測定為等級保護三級并作為強制選項[2].
在對入侵檢測問題的研究中,Nasrin Sultana等人基于軟件定義網絡(SDN,Software Defined Network),利用機器學習方法實現基于網絡的入侵檢測技術(NIDS,Network-based Intrusion Detection System)[3].Moayad Aloqaily等人采用深度信念(deep belief)和決策樹方法構建了針對智能汽車云服務的入侵檢測系統[4].Majjed Al-Qatf等人提出STL(self-taught learning)學習方法進行特征學習和降維,有效提高了SVM算法的精度[5].
XGBoost以CART樹為基礎,檢測效率高,關注于樣本殘差,不會高度依賴于數據集,可自定義損失函數且引入了對模型復雜度的懲罰項,能降低噪聲干擾并限制模型復雜度,是一種高效的機器學習算法.
目前數據集的簡化方法關注降低樣本特征數量.其中一部分以主成分分析(Principal Component Analysis,PCA)為代表,對數據集進行降維來降低樣本特征數量,同時能去除數據噪聲.但這一類方法無法對處理后樣本特征的意義進行解釋,阻礙了對入侵行為本質特征的進一步研究.另一部分方法,如計算信息熵判定特征復雜程度或遍歷特征組合來選定特征子集,都不能針對某一種選定算法選擇重要特征.
綜上所述,本文使用密西西比州立大學SCADA實驗室的能源系統攻擊數據集作為主要研究對象[6],采用交叉驗證對比多種機器學習算法,重點使用XGBoost算法進行研究,并在此基礎上提出一種針對選定算法的改進包裹式特征選擇方法簡化數據集,提高入侵檢測效率并表現各特征在選定算法中的重要性.該方法在遼河油田油氣集輸公司的工業控制網絡中進行了應用,有效阻止了外部網絡的入侵行為.
對工業控制系統的攻擊主要針對上位機、工業控制器和工業控制網絡,再間接對工業生產設備乃至生產整體造成影響.上位機是人機交互的接口,其中的工業組態軟件承擔著監控現場狀態的任務,包含豐富的現場生產信息,成為了入侵的首選目標.在工業環境逐漸開放的當下,上位機失去了物理隔絕的天然屏障,面臨著IT系統中竊聽、拒絕服務攻擊(DOS)等常見安全問題,同時也暴露出組態軟件的安全漏洞和工業通信協議的脆弱性等工業控制系統中獨有的安全問題[7].
工業控制器的種類繁多,承載的工業通信協議也不盡相同,多數工業通信協議在設計之初并未考慮到在開放環境下的安全性問題.例如,MODBUS作為早期工業通信協議,缺乏加密和授權,地址和命令等信息完全以明文傳輸,能輕易被解析.S7COMM作為西門子公司私有協議,雖然格式未公開,但出現過針對S7協議的CPU終止攻擊、口令破解等情況[8].工業通信協議作為傳遞信息的工具,一旦被黑客利用,能達到惡意操縱現場設備,篡改關鍵數據等目的,對工業生產構成了嚴重威脅.
工業控制網絡是工業控制系統的重要組成部分,以現場總線或工業以太網等作為通信介質,以具有通信能力的控制器、傳感器、執行器、測控儀表作為網絡節點,采取開放式、數字化、多節點通信的方式完成工業測量或控制的一種特殊網絡[9].隨著國家對工業互聯網建設的大力推進,工業控制網絡安全的重要性逐漸凸顯.
數據作為工業生產中的核心生產要素,涉及企業和生產安全,是信息時代的重要資源.攻守雙方都能從工業控制網絡的通信數據中獲取信息,優化行動策略.入侵檢測對通信數據進行篩選判斷,能有效檢測入侵行為,但面對工業控制網絡實時性和穩定性要求,以及安全漏洞和攻擊手段的與日俱增,傳統入侵檢測方法逐漸不能滿足實時更新和應對未知攻擊的安全需求.因此,通過利用機器學習算法的自學習能力和泛化能力提高檢測準確率,降低誤報率十分必要.同時,當前工業控制網絡的數據量逐漸增大,給入侵檢測的數據分析帶來了極大負擔,通過特征選擇方法選擇數據重要特征,能進一步提高入侵檢測效率[10-11].
利用機器學習來解決入侵檢測問題,本質上要解決的是一個多分類問題.本文提出一種改進包裹式特征選擇方法,需要在選定分類算法后,根據在不同特征子集條件下算法模型的結果,提取重要特征.
3.1.1 支持向量機
支持向量機通過控制經驗風險和置信范圍值來控制泛化能力,以訓練過程出現的誤差調整模型,將置信范圍最小化作為優化目標.
為了處理樣本線性不可分問題,支持向量機算法引入了核函數技術,用樣本在原始空間中的計算結果來替代樣本映射到特征空間后的內積,解決了樣本映射后內積計算困難的問題.研究過程中使用高斯核函數[12]:
(1)
其中xa,xb是需要計算內積的樣本變量,δ為高斯核函數帶寬,控制局部作用范圍.
3.1.2 K近鄰算法
K近鄰算法對數據集的依賴程度高,算法原理是根據數據集內已有樣本點,計算得出待分類樣本x最近的K個樣本,根據多數樣本的類別確定樣本x的類別[13].
3.1.3 AdaBoost算法(Adaptive Boosting,自適應增強算法)
AdaBoost算法在每輪訓練時生成基分類器并調整樣本權重,讓后續基分類器將重點集中在錯分樣本上,最終將基分類器加權組合形成最終的強分類器[14].
3.1.4 隨機森林
隨機森林以決策樹作為基分類器,在樹節點分裂時隨機選擇樣本特征子集,以最優特征劃分,最終根據多個基分類器結果共同決定樣本分類,相對于傳統決策樹,隨機森林提高了泛化能力[15].
3.1.5 XGBoost(Extreme Gradient Boosting,極限梯度提升算法)
XGBoost算法是基于GBDT(Gradient Boost Decision Tree,梯度提升決策樹)算法的一種串行集成算法[16],相對于AdaBoost算法,XGBoost算法關注于降低每一次迭代的殘差,可表示為:
(2)

在算法實現過程中,以降低殘差為目的訓練樹的結構和結點分裂規則,最終將樣本分類至葉節點,再通過累加葉節點分數獲得最終評分,確保算法不會因樣本的某些極端特征數據導致學習誤差.XGBoost算法允許自定義損失函數,增強了泛化能力.XGBoost算法的目標函數可整理為:
(3)

(4)
γ表示葉結點懲罰系數,λ表示L2正則化系數,增大兩者會讓算法在訓練過程中傾向于更簡單的模型.T表示葉結點總數,w表示樹的葉結點得分向量.
為了提高檢測效率,提取重要特征,在得出最優算法的基礎上,提出一種改進包裹式特征選擇方法[17],執行過程與算法過程分離,在選擇特征子集后,以在此特征子集下的模型運算結果評價特征子集優劣.對包裹式特征選擇的改進體現在以下兩點:
1)累計特征得分的后向(backward)子集搜索(subset search).
改進的包裹式特征選擇方法基于后向子集搜索.假設樣本特征總數為M,特征子集選用的特征數量為N(N≤M),先在N=M的情況下(使用樣本所有特征)得到選定模型的準確率,以此作為基準值.然后,逐步降低N值,并設定N最小值限制(組成特征子集的特征數量最小值).此時,從所有特征中隨機取N個特征組成特征子集,可能的組合數量為:
(5)
特征子集放入模型得出對應準確率,如果準確率大于或等于基準準確率,則將參與的特征得分加一;小于則不做任何處理,繼續運行.設置N個特征下的最大循環次數和最大采樣數,防止算法過度關注某些特定的特征組合.
2)根據特征得分和準確率增長值組合特征并驗證.
以特征得分由高到低順序取特征組成特征子集并放入模型中驗證性能,特征數目從1開始,每經一次驗證組成子集的特征數量加1,記錄得出的對應準確率.
根據不同特征子集下的模型準確率計算按特征得分依次增加每個特征時的準確率增長值,再以增長值為依據重復特征子集驗證過程,比較在不同特征子集下的選定算法模型性能,表現各特征重要性.
算法過程以偽代碼形式描述為:
算法1.針對特定算法的改進包裹式特征選擇方法:
輸入:原始數據集,算法模型,特征子集最小特征數P1,最大循環次數P2,最大采樣數P3.
輸出:得分編號序列S1,增長值編號序列S2.
1.以原數據集為對象,得出模型準確率為ACC,設原數據集特征數為M,令N=M-1,i=0,j=0,n=1,所有特征初始得分為0.
2.WhileN≥P1:
3. While(i≤P2)and(j≤P3):
4. (N值較大時采用遍歷)隨機取其中N個特征,得出模型準確率ACC′
5. If(ACC′≥ACC):
6. 參與本次過程的特征得分加1,j=j+1
7. Else:
8. Continue
9.i=i+1,End While
10.End While
11.特征編號按得分從大到小排序,得分相同時,按在原數據集中順序排序,得到得分編號序列S1
12.按序列S1中編號取對應的前n個特征組成特征子集,計算在此特征子集下的模型準確率并記錄,n=n+1,循環該過程,直至n=M
13.根據上一步不同特征子集下的模型準確率計算增加每個特征時的準確率增長值,按增長值排序特征編號,得到增長值編號序列S2.
所得S1、S2序列,即為針對選定算法,分別根據得分和準確率增長值,按特征重要性排序的特征編號序列.
使用windows10,i7-8700,16GB內存系統下的Weka軟件,python3.6編程語言,sklearn模塊,XGBoost模塊和相關常用模塊進行研究,使用python下的matplotlib模塊作圖.
以密西西比州立大學SCADA實驗室的能源系統攻擊數據集作為主要研究對象.通過采集實驗室規模天然氣管道控制系統的通信數據,由專家整理后形成此數據集.數據集樣本共分為8類,包括標簽為“0”的正常通信數據樣本和另外7種攻擊數據樣本,每個樣本除標簽外共有26個特征,在整理過程中非數值特征在數值化和熱編碼處理后,特征全部以數值形式存在,樣本基本信息如表1所示.

表1 能源系統攻擊數據集樣本情況Table 1 Samples of energy system attack data sets
原始數據集以arff文件格式存儲,為方便處理需要用Weka軟件轉換為csv格式.對除標簽外的特征進行歸一化處理:
(6)
得到可直接用于算法模型的數據,其中x表示需處理的樣本特征值,xmin、xmax表示該特征的最小值和最大值,x*為歸一化后樣本特征值.
該數據集囊括了工業控制領域中常見的攻擊類型,樣本特征也從控制系統的通信協議和硬件設備出發,包含指令的發出地址、響應地址、指令類型、設備的控制模式、設定值、測量值等工業控制系統中的常見信息,是在同類工業控制領域中具有普遍性的工業入侵檢測數據集.
4.2.1 驗證方法
采用10折交叉驗證方法對各模型性能進行檢驗,該方法可以更客觀的評價模型對數據集整體的性能.
4.2.2 評價標準
以準確率(Accuracy,ACC)、靈敏度(Sensitive)、F值(F-Measure)、漏警率(Missing Alarm,MA)和虛警率(False Alarm,FA)評價結果.模型的輸出有四種分類:真正類(True Positive,TP)和真負類(True Negative,TN),分別表示被正確分類的正常樣本和異常樣本.假正類(False Positive,FP)和假負類(False Negative,FN),分別表示正常樣本被錯分為異常樣本和異常樣本被錯分為正常樣本.可將準確率(Accuracy,ACC)描述為:
(7)
在研究中,為評價模型整體性能,消除樣本不平衡對模型造成的影響,引入F值(F-Measure)進行評價:
(8)
α是調整參數,實驗中選取α=1,此時有F1評價標準:
(9)
F1評價標準可以對模型進行綜合評價,值越高說明模型性能越好,其中R是召回率(Recall),P是精確率(Precision):
(10)
(11)
對應兩者,有漏警率(Missing Alarm,MA)和虛警率(False Alarm,FA):
(12)
(13)
在實際工業生產中,對異常行為重點關注,即漏警率和虛警率越低越好.為檢驗對異常樣本的識別能力,引入靈敏度(Sensitive)概念,計算公式形式與召回率公式相同,但將需檢測的一類樣本看作正常樣本,其他類看作異常樣本進行計算.
4.3.1 算法實驗結果對比分析
將能源系統攻擊數據集作為研究對象,采用10折交叉驗證,以XGBoost算法為例,交代對樣本數據的辨別過程.
首先,在對原始數據集進行預處理后,保證比例不變將數據集分為10份,完成10折交叉驗證準備工作.
然后,按10折交叉驗證規則,采用XGBoost算法進行訓練和測試.在XGBoost算法的訓練過程中,訓練樣本在每次進入模型后計算在預設數目CART樹計算后的樣本殘差,循環這個過程,直至殘差小于預設值或在規定預設輪數內殘差不再下降,停止訓練并用測試集對模型進行測試,輸出評價結果,繼續下一輪交叉驗證.
最后,在得出10折交叉驗證的10輪結果后,計算各評價標準的平均值,得出結果如表2、表3所示.

表2 各算法對不同類型樣本的靈敏度和準確率Table 2 Sensitive and accuracy of each algorithm to differenttypes of samples

表3 各算法的漏警率、虛警率、F1值Table 3 Missing alarm,false alarm and F1 of each algorithm
從表2可以看出,XGBoost算法對各類的靈敏度最平穩,有相對最高的準確率,且在其他算法對NMRI(簡單惡意響應注入)類型攻擊靈敏度較低情況下,仍擁有對該類攻擊較高的靈敏度.根據密西西比州立大學SCADA實驗室對數據集的研究報告可知,NMRI類型的攻擊對特征Measurement(測量值)的影響最為明顯,有可能會使此特征數值遠高于或遠低于正常數值.XGBoost算法因其良好的泛化性,能有效學習到NMRI類型樣本中的極端特征規律.SVM算法和KNN算法因其特點無法對這種情況實現有效分類.AdaBoost算法從對不同類型樣本靈敏度表現上來看,很有可能陷入了過擬合.推斷隨機森林算法因為Measurement特征的上下極值差距大且劃分多,導致在此特征上產生的權值不可信,讓算法對NMRI類型攻擊出現了判斷失誤.
從表3可以看出,AdaBoost算法的過擬合情況導致了極低漏警率和極高的虛警率,除此之外,XGBoost算法的漏警率和虛警率最低,F1值最高,綜合表現最好.
從以上評價標準中可以得出結論,在以能源系統攻擊數據集作為研究對象情況下,XGBoost算法在各評價標準下表現最優,在5種機器學習算法中性能最好.
此外,使用澳大利亞數據中心采集的UNSW-NB15入侵檢數據集對以上的機器學習算法性能再次進行驗證.UNSW-NB15入侵檢數據集是由澳大利亞數據中心在2015年采集、整理而成,符合當前的網絡環境,是近年來國內外針對入侵檢測研究的首選數據集[18,19].在保證各類樣本比例的條件下,取與能源系統攻擊數據集樣本總量相近的樣本作為實驗對象,同樣采用10折交叉驗證,算法模型中的參數幾乎不變的情況下,測試結果如表4所示.

表4 各算法對UNSW NB15數據集的測試結果Table 4 Test results of each algorithm on UNSW NB15 dataset
UNSW NB15入侵檢數據集除正常樣本外還包含9類異常樣本,且樣本特征除“所屬類別”外還有41種特征,復雜程度高于能源系統攻擊數據集.因為樣本的復雜程度增大,在采用相同數量的樣本時,各算法模型對樣本的學習未能達到最佳狀態,但從結果可以看出,此時XGBoost算法的性能依舊優于另外4種算法.
綜上所述,在以上的實驗中XGBoost算法的表現優于另外幾種算法,作為實驗對象的數據集也在自身領域具有普遍性.因此,選擇XGBoost算法作為后續研究對象.
4.3.2 特征選擇結果
繼續以能源系統攻擊數據集作為實驗對象,在XGBoost算法的基礎上采用提出的包裹式特征選擇方法得到對應的序列S1、S2.特征編號以原數據集特征順序,從0開始至25共26個特征,按S1中特征編號順序添加特征組成特征子集,S1序列為:[0,6,8,10,18,21,24,2,4,11,3,23,9,5,14,20,1,12,16,13,15,19,22,25,17,7],特征子集的特征數量及對應模型準確率如圖1所示.

圖1 根據特征得分添加特征的運算結果Fig.1 Result of adding features based on feature scores
對S2進行相同處理,S2序列為:[0,24,18,3,8,20,6,10,2,21,22,25,11,1,13,15,16,23,9,5,14,19,7,4,17,12],結果如圖2所示.
圖1、圖2中實線為按S1、S2順序增加至橫坐標對應數量特征時的準確率曲線,虛線為使用全部特征時的準確率,兩圖中實線最終都收斂于稍高于虛線的值,但與虛線值相差不大(0.05%左右).

圖2 根據增長值添加特征運算結果Fig.2 Result of adding features based on the growth value
由圖1和圖2對比可知,圖2曲線收斂快于圖1,在特征數量為8時與虛線值幾乎相同.可以看出對于XGBoost算法模型,使用S2序列的前8個特征,即采用對應編號為0,24,18,3,8,20,6,10的特征組成特征子集就能達到接近全集的效果,準確率單調遞增且增長值依次遞減,可認為在此數據集使用XGBoost算法的情況下,這8個特征最為重要,可以替代樣本中的其他特征信息完成入侵檢測任務,減少了算法需要處理的數據總量,提高了入侵檢測效率.
在數據集中,這8個特征按S2序列順序依次代表:0—指令發出地址,24—測量值,18—設定值,3—響應寄存器地址,8—響應方讀取指令函數編號,20—表示系統是由“泵”控制,還是由“螺絲管”控制的編號,6—請求方讀取指令函數編號,10—通信協議指令函數編號.這8個特征都是工業控制系統中的常見數據信息,在整理后成為有價值的數據集,方便研究者總結入侵行為的規律,并在類似的工業系統中關注這些特征.
在密西西比州立大學SCADA實驗室對數據集的分析報告中,總結了與特定異常類型有強關聯性的10個特征,這10個特征就包括了提取的8個特征中除編號3外的7個特征,側面證明了與XGBoost算法結合的包裹式特征選擇方法在總結特征重要性的問題上是有效的,這種方法篩選了重要特征,提高了入侵檢測算法效率,為研究入侵行為數據規律提供了參考.
運用XGBoost算法并結合包裹式特征選擇方法的入侵檢測在遼河油田油氣集輸公司的工業控制網絡中進行了應用.該公司的控制網絡曾遭受外部網絡的惡意滲透,對PLC進行了未授權的讀寫操作.
在對現場的網絡機柜和外部網絡間安裝工業防火墻(見圖3)并裝載入侵檢測算法后,截獲了由外部網絡發出的非法命令,有效避免了企業信息的泄露和對工業設備的非法操作.

圖3 現場工業防火墻Fig.3 Industrial firewalls on site
針對工業控制網絡的入侵檢測問題,主要采用在同類工業控制領域中具有普遍性的能源系統攻擊數據集作為研究對象,引入多種機器學習算法對比驗證,得出綜合性能最優的XGBoost算法解決入侵檢測問題.在此基礎上,通過包裹式特征選擇方法提取對XGBoost算法重要的特征,提高入侵檢測效率的同時,也為總結攻擊行為的規律提供了研究方向,在同類數據集中具有推廣和應用價值.今后工作中,將分析工業控制網絡異常行為的規律、總結共性問題作為研究重點.