方捷睿,曹衛(wèi)民,白建濤,熊智華,楊 帆
(1.清華大學(xué)自動化系,北京 100084;2.中國石化安慶分公司,安徽 安慶 246002)
隨著石化企業(yè)信息集成度的提高,工業(yè)控制系統(tǒng)由“封閉走向開放”已成為主流趨勢。但是“震網(wǎng)”、“超級工廠”等病毒的出現(xiàn),已經(jīng)造成了有些企業(yè)的工業(yè)控制系統(tǒng)安全事故。因此,工業(yè)控制網(wǎng)絡(luò)的安全問題凸顯[1-2]。目前,工業(yè)互聯(lián)網(wǎng)的安全問題也在國際、國內(nèi)引起了高度的重視[3-4]。未來,隨著工業(yè)互聯(lián)網(wǎng)的發(fā)展和推進,工業(yè)控制網(wǎng)絡(luò)安全措施的實施范圍也將從局域網(wǎng)上升到全網(wǎng)的高度。
工業(yè)控制系統(tǒng)的安全防護主要采用系統(tǒng)隔離、網(wǎng)絡(luò)分區(qū)分域管理。這些傳統(tǒng)的安全防御方法無法抵御各種病毒的靶向攻擊[5]。工業(yè)控制系統(tǒng)信息安全問題非常復(fù)雜,依賴于單一的安全防護方案難以實現(xiàn)系統(tǒng)整體安全。因此,可行的方案是將工業(yè)控制網(wǎng)絡(luò)劃分為不同的安全區(qū),分層或分區(qū)域部署防火墻、入侵檢測等多種安全防護措施,形成整體防護能力[6]。石化企業(yè)網(wǎng)絡(luò)安全的解決方案通常采用網(wǎng)閘和防火墻技術(shù),對企業(yè)管理網(wǎng)絡(luò)與工業(yè)控制網(wǎng)絡(luò)進行“區(qū)域和渠道”的連接控制[7]。對每個分層或分域采用特定的網(wǎng)絡(luò)安全控制策略,深度解析和檢查每個區(qū)域的通信連接和協(xié)議,保障工業(yè)控制系統(tǒng)的安全運行。
本文在工控網(wǎng)絡(luò)安全防護方案的基礎(chǔ)上,結(jié)合工控網(wǎng)絡(luò)報文定制性的特點,詳細分析了基于應(yīng)用層協(xié)議解析的安全防護策略。該方案在傳統(tǒng)工業(yè)防火墻的基礎(chǔ)上,通過對應(yīng)用于過程控制的對象連接和嵌入(OLE for process control,OPC)等工業(yè)網(wǎng)絡(luò)傳輸協(xié)議的報文深入解析,攔截與功能實現(xiàn)無關(guān)的報文。由于該方案方直接在報文層面解析過濾,所以能夠更有效地發(fā)現(xiàn)隱藏較深的威脅。本文以O(shè)PC協(xié)議為例,搭建了基于應(yīng)用層協(xié)議深度解析的工控網(wǎng)絡(luò)安全仿真測試平臺,并利用石化企業(yè)現(xiàn)場設(shè)備的通信數(shù)據(jù)對該平臺進行了驗證。
石化企業(yè)管控一體化的信息化集成經(jīng)歷了多年的發(fā)展,網(wǎng)絡(luò)結(jié)構(gòu)逐步從企業(yè)管理網(wǎng)/控制網(wǎng)絡(luò)的兩層結(jié)構(gòu)發(fā)展成了企業(yè)管理網(wǎng)/生產(chǎn)專網(wǎng)/控制網(wǎng)絡(luò)的三層結(jié)構(gòu)[8-9]。
在企業(yè)管理網(wǎng)/控制網(wǎng)絡(luò)的兩層結(jié)構(gòu)中,工業(yè)控制網(wǎng)絡(luò)與管理網(wǎng)的連接給企業(yè)帶來了諸多便利,但是也削弱了工業(yè)控制系統(tǒng)與外界的隔離。因此,當(dāng)面臨安全威脅時,工業(yè)控制系統(tǒng)缺乏有效的防御能力,受到任何一點攻擊都有可能導(dǎo)致整個系統(tǒng)的癱瘓[8]。
企業(yè)管理網(wǎng)/生產(chǎn)專網(wǎng)/控制網(wǎng)絡(luò)三層結(jié)構(gòu)中[9]:企業(yè)的各種網(wǎng)絡(luò)按功能區(qū)進行分層、分區(qū)設(shè)計;將實時數(shù)據(jù)庫系統(tǒng)的網(wǎng)絡(luò)環(huán)境從企業(yè)管理網(wǎng)中分離出來,構(gòu)成生產(chǎn)專網(wǎng);生產(chǎn)專網(wǎng)與管理網(wǎng)只有一個接口并通過防火墻進行隔離。工業(yè)控制網(wǎng)絡(luò)中的各個控制系統(tǒng)只與生產(chǎn)專網(wǎng)相連接,與管理網(wǎng)絡(luò)沒有直接通道。由于每套控制系統(tǒng)與生產(chǎn)專網(wǎng)只有一個點對點的物理接口,因此阻斷了來自管理網(wǎng)絡(luò)上普遍存在的病毒、木馬、特定攻擊等直接威脅。同時,將網(wǎng)絡(luò)安全內(nèi)嵌到基礎(chǔ)架構(gòu)中并進行虛擬化,建立安全服務(wù)管理中心對生產(chǎn)專網(wǎng)的安全進行管控和預(yù)警,從而改變了傳統(tǒng)的安全模式。通過采用虛擬防火墻,結(jié)合OPC服務(wù)器分配的動態(tài)端口限定方法進行安全的數(shù)據(jù)采集與傳輸,可提升與控制系統(tǒng)接口的安全[9]。
企業(yè)生產(chǎn)專網(wǎng)的網(wǎng)絡(luò)安全防護結(jié)構(gòu)如圖1所示。
圖1 企業(yè)生產(chǎn)專網(wǎng)的網(wǎng)絡(luò)安全防護結(jié)構(gòu)示意圖 Fig.1 Network security protection structure of enterprise production network
隨著工業(yè)互聯(lián)網(wǎng)的研究與應(yīng)用,工控網(wǎng)絡(luò)安全防護措施的實施范圍也將從以往的局域網(wǎng)上升到全網(wǎng)的高度。因此,采用更加安全、有效的方式保障工控網(wǎng)絡(luò)的安全已成為重中之重。在企業(yè)三層網(wǎng)絡(luò)結(jié)構(gòu)下,對工業(yè)控制系統(tǒng)的安全威脅,除了對控制系統(tǒng)的直接攻擊和經(jīng)由企業(yè)管理網(wǎng)入侵的攻擊外,還有來自生產(chǎn)專網(wǎng)的攻擊。工業(yè)控制系統(tǒng)的安全可以通過管理手段來實現(xiàn)。經(jīng)由管理網(wǎng)的入侵可以通過代理服務(wù)器實現(xiàn)。所以在工業(yè)現(xiàn)場,安全防護的重點在于保障好生產(chǎn)專網(wǎng)與控制系統(tǒng)之間的接口安全。
本文研究的工控網(wǎng)絡(luò)安全防護問題,主要集中于生產(chǎn)專網(wǎng)與工業(yè)控制系統(tǒng)之間的數(shù)據(jù)訪問安全,如圖1所示的OPC客戶端與OPC服務(wù)器之間的數(shù)據(jù)訪問安全。通過在OPC服務(wù)器和Client之間設(shè)立一個基于協(xié)議解析的網(wǎng)絡(luò)安全防護(例如工業(yè)防火墻)來提高數(shù)據(jù)傳輸?shù)陌踩允且粋€可行方案。工業(yè)防火墻通過獲取OPC客戶端/服務(wù)器端(client/server,C/S)之間傳輸?shù)臄?shù)據(jù)包并解析,判斷所傳輸?shù)臄?shù)據(jù)是否存在安全問題。如果存在安全問題,則執(zhí)行預(yù)設(shè)的安全措施。
工業(yè)控制網(wǎng)絡(luò)是基于傳統(tǒng)網(wǎng)絡(luò)發(fā)展起來的一種定制化、專業(yè)化、標(biāo)準(zhǔn)化的定向網(wǎng)絡(luò),采取的交互模式基本為C/S通信模式,大體分為面向連接和無連接兩大類。其均在應(yīng)用層進行頂層的包裝和接口定義,以實現(xiàn)特定的工業(yè)控制網(wǎng)絡(luò)數(shù)據(jù)傳輸與行為控制功能[9]。目前,工業(yè)防火墻被廣泛應(yīng)用于工控網(wǎng)絡(luò)的數(shù)據(jù)傳輸安全防護。
防火墻技術(shù)主要包括包過濾防火墻、狀態(tài)檢測防火墻、應(yīng)用級網(wǎng)關(guān)防火墻和深度包檢測防火墻等[10]。傳統(tǒng)工業(yè)防火墻通過對抓取到的數(shù)據(jù)包中的MAC地址、IP源地址、目的地址、端口號、協(xié)議類型、數(shù)據(jù)流向、協(xié)議字段和網(wǎng)絡(luò)接口等信息進行過濾,根據(jù)預(yù)設(shè)的規(guī)則決定保留還是丟棄該數(shù)據(jù)包。深度包檢測防火墻對傳輸控制協(xié)議(transmission control protocol,TCP)或用戶數(shù)據(jù)報協(xié)議(user datagram protocol,UDP)數(shù)據(jù)包內(nèi)容進行深入分析,從而抵御復(fù)雜網(wǎng)絡(luò)中應(yīng)用程序受到的攻擊,提高了防火墻的性能和內(nèi)部網(wǎng)絡(luò)的安全、穩(wěn)定[10]。
工業(yè)防火墻通過對工控網(wǎng)絡(luò)協(xié)議數(shù)據(jù)包進行探測和解析,識別出數(shù)據(jù)包中的各種關(guān)鍵信息及其所承載的內(nèi)容,并對這些數(shù)據(jù)進行解析;然后根據(jù)解析得到的原始通信信息,判斷是否包含威脅或者敏感的內(nèi)容。例如對協(xié)議中的操作碼、設(shè)備地址、寄存器范圍和讀寫屬性等進行檢查,以判斷是否為非法操作或者外部攻擊[10]。
和傳統(tǒng)網(wǎng)絡(luò)一樣,工控網(wǎng)絡(luò)協(xié)議數(shù)據(jù)包也包含了物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層開放式系統(tǒng)互聯(lián)通信(open system interconnection,OSI)參考模型ISO五層架構(gòu)。對于數(shù)據(jù)包的分析,工業(yè)防火墻主要集中在鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。其中,前三層采用傳統(tǒng)的網(wǎng)絡(luò)報文方法進行分析,在應(yīng)用層的層面針對各主流工控協(xié)議標(biāo)準(zhǔn)進行定制化的解析。
工控網(wǎng)絡(luò)安全隔離策略如圖2所示。
圖2 工控網(wǎng)絡(luò)安全隔離策略 Fig.2 Security isolation strategy of industrial control network
應(yīng)用層安全隔離主要通過對應(yīng)用層報文的解析實現(xiàn)。其核心是通過對應(yīng)用層協(xié)議報頭解析和判斷實現(xiàn)應(yīng)用層報文類型的過濾。應(yīng)用層協(xié)議(例如OPC協(xié)議)深度隔離則通過深度解析特定的OPC協(xié)議的應(yīng)用層報文,能夠最大程度地保證系統(tǒng)的安全性。因此,該方案在傳統(tǒng)工業(yè)防火墻策略的基礎(chǔ)上,對協(xié)議類型進行解析,從而隔離與通信無關(guān)的報文。同時,對應(yīng)用層協(xié)議進行深度解析,還能有效保障工控系統(tǒng)的實時性、私密性和安全性。
在實際應(yīng)用中,還需要考慮工控網(wǎng)絡(luò)報文定制性的特點,采用基于應(yīng)用層協(xié)議(例如OPC)解析的安全隔離策略。在實現(xiàn)傳統(tǒng)工業(yè)防火墻功能的基礎(chǔ)上,對工業(yè)網(wǎng)絡(luò)傳輸協(xié)議進行解析。其核心是根據(jù)Modbus、DNP3和OPC等工控網(wǎng)絡(luò)的協(xié)議格式分析并深入理解報文,攔截與功能實現(xiàn)無關(guān)的報文;引入黑白名單機制,在實現(xiàn)功能的同時對設(shè)備進行限制。由于該安全防護策略在報文層面解析過濾,所以能夠更有效地發(fā)現(xiàn)隱藏較深的威脅。相較于前文提到的應(yīng)用級網(wǎng)關(guān)防火墻,本文方法在過濾速度上要快得多。
在討論工控網(wǎng)絡(luò)報文結(jié)構(gòu)的語境下,主要針對應(yīng)用層報文進行分析。對于更底層的報文,大多數(shù)成熟的工控協(xié)議都利用了傳統(tǒng)網(wǎng)絡(luò)報文的接口和底層通信組件,因此可以按照傳統(tǒng)報文的分析方式進行。應(yīng)用層協(xié)議為網(wǎng)絡(luò)上不同端之間的設(shè)備和系統(tǒng)上的進程進行數(shù)據(jù)交互提供了規(guī)范。在工控系統(tǒng)的語境下,應(yīng)用層協(xié)議包括了工控協(xié)議本身以及對工控協(xié)議的第一步封裝,并為工控協(xié)議的網(wǎng)絡(luò)傳輸選擇通信鏈路。在完成對鏈路層、網(wǎng)絡(luò)層和傳輸層的解析后,可以得到初步的應(yīng)用層報文。然后,根據(jù)不同工控協(xié)議的特點,判斷應(yīng)用層是否搭載了外部應(yīng)用層協(xié)議并解析該應(yīng)用層協(xié)議,從而得到純粹的工控協(xié)議報文,進而根據(jù)工控協(xié)議的報頭和數(shù)據(jù)包,分析報文實現(xiàn)的功能。
工控協(xié)議的報頭通常包含認證信息、校驗信息、身份信息等基于全局的連接信息,通過該部分解析出連接信息并存入緩存區(qū),用于辨別后續(xù)的連接。數(shù)據(jù)包主要包括對底層設(shè)備的定位信息、操作指令、數(shù)據(jù)信息及響應(yīng)報文等直接面向過程的報文。該部分的解析需要結(jié)合緩存區(qū)中的連接信息,解析出每條報文或多條報文對應(yīng)的具體操作,從而實現(xiàn)過濾。
隨著工業(yè)互聯(lián)網(wǎng)的推廣,以TCP/IP為基礎(chǔ)的工控協(xié)議,以其標(biāo)準(zhǔn)化、開放性而更加廣泛地應(yīng)用在各類工控系統(tǒng)中。目前,國內(nèi)廣泛應(yīng)用的Modbus協(xié)議、DNP3協(xié)議、IEC協(xié)議和OPC協(xié)議大多基于TCP/IP協(xié)議進行封裝傳輸。其中,石化企業(yè)大多采用OPC協(xié)議來進行數(shù)據(jù)訪問[8]。
OPC協(xié)議并非嚴格的工業(yè)類協(xié)議,但由于其與傳統(tǒng)互聯(lián)網(wǎng)具備更好的兼容效果,逐漸受到各大自動化公司的青睞,并逐漸形成一套比較完善的標(biāo)準(zhǔn)。其為目前應(yīng)用較為廣泛的信息交換的互操作標(biāo)準(zhǔn),具備安全性、可靠性和平臺獨立性[8,11]。
OPC協(xié)議基于遠程過程調(diào)用(remote procedure call,RPC)/分布式組件對象模型(distributed component object model,DCOM)協(xié)議進行通信,是基于DCOM協(xié)議擴展的工控協(xié)議。而DCOM協(xié)議又是基于RPC協(xié)議開發(fā)的遠程接口調(diào)用協(xié)議[11]。所以在進行應(yīng)用層協(xié)議的解析時,需要先解析RPC協(xié)議和DCOM協(xié)議,再解析OPC協(xié)議。雖然三者之間存在層層遞進的關(guān)系,但實際上DCOM協(xié)議在實現(xiàn)協(xié)議內(nèi)部功能的時候,會借用一部分RPC協(xié)議報頭信息;OPC協(xié)議的結(jié)構(gòu)中,也將DCOM協(xié)議的報頭作為自身協(xié)議報頭的一部分[11]。
①RPC協(xié)議及DCOM協(xié)議解析。
由于目前大多數(shù)OPC協(xié)議采用的是面向連接的模式,所以主要解析面向連接的RPC協(xié)議。面向連接的RPC包含11種協(xié)議數(shù)據(jù)單元(protocol data unit,PDU)。其中,Association PDU用于建立連接和維護通信,包含bind等綁定請求及應(yīng)答報文;Call PDU用于在連接中實現(xiàn)請求操作,包含request、response等數(shù)據(jù)及操作請求與應(yīng)答報文[11]。
RPC協(xié)議的PDU可以看作是OPC協(xié)議報頭的一部分。它為OPC協(xié)議提供了一個建立連接的方式,協(xié)助OPC協(xié)議維護連接信息。
DCOM協(xié)議的報頭只有一小部分被保留下來融入OPC協(xié)議。這一小部分報頭提供了報文的身份信息,在多個客戶端同時向服務(wù)器發(fā)起請求時,可以分辨出報文的源頭客戶端。所以RPC協(xié)議和DCOM協(xié)議的解析,本質(zhì)上還是對OPC協(xié)議報頭信息的解析。
②OPC協(xié)議報頭解析。
OPC協(xié)議報頭包含了豐富的連接信息。通過對報頭的解析,能夠維護連接的身份信息、認證信息、緩存信息、指令類別及其具體操作等[11]。
通過接口定義語言(interface definition language,IDL)語義對OPC協(xié)議報頭進行解析,能夠解析出是哪個客戶端向底層設(shè)備發(fā)送了指令,以及指令所對應(yīng)的操作。
③OPC協(xié)議數(shù)據(jù)包解析。
在IDL語義下,每條指令對應(yīng)一個函數(shù),數(shù)據(jù)包里的內(nèi)容則是該函數(shù)的參數(shù)。對于數(shù)據(jù)讀取報文而言,該參數(shù)主要是所讀取的位號,即該條讀取指令的對象。服務(wù)器在收到合法指令后也會返回一個報文。其中的數(shù)據(jù)包是以具體數(shù)值作為返回函數(shù)的參數(shù)[11]。
數(shù)據(jù)包的解析是根據(jù)前面解析出的指令函數(shù),得到參數(shù)的格式,將數(shù)據(jù)包中對應(yīng)的數(shù)據(jù)段整理成函數(shù)的參數(shù)。對于單個參數(shù)的解析比較簡單,但OPC協(xié)議經(jīng)常涉及到數(shù)據(jù)的批量處理以及分片、重傳等情況,因此需要解析包含多種情況的數(shù)據(jù)包。
本文以O(shè)PC協(xié)議為例,搭建了工控網(wǎng)絡(luò)安全仿真測試平臺,對OPC C/S間傳輸?shù)臄?shù)據(jù)包進行解析。本文的驗證數(shù)據(jù)采用了石化企業(yè)現(xiàn)場設(shè)備的通信數(shù)據(jù),格式為.pcapng,可以通過抓包軟件直接進行抓取。仿真測試平臺由QT軟件開發(fā)完成。其主要功能是對抓取的OPC協(xié)議數(shù)據(jù)包進行深度解析,將報文內(nèi)容逐條逐字段存入數(shù)據(jù)庫,將解析結(jié)果從數(shù)據(jù)庫取出并呈現(xiàn)在界面上,并提供各種規(guī)則配置進行測試。
仿真測試平臺由報文處理、OPC解析、數(shù)據(jù)庫、監(jiān)控顯示界面等多個模塊組成。
仿真測試平臺整體架構(gòu)如圖3所示。
圖3 仿真測試平臺整體架構(gòu) Fig.3 Overall architecture of simulation and test platform
報文處理模塊讀取抓取的數(shù)據(jù)包文件,將其轉(zhuǎn)換為程序規(guī)定的數(shù)據(jù)格式。傳統(tǒng)解析模塊完成鏈路層、網(wǎng)絡(luò)層和傳輸層數(shù)據(jù)的初步解析,與未解析的數(shù)據(jù)一并傳入下一模塊。OPC解析模塊是軟件的核心,實現(xiàn)對OPC協(xié)議的應(yīng)用層解析,并根據(jù)配置信息為該條數(shù)據(jù)貼上標(biāo)簽。配置模塊提供黑白名單的模擬配置功能,并利用該信息驗證OPC解析模塊的解析結(jié)果。解析結(jié)果將被存儲到數(shù)據(jù)庫中。數(shù)據(jù)綜合模塊根據(jù)OPC解析模塊和數(shù)據(jù)庫中的數(shù)據(jù),對解析結(jié)果進行綜合分析和判斷,并將結(jié)果傳遞給監(jiān)控顯示界面模塊。顯示界面模塊輸出報文詳細信息等各種解析結(jié)果。
仿真平臺軟件在打開數(shù)據(jù)包文件之后彈出交互界面。界面的上部分詳細顯示報文概要信息,包括IP地址、端口號、PDU類型、報文長度、序列號、確認號等內(nèi)容;界面的下部分則顯示所選中報文的詳細信息。
報文解析的部分結(jié)果也展示在界面上,在通信連接建立并由仿真測試平臺維護通信后,客戶端向服務(wù)器發(fā)送類型為request的報文。然后測試平臺進行分析,可以解析得到相關(guān)操作指令面向的位號。每條Request報文經(jīng)應(yīng)用層展開后,會將報文詳細信息顯示在界面上。
實際通信過程中,往往由于報文長度較長而出現(xiàn)分片報文的情況,因此在解析過程中還需要考慮分片報文的問題。當(dāng)測試平臺檢測到多片報文時,界面上會顯示相關(guān)信息,并且測試平臺進行報文的重組。
當(dāng)傳輸過程中出現(xiàn)數(shù)據(jù)包中途丟包或確認字符(acknowledge character,ACK)丟失等問題時,會產(chǎn)生報文重傳。因此,報文解析時還需要考慮重傳報文的情況。當(dāng)測試平臺發(fā)現(xiàn)重傳報文時,將把檢測結(jié)果顯示在界面上,表明測試平臺能夠正確檢測到重傳的報文。
在上述基于應(yīng)用層協(xié)議解析的工控網(wǎng)絡(luò)安全仿真平臺進行試驗測試后,還對該平臺與石化企業(yè)實際生產(chǎn)裝置的數(shù)據(jù)訪問環(huán)境進行了連接和測試。測試結(jié)果表明,該平臺能夠根據(jù)報文解析結(jié)果,攔截報文中與功能實現(xiàn)無關(guān)的部分以及潛在的安全威脅,從而驗證了基于應(yīng)用層協(xié)議解析的工控網(wǎng)絡(luò)安全防護策略的有效性。
本文分析了基于應(yīng)用層協(xié)議深度解析的工控網(wǎng)絡(luò)安全防護策略,以O(shè)PC協(xié)議為例開發(fā)了一個仿真測試平臺,并進行了實際通信數(shù)據(jù)的測試與驗證。該安全防護策略針對工業(yè)網(wǎng)絡(luò)傳輸協(xié)議的特點,對應(yīng)用層協(xié)議進行解析;根據(jù)工業(yè)網(wǎng)絡(luò)較為單一的功能需求,攔截掉與功能實現(xiàn)無關(guān)的報文,并能夠發(fā)現(xiàn)隱藏較深的威脅,從而為工控網(wǎng)絡(luò)安全提供保障。實際通信的數(shù)據(jù)測試結(jié)果驗證了該方案的有效性。