鄭宇泰 張 飛 黃劉松 宋 坤 周明琴
(1、南京華盾電力信息安全測評有限公司,江蘇 南京211100 2、安徽工業(yè)大學(xué) 信息化處,安徽 馬鞍山243032 3、馬鞍山師范高等??茖W(xué)校 軟件學(xué)院,安徽 馬鞍山243041)
在近期中央工作會議關(guān)于能源領(lǐng)域“四個革命、一個合作”戰(zhàn)略和網(wǎng)絡(luò)強(qiáng)國戰(zhàn)略的重要論述指引下,2017 年發(fā)布的《中華人民共和國網(wǎng)絡(luò)安全法》中對重點(diǎn)領(lǐng)域工業(yè)控制系統(tǒng)安全保護(hù)提出明確規(guī)定,同時《關(guān)鍵信息基礎(chǔ)設(shè)施保護(hù)條例(征求意見稿)》、《網(wǎng)絡(luò)安全等級保護(hù)條例(征求意見稿)》、《電力監(jiān)控系統(tǒng)安全防護(hù)規(guī)定》(中華人民共和國國家發(fā)展和改革委員會令第14 號)、《電力行業(yè)網(wǎng)絡(luò)與信息安全管理辦法》(國能安全[2014]317 號)、《電力監(jiān)控系統(tǒng)安全防護(hù)總體方案》(國能安全[2015]36號)、《國家能源局關(guān)于加強(qiáng)電力行業(yè)網(wǎng)絡(luò)安全工作的指導(dǎo)意見》(國能安全[2018]72 號)等國家及行業(yè)相關(guān)要求中,均要求電力企業(yè)提升安全防護(hù)、應(yīng)急響應(yīng)與處置能力,從網(wǎng)絡(luò)架構(gòu)、通信傳輸、邊界防護(hù)、訪問控制、入侵防范、惡意代碼防范、安全審計(jì)、集中管控等多方面保障網(wǎng)絡(luò)架構(gòu)安全。
邊界防護(hù)方面,新能源遠(yuǎn)程集控平臺采用統(tǒng)一建設(shè)標(biāo)準(zhǔn),系統(tǒng)部署堅(jiān)持“安全分區(qū)、網(wǎng)絡(luò)專用、橫向隔離、縱向認(rèn)證”的原則,產(chǎn)控制大區(qū)網(wǎng)絡(luò)與管理信息大區(qū)網(wǎng)絡(luò)進(jìn)行物理隔離,兩網(wǎng)之間部署符合電力系統(tǒng)要求的單向隔離裝置(下文簡稱為“網(wǎng)閘”),并確保單向隔離裝置策略配置安全有效,禁止任何穿越邊界的E-Mail、Web、Telnet、Rlogin、FTP 等通用網(wǎng)絡(luò)服務(wù)。
市場擁有科東、南瑞正反向隔離裝置,珠海鴻瑞正向隔離裝置,正反向隔離裝置的存在,使得信息的上送下達(dá)需要很多的限制。目前大部分使用隔離裝置的廠家,在進(jìn)行網(wǎng)閘間數(shù)據(jù)通信都需要自己封裝數(shù)據(jù)通信模塊,其中不乏與自己本身產(chǎn)品耦合度比較高。
由于正反向隔離裝置,分布在場站測和集控側(cè)的軟件之間無法通過簡單的TCP、UDP 等協(xié)議實(shí)現(xiàn)信息的上送和下達(dá)。本文提出一種屏蔽場站側(cè)、集控側(cè)之間的正反向隔離裝置,實(shí)現(xiàn)場站側(cè)、集控側(cè)兩側(cè)部署的軟件無需對正反向隔離裝置進(jìn)行改造,直接通過本文提出的方法進(jìn)行控制指令的下發(fā),指令反饋的上送,以及其它生產(chǎn)數(shù)據(jù)的上送,讓上下層軟件可以無感知連接。
本文利用正反向網(wǎng)閘通信原理,面向電力安全I(xiàn) 區(qū),設(shè)計(jì)出一個基于正反向網(wǎng)閘的數(shù)據(jù)通信方案。新設(shè)計(jì)的數(shù)據(jù)通信方案能夠無縫銜接已成熟軟件架構(gòu),主要用于完成控制指令的下發(fā),指令反饋的上送,以及其他生產(chǎn)數(shù)據(jù)的上送功能。方案將控制指令與生產(chǎn)數(shù)據(jù)分開,控制指令因?yàn)榇嬖谏纤秃拖逻_(dá),主要基于控制轉(zhuǎn)發(fā)中心和網(wǎng)閘適配程序完成;生產(chǎn)數(shù)據(jù)上送主要通過正向網(wǎng)閘上送,僅采用網(wǎng)閘適配程序完成。安全I(xiàn) 區(qū)的數(shù)據(jù)傳輸總架構(gòu)如圖1 所示。
圖1 安全I(xiàn) 區(qū)的數(shù)據(jù)傳輸總架構(gòu)
如圖所示:安全I(xiàn) 區(qū)數(shù)據(jù)傳輸過程中,分為兩種情況,一種是存在正反向隔離裝置的線路,一種是沒有網(wǎng)閘裝置的線路;控制指令都是通過控制轉(zhuǎn)發(fā)中心進(jìn)行上送下達(dá),經(jīng)過正反向隔離裝置的鏈路,在上層和下層都存在網(wǎng)閘適配程序,用于封裝正反向隔離裝置,實(shí)現(xiàn)上下層程序無縫通信,如同沒有網(wǎng)閘裝置的線路。
控制轉(zhuǎn)發(fā)中心根據(jù)一區(qū)建設(shè)需要主要完成將SCADA 程序中控制指令的轉(zhuǎn)發(fā)到ECELL 中以及接收ECELL 反饋的控制指令的工作。其中SCADA 為集控建設(shè)中信息展示控制軟件,ECELL 為電力信息采集控制指令轉(zhuǎn)發(fā)軟件,二者都為架構(gòu)相對成熟的軟件,這里對其建設(shè)原理不做描述。
控制轉(zhuǎn)發(fā)中心上層與Kafka 總線相連,不予具體程序相連,屏蔽了對不同程序的差異性,下層通過TCP 服務(wù)端接收下層程序連接,在集控I 區(qū)建設(shè)中,就是于ECELL 和網(wǎng)閘適配模塊相連接。
控制轉(zhuǎn)發(fā)中心功能模塊:
2.1.1 Kafka 操作模塊
通過Kafka 消費(fèi)者訂閱Topic 與上層程序(SCADA)交互,接受SCADA 控制指令,以及通過Kafka 生產(chǎn)折將反饋指令(ECELL/網(wǎng)閘適配器模塊服務(wù)端接收的指令)反饋給上層程序(SCADA)。
2.1.2 TCP 服務(wù)端(ECELL/網(wǎng)閘適配端)
以TCP 協(xié)議與下層程序(ECELL/網(wǎng)閘適配器程序)交互(分為無網(wǎng)閘、有網(wǎng)閘兩種情況,即一個客戶端存在無網(wǎng)閘、有網(wǎng)閘兩種情況下兩路地址)。將上層程序(SCADA)控制指令發(fā)送給ECELL/網(wǎng)閘適配器程序,以及接受ECELL 執(zhí)行遙控指令的反饋信息。
2.1.3 雙地址功能
為了適應(yīng)雙網(wǎng)絡(luò)環(huán)境(不經(jīng)正反向隔離網(wǎng)閘的鏈路、經(jīng)正反向隔離網(wǎng)閘的鏈路兩種情況),控制轉(zhuǎn)發(fā)中心對于同一下層程序(ECELL)客戶端,支持下層程序(ECELL)客戶端地址以及屏蔽網(wǎng)閘的網(wǎng)閘適配器地址兩個通道。
2.1.4 主備選擇及心跳檢測功能
控制轉(zhuǎn)發(fā)中心定時與下層模塊(已連接客戶端模塊)進(jìn)行心跳檢測(發(fā)送心跳報(bào)文),檢測不通過,則主動斷開客戶端連接。
對于一個客戶端的兩個地址,如果主地址鏈路暢通,則主動斷開從地址,并不接受從地址連接。若主地址心跳不通過,再接收從地址連接。
網(wǎng)閘適配模塊的主要作用,是屏蔽正反向網(wǎng)閘對上下兩層程序交互的影響。它的存在如同一根網(wǎng)線一樣,將上下兩層程序連接在一起,實(shí)現(xiàn)信息的直接通信,而不需要考慮信息隔離的影響。
2.2.1 組成部分
網(wǎng)閘適配模塊分為網(wǎng)閘上層適配模塊以及網(wǎng)閘下層適配模塊兩部分。
2.2.1.1 網(wǎng)閘上層適配模塊。上層適配模塊包括TCP 的客戶端、TCP 的服務(wù)端、反向網(wǎng)閘客戶端、正向信息緩存隊(duì)列以及反向信息緩存隊(duì)列。其中TCP 的客戶端主要與上層的程序相連,此處為ECELL 和控制轉(zhuǎn)發(fā)中心;TCP 的服務(wù)端主要用于接收穿越正向網(wǎng)閘過來的信息(主要為控制指令的反饋信息和電力數(shù)據(jù)信息);反向網(wǎng)閘客戶端主要基于反向網(wǎng)閘通信規(guī)則,將上層程序下發(fā)控制指令發(fā)送到反向網(wǎng)閘另一端;正向信息緩存隊(duì)列以及反向信息緩存隊(duì)列主要用于暫存上送下達(dá)的信息。
2.2.1.2 網(wǎng)閘下層適配模塊。下層適配模塊包括TCP 的服務(wù)端、TCP 的客戶端、反向網(wǎng)閘服務(wù)端、正向信息緩存隊(duì)列以及反向信息緩存隊(duì)列。其中TCP 的服務(wù)端主要用于接收下層程序上送/反饋的信息,TCP 的客戶端主要基于正向網(wǎng)閘通信規(guī)則,將信息發(fā)送給正向網(wǎng)閘另一端;反向網(wǎng)閘服務(wù)端用于接收反向網(wǎng)閘客戶端發(fā)送過來的控制指令;正向信息緩存隊(duì)列以及反向信息緩存隊(duì)列主要用于暫存上送下達(dá)的信息。
2.2.2 心跳檢測功能
上層適配模塊(A 側(cè))和下層適配模塊(B 側(cè))需要檢測鏈路的狀態(tài),來確保鏈路通暢,即定時B 側(cè)模塊向A 側(cè)模塊發(fā)送心跳報(bào)文(0X10 0X04 0X2A 0X16),A 側(cè)收到心跳,利用正向網(wǎng)閘可回復(fù)1 字節(jié)特性,回復(fù)心跳確認(rèn)幀0X00。
2.2.3 程序運(yùn)行模式
2.2.3.1 程序運(yùn)行時,首先上層適配模塊啟動TCP Server 端,用于等待連接。下層適配模塊啟動TCP Client 端,用于不斷連接上層適配模塊的TCP Server。
2.2.3.2 當(dāng)下層適配模塊的TCP Client 連接上服務(wù)端后,定時發(fā)送心跳報(bào)文檢測。
2.2.3.3 上層適配模塊在心跳超時時間內(nèi)檢測是否收到心跳報(bào)文,如果符合則去檢測上層適配模塊中TCP Client 的狀態(tài),如果TCP Client 處于斷開狀態(tài),則不斷去重新創(chuàng)建TCP Client連接;如果TCP Client 處于連接狀態(tài),則保持當(dāng)前連接;當(dāng)收到心跳報(bào)文且TCP Client 狀態(tài)為連接時,利用正向網(wǎng)閘可回復(fù)1字節(jié)特性,回復(fù)心跳確認(rèn)幀0X00,如果在心跳超時時間內(nèi)沒有檢測到心跳報(bào)文,則主動斷開上層適配模塊中TCP Client 連接。
2.2.3.4 下層適配模塊在心跳超時時間內(nèi)檢測到心跳回復(fù)報(bào)文,則去檢測下層適配模塊TCP Server 狀態(tài),如果TCP Server狀態(tài)為未創(chuàng)建狀態(tài),則主動創(chuàng)建TCP Server;如果TCP Server 已經(jīng)創(chuàng)建,則維持該狀態(tài)。如果在心跳超時時間內(nèi)沒有檢測到心跳回復(fù)報(bào)文,則主動銷毀該TCP Server。
2.2.3.5 上下層適配模塊中反向網(wǎng)閘模塊根據(jù)需要可配置是否啟用,如果不啟動,則網(wǎng)閘適配模塊不會進(jìn)行控制指令的下達(dá),啟動狀態(tài)下則會將接收的控制指令下達(dá)。
2.2.3.6 上層適配模塊TCP Client 接收到控制指令后,會通過反向網(wǎng)閘客戶端發(fā)送給下層反向網(wǎng)閘服務(wù)端,下層適配模塊TCP Server 會將控制指令下發(fā)到下層程序。
2.2.3.7 下層適配模塊TCP Server 端接受下層程序上送的電力數(shù)據(jù)及控制反饋指令。通過下層適配模塊TCP Client 端發(fā)送給上層適配模塊TCP Server 端,上層適配模塊TCP Client 又會將TCP Server 端接收到信息發(fā)送給上層程序。
綜上所述,本文提出的面向電力安全一區(qū)的數(shù)據(jù)傳輸方法,屏蔽正反向網(wǎng)閘的通信方式,內(nèi)部封裝了正反向網(wǎng)閘通信機(jī)制。能夠?qū)崿F(xiàn)自動檢測網(wǎng)閘間網(wǎng)絡(luò)鏈路和通信狀態(tài),并將鏈路狀態(tài)模擬出通信中斷或網(wǎng)絡(luò)中斷的狀態(tài),告知給上下層程序,實(shí)現(xiàn)上下層程序的無感知連接,并將控制指令單獨(dú)抽離,形成控制轉(zhuǎn)發(fā)中心,形成控制指令的統(tǒng)一上送下達(dá),并考慮了包含雙網(wǎng)絡(luò)通信、故障切換等現(xiàn)實(shí)通訊狀況。