DNP30报告讲解.docx
《DNP30报告讲解.docx》由会员分享,可在线阅读,更多相关《DNP30报告讲解.docx(15页珍藏版)》请在冰豆网上搜索。
DNP30报告讲解
目录
1绪论2
1.1DNP3.0协议分析简介2
1.2DNP3.0协议的特点2
2协议格式3
2.1数据链路层规约3
2.2传输功能4
2.3应用规约4
2.3.1应用报文格式……...................................................................................................4
2.3.2应用报文报头字段的定义……...............................................................................5
2.3.3对象标题…...............................................................................................................5
3通信规则……............................................................................................................7
3.1链路层通讯规则…….........................................................................................................7
3.2应用层通讯规则…….........................................................................................................7
4安全和防护8
4.1安全性分析…….................................................................................................................8
4.2安全应对策略….................................................................................................................9
5ProtocolTestHarness仿真DNP3.0协议….............................................................10
6调试工具……..........................................................................................................................11
7结论……...................................................................................................................................12
参考文献………………………………………………………………………………...………..13
1本课程设计的目标
常用的SCADA系统工业总线协议主要包括IEC-60870、IEC-61850、Modbus、CIP(CommonIndustrialProtocol)、DNP3.0(DistributedNetworkProtocolVersion3.0)等。
其中IEC-60870、IEC-61850、DNP3.0总线协议比Modbus和CIP的功能全面,数据传输量较大,所以使用范围较广。
欧洲主要使用IEC协议,而北美主要使用DNP3.0协议,另外澳大利亚、英国、中国的SCADA系统也大量使用DNP3.0协议。
本文主要分析DNP3.0数据报文含义[1]。
1.1DNP3.0协议分析简介
DNP(DistributedNetworkProtocol,分布式网络规约)是一种应用于自动化组件之间的通讯协议,常见于电力、水处理等行业。
SCADA可以使用DNP协议与主站、RTU、及IED进行通讯。
DNP协议标准由IEEE提出,参考了IEC870-5、以及其他一些IEC协议。
主要为了解决SCADA行业中,协议混杂、没有公认标准的问题。
DNP协议有一定的可靠性,这种可靠性可以用来对抗恶劣环境中产生的电磁干扰、元件老化等信号失真现象,但不保证在黑客的攻击下、或者恶意破坏控制系统的情况下的可靠性。
DNP协议提供了对数据的分片、重组、数据校验、链路控制、优先级等一些列的服务,在协议中大量使用了CRC校验来保证数据的准确性。
1.2DNP3.0协议的特点
•DNP3.0规约是一种分布式网络协议,适用于要求高度安全、中等速率和中等吞吐量的数据通信领域。
•DNP3.0规约以IEC870-5标准为基础,该规约非常灵活,满足目前和未来发展的要求,且与硬件结构无关。
•DNP3.0规约采用网络通信方式。
•DNP3.0规约支持点对点、一点多址、多点多址和对等的通信方式。
•DNP3.0规约支持问答式和自动上报数据传输方式。
•DNP3.0规约支持通信冲突碰撞避免/检测方式,能保证数据传输的可靠性。
•DNP3.0规约支持传送带时标的量,尤其有利于配电自动化系统采集分时电度值和分析事故原因。
•灵活采取适当的扫描方式,DNP3.0规约可以在一定程度上实现实时优先级。
2协议格式
DNP3.0规约的文本共分4部分:
数据链路层规约,传输功能,应用层规约及数据对象库。
2.1数据链路层规约
数据链路层规约文件规定了DNP3.0版的数据链路层,链路规约数据单元(LPDU)以及数据链路服务和传输规程。
数据链路层采用一种可变帧长格式:
FT3。
FT3帧长格式:
一个FT3帧被定义为一个固定长度的报头,随后是可以选用的数据块,每个数据块附有一个l6位的CRC校验码。
固定的报头含有2个字节的起始字,一个字节的长度(LENGH),一个字节的链路层控制字(CONTROL),一个l6位的目的地址,一个16位的源地址和一个l6位的CRC校验码。
块0块1块N
-------
起始起始长度链路目的源地CRC用户CRC用户CRC
字字层控地址址校验数据校验……数据校验
0*050*64制字码码码
-------
定长的报头主体
起始字:
2字节,0x0564
长度:
1字节,是控制字、目的地址、源地址和用户数据之和。
255≥长度≥5
目的地址:
2个字节,低字节在前
源地址:
2个字节,低字节在前
用户数据:
跟在报头之后的数据块,每I6个字节一块,最后一个块包含剩下的字节,可以
是l到16个字节。
每个数据块都有一CRC循环冗余码挂在后面。
CRC循环冗余码:
2个字节。
在一个帧内,挂在每个数据块之后。
控制字与功能码:
通信控制字包含有本帧的传输方向,帧的类型以及数据流的控制信息。
76543210
DIR:
方向位(direction),表示此帧是由主站发出还是从站发向主站。
FRM:
源发标志位(primary),表示此帧是来自原发站还是来自响应站。
FCB:
帧的计数位,0、1交替变化,设计此位的目的是进行简单的纠错。
FCV:
帧的计数位的有效标志,为1时,FCB位有效。
功能码:
对于原发送方的帧:
0:
使远方链路复位
1:
使远方进程复位(Resetofuserprocess)
3:
发送用户数据,须对方确认
4:
发送用户数据,不须对方确认
9:
询问链路状态
对于从方发送帧:
0:
肯定确认
1:
否定确认
11:
回答链路状态
例如:
05 64 11 C4 29 00 01 00 70 1C
05 64:
报文头;11:
报文长度;C4:
控制域;29 00:
目的站址;01 00:
源站址;70 1C:
CRC
2.2传输功能
这部分定义对于DNP数据链路层充当伪传输层的传输层功能。
伪传输层功能专门设计用于在原方站和副方站之间传送超出链路规约数据单元(LPDU)定义长度的信息。
传输层报头数据块
其中:
传输层报头——传输控制字,1个字节;数据块——用户数据,1~249个字节。
这部分定义对于DNP数据链路层充当伪传输层的传输层功能。
伪传输层功能专门设计用于在原方站和从方站之间传送超出链路规约数据单元(LPDU)定义长度的信息。
其格式如下:
由于数据链路层的FT3帧格式中的长度字的最大限制为255,因此传输层数据块的最大长度为255-5(链路层control+source+destination)-1(TH)=249。
当应用用户数据长度大于249字 节时,传输层将以多帧报文方式传送,并每帧前加TH控制字。
如l234=249+249+249+249+238,分5帧传送。
传输层报头(TH)格式:
76543210
FIN:
此位置“1”,表示本用户数据是整个用户信息的最后一帧
FIR:
此位置“1”,表示本用户数据是整个用户信息的第一帧
序号:
表示这一数据帧是用户信息的第几帧,帧号范围为0~63,每个开始帧可以是0~63中的任何一个数字,下一帧自然增加,63以后接0
例如:
05 64 11 C4 29 00 01 00 70 1C
EE C5 01 3C 02 06 3C 03 06 3C 04 06 95 B3
EE:
传输层报头TH。
2.3应用规约
这部分定义了应用层报文(APDU)的格式。
这里,主站被定义为发送请求报文的站,而外站则为从属设备。
被请求回送报文的RTU或智能终端(IEDs)是事先规定了的。
在DNP内,只有被指定的主站能够发送应用层的请求报文,而外站则只能发送应用层的响应报文。
2.3.1应用报文格式
应用请求报文的格式:
RequestHeader
请求报文
ObjectHeader
对象标题
Data
数据
ObjectHeader
对象标题
Data
数据
应用响应报文格式:
ResponseHeader
响应报文
ObjectHeader
对象标题
Data
数据
ObjectHeader
对象标题
Data
数据
其中:
请求(响应)报头——标识报文的目的,包含应用规约控制信息(APCI);对象标题——标识后随的数据对象;数据——在对象标题内的指定类型的数据对象。
2.3.2应用报文报头字段的定义
请求报头有两个字段。
每个字段为8位的字节,说明如下:
ApplicationControl
应用控制
FunctionCode
功能码
响应报头有三个字段。
前两个字段为8位的字节,第三个字段为两个字节,说明如下:
ApplicationControl
应用控制
FunctionCode
功能码
InternalIndication
内部信号字
这里:
A.应用控制:
一个字节的长度,格式如下:
76543210
FIN
FIR
CON
序号
FIR:
此位置“1”,表示本报文分段是整个应用报文的第一个分段
FIN:
此位置“l”,表示本报文分段是整个应用报文的最后一个分段
CON:
此位置“l”,表示接受到本报文时,对方须要给予确认
序号:
表示分段的序号,1-15
B.功能码:
标识报文的目的,一个字节的长度,例如:
请求报文:
1一读,请从站送所指定的数据对象
2一写,向从站存入指定的对象
响应报文:
0一确认
129一响应
130—主动上送
C.内部信号:
共两个字节,l6位,每一位分别表示从站的当前的各种状态。
例如:
05 64 11 C4 29 00 01 00 70 1C
EE C5 01 3C 02 06 3C 03 06 3C 04 06 95 B3
C5 01 3C 02 06 3C 03 06 3C 04 06 95B3部分即为请求帧的应用层报文。
2.3.3对象标题
报文的对象标题指定包含在报文中的数据对象或是被用来响应此报文的数据对象。
格式如下:
Object
对象
Qualifier
限定词
Range
变程(范围)
A.对象(Object):
两个字节,指定对象组以及跟在标题后面的对象的变化。
对象段的格式如下:
Group
对象组
Variation
变体
对象段规定一个对象组和在该组内的对象变体。
对象的组别与变体结合起来可以唯一的规定报文所指定的对象。
对象组指定数据的基本形式(如:
模拟输入),对象变体指定数据的形式(如16位模拟输入或32位模拟输入)。
B.限定词(Qualifier)、变程(范围,Range)
限定词为一个8位的字节段,规定交程段的意义。
变程说明数据对象的数量,起点和终点的索引成所讨论的对象的标识符。
限定词段的格式如下:
R
IndexSize
索引规模
QualifierCode
4位限定词码
其中:
R:
保留位,置为零。
索引规模(IndexSize):
3个Bits,,规定前置于每个数据对象的索引规模或对象的规模。
在请话求报文中,当限定词码(QualifierCode)等于11时,1、2、3分别代表数据对象前的索引是l、2、4个字节。
0无效。
4、5、6、7保留。
在响应报文中,或包含数据对象的请求报文的对象标题中:
0:
对象没有前缀的索引
1:
对象有一个字节的前缀索引
2:
对象有两个字节的前缀索引
3:
对象有四个字节的前缀索引
4:
对象前有一个字节标识对象的大小
5:
对象前有两个字节标识对象的大小
6:
对象前有四个字节标识对象的大小
7:
保留
3通讯规则
3.1链路层通讯规则
1、主站必须在复位了子站的链路之后,才能与该子站进行通讯。
当主站检测出与子站的通讯中断之后,要重新复位该子站的链路。
2、很多情况下,子站也要复位主站的链路。
当通讯中断之后,也要重新复位链路。
3、当副方站的接收缓冲区将要满了,不能再接收数据(指的是应用层数据)时,就会把返回给源方站的应答报文(ACK或NAK)中的DFC位置1,源方站收到这个标志后,就每隔一段时间查询一下副方站的链路状态(PRM=1,FCV=0,FunctionCode=9),副方站就以链路状态帧进行响应(PRM=0,FunctionCode=11,DFC=1或0),直到源方站收到的报文中DFC位清0后,源方站才能继续向该站发送数据或命令。
4、当源方站发出的链路层报文要求副方站的链路层响应时,副方站必须发出链路层响应(它包括链路层的ACK、NAK、链路状态等),如果该站要作为副方站发出链路层响应还要作为源方站响应应用层报文时,该站必须先发出链路层响应。
否则,源方站就会认为报文没有顺利到达副方站,超过链路层的等待时间后,源方站就会重发上次的链路层报文。
多次重发后就会认为链路中断,从而导致通讯不正常。
5、当源方站发出的“CONFIRMEDUSERDATA”收到了副方站的NAK后,一般来说很可能是FCB位不一致,这时源方站就要发出“测试链路状态”报文,以统一双方的FCB位。
3.2应用层通讯规则
1、召唤数据或发出控制命令的一方,如果在规定的时间内没有收有预期的应答,就会重发应用层报文。
多次重发后仍未收到,则认为应用层通讯服务失败。
2、应用层数据召唤采用的应用层报文序号与响应该数据召唤命令的数据包的应用层报文序号以及对此数据包的应用层确认报文的应用层报文序号应该采用同一个值。
3、不带品质描述的对象类型一般都有缺省的品质描述,如果以不带品质描述的对象类型召唤某些数据,但其中有些数据元素的品质描述不是缺省的品质描述时,那么,这些数据元素将不会上送[2]。
4安全和防护
针对SCADA系统中标准DNP3.0总线协议不具有安全防护能力,容易被非法入侵者攻击的缺点,从中间人攻击、拒绝服务攻击、窃听三个方面对标准DNP3.0总线协议进行了安全性分析和测试,并针对性地提出了安全应对策略,在模拟仿真环境下对采用了安全应对策略的DNP3.0总线协议进行测试,验证了安全防护效果。
DNP3可通过TCP/UDP进行封装,以便在以太网上运行,支持DNP3协议的从设备默认会开放TCP的20000端口用于通信。
DNP3协议在设计之初依然是没有考虑到安全、认证等的一些因素,以致后来出现了SecureDNP3(主要加强了认证)。
在DNP3目前的应用、传输上个人的观点还是要比MODBUS可靠,DNP3在主站会话上需要约定目的地址、源地址,而从设备收到后需要验证目标地址,然后再进行处理,如果目的地址不相同则会根据在协议栈实现的处理上来决定是否不响应和关闭连接,或者返回异常功能报文等。
4.1安全性分析
对SCADA系统的攻击可能来自于多个途径,比如外部的入侵者、内部的恶意员工或硬件错误等。
常见的攻击行为包括中间人攻击、拒绝服务攻击、窃听等。
由于DNP3.0协议是开放标准,所以DNP3.0协议的报文结构、数据格式都是公开的,DNP3.0协议的报文在传输过程中很容易被截取、监听、修改,降低了通信网络的安全性。
为了对标准DNP3.0工业总线安全性进行测试,搭建SCADA系统工业总线协议测试环境,被测SCADA系统主要由主站服务器和外站PC组成,其网络示意图如图1所示。
测试过程中,入侵者通过DNP3.0总线接入被测网络,模拟入侵者对DNP3.0总线进行攻击,通过测试机观察被测系统的工作状态。
4.2安全应对策略
由于在设计DNP3.0总线协议时,主要考虑协议的功能和传输效率,而没有过多地考虑协议的安全性,致使DNP3.0总线协议的安全性很低,无法鉴别系统中某个设备的合法性,也无法防止报文被入侵者窃听。
为了提高SCADA系统中DNP3.0总线协议的安全性,需要在标准DNP3.0协议的基础上增加安全措施。
校验传输报文 为了防止中间人攻击,可以在DNP3.0总线协议中增加校验报文,校验报文中含有校验字节,将其附加在某条正常通信报文的后面,发送到报文的接收方。
因为DNP3.0协议中主站或外站都可以主动发出报文,所以主站或外站均可发起校验报文。
接收方收到校验报文后,读取其中的校验字节,然后根据事先预置的校验算法计算校验值,并在响应报文中将校验值回送到校验报文的发出方。
因为校验算法是事先预置的,所以入侵者无法知道根据校验字节计算正确的校验值,校验报文的发出方可以根据校验值判断接收方的合法性。
校验字节是一次性的,每次发送后发出方会产生新的校验字节。
为提高通信效率,发出方无需在每条请求中都增加校验字节,仅在满足以下条件时应当发出校验报文。
1.需要校验报文接收方的合法性;2.达到随机时间;3.在发出控制命令、读取关键数据时;4.某次通信时接收方收到异常报文,则在下一次通信时应当发送校验报文。
预置白名单列表 为防止中间人攻击和拒绝服务攻击,可以在SCADA系统的每个设备中预置白名单列表,即设备只能与白名单上所列举的设备进行通信。
为了防止入侵者将合法设备停止,并把自己的地址替换为合法地址,为每一个合法设备预置一个唯一的标志码,该标识码在系统内部是公开的。
每个设备的存储空间中都预置一个白名单,其中包含两列,第一列包括所有预置设备的地址,第二列为对应设备的标识码。
在发出请求报文时,根据自己的标识码和报文内容计算得到一个标识值,并将标识值附加在报文上。
接收方收到报文后,根据报文发送方的地址查询白名单,得到发出方的标识码,再根据同样的算法计算标识值,如果报文中的标识值和自己计算得到的标识值一致,则认为报文是系统内合法设备发出的。
加密报文内容在上述两种方法中,主要是对校验码和标识码进行了加密,而报文内容仍是明文,所以不具有防窃听的功能。
为了防止入侵者窃听通信内容,可以进一步对报文加密。
如果对DNP3.0报文的所有内容都加密,会严重影响SCADA系统的数据采集速度,所以仅对报文中的链路层报文头和应用层报文头中的功能码进行加密即可。
报文发出方使用接收方的公钥对报文进行加密,接收方在收到加密后的报文时,使用私钥对报文进行解密。
由于入侵者无法得知接收方的私钥,所以入侵者无法对加密后的报文进行解析。
[3]
5ProtocolTestHarness仿真DNP3.0协议
我们使用了ProtocolTestHarness工具,仿真出了DNP3.0的数据包。
6调试及工具
ProtocolTestHarness
ProtocolTestHarness是TriangleMicroWorks公司开发的一款协议仿真、调试软件,软件可以仿真多种工控协议包括DNP3,可以方便完成调试、仿真。
RTU模拟器
7结论
在这次的DNP3.0协议分析实验中,初次见到DNP还是再SCADA的书中,然后老师给我们的DNP3.0的相关资料,我们就开始在各种网站里面寻找DPN3.0的仿真、模拟工具,或者寻找相关的代码,在国内的网站里面没有找到,于是就在国外的网站寻找,由于有些东西涉及到别的公司的机密之类的,我们寻找的代码都是不能用的。
最后在老师的帮助下成功找到了一个软件RTU模拟器,但是那个是工业使用的,需要有关com1的九口结构运行,最后我们找到了ProtocolTestHarness软件,但是在观看了使用教程之类的使用说明的东西,我们还是没有办法用wirshark抓到有关DNP3.0的数据包。
最后,我们就在别人抓的包中分析了DNP3.0的数据包,查询了有关DNP3.0的攻击和防护的知识,最后形成报告。
这次实验中,我们了解到DNP协议标准由IEEE提出,参考了IEC870-5、以及其他一些IEC协议。
主要为了解决SCADA行业中,协议混杂、没有公认标准的问题。
DNP协议有一定的可靠性,这种可靠性可以用来对抗恶劣环境中产生的电磁干扰、元件老化等信号失真现象,但不保证在黑客的攻击下、或者恶意破坏控制系统的情况下的可靠性。
DNP协议提供了对数据的分片、重组、数据校验、链路控制、优先级等一些列的服务,在协议中大量使用了CRC校验来保证数据的准确性。
针对SCADA系统中标准DNP3.0总线协议不具有安全防护能力,容易被非法入侵者攻击的缺点,它很容易被攻击,所以在别的文献中,采用了校验传输报文、预置白名单列表、加密报文内容等的方法来解决DNP3.0的安全问题。
本次实验收获很多,最后用ProtocolTestHarness仿真出了DNP3.0的数据包,我们随之根据相关知识进行分析,然后与之前的概念是相符的虽然这次实验结束了,但是有了相关的测试、仿真的工具和资料,相信在之后的生活中,能够更加深入的