連曉偉,馬 垚,陳永樂,張壯壯,王建華
(太原理工大學信息與計算機學院,太原 030024)
工業控制系統廣泛應用于油氣管道、供水系統、電網與核電站等關鍵基礎設施[1]。隨著工業信息化的快速發展,工業控制系統與外部互聯網的連接更加頻繁,使得大量工控設備接入到互聯網中,因此在工控領域出現愈來愈多的網絡攻擊,對工控系統造成嚴重威脅[2-3]。由于Shodan 搜索引擎可對網絡攻擊引起的威脅進行有效識別以及索引面向互聯網的工控系統組件,因此受到研究人員的廣泛關注[4]。
2009 年,程序員約翰·馬瑟利提出Shodan 搜索引擎,它是全球第一個對全網設備進行掃描的搜索引擎,且帶有圖形用戶界面,可有效識別面向互聯網的設備。與傳統搜索引擎不同,Shodan 可以識別具有可路由IP 地址的設備,包括計算機、網絡打印機、網絡攝像頭以及工業控制設備等[5]。Shodan 每周7 天、每天24 小時都在運行,且每月可收集大約5 億臺聯網設備的信息[6],它將收集到的設備信息存儲于一個可搜索的數據庫中,該數據庫可通過Web 接口或Shodan API 進行訪問。用戶可以使用一系列過濾器查詢Shodan 數據庫,這些過濾器主要包括國家名、主機名、網絡信息、操作系統與端口等。
Shodan 搜索引擎的設計目的是搜索互聯網,并試圖識別與索引與之相連的設備,且其已識別出數萬個與工業控制系統相關的面向互聯網的設備。然而,識別工控相關設備的能力引起了重大的安全問題,美國國土安全部發布一份關于Shodan 的報告,該報告詳細說明了工業控制設備暴露在互聯網中存在的風險[7]。文獻[8]認為Shodan 是互聯網中最強勁的搜索引擎。事實上,Shodan 為攻擊者提供一個強大的偵察工具,攻擊者通過Shodan 可以便捷地發現暴露在互聯網上的工業控制設備以及與該設備相關的IP 地址,以及開放的服務與存在的漏洞等信息,進而通過這些信息發動攻擊,從而對工控系統造成嚴重破壞[9]。
針對Shodan 的不安全性,本文采用蜜罐技術對Shodan 掃描流量進行深入研究。利用蜜罐模擬工控設備將蜜罐部署到互聯網中,并通過開放相關端口吸引攻擊者的攻擊,從而捕獲所有的攻擊數據。本文針對這些攻擊數據,構建一種將確定有限自動機(Deterministic Finite Automata,DFA)與支持向量機(Support Vector Machine,SVM)相結合的Shodan 掃描流量識別模型。該模型利用狀態機模型對掃描序列進行過濾,排除不具有Shodan 掃描序列特征的流量,再通過SVM 模型對接收的流量進行識別,從而得到最終識別結果。
互聯網流量識別方法主要分為3 種:基于端口的識別方法,深度包檢測(DPI)識別方法,基于機器學習的識別方法[10]。其中,基于端口的識別方法根據端口與網絡應用的映射關系進行流量識別。例如,FTP 服務使用21 端口,SSH 遠程登錄服務使用22端口,基于HTTP 協議的Web 服務使用80 端口。深度包檢測識別方法通過分析目標流量協議特征,提取數據包載荷中的特征碼并對流量進行識別。基于機器學習的流量識別方法通過從網絡流量中提取一系列獨立于荷載的統計特征,采用機器學習方法對統計特征進行流量識別。
基于端口號的流量識別方法并不適用于Shodan流量的識別。在深度包檢測識別中,文獻[11]基于DPI 技術設計一個分級分類器,將流量正確分類為20 多個細粒度的類,并建立階層式自學習的分類模型,該集成識別模型將傳統DPI 技術的準確性與其他技術相結合,有效改善了DPI 技術的不足。文獻[12]結合DPI 技術提出一種RocketTC 的流量分類架構,該架構對網絡流量的識別準確率達到97%。文獻[13]提出一種基于DPI 技術的流量識別方法,該方法結合軟硬件優點,采用正則匹配法實現流量的識別。在基于機器學習的流量識別中,文獻[14]提出以249 個統計特征作為流量識別的分類依據,后續研究在上述統計特征的基礎上,采用不同的機器學習算法對流量進行識別。文獻[15]提出一種新的互聯網流量識別方案,該方案基于熵的算法對每個流的前4 個包的大小進行離散化,利用KNN、SVM和樸素貝葉斯3 種分類器確定未知流的標簽。接下來,使用4 種組合器方案對3 種分類器的輸出進行組合,從而對未知流的標簽進行最后決策。文獻[16]提出可變特征空間的SVM 集成方法,為每個兩分類SVM 構建具有最優區分能力的獨立特征空間并集成為多分類器,以有效提高流量分類器的精度與召回率。文獻[17]提出一種基于距離的最近鄰優化算法,該算法能夠改善非平衡流量的分類性能。文獻[18]通過提取惡意軟件C&C 的通信特征,并對多條加密流量進行合并,使用卷積神經網絡對加密C&C 數據流進行識別。
僅基于流量統計特征的機器學習流量識別方法由于缺少應用層流量的有效特征,而導致識別效果較差。為此,本文通過對Shodan 流量進行分析,將深度包檢測技術應用到基于機器學習的流量識別方法中,并構建一種基于載荷特征與統計特征相結合的DFA-SVM 識別模型。該模型通過提取應用層協議功能碼序列,將其與流量統計特征相結合,以提高模型識別準確率,有效識別Shodan 流量。
本節主要描述基于統計特征與載荷特征相結合的DFA-SVM 識別模型的構建過程,DFA-SVM 識別模型如圖1 所示。首先,對原始流量進行預處理并完成載荷特征和統計特征的提取;其次,通過IP 反查域名檢查關聯的PTR 記錄是否屬于Shodan 的子域,標記已知樣本,并生成完整的數據集;接下來,對載荷特征中的功能碼序列進行DFA 匹配,未被接收的數據將視為非Shodan 流量;最后,對前一步實驗接收的數據進行基于統計特征的SVM 識別,完成對Shodan 流量和非Shodan 流量的分類。

