(二)工业控制网络协议
工业网络指安装在工业生产环境中的全数字化、双向、多站的通信系统,是应用于工业领域的综合型集成网络,涉及计算机技术、通信技术、多媒体技术、控制技术和现场总线技术等。从功能角度来看,工业网络一般可分成两个部分:企业信息网络、工业控制网络。企业信息网络位于工业网络的中上层,主要功能是处理工业控制系统的管理与决策信息,与传统的信息网络架构相同。
企业信息网络与工业控制网络之间的信息无缝集成依赖工业以太网。工业以太网主要指技术上与商用以太网(IEEE 802.3)兼容,但在环境性、可靠性、实时性、安全性以及设备安装等方面满足工业现场要求的以太网。工业以太网技术应用主要具有基于TCP/IP主流标准、易操作、可实现远程访问和诊断、网络传输速度快、传输介质灵活、能有效降低投资成本等优点,但同时存在安全性及总线供电问题。
工业控制网络位于工业网络的中下层,主要功能是处理控制现场的实时测控信息。依据通信关系,工业控制网络由下到上又可分为现场控制层、过程监控层,分别对应现场总线网络、过程控制与监控网络。现场控制层处于作业现场,主要功能是连接现场设备,如分布式I/O、传感器、驱动器和开关设备等,实现现场设备控制及设备间联锁控制。过程监控层主要通过分布式SCADA系统采集和监控生产过程参数,并利用HMI实现人机交互,对现场控制层进行管理。
工业控制网络是能够将工业企业中各个生产流程和自动化控制系统通过各种通信设备组织起来的通信网络。工业控制系统的现场网络与控制网络之间的通信、现场网络各工业控制设备之间的通信、控制网络各组件的通信往往采用工业控制系统特有的通信协议。目前,常见的工业控制系统通信协议主要包括Modbus、S7COMM、分布式网络协议3(Distributed Network Protocol 3,DNP3)、IEC、OPC等。
1.Modbus协议
(1)Modbus基本介绍
Modbus是一种串行通信协议,由莫迪康公司(现在的施耐德电气公司)于1979年为使用PLC通信而发表。Modbus协议是全球首个真正用于工业现场的总线协议,由于其具有免费性、易部署、可维护性、易应用性等特点,已经成为工业领域通信协议的业界标准,是工业电子设备之间常用的连接协议。
目前,支持Modbus协议的厂家已超过400家,支持Modbus协议的产品超过600种。因此,Modbus协议可以说是应用最为广泛的工业控制协议之一。Modbus协议主要基于TCP/IP,帧格式简单、紧凑,通俗易懂;用户使用方便,厂商开发简单。但是,其在设计之初未考虑安全性,存在缺乏认证、缺乏授权、缺乏加密等固有缺陷,这些可能会导致开发者在使用该协议的过程中出现缓冲区溢出、功能码滥用等问题。
(2)Modbus通信方式
Modbus协议基本上遵循主从(Master-Slave)通信模式,如图1-8所示。Modbus非常便于实现低级设备和高级设备之间的通信,它包含3个独特的协议数据单元(Protocol Data Unit,PDU):Modbus请求、Modbus应答以及Modbus异常应答。Modbus请求中包含功能码(Function Code)和请求消息(Query Message)。Modbus功能码有公共功能码、用户定义功能码和保留功能码3种类型。
图1-8 Modbus协议通信模式
在Modbus中,一方扮演主设备角色,采取主动询问方式,发送请求消息至从设备,从设备依据接收到的请求消息内容准备响应消息并回传给主设备。具体使用时,一般SCADA系统和HMI属于主设备,PLC、电表、仪表等都为从设备,SCADA系统和HMI向控制设备发送请求消息,控制设备则返回请求消息所请求的数据或要求执行的命令的执行结果。
(3)Modbus请求消息及响应消息分析
Modbus通过应用层的数据报文实现各种功能,其中功能码是Modbus消息帧(报文)的重要组成部分,是Modbus协议中通信事务处理的基础,代表消息将要执行的动作。Modbus部分功能码及其具体功能如图1-9所示。
图1-9 Modbus部分功能码及其具体功能
使用Wireshark工具捕获主从设备之间的通信消息。主设备向从设备发出请求消息,根据此请求消息,对照图1-9可以分析出,其功能码为0x03,因此其功能为读保持寄存器,读取的起始位置为Reference Number对应的值5,读取的长度为Word Count对应的值2。请求消息的详细信息如图1-10所示。
图1-10 Modbus请求消息分析
根据请求消息,从设备返回对应的数据,从5号保持寄存器开始读两个Word,获取5、6号保持寄存器的数值分别为9和24。响应消息的详细信息如图1-11所示。
图1-11 Modbus响应消息分析
2.S7COMM协议
(1)S7COMM协议的报文结构及关键参数
S7COMM协议指的是以太网S7通信协议,是西门子公司为其生产的PLC、SCADA系统等产品之间相互通信而设计的专属私有协议。应用层组织的数据经过面向连接的传输协议(Connection Oriented Transport Protocol,COTP)、TPKT协议的进一步处理后,最终通过TCP进行传输。S7COMM的报文结构如图1-12所示。
图1-12 S7COMM的报文结构
S7COMM PDU主要由3个部分组成。
① 头(Header):包含长度信息、PDU参考(PDU Reference)、消息类型(Message Type)常量。
② 参数(Parameter):该部分的内容和结构根据PDU的消息类型和功能代码不同而有很大的差异。
③ 数据(Data):这是可选字段,用于携带数据,如内存值、块信息、固件数据等。
S7COMM PDU一般包括以下4种类型。
① 0x01:JOB,即作业请求,如读/写存储器、读/写块、启动/停止设备。
② 0x02:ACK,即确认响应,是没有数据的简单确认。
③ 0x03:ACK_DATA,即确认数据响应,一般是响应JOB的请求。
④ 0x07:USERDATA,即扩展协议,其参数字段包含请求/响应ID,一般用于编程/调试、读取系统状态列表、设置安全功能、设置时间等。
(2)S7COMM PDU——USERDATA类型
当PDU类型为USERDATA类型时,S7COMM协议的结构如图1-13所示。S7COMM的参数部分:参数头字段占3字节,参数长度字段占1字节,方法字段占1字节,类型字段占1/2字节,功能组字段占1/2字节,子功能码字段占1字节,序号字段占1字节。
图1-13 USERDATA类型的S7COMM协议的结构
其中,功能组和子功能码的取值决定了该报文的功能,功能组字段的取值见表1-2。
表1-2 功能组字段的取值
当功能组代码为0x4,即CPU功能时,子功能码的取值见表1-3。
(3)S7COMM请求包及响应包分析
这里以USERDATA类型为例进行介绍,通信请求方通过发送USERDATA类型的数据包,实现读系统状态列表的功能。系统状态列表用于描述PLC的当前状态,其内容只能读取不能修改。系列状态列表包含了系统数据、模块状态数据、模块诊断数据和模块诊断缓冲区信息。
表1-3 子功能码的取值
读系统状态列表数据请求包需要为功能组和子功能码配置对应的值,如图1-14所示,Parameter部分的功能组值为0x4,子功能码为0x01。
图1-14 S7COMM读系统状态列表数据请求包
S7COMM设备收到数据请求包后会根据请求内容,返回数据响应包,可以看到,返回的信息中包含了模块的序列号、模块类型ID等信息,如图1-15所示。在进行资产识别时,该功能能够提供这些信息以帮助识别S7COMM设备的具体型号。
3.DNP3
DNP3是应用于自动化组件之间的通信协议,常见于电力、水处理等行业。DNP3主要基于TCP/IP,比Modbus协议更复杂,在应用层实现了对传输数据的分片、校验、控制、优先级设置等诸多功能,例如SCADA系统可以使用DNP3与主站、RTU等进行通信。此外,相较于Modbus协议,其安全性有所提高,但仍存在缺乏认证、缺乏加密等固有问题。
图1-15 S7COMM读系统状态列表数据响应包
4.IEC系列协议
IEC系列协议包括IEC 60870-5-101、IEC 60870-5-104等协议,是电力行业的主要工业控制协议。IEC系列协议主要基于TCP/IP,采用平衡传输模式,用于调度主站的应急管理系统和子站的RTU等设备之间的通信,且终端系统不需要特殊的网络软件、路由功能,也无须进行网络管理。但IEC系列协议同样存在缺乏认证、缺乏授权、缺乏加密等固有问题,以及缓冲区溢出等漏洞。
5.OPC协议
OPC是一项应用于自动化行业及其他行业的数据安全交换可互操作性标准,由OPC基金会负责运维,同时也是微软组件对象模型(Component Object Model,COM)和分布式组件对象模型(Distributed Component Object Model,DCOM)接口标准在工业领域的体现。但当其基于Windows操作系统时,容易受到Windows系统已知漏洞、弱口令等问题的影响;当其基于远程过程调用(Remote Procedure Call,RPC)协议时,则易受到所有RPC协议相关漏洞的影响。