周 帥,王紹杰
(華北計算機系統(tǒng)工程研究所,北京100083)
隨著我國對工業(yè)化與信息化深度結(jié)合的推進,新技術(shù)越來越廣泛地應(yīng)用到傳統(tǒng)工業(yè)與制造業(yè)上,網(wǎng)絡(luò)空間作為人類活動的第五維空間,成為一個不同于陸、海、空、天的新的安全疆域。云計算、物聯(lián)網(wǎng)將原先相對封閉的工業(yè)系統(tǒng)暴露在互聯(lián)網(wǎng)中,由于重視不到位,相關(guān)防護措施不足,工控系統(tǒng)的網(wǎng)絡(luò)安全事件日益增多,我國工控行業(yè)所面臨的安全問題也日趨復(fù)雜,工控系統(tǒng)成為黑客攻擊的目標(biāo),工控安全研究刻不容緩[1-2]。工控協(xié)議研究是工控安全的重要部分,工控協(xié)議由于歷史原因,存在大量的未知私有協(xié)議,由于沒有統(tǒng)一的標(biāo)準(zhǔn),需要進行協(xié)議逆向工作進行協(xié)議的分析,而目前的協(xié)議逆向技術(shù)主要是針對一般網(wǎng)絡(luò)協(xié)議的逆向,對工控網(wǎng)絡(luò)協(xié)議的逆向分析較少,已有的針對工控協(xié)議的逆向分析中,報文分類方法也僅僅以長度或字符頻率當(dāng)作特征進行分析,存在很大誤差[3]。針對以上問題,本文提出了一種基于自然語言處理的協(xié)議特征提取方法,將報文中的N-gram片段的概率作為關(guān)鍵詞,將每一條報文的關(guān)鍵詞作為特征,進行聚類分析,經(jīng)過實驗驗證,本文提出的方法能夠很好地將協(xié)議根據(jù)功能進行分類。
協(xié)議逆向工程[4](Protocol Reverse Engineering)是指不依賴協(xié)議描述的情況下,通過對協(xié)議實體的網(wǎng)絡(luò)輸入輸出、系統(tǒng)行為和指令執(zhí)行流程進行監(jiān)控和分析,提取協(xié)議、語義和同步信息的過程。通過多年的相關(guān)研究,目前協(xié)議逆向領(lǐng)域分為兩個研究方向,一個是基于網(wǎng)絡(luò)流量的協(xié)議逆向分析,一個是基于指令執(zhí)行的協(xié)議逆向分析?;诰W(wǎng)絡(luò)流量的協(xié)議逆向分析[5],是根據(jù)同種報文中各個字段取值和轉(zhuǎn)變規(guī)律來提取其格式的方法,由于相同類型的報文格式上存在相同點,通過將類似的報文提取出來放在一起,進行比較推斷,從而逆向出可能的協(xié)議格式?;谥噶顖?zhí)行的逆向分析[6],主要是通過跟蹤程序執(zhí)行過程,掌握分析處理字段的方法,從而了解字段的具體信息。
工控協(xié)議的逆向研究與通用的網(wǎng)絡(luò)協(xié)議逆向研究存在許多不同,由于工控協(xié)議存在自己的特點,因此直接套用現(xiàn)有網(wǎng)絡(luò)協(xié)議的逆向算法效果并不好,需要結(jié)合工控協(xié)議本身的特點,研究適合工控協(xié)議的協(xié)議逆向方法。
工控協(xié)議是應(yīng)用在工控系統(tǒng)中各個部分之間通信的規(guī)則,主要的工控網(wǎng)絡(luò)協(xié)議按照應(yīng)用場景的分類如圖1所示。
圖1 工控協(xié)議分類
工控協(xié)議根據(jù)應(yīng)用層次一般可分為傳統(tǒng)控制網(wǎng)絡(luò)、現(xiàn)場控制網(wǎng)絡(luò)、工業(yè)以太網(wǎng)、工業(yè)無線網(wǎng)四種類型,不同類型的工控協(xié)議擁有不同的特征。
傳統(tǒng)控制網(wǎng)絡(luò):傳統(tǒng)控制網(wǎng)絡(luò)一般包括DCS、CCS等,是將一些探測設(shè)備部署在網(wǎng)絡(luò)終端,使用標(biāo)準(zhǔn)的工控協(xié)議進行信息傳輸,現(xiàn)場設(shè)備之間可以相互通信,合力完成對現(xiàn)場設(shè)備控制。其通信協(xié)議一般是由廠家自己開發(fā)的,不對外公開。
現(xiàn)場控制網(wǎng)絡(luò):現(xiàn)場控制網(wǎng)絡(luò)(FCS)是用于過程自動化和制造自動化的現(xiàn)場設(shè)備或現(xiàn)場儀表互連的現(xiàn)場通信網(wǎng)絡(luò)。FCS并沒有使用傳統(tǒng)控制網(wǎng)絡(luò)的控制站,將其控制功能分布在現(xiàn)場各個儀表設(shè)備中,實現(xiàn)控制功能的分散化,現(xiàn)場總線采用相對一致的協(xié)議標(biāo)準(zhǔn),并沒有限制其接入網(wǎng)絡(luò)類型,可實現(xiàn)多種場景的網(wǎng)絡(luò)連接,兼容多種類型不同開發(fā)商的產(chǎn)品,通過一個網(wǎng)絡(luò)可以將所有這些相互孤立的設(shè)備凝聚成為一個整體。
工業(yè)以太網(wǎng):工業(yè)以太網(wǎng)與以太網(wǎng)網(wǎng)絡(luò)框架相似,在底層兩層,應(yīng)用802.3標(biāo)準(zhǔn);網(wǎng)絡(luò)層與傳輸層,應(yīng)用TCP/IP協(xié)議;最高層取消了會話與表示兩層,僅保留應(yīng)用層。相對于其他的網(wǎng)絡(luò)類型,工業(yè)以太網(wǎng)首先有相對統(tǒng)一的總線標(biāo)準(zhǔn),提供較寬的通信通道,并且擁有更好的集成性,應(yīng)用層協(xié)議嵌入到TCP/IP幀中。
工業(yè)無線網(wǎng)絡(luò)[7]:工業(yè)無線網(wǎng)絡(luò)是伴隨著無線技術(shù)飛速發(fā)展而出現(xiàn)的新的研究方向,工業(yè)無線網(wǎng)的協(xié)議,例如ZigBee,HART,SP100等,其關(guān)注的核心問題是實時性、可靠性、安全性。
工控協(xié)議是工控系統(tǒng)通信的語言,工控系統(tǒng)的設(shè)備數(shù)量、產(chǎn)品種類、供應(yīng)廠商、行業(yè)標(biāo)準(zhǔn)都相當(dāng)多,工控協(xié)議也存在區(qū)別。工控系統(tǒng)要求高實時性、高可靠性和高可用性,其中可用性的優(yōu)先級最高[8],工控協(xié)議服務(wù)于工控系統(tǒng),為保證其安全穩(wěn)定運行,工控協(xié)議要有相應(yīng)的針對性設(shè)計,所以工控協(xié)議相對網(wǎng)絡(luò)協(xié)議有著自己獨特的特征。
工控協(xié)議一般有如下特點:(1)由于工控系統(tǒng)的相對封閉,并且對系統(tǒng)的可用性、實時性、可控性要求較高,工控協(xié)議很大部分使用明文傳輸,并沒有加密,使得使用基于網(wǎng)絡(luò)流量的協(xié)議逆向方法具有一定的優(yōu)勢;(2)信息傳輸中,主要以二進制的傳輸形式為主,工控私有協(xié)議逆向主要以二進制協(xié)議研究為主;(3)工控系統(tǒng)的信息傳輸有周期性,協(xié)議中交互信息、控制信息都會周期性地出現(xiàn),并且相同功能的報文,其格式、長度都存在相似性;(4)數(shù)據(jù)包有相對固定的結(jié)構(gòu),例如在內(nèi)容上,一般有明確的發(fā)送者和接收者,含有時間戳、校驗碼以及報文長度字段。
對于工控私有協(xié)議的逆向分析,由于工控系統(tǒng)的特殊性,基于指令執(zhí)行軌跡的協(xié)議逆向方法一般難以施行,基于網(wǎng)絡(luò)流量的協(xié)議逆向方法是相對更好的選擇[9]。在需要分析的系統(tǒng)中,通過一些收集方法獲取網(wǎng)絡(luò)報文,對報文進行處理。結(jié)合自然語言處理的算法,將報文類比為語料進行處理,并將每一行報文按照自然語言處理的方法進行分詞、關(guān)鍵詞提取,最后進行報文聚類分析,其流程如圖2所示。
圖2 報文分類流程
通過將設(shè)備接入待分析系統(tǒng)中,捕捉設(shè)備通信流量,由于系統(tǒng)中可能存在多種流量,截取需要的流量需要一些措施,可以通過篩選IP地址、篩選端口將含有需要協(xié)議數(shù)據(jù)的流量分離出來。工控協(xié)議數(shù)據(jù)在不同應(yīng)用場合,形式不相同,例如現(xiàn)場總線一般僅有物理層、數(shù)據(jù)鏈路層和應(yīng)用層,而工業(yè)以太網(wǎng)一般基于TCP/IP協(xié)議[10],在OSI協(xié)議模型中一般在傳輸層以上。工業(yè)以太網(wǎng)的數(shù)據(jù)包從上到下進行封裝,不同的協(xié)議又有不同的封裝方法,例如Modbus是一種應(yīng)用層協(xié)議,在應(yīng)用層以下都依托于TCP/IP協(xié)議進行傳輸,而S7協(xié)議也是TCP/IP協(xié)議簇的一員,在OSI對應(yīng)的7層協(xié)議模型中取消了會話層與表示層,將應(yīng)用層的數(shù)據(jù)經(jīng)過S7協(xié)議自定義的COTP協(xié)議與TPKT協(xié)議進行處理,最后利用TCP進行傳輸。Wireshark工具可以將協(xié)議數(shù)據(jù)進行分層展示,主要是依靠協(xié)議不同層之間不同的承接方式,例如對于鏈路層,在首部有固定的幀結(jié)構(gòu)表示幀內(nèi)數(shù)據(jù),IP協(xié)議的首部也有確定的幾位來確定其上層的協(xié)議類型。應(yīng)用層協(xié)議一般依靠端口號識別,如果是私有協(xié)議,則不能識別,直接標(biāo)記為data字段,所以對于協(xié)議的分析,若是已知協(xié)議則提取協(xié)議相關(guān)字段,若為未知的私有工控協(xié)議,則需要提取data字段來進行字段提取。
提取出的data數(shù)據(jù)保存為txt格式,對協(xié)議格式劃分中的協(xié)議關(guān)鍵詞提取可以聯(lián)系自然語言處理中的文本關(guān)鍵詞進行,關(guān)鍵詞提取算法的實現(xiàn)首先需要對文本進行分詞,由于本文的處理對象是私有的工控協(xié)議,協(xié)議內(nèi)容無法進行提前標(biāo)注,方法上主要選擇無監(jiān)督的方法進行研究。
N-gram語言模型[11]是一種在NLP領(lǐng)域廣泛使用的統(tǒng)計語言模型,廣泛應(yīng)用到分詞算法、語音識別、輸入法等各個方面,本文將利用N-gram算法對數(shù)據(jù)進行分詞處理,產(chǎn)生關(guān)鍵詞提取的語料。將每一行報文作為一個文本,使用N-gram算法進行切分。N-gram算法的關(guān)鍵在于N的選取,不同的N值,對算法效率影響較大,如果N選取過大,會使切分產(chǎn)生的結(jié)果數(shù)目過于龐大,如果N選取過小,會使關(guān)鍵詞被切分開,影響準(zhǔn)確率。N值的選取需要結(jié)合工控協(xié)議的特點進行研究。
通過對一些常見的工控協(xié)議包進行觀察,發(fā)現(xiàn)工控協(xié)議的關(guān)鍵詞一般在1~2 B[12],所以對于N-gram算法,選取N為1~2,對數(shù)據(jù)內(nèi)容進行切分。
在工控協(xié)議的關(guān)鍵詞提取過程中,將每一行報文當(dāng)做一個文檔,將每一個N-gram元素當(dāng)做一個詞,協(xié)議的關(guān)鍵詞便是一系列N-gram概率的集合,這部分輸出將會作為聚類的依據(jù)。
依照LDA主題模型[13]提取工控協(xié)議關(guān)鍵詞的步驟如下:首先利用Dirichlet分布,產(chǎn)生協(xié)議的關(guān)鍵詞的N-gram元素分布;然后利用Dirichlet分布得到每一行報文的關(guān)鍵詞分布。其中兩次使用Dirichlet分布需要先確定兩個參數(shù)α與β,由于Dirichlet分布是一種基于貝葉斯框架的分布,這兩個參數(shù)便是先驗參數(shù)。也就是說一共有m條報文,協(xié)議的關(guān)鍵詞的N-gram元素分布便是由確定一個先驗參數(shù)α的Dirichlet分布采樣所得到的,每一行報文的關(guān)鍵詞分布由第二個先驗參數(shù)β的Dirichlet分布采樣所得。
在應(yīng)用LDA主題模型進行關(guān)鍵詞提取時,輸入應(yīng)該是N-gram分詞結(jié)果,設(shè)置主題數(shù)與迭代次數(shù),兩個超參數(shù)使用默認(rèn)值,進行訓(xùn)練,并通過調(diào)節(jié)困惑度的值來選擇合適的主題數(shù)。由于目標(biāo)是進行按功能協(xié)議聚類,因此對應(yīng)LDA主題模型在自然語言處理中的對于每篇文章的主題輸出,選擇每行報文的關(guān)鍵詞概率輸出作為結(jié)果,這樣每行報文針對不同的關(guān)鍵詞概率,代表著不同功能的報文,作為聚類的依據(jù),實現(xiàn)最終的報文聚類。
本文想得到的是可以作為工控協(xié)議的關(guān)鍵詞的部分,通過將報文輸入,輸出報文的關(guān)鍵詞概率矩陣,作為下一步報文聚類的輸入數(shù)據(jù),需要的參數(shù)主要有三個,第一個是關(guān)鍵詞個數(shù),后兩個是先驗分布的參數(shù)α與β。參數(shù)的選擇需要一個衡量指標(biāo),這里選擇困惑度作為衡量參數(shù)優(yōu)劣的指標(biāo)。
困惑度的概念來自于信息論,一般用來評價一個概率分布模型或者概率模型的質(zhì)量,越低的困惑度,表示模型的質(zhì)量越高,預(yù)測效果越好。對于工控協(xié)議,將所得到的模型對一條報文的關(guān)鍵詞進行預(yù)測,這個關(guān)鍵詞的不確定程度便是困惑度。其計算如式(1):
其中N為所有單詞的長度和,p(w)代表N-gram元素的頻率。
網(wǎng)絡(luò)中捕獲的通信協(xié)議一般包括多個種類,根據(jù)實現(xiàn)的功能不同,它們有著不同的結(jié)構(gòu),例如S7協(xié)議的請求報文僅包含Header和Parameter部分,而功能相關(guān)報文則除了這兩部分還有Data數(shù)據(jù)段。由于結(jié)構(gòu)不同,在協(xié)議逆向中,需要把不同功能的報文區(qū)分出來,這就需要聚類操作。
經(jīng)過LDA主題模型的關(guān)鍵詞提取后,會得到兩個概率分布,對于報文相關(guān)功能的聚類,需要使用與報文相關(guān)的關(guān)鍵詞作為特征,選擇LDA主題提取模型生成的文檔-主題矩陣,也就是協(xié)議報文,與報文對應(yīng)關(guān)鍵詞概率矩陣作為特征,進行聚類。這里選用的聚類方法為DBSCAN。
DBSCAN聚類算法是一種基于密度的聚類算法,也就是根據(jù)樣本數(shù)據(jù)分布的緊密程度來進行區(qū)分,將分布集中的視為一個簇,分為一個類。DBSCAN的特點是不需要事先確定類別數(shù),對于私有工控協(xié)議,網(wǎng)絡(luò)抓包是隨機的,并不能確定其中含有的不同功能的報文有多少種,而且DBSCAN對報文聚類的形狀沒有要求。
輪廓系數(shù)[14]是用來評價聚類好壞的一種評價方式,其取值一般在(-1,1)之間,值越大表示聚類效果越好,小于0一般表示樣本被錯誤分類,0附近表示邊界有重疊,而大于0表示同一類中的樣本更加相似。
對于輪廓系數(shù)的計算,每一個樣本各自計算其值,首先隨機選擇一個向量,計算其到同一分類樣本的區(qū)別程度的均值,表示簇間的集中程度,再計算其到其他分類樣本間的區(qū)別程度的最小值,表示不同簇間的區(qū)別度,則此樣本輪廓系數(shù)的計算如式(2)所示:
對于整個樣本空間,求所有樣本點輪廓系數(shù)的均值作為樣本空間的輪廓系數(shù),從而判定聚類的好壞。
應(yīng)用歐姆龍CJ2M-CPU31系列PLC與上位機工程師站之間通信數(shù)據(jù)作為實驗需要的初始數(shù)據(jù),工程師站為Windows 7系統(tǒng),在交換機配置鏡像口,使用設(shè)備接入鏡像口進行監(jiān)聽網(wǎng)絡(luò)流量,監(jiān)聽設(shè)備為Windows 7計算機,使用軟件為Wireshark,圖3為通信數(shù)據(jù)監(jiān)聽示意圖。
圖3 通信數(shù)據(jù)監(jiān)聽示意圖
由于獲取到的數(shù)據(jù)都是靜態(tài)的,基于網(wǎng)絡(luò)流量的分析也是基于一些靜態(tài)特征進行的,對于樣本中數(shù)據(jù)的出錯、分片是無法處理的,因此實驗中并不考慮樣本中分片、出錯等情況。使用Wireshark將數(shù)據(jù)保存為pcap文件格式進行后續(xù)分析,對私有工控協(xié)議的逆向,選用已知的協(xié)議,全程選擇無監(jiān)督的方法,最后與已知的協(xié)議規(guī)范進行對比,實現(xiàn)未知協(xié)議的協(xié)議逆向的驗證。
pcap文件是一種保存數(shù)據(jù)報的文件格式,其中的數(shù)據(jù)報文按特定的格式儲存,提取出的報文需要對pcap文件進行解析。
得到pcap文件,需要對其進行解析。pcap文件格式是規(guī)范的,根據(jù)其文件格式將相關(guān)報文提取出來,Wireshark工具提供了Tshark命令行工具,可以將pcap文件中特定的協(xié)議字段提取出來。實驗需要的是data部分的字段,使用Tshark將其直接輸出為txt文本形式,部分提取結(jié)果如圖4所示。
圖4 歐姆龍協(xié)議data字段
將提取出的data字段利用N-gram算法進行分詞,設(shè)置N=(1,2),結(jié)果如圖5所示。
圖5 報文分詞結(jié)果
在應(yīng)用LDA主題模型進行關(guān)鍵詞提取時,輸入應(yīng)該是N-gram分詞結(jié)果,設(shè)置主題數(shù)與迭代次數(shù),兩個超參數(shù)使用默認(rèn)值,進行訓(xùn)練。通過困惑度的值來選擇合適的主題數(shù),困惑度值用來衡量LDA主題模型,其值越小,表示效果越好。使用不同的主題數(shù),設(shè)置迭代次數(shù)為2 000進行實驗,最后可得折線圖如圖6所示。
圖6中,在主題數(shù)為3時困惑度取到了最小值。主題數(shù)取3則代表所有序列中能有三種關(guān)鍵詞,每個關(guān)鍵詞為一組N-gram序列,每行報文可以被這三個關(guān)鍵詞標(biāo)記。
圖6 主題數(shù)與困惑度折線圖
LDA主題模型提取主題詞后,每一行報文都被關(guān)鍵詞的概率標(biāo)記,由于關(guān)鍵詞代表了每行報文N-gram元素的重要程度,因此其可以作為這行報文的特征,根據(jù)關(guān)鍵詞進行報文聚類,可以將不同功能的報文進行分類。DBSCAN聚類有三個參數(shù)可以進行設(shè)置,第一個是聚類半徑r,第二個是鄰域密度MinPts,第三個是距離函數(shù),這里距離函數(shù)選用默認(rèn)的歐氏距離。使用輪廓系數(shù)進行聚類評估,通過輪廓系數(shù)的值來進行調(diào)參,由于輸入向量為高維向量,因此使用PCA降維算法,將其降為2維,通過調(diào)參,最終實驗結(jié)果為:領(lǐng)域半徑r=0.087 5,領(lǐng)域密度MinPts=3,其輪廓系數(shù)為0.788 4。圖7為聚類結(jié)果。
圖7 DBSCAN聚類結(jié)果
由圖7可知所有報文可以被聚類為4類,代表4種不同功能的報文。
本文通過對協(xié)議逆向技術(shù)的研究,結(jié)合工控系統(tǒng)的實際情況,選用基于網(wǎng)絡(luò)流量的協(xié)議逆向方法,通過對歐姆龍PLC上的協(xié)議進行分析,設(shè)計了一套協(xié)議逆向算法,并將實驗結(jié)果對應(yīng)原協(xié)議規(guī)范進行了對比驗證,實驗證明,本文提出的方法能很好地進行報文按照功能分類。
本文基于網(wǎng)絡(luò)流量進行分析,實驗效果受樣本完整性和樣本多樣性的影響較大,在更加復(fù)雜的網(wǎng)絡(luò)環(huán)境中,可能分類效果會受影響。下一步工作首先需要對樣本的采集和處理方法進行研究,其次本文提出方法涉及的參數(shù)較多,參數(shù)調(diào)整帶來的模型變化需要進行驗證。在協(xié)議逆向的整體流程[15]中需要進一步進行協(xié)議格式推斷以及狀態(tài)機推斷的研究,實現(xiàn)對私有工控協(xié)議有效且完整的逆向工作。