圖1 DFA-SVM 識別模型Fig.1 DFA-SVM recognition model
2.1.1 確定性有限自動機
確定性有限自動機是一種能實現狀態轉移的自動機。對于給定的屬于該自動機的狀態和屬于該自動機字母表求和的字符,其都能根據事先給定的轉移函數將它們轉移到下一個狀態,通常使用五元組(Q,Σ,δ,s,F)構成的數學模型表示。其中,Q為狀態的有限集,Σ為字母表,δ為轉移函數,s為開始狀態,F為一個接受狀態集。
確定性有限自動機從起始狀態開始,每一個輸入都會使狀態機的狀態發生轉移,如果能夠從起始狀態轉移到接受狀態,則識別輸入序列。確定性有限自動機對于任何確定的輸入都只有唯一確定的轉移,且不存在空字符串的狀態轉移。
2.1.2 基于狀態機的功能碼序列匹配
基于狀態機的應用層協議功能碼序列匹配方法將一次完整的通信看作一個交互過程,對交互過程中每一個階段的狀態進行提取,分析并找出這些狀態的特征,從而建立一個該協議的串行狀態規則。下文以基于狀態機的S7comm 協議分析流程為例進行分析,其中,S7comm 協議的報文格式如圖2 所示。

圖2 S7comm 協議報文格式Fig.2 Message format of S7comm protocol
Shodan 對S7comm 協議設備的掃描流程如表1 所示。從表1 可以看出,Shodan 掃描器與被掃描設備通過3次握手建立TCP連接,再建立COTP連接和S7comm連接,接著發送2 條讀系統狀態列表數據包,用來分別請求Module Identification 和Component Identification,關閉連接后則掃描結束。

