周 帥,王紹杰
(華北計算機系統工程研究所,北京100083)
隨著我國對工業化與信息化深度結合的推進,新技術越來越廣泛地應用到傳統工業與制造業上,網絡空間作為人類活動的第五維空間,成為一個不同于陸、海、空、天的新的安全疆域。云計算、物聯網將原先相對封閉的工業系統暴露在互聯網中,由于重視不到位,相關防護措施不足,工控系統的網絡安全事件日益增多,我國工控行業所面臨的安全問題也日趨復雜,工控系統成為黑客攻擊的目標,工控安全研究刻不容緩[1-2]。工控協議研究是工控安全的重要部分,工控協議由于歷史原因,存在大量的未知私有協議,由于沒有統一的標準,需要進行協議逆向工作進行協議的分析,而目前的協議逆向技術主要是針對一般網絡協議的逆向,對工控網絡協議的逆向分析較少,已有的針對工控協議的逆向分析中,報文分類方法也僅僅以長度或字符頻率當作特征進行分析,存在很大誤差[3]。針對以上問題,本文提出了一種基于自然語言處理的協議特征提取方法,將報文中的N-gram片段的概率作為關鍵詞,將每一條報文的關鍵詞作為特征,進行聚類分析,經過實驗驗證,本文提出的方法能夠很好地將協議根據功能進行分類。
協議逆向工程[4](Protocol Reverse Engineering)是指不依賴協議描述的情況下,通過對協議實體的網絡輸入輸出、系統行為和指令執行流程進行監控和分析,提取協議、語義和同步信息的過程。通過多年的相關研究,目前協議逆向領域分為兩個研究方向,一個是基于網絡流量的協議逆向分析,一個是基于指令執行的協議逆向分析。基于網絡流量的協議逆向分析[5],是根據同種報文中各個字段取值和轉變規律來提取其格式的方法,由于相同類型的報文格式上存在相同點,通過將類似的報文提取出來放在一起,進行比較推斷,從而逆向出可能的協議格式。基于指令執行的逆向分析[6],主要是通過跟蹤程序執行過程,掌握分析處理字段的方法,從而了解字段的具體信息。
工控協議的逆向研究與通用的網絡協議逆向研究存在許多不同,由于工控協議存在自己的特點,因此直接套用現有網絡協議的逆向算法效果并不好,需要結合工控協議本身的特點,研究適合工控協議的協議逆向方法。
工控協議是應用在工控系統中各個部分之間通信的規則,主要的工控網絡協議按照應用場景的分類如圖1所示。

