基于网络分布式规约的配电网安全防护方案应用
2019-04-02杨宇荣许永军杜东威
杨宇荣,许永军,杜东威,韩 超
(长园深瑞继保自动化有限公司,广东 深圳 518057)
0 引言
DNP3.0(网络分布式规约)是由美国GEHARRIS公司最早制订的,基于IEC 870-5标准的增强型体系结构网络分布式规约[1]。目前该通信协议是配电自动化技术中一种主流通信规约,该规约高度灵活并且末端开放,不含任何目标硬件的专用结构,适合高可靠、中等速度和中等吞吐量的应用。鉴于此,现在越来越多的国家及地区的RTU(远程终端单元)与SCADA(数据采集与监视控制系统)之间选用该通信规约。
随着智能配电网技术的发展和电网安全稳定控制技术的提高,对通信的要求进一步增强[2]。但是目前国内外对于DNP3.0的应用都是因为其高效、可靠的数据传输和控制功能,主要使用规约中的数据查询、时钟同步、控制输出、文件传输等机制,而对于通信的安全防护并没有太大的重视。
最新的DNP3.0中提出了一种基于IEC/TC 62351-5的安全防护方案[3]。该方案针对部分重要操作,采用基于挑战-应答[4]的安全验证机制,确保操作双方的有效身份,从而可以避免来自第三方的恶意攻击。
本文以长园深瑞继保自动化有限公司的PRS-3300配电自动化终端为例,介绍基于DNP3.0的配电网安全防护实用化应用方案。该方案采用模块化设计,把安全防护功能实例化为具体接口,易于实现,同时将安全防护参数在调试工具中展示出来,便于运维人员后期维护。该方案在工程应用中对配电网的安全运行起到了良好的保护作用,可以在众多使用DNP3.0规约的SCADA系统中进行推广。
1 安全防护功能概述
DNP3.0是基于IEC 870-5的标准通讯协议,采用了OSI七层模型中的三层:物理层、数据链路层和应用层,其结构为增强型协议结构,这种结构使得数据传送的可靠性大大提高,同时也便于软件编程的模块化[5]。
如图1所示,DNP3.0共分为4部分:数据链路层、传输功能、应用层及数据对象库。
图1 DNP3.0架构
DNP3.0的安全防护功能是在原有架构基础上,在应用层加入安全验证功能,如图2所示。不同的用户可以选择各自需要进行安全验证的报文类型,主站和终端的通信过程中只针对确定类型的报文进行安全验证,不需要针对所有的报文类型进行验证,这样有效控制了启用安全验证功能时的数据流量,减轻网络带宽压力。
图2 DNP3.0安全防护架构
整个验证功能主要包括[4]:发起挑战、应答挑战、验证、验证失败、主动模式、变更密钥、管理会话密钥、管理升级密钥、安全统计。
1.1 两个基本概念
1.1.1 挑战-应答机制
该机制为DNP3.0安全防护的根本,主站和终端均可以主动发起挑战。通信双方需要约定好需要进行安全验证的ASDU(应用服务数据单元),并将此类ASDU视为“重要”类型的ASDU。
1.1.2 消息验证码
MAC(消息验证码)[7]是由主站或外站基于待验证的ASDU计算得到,算法一般为SHA-HMAC,AES-GMAC算法其中的一种。
1.2 安全验证流程
重要的ASDU在处理之前,均需要进行验证操作。为了防范重复攻击,每次的验证数据均需要随机生成。发起挑战方通过报文向应答方传递MAC算法,以便应答方生成其应答报文。发起方收到应答方的应答报文后,进行验证,验证通过后才可以进行后续报文交互,如果验证失败,那么发起挑战方将忽略之前收到的ASDU,并且可以发送一帧验证失败报文,流程见图3、图4。
图3 常规安全验证通过流程
图4 常规安全验证失败流程
为了节约通讯带宽,应答方可以在发送包含重要操作信息的报文时,将MAC值包含在同一个ASDU中,这样就省去了挑战、应答报文,从而减少了报文交互。DNP3.0中的所有需要验证的操作均需支持主动模式,但主动模式又是可以通过配置来决定是否启用。其报文交互流程如图5、图6所示。
图5 主动模式下的安全验证通过流程
图6 主动模式下的安全验证失败流程
1.3 密钥管理
DNP3.0安全认证方案中用到两种密钥[8]:会话密钥、升级密钥。
会话密钥是最常用到的密钥,对于通信的不同方向其会话密钥是不一样的。主站和终端之间的通信一旦建立后,主站会立即向终端初始化会话密钥,并定期变更该密钥。
升级密钥是主站用来更改会话密钥的,当主站需要更新会话密钥时,会对新的会话密钥进行加密,并通过“更改密钥报文”将其发送出去。升级密钥一般很少进行更换,除非安全政策发生改变或者该密钥被盗时。
1.4 安全统计
DNP3.0安全验证机制有一个重要特征,就是操作人员可以发觉一些对DNP3.0网络的攻击[9]。主站进行安全验证的同时必须对相应的操作记录进行统计,例如验证失败、事件报告的数量开始超过其预设阈值。
随着国内外配电网建设的不断推进,配电自动化终端与主站之间通信的安全可靠性越来越重要,配电终端PRS-3000系列产品的DNP3.0中增加了安全验证模块,并在泰国MEA电网公司的工程中得到了应用。
2 安全防护方案
2.1 应用层功能码及数据对象
在原有终端到主站方向的应用层功能码中增加功能码0x83,用于安全验证请求上送的报文;在原有主站到终端方向的应用层功能码中增加功能码0x20,用于安全验证请求。
此外,还增加了DNP3.0关于安全验证处理的数据对象库,见表1。此安全防护方案没有涉及通过规约对升级密钥进行变更。
表1 安全验证数据对象
2.2 需要安全验证的ASDU
目前配电终端DNP3.0支持多种ASDU类型,在安全防护方案中需要进行安全验证的ASDU种类如表2所示。
表2 需要安全验证的ASDU功能码
2.3 安全接口设计及调用流程
为了在现有DNP3.0组件中实现安全防护功能,特地设计了5个安全防护接口。
处理主动验证:Rtu_DNP_Para_SA_AgrsChallenge
处理其他验证:Rtu_DNP_Para_SA_Else
发送挑战报文:Rtu_DNP_Send_SA_Challenge
发送密钥状态:Rtu_DNP_Send_SA_Session-KeyStatus
发送验证错误:Rtu_DNP_Send_SA_Error
DNP3.0安全验证功能可配置投入/退出,以下流程均默认在该功能投入的情况下进行。
当终端收到报文中的应用层功能码不是0x20时,按照常规原有流程处理。
当终端收到报文中的应用层功能码为0x20且数据对象为主动请求模式(组别0x78,变体0x03)时,调用Rtu_DNP_Para_SA_AgrsChallenge接口进行解析。
当终端收到报文中的应用层功能码为0x20且数据对象为其他安全验证数据对象时,则调用Rtu_DNP_Para_SA_Else接口进行解析并备份当前收到的报文。如果解析出数据对象为“身份验证回复”报文(组别 0x78,变体0x02),就对回复信息进行验证,验证失败则通过Rtu_DNP_Send_SA_Error接口回复验证失败报文,验证通过则回到正常流程解析之前备份的报文。如果解析出数据对象为“当前密钥状态”报文(组别0x78,变体0x04),调用接口 Rtu_DNP_Send_SA_SessionKey Status,回复会话密钥的当前状态。如果解析出数据对象为“更改密钥”报文(组别0x78,变体0x06),对报文中的密钥信息进行解密,解密失败则通过Rtu_DNP_Send_SA_Error接口回复验证失败报文,解密通过则更新密钥后调用接口Rtu_DNP_Send_SA_SessionKeyStatus,回复会话密钥的当前状态。
“鲲龙”AG-600的出现恰好可以让这些问题迎刃而解。它只需要一块水深超过2.5米的水域便可实现降落,同时其自身的大载重量也确保了投送量的足够多。
当终端收到报文中的应用层功能码为表2中的一种时,调用Rtu_DNP_Send_SA_Challenge接口发送挑战报文。
2.4 算法选择
DNP3.0的安全防护方案挑战机制中的MAC值是通过hash[10]算法计算得到,实际应用中我们使用了HAMC SHA-1,HMAC SHA-256两种。
对于会话密钥变更需要用到的加解密算法则使用了AES-128,AES-256[11]两种。
3 安全防护应用
3.1 工程概况
工程配电终端使用网口与SCADA[12]进行通信,SCADA给每一台终端分配一个独立的网络IP。终端网口首先接到就地的光电转换器,再由光电转换器接入到光纤网络,最终通过上层交换机接入到SCADA后台服务器,如图7所示。
图7 工程应用网络架构
终端和SCADA的通信除了DNP3.0基本配置(规约地址、FRAGMENT大小、校时周期等)以外,还增加了安全防护相关的配置,见表3。安全防护功能启用,但是主动验证模式退出(该项配置需要和主站保持一致,如果主站投入主动模式那么终端也需要同步启用该功能)。
表3 安全防护参数配置
此外,用于更新会话密钥的升级密钥事先存储在终端文件系统中的二进制文件中,该密钥由SCADA方告知运维人员后就地修改。
3.2 安全防护示例
DNP3.0安全防护报文基本可分两类:会话密钥变更和对重要ASDU的安全验证。
下面以实际工程中终端与主站之间的初始化密钥、遥控[14]选择操作报文为例,展示DNP3.0的安全防护实际流程。其阴影部分为校验码[15],所有报文数据均为十六进制数。
3.2.1 初始化会话密钥
带安全防护功能的DNP3.0,链路初始化之前会首先进行会话密钥的初始化,该流程由主站发起,详见表4—表7。
表4 主站→终端(会话密钥状态查询报文)
表5 终端→主站(会话密钥状态应答报文)
表6 主站→终端(会话密钥变更报文)
表7 终端→主站(会话密钥状态应答报文)
3.2.2 遥控操作
终端收到主站发出的遥控选择、遥控执行报文后主动发起挑战,对主站后续的应答报文认证通过后才执行遥控操作,以下为遥控选择流程报文(见表 8—表 11)。
表8 主站→终端(遥控选择)
到目前为止,该工程已投入使用半年多,终端与SCADA之间通信正常,没有出现网络异常现象。将配电网基本运行工况及时上报到SCADA的同时,确保了网络的正常运行。
4 结语
随着配电网对通信安全防护要求的提升,DNP3.0等规约的安全防护方案需求也将越来越突出。本文从DNP3.0的基本安全防护架构开始阐述,详细描述了安全防护的设计方案及工程应用,对DNP3.0在配电网领域的推广应用具有重要意义。
表9 终端→主站(挑战报文)
表10 主站→终端(应答报文)
表11 终端→主站(遥控选择应答报文)