表1 Shodan 對S7comm 協議設備掃描流程Table 1 Scanning flow of S7comm protocol device by Shodan
基于狀態機的功能碼序列匹配方法是通過串行順序邏輯判斷來實現的,因此需要得到一次完整通信中各階段的數據狀態,而工控協議中的功能碼能夠表示每條數據包的功能狀態。根據工控協議規約,功能碼用于標明一個信息幀的用途,即指明數據包的功能,通常在協議數據包的某個固定字段指明。因為Shodan 掃描為機器掃描,其掃描流量序列相對固定,所以可以從流量數據中提取功能碼,并將其表示為基于狀態機的協議交互狀態[19]。對4 種工控協議分別建立與其對應的自動狀態機,通過對不同協議的數據包進行基于狀態機的功能碼序列匹配,即可區分出所捕獲的數據包是否為Shodan 流量。
2.2.1 流量統計特征提取
由于網絡流量特征中存在很多冗余特征和無關特征,而這些特征不僅會降低分類精度,還會增加分類模型的計算成本。本文根據原始數據特點,從文獻[5]提出的249 個流量統計特征中提取30 個特征作為樣本屬性特征,并利用Relief 特征選擇算法將無關或冗余特征刪除。Relief 算法是一種特征權重算法,該算法的目的是根據各個特征和類別的相關性賦予每個特征不同的權重,并將小于某個閾值的特征刪除[20]。在實驗中,將特征權重小于0.01 的特征刪除,從而得到13 個特征,這13 個特征的詳細網絡流量特征描述如表2 所示。

表2 網絡流量特征描述Table 2 Description of network traffic characteristics
2.2.2 基于SVM 的Shodan 流量識別建模
針對Shodan 流量統計特征的識別模型,其目的是設計一種對具有交互行為特征的流量數據進行分析處理的分類方法,以識別出Shodan 掃描流量。由于工控網絡數據具有高維、非線性等特點,針對流量交互特性設計的Shodan 流量識別算法需要適應工控流量的特殊性,以達到更好的識別效果。基于機器學習的SVM 是一種監督學習算法,其被廣泛應用于統計分類以及回歸分析,且分類效果較好,適用于流量識別[21]。
利用SVM 算法對Shodan 流量識別進行建模,根據提取的流量統計特征,建立識別模型的訓練集和測試集。設定模型的各項參數,并對數據集進行訓練以獲得Shodan 流量識別模型的決策函數,具體步驟為:
步驟1根據流量特征提取階段提取的特征對數據集進行處理,構建實驗訓練集和測試集。
步驟2選擇合適的核函數,并設定核函數的相關參數和懲罰系數C,其中,C是用來控制尋找最大超平面和保證數據點偏差量最小的權重,并引入拉格朗日函數,α是拉格朗日乘子向量,xi和yi是樣本點,構造并求解式(1):

步驟3通過計算得出α的最優解并計算式(2):

步驟4求解最優分類函數:

其中,b為分類超平面參數。
步驟5利用建立的分類函數在測試集上進行訓練測試,并不斷優化參數的選擇,直至達到滿意的訓練精度為止,從而建立高效的SVM 識別模型。
為收集大量的流量數據,本文開發一個分布式蜜罐系統,該系統包含6 個蜜罐,可以模擬4 種可編程邏輯控制器(Modicon(BMX P34 2020)、s7-400、奧萊斯LGR25 和ABB PM573-ETH)以及4 種工業控制協議(Modbus、S7comm、IEC 60870-5-104和BACnet-APDU)。每個蜜罐都是在Conpot[22]的基礎上開發的,所有蜜罐都可在預先定義好的響應機制支持下響應請求,并捕獲與攻擊者的所有交互。每個蜜罐集成一個開源認證發布-訂閱協議hpfeeds,并將捕獲的數據傳輸到數據中心Mongodb 數據庫中。此外,為使蜜罐更具欺騙性,實驗改變原蜜罐框架的硬編碼特征,使得Shodan 將本文蜜罐誤識別為真實的工業控制系統。
在為期3 個月的數據收集中,實驗總共收到來自145 720 個IP 的攻擊。實驗開始前,需要對數據進行預處理,僅保留有完整交互的流量,并對流量進行統計特征和功能碼序列的提取,從而獲得32 522 個樣本。原始數據集中每個屬性的取值范圍不同,為使每個屬性處于同一量綱上,本文采用線性變換將每個屬性的取值范圍映射到[-1,1]。然后,對數據進行人工標注并將數據集隨機分為訓練集和測試集2 個子集。實驗數據集的具體信息如表3 所示。