圖1 工控協議分類
工控協議根據應用層次一般可分為傳統控制網絡、現場控制網絡、工業以太網、工業無線網四種類型,不同類型的工控協議擁有不同的特征。
傳統控制網絡:傳統控制網絡一般包括DCS、CCS等,是將一些探測設備部署在網絡終端,使用標準的工控協議進行信息傳輸,現場設備之間可以相互通信,合力完成對現場設備控制。其通信協議一般是由廠家自己開發的,不對外公開。
現場控制網絡:現場控制網絡(FCS)是用于過程自動化和制造自動化的現場設備或現場儀表互連的現場通信網絡。FCS并沒有使用傳統控制網絡的控制站,將其控制功能分布在現場各個儀表設備中,實現控制功能的分散化,現場總線采用相對一致的協議標準,并沒有限制其接入網絡類型,可實現多種場景的網絡連接,兼容多種類型不同開發商的產品,通過一個網絡可以將所有這些相互孤立的設備凝聚成為一個整體。
工業以太網:工業以太網與以太網網絡框架相似,在底層兩層,應用802.3標準;網絡層與傳輸層,應用TCP/IP協議;最高層取消了會話與表示兩層,僅保留應用層。相對于其他的網絡類型,工業以太網首先有相對統一的總線標準,提供較寬的通信通道,并且擁有更好的集成性,應用層協議嵌入到TCP/IP幀中。
工業無線網絡[7]:工業無線網絡是伴隨著無線技術飛速發展而出現的新的研究方向,工業無線網的協議,例如ZigBee,HART,SP100等,其關注的核心問題是實時性、可靠性、安全性。
工控協議是工控系統通信的語言,工控系統的設備數量、產品種類、供應廠商、行業標準都相當多,工控協議也存在區別。工控系統要求高實時性、高可靠性和高可用性,其中可用性的優先級最高[8],工控協議服務于工控系統,為保證其安全穩定運行,工控協議要有相應的針對性設計,所以工控協議相對網絡協議有著自己獨特的特征。
工控協議一般有如下特點:(1)由于工控系統的相對封閉,并且對系統的可用性、實時性、可控性要求較高,工控協議很大部分使用明文傳輸,并沒有加密,使得使用基于網絡流量的協議逆向方法具有一定的優勢;(2)信息傳輸中,主要以二進制的傳輸形式為主,工控私有協議逆向主要以二進制協議研究為主;(3)工控系統的信息傳輸有周期性,協議中交互信息、控制信息都會周期性地出現,并且相同功能的報文,其格式、長度都存在相似性;(4)數據包有相對固定的結構,例如在內容上,一般有明確的發送者和接收者,含有時間戳、校驗碼以及報文長度字段。
對于工控私有協議的逆向分析,由于工控系統的特殊性,基于指令執行軌跡的協議逆向方法一般難以施行,基于網絡流量的協議逆向方法是相對更好的選擇[9]。在需要分析的系統中,通過一些收集方法獲取網絡報文,對報文進行處理。結合自然語言處理的算法,將報文類比為語料進行處理,并將每一行報文按照自然語言處理的方法進行分詞、關鍵詞提取,最后進行報文聚類分析,其流程如圖2所示。

圖2 報文分類流程
通過將設備接入待分析系統中,捕捉設備通信流量,由于系統中可能存在多種流量,截取需要的流量需要一些措施,可以通過篩選IP地址、篩選端口將含有需要協議數據的流量分離出來。工控協議數據在不同應用場合,形式不相同,例如現場總線一般僅有物理層、數據鏈路層和應用層,而工業以太網一般基于TCP/IP協議[10],在OSI協議模型中一般在傳輸層以上。工業以太網的數據包從上到下進行封裝,不同的協議又有不同的封裝方法,例如Modbus是一種應用層協議,在應用層以下都依托于TCP/IP協議進行傳輸,而S7協議也是TCP/IP協議簇的一員,在OSI對應的7層協議模型中取消了會話層與表示層,將應用層的數據經過S7協議自定義的COTP協議與TPKT協議進行處理,最后利用TCP進行傳輸。Wireshark工具可以將協議數據進行分層展示,主要是依靠協議不同層之間不同的承接方式,例如對于鏈路層,在首部有固定的幀結構表示幀內數據,IP協議的首部也有確定的幾位來確定其上層的協議類型。應用層協議一般依靠端口號識別,如果是私有協議,則不能識別,直接標記為data字段,所以對于協議的分析,若是已知協議則提取協議相關字段,若為未知的私有工控協議,則需要提取data字段來進行字段提取。
提取出的data數據保存為txt格式,對協議格式劃分中的協議關鍵詞提取可以聯系自然語言處理中的文本關鍵詞進行,關鍵詞提取算法的實現首先需要對文本進行分詞,由于本文的處理對象是私有的工控協議,協議內容無法進行提前標注,方法上主要選擇無監督的方法進行研究。
N-gram語言模型[11]是一種在NLP領域廣泛使用的統計語言模型,廣泛應用到分詞算法、語音識別、輸入法等各個方面,本文將利用N-gram算法對數據進行分詞處理,產生關鍵詞提取的語料。將每一行報文作為一個文本,使用N-gram算法進行切分。N-gram算法的關鍵在于N的選取,不同的N值,對算法效率影響較大,如果N選取過大,會使切分產生的結果數目過于龐大,如果N選取過小,會使關鍵詞被切分開,影響準確率。N值的選取需要結合工控協議的特點進行研究。
通過對一些常見的工控協議包進行觀察,發現工控協議的關鍵詞一般在1~2 B[12],所以對于N-gram算法,選取N為1~2,對數據內容進行切分。
在工控協議的關鍵詞提取過程中,將每一行報文當做一個文檔,將每一個N-gram元素當做一個詞,協議的關鍵詞便是一系列N-gram概率的集合,這部分輸出將會作為聚類的依據。
依照LDA主題模型[13]提取工控協議關鍵詞的步驟如下:首先利用Dirichlet分布,產生協議的關鍵詞的N-gram元素分布;然后利用Dirichlet分布得到每一行報文的關鍵詞分布。其中兩次使用Dirichlet分布需要先確定兩個參數α與β,由于Dirichlet分布是一種基于貝葉斯框架的分布,這兩個參數便是先驗參數。也就是說一共有m條報文,協議的關鍵詞的N-gram元素分布便是由確定一個先驗參數α的Dirichlet分布采樣所得到的,每一行報文的關鍵詞分布由第二個先驗參數β的Dirichlet分布采樣所得。
在應用LDA主題模型進行關鍵詞提取時,輸入應該是N-gram分詞結果,設置主題數與迭代次數,兩個超參數使用默認值,進行訓練,并通過調節困惑度的值來選擇合適的主題數。由于目標是進行按功能協議聚類,因此對應LDA主題模型在自然語言處理中的對于每篇文章的主題輸出,選擇每行報文的關鍵詞概率輸出作為結果,這樣每行報文針對不同的關鍵詞概率,代表著不同功能的報文,作為聚類的依據,實現最終的報文聚類。
本文想得到的是可以作為工控協議的關鍵詞的部分,通過將報文輸入,輸出報文的關鍵詞概率矩陣,作為下一步報文聚類的輸入數據,需要的參數主要有三個,第一個是關鍵詞個數,后兩個是先驗分布的參數α與β。參數的選擇需要一個衡量指標,這里選擇困惑度作為衡量參數優劣的指標。
困惑度的概念來自于信息論,一般用來評價一個概率分布模型或者概率模型的質量,越低的困惑度,表示模型的質量越高,預測效果越好。對于工控協議,將所得到的模型對一條報文的關鍵詞進行預測,這個關鍵詞的不確定程度便是困惑度。其計算如式(1):

