孫蒙蒙,劉賢達,盛 川,劉 歡
(1.沈陽化工大學(xué)信息工程學(xué)院,遼寧 沈陽 110142;2.中國科學(xué)院網(wǎng)絡(luò)化控制系統(tǒng)重點實驗室,遼寧 沈陽 110016;3.中國科學(xué)院沈陽自動化研究所,遼寧 沈陽 110016;4.中國科學(xué)院機器人與智能制造創(chuàng)新研究院,遼寧 沈陽 110169)
工業(yè)控制系統(tǒng)(ICS)是監(jiān)測和控制電力、化工、石油天然氣、交通運輸?shù)绕渌P(guān)鍵基礎(chǔ)設(shè)施的信息物理系統(tǒng)。近年來,互聯(lián)網(wǎng)技術(shù)逐步應(yīng)用于ICS,打破了傳統(tǒng)工業(yè)的邊界,破壞了工業(yè)控制網(wǎng)絡(luò)的封閉性,再加上其需要在線長期穩(wěn)定運行等特點,使得ICS 面臨越來越多的安全威脅[1]。
網(wǎng)絡(luò)資產(chǎn)探測是指追蹤、掌握網(wǎng)絡(luò)資產(chǎn)情況的過程,是實現(xiàn)網(wǎng)絡(luò)安全管理的重要前提[2]。IT 系統(tǒng)通常采用主動探測的方式進行資產(chǎn)探測[3],但這種方式并不適用于ICS。與傳統(tǒng)IT 系統(tǒng)相比,ICS 除了包括IT 系統(tǒng)中的傳統(tǒng)設(shè)備如主機、交換機、路由器等,還包括特有的HMI、PLC、RTU 等設(shè)備[2]。此外,ICS 還具有設(shè)備異構(gòu)性、設(shè)備的計算能力弱以及TCP 會話運行時間長等特點,如果直接將傳統(tǒng)的資產(chǎn)探測方法應(yīng)用于ICS,不僅無法獲取需要的信息,還會干擾系統(tǒng)的正常平穩(wěn)運行。為了降低傳統(tǒng)資產(chǎn)探測方法對ICS 的干擾,有針對性的對工控設(shè)備進行識別,解決資產(chǎn)探測過程中對于多種類型的設(shè)備區(qū)分不清,進行盲目探測時占用大量資源對系統(tǒng)造成影響等問題,結(jié)合ICS 各層設(shè)備敏感性不同的特點,提出在進行資產(chǎn)探測時先對ICS 設(shè)備進行設(shè)備層次識別,再對傳統(tǒng)IT 設(shè)備和工控設(shè)備采用不同的探測方式獲取詳細信息[4]。
近年來,設(shè)備層次識別方法逐漸應(yīng)用于ICS 資產(chǎn)探測過程中,文獻[5]第一次提出了利用設(shè)備層次關(guān)系識別設(shè)備層次以輔助后續(xù)的設(shè)備識別,使用自下而上求目的IP 子集的方法識別設(shè)備層次,該方法的缺點是設(shè)備間存在不完全通信時易造成控制層設(shè)備識別錯誤,一旦控制層設(shè)備識別錯誤便會產(chǎn)生連鎖反應(yīng),導(dǎo)致上層設(shè)備識別錯誤。文獻[6]提出利用節(jié)點間通信關(guān)系的設(shè)備層次識別方法和利用層次間通信關(guān)系的層次識別方法,通過對設(shè)備的目的地址集合求交集、差集等運算進行層次識別,該方法未考慮遠程I/O 等設(shè)備,對于存在此種設(shè)備的系統(tǒng)識別效果較差。文獻[7]提出一種基于工控各層級聯(lián)網(wǎng)設(shè)備通信流量統(tǒng)計特征的層次聚類算法,通過引入高斯混合模型,提升層次聚類效果,但文中未提及聚類后如何具體區(qū)分層次。在工控設(shè)備層次識別過程中,存在的困難是ICS 中同時存在工控設(shè)備和傳統(tǒng)IT 設(shè)備,它們之間的通信特點不同會產(chǎn)生不同的通信模式,兩種通信模式混合會對工控設(shè)備層次識別造成干擾。所以本文針對現(xiàn)有工控設(shè)備層次識別方法存在的問題進行改進,采用工控協(xié)議過濾的方式將工控設(shè)備間的通信提取出來,利用其特點先識別出2、1、0 層的工控設(shè)備,再漸進式識別3 層及以上的傳統(tǒng)設(shè)備。
為了更好地描述ICS 設(shè)備層次結(jié)構(gòu),確定了遵循普渡模型的ICS 系統(tǒng)層次架構(gòu)[8],如圖1 所示。
圖1 ICS 金字塔圖
ICS 金字塔圖包括五層結(jié)構(gòu):企業(yè)網(wǎng)絡(luò)層及以上的設(shè)備主要由主機和服務(wù)器這些傳統(tǒng)IT 設(shè)備構(gòu)成,在設(shè)備層次識別時對這一部分不具體細分,統(tǒng)一識別為3 層及以上設(shè)備;過程監(jiān)控層包括HMI、SCADA 服務(wù)器、工程師站、歷史數(shù)據(jù)庫等,這些設(shè)備的作用是負責(zé)對現(xiàn)場的設(shè)備進行監(jiān)視和控制,設(shè)備層次識別其為2 層設(shè)備;現(xiàn)場控制層主要與現(xiàn)場設(shè)備連接,包括PLC、RTU、IED等,設(shè)備層次識別其為1 層設(shè)備;現(xiàn)場設(shè)備層包括一些執(zhí)行器和傳感器等,其中Remote I/O 安裝在遠程現(xiàn)場,將采集的數(shù)據(jù)傳輸?shù)娇刂茖釉O(shè)備并且它不具有控制能力,將其識別為0 層設(shè)備。
在工業(yè)控制系統(tǒng)中,為了防止控制命令中的沖突,要求系統(tǒng)中的每個節(jié)點只與其直接父節(jié)點、直接子節(jié)點或者同一級別的節(jié)點通信[9]。圖2 為典型工業(yè)控制系統(tǒng)網(wǎng)絡(luò)流量中提取出的節(jié)點交互關(guān)系圖,從圖中可以看出,過程控制層中的一個上位機可以與現(xiàn)場控制層中的多個PLC 進行交互通信[10],現(xiàn)場控制層中的一個PLC 也可以與同層的多個PLC進行交互通信。在這種混合的通信模式下,相鄰層設(shè)備間可以互相訪問,所以無法準確判斷出互相通信的兩個設(shè)備之間的層次關(guān)系,現(xiàn)有的設(shè)備層次識別方法便是在這種交互模式下進行層次識別。
圖2 工控節(jié)點交互關(guān)系圖
針對現(xiàn)有方法存在的設(shè)備層次識別準確率低以及受限于理想環(huán)境下的設(shè)備通信模式等問題,本文提出一種基于工控設(shè)備通信模式的漸進式層次識別方法,方法架構(gòu)如圖3 所示,分為兩個階段:數(shù)據(jù)預(yù)處理階段和層次識別階段。數(shù)據(jù)預(yù)處理階段主要進行交互特征提取和工控通信過濾;層次識別階段利用數(shù)據(jù)預(yù)處理提取的特征集合進行漸進式層次識別。
圖3 漸進式層次識別方法架構(gòu)圖
當(dāng)?shù)玫讲东@的工控網(wǎng)絡(luò)流量后,需要對其進行預(yù)處理。預(yù)處理的目的是提取符合層次識別需求的設(shè)備交互特征feature,表示為:
其中:srcIp、srcPort 為兩個設(shè)備間進行完整會話時客戶端設(shè)備的IP 地址和端口號;dstIp、dstPort 為服務(wù)端設(shè)備的IP 地址和端口號。設(shè)備交互特征集Feature 由設(shè)備交互特征feature 構(gòu)成,表示為:
在提取交互關(guān)系過程中需要對報文進行兩種處理:一是剔除掉不在目標網(wǎng)段的設(shè)備交互流量,如廣播產(chǎn)生的交互流量;二是補全交互會話中丟失的報文,比如在網(wǎng)絡(luò)流量中只有ip2 到ip1 的回復(fù)包,便將ip1 到ip2 的請求包補充到會話中以得到完整的交互關(guān)系。
對設(shè)備交互特征集合Feature 進行工控協(xié)議過濾,提取設(shè)備ip 地址對ips,表示為:
其中:srcip 和dstip 分別是源ip 地址和目的ip 地址。
ip_feature 是由設(shè)備ip 地址對ips 構(gòu)成的集合,表示為:
具體過濾方法是對設(shè)備交互特征feature 中的目的端口進行篩選,如果目的端口號為工控協(xié)議特定的端口號,它便為使用工控協(xié)議進行通信的會話,存入集合ips_feature1 中,否則存入集合ips_feature2 中。過濾后可以發(fā)現(xiàn),系統(tǒng)節(jié)點間的信息交互由圖2轉(zhuǎn)化為圖4。此時存在兩種設(shè)備通信交互模式:一種是圖2 中的IT 協(xié)議通信交互模式;另一種是0、1、2 層設(shè)備間存在的工控協(xié)議通信交互模式。將該通信模式的特點總結(jié)為以下幾點:
圖4 處理后工控節(jié)點交互關(guān)系圖
1)2 層設(shè)備主動訪問1 層設(shè)備,1 層設(shè)備主動訪問0層設(shè)備,反之不存在。
2)2 層設(shè)備間的通信不使用工控協(xié)議,所以在過濾后設(shè)備間不存在交互。1 層設(shè)備間的通信使用工控協(xié)議,過濾后依舊存在交互。
3)0 層設(shè)備只能被1 層設(shè)備訪問,并且設(shè)備間不存在交互。
漸進式層次識別分為兩步:第一步是識別0、1、2 層設(shè)備,第二步是識別3 層及以上設(shè)備。利用ips_feature1進行第一步識別,由2.2 節(jié)總結(jié)出的特點1)得知,只存在于源地址集合中而不存在于目的地址集合的IP 為2 層設(shè)備,只存在于目的地址集合的IP 為2 層以下設(shè)備。然后根據(jù)特點2)及特點3)具體區(qū)分0 層設(shè)備與1 層設(shè)備,與2 層設(shè)備有交互或者既存在于源地址集合又存在于目的地址集合的IP 為1 層設(shè)備,其余IP 為0 層設(shè)備。利用ips_feature2 進行第二步的3 層及以上設(shè)備識別,需要結(jié)合第一步中的設(shè)備層次識別結(jié)果,對于ips_feature2中的所有IP,如果它不屬于ips_feature1 并且與2 層設(shè)備進行了通信,該IP即為3層及以上設(shè)備。具體算法如下:
算法:漸進式工控設(shè)備層次識別算法
輸入:工控網(wǎng)絡(luò)流量的pcap 文件
輸出:設(shè)備IP 及其對應(yīng)層次
1:Procedurelevel_identify(pcap)
2:對pcap 文件進行數(shù)據(jù)預(yù)處理
3:進行工控協(xié)議過濾得到地址對集合ips_feature1 和ips_feature2
4:for ips in ips_feature1 do
5:統(tǒng)計所有ip 地址,記為icsIpSet
6:統(tǒng)計所有源ip 地址和目的ip 地址,記為srcIpSet、dstIpSet
7:end for
8: for ip in icsIpSet do
9: i←-1;
10: if ip∈srcIpSet && ip?dstIpSet then
11:i←2;將ip 加入twoLevelSet、level[i]
12: end if
13:while ip∈dstIpSet do
14:if ip.srcip∈twoLevelSet||ip∈srcIpSet then
15:i←1;將ip 加入level[i]
16:end if
17: i←0;將ip 加入level[i]
18: end while
19:end for
20:while ips_feature2 do
21:feature2IpSet= allIpSet-icsIpSet
22:for ip in feature2IpSet do
23:if ip.srcip∈twoLevelSet‖ ip.dstip∈twoLevelSet then
24:i←3+;將ip 加入level[i]
25:end if
26: end for
27: endwhile
28: Return level
29:End procedure
本文所提方法主要用于對工控系統(tǒng)進行資產(chǎn)探測時的設(shè)備層次識別,是在現(xiàn)有設(shè)備層次識別方法的基礎(chǔ)上,對層次識別方法的準確率和適用性進行有效改進,對于遵循工控系統(tǒng)通信模式的設(shè)備層次均能正確識別。下面將通過4 個公開數(shù)據(jù)集對本文所提方法進行測試驗證。
實驗所用數(shù)據(jù)集有4 個,分別為SWaT、EPIC、run_6rtu、LICSTER。SWaT 是來自新加坡iTrust 實驗室安全水處理平臺的公開數(shù)據(jù)集[11],該平臺的網(wǎng)絡(luò)部分由可編程邏輯控制器(PLC)、人機界面(HMI)、監(jiān)控和數(shù)據(jù)采集(SCADA)工作站以及歷史數(shù)據(jù)庫等組成。EPIC 是來自新加坡iTrust 實驗室電力智能控制平臺的公開數(shù)據(jù)集[12],該平臺的網(wǎng)絡(luò)部分由可編程邏輯控制器(PLC)、監(jiān)控和數(shù)據(jù)采集(SCADA)工作站以及智能電子設(shè)備(IED)等組成。LICSTER 是來自文獻[13]中的一個ICS安全實驗臺的數(shù)據(jù)集,該平臺的網(wǎng)絡(luò)部分由可編程邏輯控制器(PLC)、人機界面(HMI)、監(jiān)控和數(shù)據(jù)采集(SCADA)工作站以及遠程I/O 等組成。run_6rtu 是來自文獻[14]中提供的數(shù)據(jù)集,該數(shù)據(jù)集包括SCADA 的2 個主終端單元(MTU)以及6 個遠程終端單元(RTU)。
為了證明所提方法在現(xiàn)實工控系統(tǒng)的有效性以及通用性,對上述4 個數(shù)據(jù)集進行設(shè)備層次識別,在經(jīng)過數(shù)據(jù)預(yù)處理、漸進式層次識別等階段后得到設(shè)備所在層次。然后使用本文方法與現(xiàn)有的兩種層次識別方法進行對比實驗,通過比較3 種方法在4 個數(shù)據(jù)集上設(shè)備層次識別的準確率,驗證本文提出的層次識別方法的識別效果優(yōu)于現(xiàn)有層次識別方法。
首先進行數(shù)據(jù)預(yù)處理,使用Tshark[15]提取捕獲文件中的設(shè)備交互特征集合Feature。以run_6rtu 數(shù)據(jù)集中的192.168.1.99 與192.168.1.101 的會話為例,交互特征feature=<192.168.1.99,192.168.1.101,2133,502>。然后進行工控協(xié)議過濾,采用工控端口篩選的方式。由于各個工控系統(tǒng)使用的工控協(xié)議不同,其所對應(yīng)的工控端口也有所不同,如run_6rtu 數(shù)據(jù)集中使用的工控協(xié)議是Modbus 協(xié)議,對應(yīng)工控端口為502;SWaT 數(shù)據(jù)集中使用的工控協(xié)議是EtherNet/IPCIP 協(xié)議,對應(yīng)的端口為44818。工控協(xié)議過濾后得到使用工控協(xié)議進行通信的IP地址對集合ips_feature1和不使用工控協(xié)議進行通信的IP地址對集合ips_feature2。最后利用IP地址對集合進行漸進式層次識別,圖5 是根據(jù)層次識別結(jié)果畫出的拓撲圖,分別對應(yīng)數(shù)據(jù)集SWaT、LICSTER、EPIC和run_6rtu。
圖5 四個數(shù)據(jù)集的拓撲圖
利用本文方法與文獻[5]以及文獻[6]中的方法進行對比實驗,最后在4 個數(shù)據(jù)集上的準確率統(tǒng)計結(jié)果如表1~表4 所示。與現(xiàn)有兩種方法比較,本文方法具有更高的準確率和適用性,方法1 和方法2 存在相同的缺點,他們進行層次識別的設(shè)備交互必須是理想狀態(tài)下的,即每個設(shè)備與其可通信的設(shè)備都有所通信。一旦存在設(shè)備交互關(guān)系的缺失,就會出現(xiàn)層次識別準確率低的問題。本文方法是根據(jù)真實工業(yè)控制系統(tǒng)場景下的通信模式提出的,不局限于理想狀態(tài)下的通信模式,能夠適用于實際的工業(yè)控制系統(tǒng)。
表1 SWaT 數(shù)據(jù)集識別結(jié)果
表2 EPIC 數(shù)據(jù)集識別結(jié)果
表3 LICSTER 數(shù)據(jù)集識別結(jié)果
表4 run_6rtu 數(shù)據(jù)集識別結(jié)果
根據(jù)實驗結(jié)果可以得出以下結(jié)論:
1)本文提出的漸進式層次識別能夠準確識別出4 個數(shù)據(jù)集中工控設(shè)備的層次結(jié)構(gòu),具有通用性和有效性。
2)本文首次提出在層次識別過程中使用工控通信過濾,過濾后能大大提高識別準確率。
工控資產(chǎn)探測是為了實時監(jiān)控工控系統(tǒng)中的設(shè)備資產(chǎn)狀態(tài)信息,及時發(fā)現(xiàn)工控網(wǎng)絡(luò)中存在的安全隱患。在進行資產(chǎn)探測時,為了能對工控設(shè)備進行針對性的探測,本文提出一種針對典型工控系統(tǒng)進行漸進式層次識別的方法,該方法解決了現(xiàn)有層次識別方法存在的局限于工控系統(tǒng)理想通信模式的缺點,具有更高的準確性和通用性。然而有些工控系統(tǒng)存在一些非典型的通信模式或者不使用默認的工控協(xié)議端口,對于上述系統(tǒng)進行層次識別時可能會出現(xiàn)設(shè)備層次識別準確率下降的問題。此外,在后續(xù)資產(chǎn)探測識別設(shè)備的詳細信息時,如何結(jié)合識別出的控制層次結(jié)構(gòu)級別,減少探測對于工控系統(tǒng)的干擾,是未來研究的重要方向。
注:本文通訊作者為劉賢達。