楊宇榮,許永軍,杜東威,韓 超
(長園深瑞繼保自動化有限公司,廣東 深圳 518057)
DNP3.0(網(wǎng)絡(luò)分布式規(guī)約)是由美國GEHARRIS公司最早制訂的,基于IEC 870-5標準的增強型體系結(jié)構(gòu)網(wǎng)絡(luò)分布式規(guī)約[1]。目前該通信協(xié)議是配電自動化技術(shù)中一種主流通信規(guī)約,該規(guī)約高度靈活并且末端開放,不含任何目標硬件的專用結(jié)構(gòu),適合高可靠、中等速度和中等吞吐量的應(yīng)用。鑒于此,現(xiàn)在越來越多的國家及地區(qū)的RTU(遠程終端單元)與SCADA(數(shù)據(jù)采集與監(jiān)視控制系統(tǒng))之間選用該通信規(guī)約。
隨著智能配電網(wǎng)技術(shù)的發(fā)展和電網(wǎng)安全穩(wěn)定控制技術(shù)的提高,對通信的要求進一步增強[2]。但是目前國內(nèi)外對于DNP3.0的應(yīng)用都是因為其高效、可靠的數(shù)據(jù)傳輸和控制功能,主要使用規(guī)約中的數(shù)據(jù)查詢、時鐘同步、控制輸出、文件傳輸?shù)葯C制,而對于通信的安全防護并沒有太大的重視。
最新的DNP3.0中提出了一種基于IEC/TC 62351-5的安全防護方案[3]。該方案針對部分重要操作,采用基于挑戰(zhàn)-應(yīng)答[4]的安全驗證機制,確保操作雙方的有效身份,從而可以避免來自第三方的惡意攻擊。
本文以長園深瑞繼保自動化有限公司的PRS-3300配電自動化終端為例,介紹基于DNP3.0的配電網(wǎng)安全防護實用化應(yīng)用方案。該方案采用模塊化設(shè)計,把安全防護功能實例化為具體接口,易于實現(xiàn),同時將安全防護參數(shù)在調(diào)試工具中展示出來,便于運維人員后期維護。該方案在工程應(yīng)用中對配電網(wǎng)的安全運行起到了良好的保護作用,可以在眾多使用DNP3.0規(guī)約的SCADA系統(tǒng)中進行推廣。
DNP3.0是基于IEC 870-5的標準通訊協(xié)議,采用了OSI七層模型中的三層:物理層、數(shù)據(jù)鏈路層和應(yīng)用層,其結(jié)構(gòu)為增強型協(xié)議結(jié)構(gòu),這種結(jié)構(gòu)使得數(shù)據(jù)傳送的可靠性大大提高,同時也便于軟件編程的模塊化[5]。
如圖1所示,DNP3.0共分為4部分:數(shù)據(jù)鏈路層、傳輸功能、應(yīng)用層及數(shù)據(jù)對象庫。
圖1 DNP3.0架構(gòu)
DNP3.0的安全防護功能是在原有架構(gòu)基礎(chǔ)上,在應(yīng)用層加入安全驗證功能,如圖2所示。不同的用戶可以選擇各自需要進行安全驗證的報文類型,主站和終端的通信過程中只針對確定類型的報文進行安全驗證,不需要針對所有的報文類型進行驗證,這樣有效控制了啟用安全驗證功能時的數(shù)據(jù)流量,減輕網(wǎng)絡(luò)帶寬壓力。
圖2 DNP3.0安全防護架構(gòu)
整個驗證功能主要包括[4]:發(fā)起挑戰(zhàn)、應(yīng)答挑戰(zhàn)、驗證、驗證失敗、主動模式、變更密鑰、管理會話密鑰、管理升級密鑰、安全統(tǒng)計。
1.1.1 挑戰(zhàn)-應(yīng)答機制
該機制為DNP3.0安全防護的根本,主站和終端均可以主動發(fā)起挑戰(zhàn)。通信雙方需要約定好需要進行安全驗證的ASDU(應(yīng)用服務(wù)數(shù)據(jù)單元),并將此類ASDU視為“重要”類型的ASDU。
1.1.2 消息驗證碼
MAC(消息驗證碼)[7]是由主站或外站基于待驗證的ASDU計算得到,算法一般為SHA-HMAC,AES-GMAC算法其中的一種。
重要的ASDU在處理之前,均需要進行驗證操作。為了防范重復攻擊,每次的驗證數(shù)據(jù)均需要隨機生成。發(fā)起挑戰(zhàn)方通過報文向應(yīng)答方傳遞MAC算法,以便應(yīng)答方生成其應(yīng)答報文。發(fā)起方收到應(yīng)答方的應(yīng)答報文后,進行驗證,驗證通過后才可以進行后續(xù)報文交互,如果驗證失敗,那么發(fā)起挑戰(zhàn)方將忽略之前收到的ASDU,并且可以發(fā)送一幀驗證失敗報文,流程見圖3、圖4。
圖3 常規(guī)安全驗證通過流程
圖4 常規(guī)安全驗證失敗流程
為了節(jié)約通訊帶寬,應(yīng)答方可以在發(fā)送包含重要操作信息的報文時,將MAC值包含在同一個ASDU中,這樣就省去了挑戰(zhàn)、應(yīng)答報文,從而減少了報文交互。DNP3.0中的所有需要驗證的操作均需支持主動模式,但主動模式又是可以通過配置來決定是否啟用。其報文交互流程如圖5、圖6所示。
圖5 主動模式下的安全驗證通過流程
圖6 主動模式下的安全驗證失敗流程
DNP3.0安全認證方案中用到兩種密鑰[8]:會話密鑰、升級密鑰。
會話密鑰是最常用到的密鑰,對于通信的不同方向其會話密鑰是不一樣的。主站和終端之間的通信一旦建立后,主站會立即向終端初始化會話密鑰,并定期變更該密鑰。
升級密鑰是主站用來更改會話密鑰的,當主站需要更新會話密鑰時,會對新的會話密鑰進行加密,并通過“更改密鑰報文”將其發(fā)送出去。升級密鑰一般很少進行更換,除非安全政策發(fā)生改變或者該密鑰被盜時。
DNP3.0安全驗證機制有一個重要特征,就是操作人員可以發(fā)覺一些對DNP3.0網(wǎng)絡(luò)的攻擊[9]。主站進行安全驗證的同時必須對相應(yīng)的操作記錄進行統(tǒng)計,例如驗證失敗、事件報告的數(shù)量開始超過其預設(shè)閾值。
隨著國內(nèi)外配電網(wǎng)建設(shè)的不斷推進,配電自動化終端與主站之間通信的安全可靠性越來越重要,配電終端PRS-3000系列產(chǎn)品的DNP3.0中增加了安全驗證模塊,并在泰國MEA電網(wǎng)公司的工程中得到了應(yīng)用。
在原有終端到主站方向的應(yīng)用層功能碼中增加功能碼0x83,用于安全驗證請求上送的報文;在原有主站到終端方向的應(yīng)用層功能碼中增加功能碼0x20,用于安全驗證請求。
此外,還增加了DNP3.0關(guān)于安全驗證處理的數(shù)據(jù)對象庫,見表1。此安全防護方案沒有涉及通過規(guī)約對升級密鑰進行變更。
表1 安全驗證數(shù)據(jù)對象
目前配電終端DNP3.0支持多種ASDU類型,在安全防護方案中需要進行安全驗證的ASDU種類如表2所示。
表2 需要安全驗證的ASDU功能碼
為了在現(xiàn)有DNP3.0組件中實現(xiàn)安全防護功能,特地設(shè)計了5個安全防護接口。
處理主動驗證:Rtu_DNP_Para_SA_AgrsChallenge
處理其他驗證:Rtu_DNP_Para_SA_Else
發(fā)送挑戰(zhàn)報文:Rtu_DNP_Send_SA_Challenge
發(fā)送密鑰狀態(tài):Rtu_DNP_Send_SA_Session-KeyStatus
發(fā)送驗證錯誤:Rtu_DNP_Send_SA_Error
DNP3.0安全驗證功能可配置投入/退出,以下流程均默認在該功能投入的情況下進行。
當終端收到報文中的應(yīng)用層功能碼不是0x20時,按照常規(guī)原有流程處理。
當終端收到報文中的應(yīng)用層功能碼為0x20且數(shù)據(jù)對象為主動請求模式(組別0x78,變體0x03)時,調(diào)用Rtu_DNP_Para_SA_AgrsChallenge接口進行解析。
當終端收到報文中的應(yīng)用層功能碼為0x20且數(shù)據(jù)對象為其他安全驗證數(shù)據(jù)對象時,則調(diào)用Rtu_DNP_Para_SA_Else接口進行解析并備份當前收到的報文。如果解析出數(shù)據(jù)對象為“身份驗證回復”報文(組別 0x78,變體0x02),就對回復信息進行驗證,驗證失敗則通過Rtu_DNP_Send_SA_Error接口回復驗證失敗報文,驗證通過則回到正常流程解析之前備份的報文。如果解析出數(shù)據(jù)對象為“當前密鑰狀態(tài)”報文(組別0x78,變體0x04),調(diào)用接口 Rtu_DNP_Send_SA_SessionKey Status,回復會話密鑰的當前狀態(tài)。如果解析出數(shù)據(jù)對象為“更改密鑰”報文(組別0x78,變體0x06),對報文中的密鑰信息進行解密,解密失敗則通過Rtu_DNP_Send_SA_Error接口回復驗證失敗報文,解密通過則更新密鑰后調(diào)用接口Rtu_DNP_Send_SA_SessionKeyStatus,回復會話密鑰的當前狀態(tài)。
“鯤龍”AG-600的出現(xiàn)恰好可以讓這些問題迎刃而解。它只需要一塊水深超過2.5米的水域便可實現(xiàn)降落,同時其自身的大載重量也確保了投送量的足夠多。
當終端收到報文中的應(yīng)用層功能碼為表2中的一種時,調(diào)用Rtu_DNP_Send_SA_Challenge接口發(fā)送挑戰(zhàn)報文。
DNP3.0的安全防護方案挑戰(zhàn)機制中的MAC值是通過hash[10]算法計算得到,實際應(yīng)用中我們使用了HAMC SHA-1,HMAC SHA-256兩種。
對于會話密鑰變更需要用到的加解密算法則使用了AES-128,AES-256[11]兩種。
工程配電終端使用網(wǎng)口與SCADA[12]進行通信,SCADA給每一臺終端分配一個獨立的網(wǎng)絡(luò)IP。終端網(wǎng)口首先接到就地的光電轉(zhuǎn)換器,再由光電轉(zhuǎn)換器接入到光纖網(wǎng)絡(luò),最終通過上層交換機接入到SCADA后臺服務(wù)器,如圖7所示。
圖7 工程應(yīng)用網(wǎng)絡(luò)架構(gòu)
終端和SCADA的通信除了DNP3.0基本配置(規(guī)約地址、FRAGMENT大小、校時周期等)以外,還增加了安全防護相關(guān)的配置,見表3。安全防護功能啟用,但是主動驗證模式退出(該項配置需要和主站保持一致,如果主站投入主動模式那么終端也需要同步啟用該功能)。
表3 安全防護參數(shù)配置
此外,用于更新會話密鑰的升級密鑰事先存儲在終端文件系統(tǒng)中的二進制文件中,該密鑰由SCADA方告知運維人員后就地修改。
DNP3.0安全防護報文基本可分兩類:會話密鑰變更和對重要ASDU的安全驗證。
下面以實際工程中終端與主站之間的初始化密鑰、遙控[14]選擇操作報文為例,展示DNP3.0的安全防護實際流程。其陰影部分為校驗碼[15],所有報文數(shù)據(jù)均為十六進制數(shù)。
3.2.1 初始化會話密鑰
帶安全防護功能的DNP3.0,鏈路初始化之前會首先進行會話密鑰的初始化,該流程由主站發(fā)起,詳見表4—表7。
表4 主站→終端(會話密鑰狀態(tài)查詢報文)
表5 終端→主站(會話密鑰狀態(tài)應(yīng)答報文)
表6 主站→終端(會話密鑰變更報文)
表7 終端→主站(會話密鑰狀態(tài)應(yīng)答報文)
3.2.2 遙控操作
終端收到主站發(fā)出的遙控選擇、遙控執(zhí)行報文后主動發(fā)起挑戰(zhàn),對主站后續(xù)的應(yīng)答報文認證通過后才執(zhí)行遙控操作,以下為遙控選擇流程報文(見表 8—表 11)。
表8 主站→終端(遙控選擇)
到目前為止,該工程已投入使用半年多,終端與SCADA之間通信正常,沒有出現(xiàn)網(wǎng)絡(luò)異?,F(xiàn)象。將配電網(wǎng)基本運行工況及時上報到SCADA的同時,確保了網(wǎng)絡(luò)的正常運行。
隨著配電網(wǎng)對通信安全防護要求的提升,DNP3.0等規(guī)約的安全防護方案需求也將越來越突出。本文從DNP3.0的基本安全防護架構(gòu)開始闡述,詳細描述了安全防護的設(shè)計方案及工程應(yīng)用,對DNP3.0在配電網(wǎng)領(lǐng)域的推廣應(yīng)用具有重要意義。
表9 終端→主站(挑戰(zhàn)報文)
表10 主站→終端(應(yīng)答報文)
表11 終端→主站(遙控選擇應(yīng)答報文)