其中N為所有單詞的長度和,p(w)代表N-gram元素的頻率。
網絡中捕獲的通信協議一般包括多個種類,根據實現的功能不同,它們有著不同的結構,例如S7協議的請求報文僅包含Header和Parameter部分,而功能相關報文則除了這兩部分還有Data數據段。由于結構不同,在協議逆向中,需要把不同功能的報文區分出來,這就需要聚類操作。
經過LDA主題模型的關鍵詞提取后,會得到兩個概率分布,對于報文相關功能的聚類,需要使用與報文相關的關鍵詞作為特征,選擇LDA主題提取模型生成的文檔-主題矩陣,也就是協議報文,與報文對應關鍵詞概率矩陣作為特征,進行聚類。這里選用的聚類方法為DBSCAN。
DBSCAN聚類算法是一種基于密度的聚類算法,也就是根據樣本數據分布的緊密程度來進行區分,將分布集中的視為一個簇,分為一個類。DBSCAN的特點是不需要事先確定類別數,對于私有工控協議,網絡抓包是隨機的,并不能確定其中含有的不同功能的報文有多少種,而且DBSCAN對報文聚類的形狀沒有要求。
輪廓系數[14]是用來評價聚類好壞的一種評價方式,其取值一般在(-1,1)之間,值越大表示聚類效果越好,小于0一般表示樣本被錯誤分類,0附近表示邊界有重疊,而大于0表示同一類中的樣本更加相似。
對于輪廓系數的計算,每一個樣本各自計算其值,首先隨機選擇一個向量,計算其到同一分類樣本的區別程度的均值,表示簇間的集中程度,再計算其到其他分類樣本間的區別程度的最小值,表示不同簇間的區別度,則此樣本輪廓系數的計算如式(2)所示:

