DNP3.0 协议分析简介
DNP(Distributed Network Protocol,分布式网络规约)是一种应用于自动化组件之间的通讯协议,常见于电力、水处理等行业。SCADA可以使用DNP协议与主站、RTU、及IED进行通讯。DNP协议标准由IEEE提出,参考了IEC 870-5、以及其他一些IEC协议。主要为了解决SCADA行业中,协议混杂、没有公认标准的问题。DNP协议有一定的可靠性,这种可靠性可以用来对抗恶劣环境中产生的电磁干扰、元件老化等信号失真现象,但不保证在黑客的攻击下、或者恶意破坏控制系统的情况下的可靠性。DNP协议提供了对数据的分片、重组、数据校验、链路控制、优先级等一些列的服务,在协议中大量使用了CRC校验来保证数据的准确性。
DNP3.0 协议的特点
DNP3.0规约是一种分布式网络协议,适用于要求高度安全、中等速率和中等吞吐量的数据通信领域。 DNP3.0规约以IEC870-5标准为基础,该规约非常灵活,满足目前和未来发展的要求,且与硬件结构无关。 DNP3.0规约采用网络通信方式。DNP3.0规约支持点对点、一点多址、多点多址和对等的通信方式。DNP3.0规约支持问答式和自动上报数据传输方式。 DNP3.0规约支持通信冲突碰撞避免/检测方式,能保证数据传输的可靠性。DNP3.0规约支持传送带时标的量,尤其有利于配电自动化系统采集分时电度值和分析事故原因。 灵活采取适当的扫描方式,DNP3.0规约可以在一定程度上实现实时优先级。
协议格式
DNP3.0规约的文本共分4部分:数据链路层规约,传输功能,应用层规约及数据对象库。
1.所需软硬件
实验环境:WIN XP或者WIN 7系统
实验软件:Run Protocol Test Harness

实验环境
Run Protocol Test Harness是一个可以实现兼具了DNP3.0,Modbus Plus等协议的软件,它基本兼容所有现在主流的WIN XP/7/10。
1.安装过程

1.DNP3.0模拟演示

报文格式

DNP规约共分为3层:链路层、传输层和应用层。
捕获报文分析

攻击方式
没有十全十美的协议,所以DNP3.0也存在一些漏洞:
1.中间人攻击
2.拒绝服务攻击
2. 攻击方式——中间人攻击
执行中间人攻击时,入侵者直接或间接接入被攻击的SCADA系统的网络中,入侵者先保持静默,拦截总线上的正常报文,获取当前总线上的设备地址,然后模拟系统的主站或外站,向系统内的某个合法设备发送错误的报文,使SCADA系统工作异常。中间人攻击可以分为模仿主站攻击和模仿外站攻击。

2. 攻击方式——拒绝服务攻击
在拒绝服务攻击中,入侵者向被攻击对象持续、快速、大量发送无意义的报文,使被攻击者忙于应付这些无意义的报文,而无法执行正常操作,进而使系统瘫痪。

3. 防御措施——校验传输报文
为了防止中间人攻击,可以在DNP3.0总线协议中增加校验报文,校验报文中含有校验字节,将其附加在某条正常通信报文的后面,发送到报文的接收方。接收方收到校验报文后,读取其中的校验字节,然后根据事先预置的校验算法计算校验值,并在响应报文中将校验值回送到校验报文的发出方。
校验传输报文
为提高通信效率,发出方无需在每条请求中都增加校验字节,仅在满足以下条件时应当发出校验报文。
1. 需要校验报文接收方的合法性;
2. 达到随机时间;
3. 在发出控制命令、读取关键数据时;
4. 某次通信时接收方收到异常报文,则在下一次通信时应 当发送校验报文。
预置白名单列表
为防止中间人攻击和拒绝服务攻击,可以在SCADA系统的每个设备中预置白名单列表,即设备只能与白名单上所列举的设备进行通信。
加密报文内容
在上述两种方法中,主要是对校验码和标识码进行了加密,而报文内容仍是明文,所以不具有防窃听的功能。为了防止入侵者窃听通信内容,可以进一步对报文加密。如果对DNP3.0报文的所有内容都加密,会严重影响SCADA系统的数据采集速度,所以仅对报文中的链路层报文头和应用层报文头中的功能码进行加密即可。