表3 實驗數據集的具體信息Table 3 Details of the experimental dataset
在基于統計特征的SVM 識別模型中,SVM 中不同參數的選擇對實驗結果有顯著影響。因此,本文在實驗開始前,利用訓練集進行測試以選擇最優實驗參數,并將最優參數用于后續實驗。
實驗利用徑向基核函數對參數進行選擇與優化,徑向基函數是某種沿徑向對稱的標量函數,通常定義為樣本到數據中心之間徑向距離的單調函數。徑向基核函數是一種比較常見的核函數,且常用的徑向基核函數可表示為:

實驗研究了懲罰系數C對實驗精度的影響,結果如圖3 所示。從圖3 可以看出,隨著懲罰系數C的增大,實驗精度呈現先增大后降低的趨勢,當C=128時,實驗精度達到最大。因此,實驗設置懲罰系數C為128。經過實驗得出,當C=128,γ=0.008 2 時,實驗結果較好。因此,將C=128,γ=0.008 2 作為后續實驗的默認參數。

圖3 懲罰系數對實驗精度的影響Fig.3 Influence of penalty coefficient on experimental accuracy
本文從網絡流量中分別提取統計特征和載荷特征,并建立相應的模型,將2 種模型相結合完成對Shodan 流量的識別。實驗對SVM 模型、DFA 模型與本文提出的SVM-DFA 模型的分類效果進行對比,分別進行10 次實驗,采取十折交叉驗證的方式將實驗數據集分為10 份,取其中1 份作為測試集,其余9 份作為訓練集,實驗結果如圖4 所示。

圖4 3 種模型的實驗精度對比Fig.4 Comparison of experimental accuracy of three models
從圖4 可以看出,基于統計特征與載荷特征相結合的DFA-SVM 識別模型在識別準確率上優于其他2 種基于單一特征的識別模型,這說明在加入功能碼序列特征后,識別模型的精度提升了約3%,達到99.38%。識別模型的精度得到明顯提升,這是由于Shodan 掃描為機器掃描,且其掃描序列是相對固定的,因此本文綜合掃描序列特征和統計特征,在使用統計特征前,利用狀態機對掃描序列進行過濾,排除不具有Shodan 掃描序列特征的流量。對于狀態機模型接受的流量中,既包含真正的Shodan 流量,也包含類似Shodan 的流量,因此采用SVM 模型對這部分流量進一步識別,得到最終識別結果。因此在加入功能碼序列特征后,對模型識別精度有很大的提升作用。
實驗進一步對KNN 模型、C4.5 模型、NB 模型與本文DFA-SVM 模型的準確率和召回率進行比較,結果如圖5 所示。從圖5 可以看出,本文DFA-SVM模型的準確率和召回率均優于其他3 種模型,說明本文提出的識別模型具有更好的分類效果。

圖5 4 種模型的準確率與召回率對比Fig.5 Comparison of accuracy and recall rate of four models
針對Shodan 掃描流量識別問題,本文構建一種基于流量統計特征與載荷特征相結合的DFA-SVM識別模型。采用提取應用層中的協議功能碼序列作為載荷特征,并將其與流量統計特征相結合對流量進行識別。實驗結果表明,與DFA、SVM 等模型相比,該模型可有效識別27 個Shodan 掃描器IP,顯著提高流量識別精度。本文詳細介紹了特征提取與模型構建部分,但對分類算法的優化還有待提高,下一步將采用梯度下降法對SVM 的時間復雜度與空間復雜度進行優化,以提高模型識別效率。