對于整個樣本空間,求所有樣本點輪廓系數的均值作為樣本空間的輪廓系數,從而判定聚類的好壞。
應用歐姆龍CJ2M-CPU31系列PLC與上位機工程師站之間通信數據作為實驗需要的初始數據,工程師站為Windows 7系統,在交換機配置鏡像口,使用設備接入鏡像口進行監聽網絡流量,監聽設備為Windows 7計算機,使用軟件為Wireshark,圖3為通信數據監聽示意圖。

圖3 通信數據監聽示意圖
由于獲取到的數據都是靜態的,基于網絡流量的分析也是基于一些靜態特征進行的,對于樣本中數據的出錯、分片是無法處理的,因此實驗中并不考慮樣本中分片、出錯等情況。使用Wireshark將數據保存為pcap文件格式進行后續分析,對私有工控協議的逆向,選用已知的協議,全程選擇無監督的方法,最后與已知的協議規范進行對比,實現未知協議的協議逆向的驗證。
pcap文件是一種保存數據報的文件格式,其中的數據報文按特定的格式儲存,提取出的報文需要對pcap文件進行解析。
得到pcap文件,需要對其進行解析。pcap文件格式是規范的,根據其文件格式將相關報文提取出來,Wireshark工具提供了Tshark命令行工具,可以將pcap文件中特定的協議字段提取出來。實驗需要的是data部分的字段,使用Tshark將其直接輸出為txt文本形式,部分提取結果如圖4所示。

圖4 歐姆龍協議data字段
將提取出的data字段利用N-gram算法進行分詞,設置N=(1,2),結果如圖5所示。

圖5 報文分詞結果
在應用LDA主題模型進行關鍵詞提取時,輸入應該是N-gram分詞結果,設置主題數與迭代次數,兩個超參數使用默認值,進行訓練。通過困惑度的值來選擇合適的主題數,困惑度值用來衡量LDA主題模型,其值越小,表示效果越好。使用不同的主題數,設置迭代次數為2 000進行實驗,最后可得折線圖如圖6所示。
圖6中,在主題數為3時困惑度取到了最小值。主題數取3則代表所有序列中能有三種關鍵詞,每個關鍵詞為一組N-gram序列,每行報文可以被這三個關鍵詞標記。

圖6 主題數與困惑度折線圖
LDA主題模型提取主題詞后,每一行報文都被關鍵詞的概率標記,由于關鍵詞代表了每行報文N-gram元素的重要程度,因此其可以作為這行報文的特征,根據關鍵詞進行報文聚類,可以將不同功能的報文進行分類。DBSCAN聚類有三個參數可以進行設置,第一個是聚類半徑r,第二個是鄰域密度MinPts,第三個是距離函數,這里距離函數選用默認的歐氏距離。使用輪廓系數進行聚類評估,通過輪廓系數的值來進行調參,由于輸入向量為高維向量,因此使用PCA降維算法,將其降為2維,通過調參,最終實驗結果為:領域半徑r=0.087 5,領域密度MinPts=3,其輪廓系數為0.788 4。圖7為聚類結果。

圖7 DBSCAN聚類結果
由圖7可知所有報文可以被聚類為4類,代表4種不同功能的報文。
本文通過對協議逆向技術的研究,結合工控系統的實際情況,選用基于網絡流量的協議逆向方法,通過對歐姆龍PLC上的協議進行分析,設計了一套協議逆向算法,并將實驗結果對應原協議規范進行了對比驗證,實驗證明,本文提出的方法能很好地進行報文按照功能分類。
本文基于網絡流量進行分析,實驗效果受樣本完整性和樣本多樣性的影響較大,在更加復雜的網絡環境中,可能分類效果會受影響。下一步工作首先需要對樣本的采集和處理方法進行研究,其次本文提出方法涉及的參數較多,參數調整帶來的模型變化需要進行驗證。在協議逆向的整體流程[15]中需要進一步進行協議格式推斷以及狀態機推斷的研究,實現對私有工控協議有效且完整的逆向工作。