文章快速检索  
  高级检索
基于功能码深度检测的Modbus/TCP通信访问控制方法
万明, 尚文利, 曾鹏, 赵剑明    
1. 中国科学院沈阳自动化研究所,辽宁 沈阳 110016;
2. 中国科学院网络化控制系统重点实验室,辽宁 沈阳 110016
摘要:针对目前工业控制系统中Modbus/TCP通信协议面临的安全问题,提出了一种基于功能码深度检测的Modbus/TCP通信访问控制方法.该方法基于深度包解析DPI(deep packet inspection)技术,将Modbus/TCP通信数据按功能码分类进行深度解析,不仅实现了传统的功能码、 地址范围的检测,同时还实现了寄存器或线圈的域值检测.研究表明,通过采用“白名单”的访问控制模式,该方法能够有效地隔离非法的Modbus/TCP通信数据流,保障工控设备的安全性.
关键词Modbus/TCP     访问控制     深度检测     功能码    
Modbus/TCP Communication Control Method Based on Deep Function Code Inspection
WAN Ming , SHANG Wenli, ZENG Peng, ZHAO Jianming     
1.Shenyang Institute of Automation, Chinese Academy of Sciences, Shenyang 110016, China;
2.Key Laboratory of Networked Control System, Chinese Academy of Sciences, Shenyang 110016, China
Abstract:In order to resolve the security problem in Modbus/TCP protocol, we propose a Modbus/TCP communication control method based on deep function code inspection. By using the DPI (deep packet inspection) technology, the method deeply analyses the Modbus/TCP packets according to the different function codes. It can check not only the ordinary function codes and addresses, but also the values of registers or coils. In particular, our research results show that, by using the whitelist mode, the method can filter the malicious Modbus/TCP packets effectively, and can provide the security for the industry control devices.
Modbus/TCP     communication control     deep inspection     function code    
1 引言

工业控制系统广泛应用于石油、 化工、 电力、 交通、 水利等领域,是关系到国家社会和经济发展的重要关键基础设施. 在建设之初,工业控制系统依据自我隔离的设计方案,采用专用的通信协议、 操作系统和软/硬件设施,禁止与其它外部网络的通信,因此业界普遍认为工业控制系统的信息交互是安全的,仅仅重点关注工业控制系统自身的功能安全和物理安全. 然而,随着信息化与工业化进程的不断交叉融合,工业控制系统开始采用传统互联网中的信息网络技术,现有工业控制系统内部以及内部与外部之间开始互联互通,同时由于工控设备的操作系统后门、 漏洞及攻击隐患的逐渐暴露,使得针对工业控制系统的网络攻击更容易实施,因此工业控制系统面临的信息安全问题日益严峻[1, 2, 3]. 根据美国国土安全部下属工业控制系统网络应急响应小组(industrial control systems cyber emergency response team,ICS-CERT)的安全报告[4],近3年针对工业控制系统的安全事件呈明显上升趋势,仅2013年度,针对关键基础设施的攻击报告已达到257起.

Modbus/TCP协议是一种开放的工业控制通信协议,它由国际Modbus组织在2002年进行延伸扩展[5],广泛应用到石油、 化工、 能源、 电力等典型工业控制系统中,并且由于协议本身的简单性和易开发性,已经成为目前世界各国工业界领先的工业以太网通信协议,并长期占据着主导地位. 然而,正是由于Modbus/TCP协议的开放性、 简单性和易开发性,其安全隐患也日益暴露出来,得到了国内外学者、 研究人员的广泛关注,在安全脆弱性、 攻击检测与防护等方面开展了部分研究工作. 其中,文[6, 7, 8, 9]对Modbus/TCP在工业控制系统中的安全性进行了分析,指出了Modbus/TCP协议中相关的典型安全问题与异常行为,并提出了一些解决方法,但该研究更倾向于使用传统互联网络中的安全技术,从保障网络侧面的安全弥补协议自身的安全缺陷,并且缺少对Modbus/TCP应用协议的支持. 文[10, 11]在传统Modbus/TCP协议中增加了健壮安全的认证机制,保证了Modbus主站与Modbus从站之间信息交互的真实性与完整性. 文[12]提出了一种改进的DES(data encryption standard)加密算法,使得Modbus/TCP通信支持加密传输,但是该方法缺少对加密时延的论证. 上述两种方法都需要对Modbus/TCP协议本身进行修改,实施性较差. 在Modbus/TCP攻击的入侵检测方面,文[13, 14, 15]分别提出了基于参数行为模型的入侵检测方法、 基于状态的入侵检测方法和基于PSO-SVM的Modbus/TCP通信异常检测方法,虽然它们都能成功检测到针对Modbus/TCP协议的攻击行为,但是无法阻止这些攻击行为的发生,同时其准确性受到诸多因素制约,仍然存在着误报问题. 因此,在不改变Modbus/TCP协议规约的基础上,同时兼顾Modbus攻击的防护功能,Modbus/TCP通信的访问控制方法得到了越来越多的重视,文[16]提出了使用Netfilter/iptables框架实现对Modbus/TCP通信数据的过滤控制,但是其不能按照功能码进行分类,同时缺少对寄存器或线圈域值的检测; 文[17]设计了基于入侵检测规则与白名单相结合的Modbus/TCP区域与边界安全防护模型,该模型通过设定区域/边界规则实现域间的通信访问控制,但该模型无法进行规则的字段范围设置,域间通信规模大时规则数较多,影响访问控制性能; 文[18]提出了基于状态的过滤系统,支持Modbus/TCP和DNP3(distributed network protocol version 3.0)两种协议,根据通信数据包之间的状态信息过滤恶意攻击行为,但该系统对协议内容分析较粗略,并且需要同时分析多个数据包,实时性较差.

综上,Modbus/TCP的安全性已经得到了一定的关注,在数据加密、 认证、 入侵检测与访问控制等方面形成了面向Modbus/TCP协议的安全检测与防护体系. 但是,针对Modbus/TCP安全性及其解决方案的研究仍然存在一些难点,主要表现在: 第一,工业控制系统以可用性为先,针对Modbus/TCP的安全防护方法要保障控制通信的实时性,不应该影响系统的可用性; 第二,Modbus/TCP协议是一种成熟且应用广泛的工业控制通信协议,增加安全性不应该对Modbus/TCP协议规约进行大范围修改,同时应用Modbus/TCP协议的现场控制设备大多是嵌入式系统设备,其存储及计算资源有限,能否应用增加安全性之后的Modbus/TCP协议还有待考证; 第三,Modbus/TCP的安全解决不应局限于传统的网络层和传输层防护机制,而是需要对Modbus/TCP协议进行深度解析. 为此,综合考虑工业控制系统的可用性需求,在不改变Modbus/TCP协议规约的基础上,本文提出了一种基于功能码深度检测的Modbus/TCP通信访问控制方法. 不同于文[16],该方法基于深度包解析DPI(deep packet inspection)技术[19, 20],将Modbus/TCP通信数据按功能码分类进行深度解析,不仅实现了传统的功能码、 地址范围的检测,同时还实现了寄存器或线圈的域值检测,同时采用“白名单”模式[21],更加深层次地保障了Modbus从站不被非法访问,实现了“区域隔离”的设计思想,提高了工业控制系统的安全性.

2 Modbus/TCP协议及安全性分析

Modbus/TCP是OSI(open system interconnection)模型第7层的应用层报文传输协议,采用典型的主从式通信模式,Modbus主站向Modbus从站发送请求报文,Modbus从站依照协议规约给出应答响应. Modbus/TCP协议的报文格式如图 1所示.

图 1 Modbus/TCP数据报文格式 Fig. 1 Modbus/TCP message format

Modbus/TCP报文主要包括3个部分: MBAP(modbus application protocol)报文头、 功能码和数据. 其中,MBAP报文头是一种专用报文头,通过它能够在TCP/IP上识别Modbus应用数据单元,该部分主要包含事务处理标志符、 协议标志符、 长度、 单元标志符四个域. 功能码是执行操作的标志字段,当Modbus主站发送请求报文时,功能码域通知Modbus从站执行哪种操作. 数据部分可以看作是功能码的参数,依赖于具体的功能码,指明了执行操作的具体数据.

Modbus/TCP协议是基于标准以太网TCP/IP协议基础之上的工控应用协议,这就导致传统TCP/IP协议的安全缺陷被继承下来,有可能遭受到例如DoS攻击、 IP欺骗攻击等常见的网络攻击. 同时,由于Modbus/TCP协议在设计之初并没有考虑到信息安全问题,这就使得Modbus/TCP协议自身也存在着一些安全漏洞,容易被黑客利用,主要包括以下几点[7, 8, 9]

首先,Modbus/TCP缺乏认证,任何一个接入到工业控制系统的计算机都可以使用一个不合法的IP地址和Modbus功能码即可建立一个Modbus会话,这就使得黑客可以扮演任意一个Modbus主站去恶意访问Modbus从站.

其次,Modbus/TCP缺乏授权,没有基于角色权限的访问控制机制,这就使得任何一个用户都可以执行任意的功能,例如,黑客控制某一Modbus主站后,可以利用主站向Modbus从站发送执行某一功能的命令,而此功能原本是不允许该Modbus主站访问的.

再者,Modbus/TCP缺乏加密,功能码、 地址、 寄存器或线圈域值都是明文传输,这就使得黑客很容易捕获传输数据并解析,导致工艺的机密信息泄露.

最后,Modbus/TCP缺乏完整性检测,通信数据有可能被篡改而无法校验. 例如,黑客可以将合法的Modbus/TCP数据报文篡改成超长的畸形Modbus/TCP数据报文,造成Modbus从站缓存区溢出,从而导致Modbus从站宕机,影响工业控制系统正常运行.

3 功能码深度检测的访问控制方法 3.1 基本访问控制模型

访问控制是工业控制系统安全防护中重要手段之一,其限制了工业控制系统中主体向客体的访问,防止对某资源的未经授权使用,保障数据资源在合法范围内的访问和管理. 图 2给出了基于功能码深度检测的Modbus/TCP通信基本访问控制模型,该模型实施于Modbus主站与Modbus从站之间,防止Modbus主站对Modbus从站的恶意攻击或误操作等行为. 本模型符合工业控制系统主流的“纵深防御”体系思想[2, 22],保障工业控制系统中不同安全区域的安全通信,通过设置Modbus/TCP的访问控制规则策略,管理和控制出入不同安全区域的信息流. 如图 2所示,协议完整性检测判定数据报文是否符合Modbus/TCP协议规约,功能码分类深度解析完成了对数据报文逐字段的深度提取与分析,访问控制功能根据访问控制规则策略检查深度解析出来的关键字段信息,判断是否允许数据报文通过,从而实现对Modbus/TCP通信的访问控制.

图 2 基本访问控制模型 Fig. 2 Basic communication control model
3.2 协议完整性检测

当一个恶意攻击者想要破坏Modbus从站时,一种非常简单的方法就是构造一个不符合Modbus/TCP协议规约的畸形数据报文,虽然畸形数据报文的目的端口也是502(指明是一个标准的Modbus/TCP数据报文),但是超长数据载荷可能造成Modbus从站缓存区溢出. 因此,当捕获到Modbus主站和Modbus从站之间的通信数据报文后,本方法首先对Modbus/TCP数据报文进行协议完整性检测,检验每个数据包是否符合Modbus/TCP协议的规定,过滤掉异常的畸形数据报文,保障Modbus主站与Modbus从站之间通信数据的正确性. 协议完整性检测主要检查Modbus/TCP数据报文的3个部分:

首先,检测Modbus/TCP数据报文的源端口号或者目的端口号是否为502,这是最基本的检查,判断此数据报文是否是一个标准的Modbus/TCP数据报文.

其次,检测Modbus协议标志符,判断Modbus/TCP数据报文中MBAP报文头的协议标志符是否为0x0000,因为Modbus/TCP协议规定Modbus主站和Modbus从站通过协议标识符是否为0x0000来识别Modbus/TCP协议.

最后,检测Modbus/TCP数据报文的应用数据长度,通过判断数据报文中TCP载荷的长度是否等于MBAP报文头中的长度域数值加上6个字节,其中6个字节表示MBAP报文头中事物处理标识符、 协议标识符和长度三个域所占字节数之和. 判别公式如下:

其中,Llength-MBAP为MBAP报文头中的长度域数值,LTCP为TCP载荷的长度,LBi(i=1,2,3),分别表示MBAP报文头中事物处理标识符、 协议标识符和长度三个域所占字节数,?表明判断公式两端是否相等.

3.3 功能码分类深度解析

完成Modbus/TCP数据报文的协议完整性检测之后,本方法基于深度包解析技术,按照Modbus/TCP的协议规定,将数据报文中的应用层信息按功能码分类进行深度解析,提取出数据报文中每一个关键字段信息,不仅解析出功能码、 起始地址、 地址数等功能字段信息,同时还解析出被访问的具体寄存器或线圈的域值信息,为访问控制功能提供检测对象.

Modbus/TCP协议对每一个功能码都进行了详细地功能描述,每一个功能码的作用不一样,使得Modbus/TCP数据报文格式中数据部分的组成形式也不一样,例如,对于功能码“01”读线圈,其数据部分主要为起始地址(2个字节)+线圈数量(2个字节),而对于功能码“05”写单个线圈,其数据部分主要为输出地址(2个字节)+输出值(2个字节). 因此,应该按照功能码进行分类,针对不同的功能码对Modbus/TCP数据报文中的数据部分进行深度解析,获取代表不同意义的关键字段信息. 图 3给出了功能码分类深度解析的主要执行过程,如图所示,本文将Modbus功能码主要分为3类: 读操作类、 写操作类和其它操作类,其中,读操作类包括对“01”读线圈、 “02”读离散输入、 “03”读保持寄存器、 “04”读输入寄存器、 “20”读文件记录和“43”读设备识别码等功能码进行深度解析,写操作类包括“05”写单个线圈、 “06”写单个寄存器、 “15”写多个线圈、 “16”写多个寄存器和“21”写文件记录等功能码进行深度解析,其它操作类包括“22”屏蔽写寄存器和“23”读/写多个寄存器两个功能码进行深度解析. 功能码分类深度解析可以获得Modbus/TCP数据报文中更加细粒度的组成信息,越详细的关键字段信息使得针对Modbus/TCP通信的访问控制越精确,同时也更加便于对访问控制规则的设置,访问控制规则也更具有针对性,访问控制的实施也更有效.

图 3 功能码分类深度解析的执行过程 Fig. 3 Procedure of deep inspection based on different function codes
3.4 访问控制规则策略

根据功能码分类深度解析出的关键字段信息,访问控制功能检查这些信息是否符合初始设置的规则策略,判断Modbus/TCP数据报文是否合法. 访问控制的规则策略指在系统安全策略级上表示授权策略,是对访问如何控制及如何做出访问决定的高层指南,在Modbus/TCP通信的访问控制中,访问控制规则策略能够深入到Modbus/TCP通信数据的应用层内容,即支持针对Modbus/TCP协议的深度设置. 值得一提的是,本文所提出方法的访问控制规则策略采用“白名单”模式,不仅支持对传统的IP地址、 协议、 端口号的设置,还支持针对Modbus/TCP协议的功能码、 地址范围以及寄存器或线圈的域值设置. 相比现有的一些工控系统访问控制方法,本文所提出方法的规则策略能够支持对具体写入寄存器或者线圈的域值进行限定,具有更细腻的规则粒度,图 4给出了本文的规则策略粒度与一般的规则策略粒度的对比,其中,实例的源IP地址为192.168.1.2,目的IP地址为192.168.1.3,协议为tcp,源端口号为1024,目的端口号为502,Modbus功能码为06写单个寄存器,寄存器的地址范围在100~200之间,寄存器中写入值的范围在0~50之间,符合以上规则的Modbus通信数据包执行允许操作,即Pass.

图 4 规则粒度对比 Fig. 4 Comparison of rule granulation
3.5 规则执行算法

图 5给出了访问控制规则策略执行算法的伪代码,针对规则策略Rule 1到Rule n,分别执行以下匹配操作: 检查数据包的源、 目的IP地址是否与规则设定的一致,若一致,则检查数据包的传输层协议是否为tcp、 目的端口是否为502,若是,则进行功能码的分类检查: 若功能码属于写操作类,则继续检查数据包的地址与域值信息是否符合规则设定,若符合,则对此数据包执行Pass操作,否则与下一条规则进行匹配; 若功能码属于读操作类,则继续检查数据包的地址信息是否符合规则设定,若符合,则对此数据包执行Pass操作,否则与下一条规则进行匹配; 若功能码属于其它操作类,如果功能码等于22,则检查数据包的And_Mask和Or_Mask信息是否符合规则设定,若符合,则对此数据包执行Pass操作,否则与下一条规则进行匹配,如果功能码等于23,则分别检查数据包的读地址、 写地址和域值信息是否符合规则设定,若符合,则对此数据包执行Pass操作,否则与下一条规则进行匹配. 倘若所有规则都没有匹配成功,则对此数据包执行Drop操作,即丢弃此数据包.

图 5 规则执行算法伪代码 Fig. 5 Pseudo-code of rule implementation algorithm
4 安全性分析

通过在Modbus主站和Modbus从站之间实施本文所提出的方法,合理地设置访问控制规则策略,能够有效限制对Modbus从站的恶意访问,从而保障Modbus从站的安全性.

首先,针对Modbus/TCP缺乏认证,本方法可以通过限制访问者IP的方式防止不合法用户对Modbus从站的访问,因为本方法采用“白名单”模式,即不符合规则策略中IP地址的Modbus/TCP数据报文会被过滤,从而使得只有合法IP地址的Modbus/TCP通信才能顺利通过.

其次,针对Modbus/TCP缺乏授权,本方法可以通过设置功能码、 地址范围和域值等规则信息来限制Modbus主站的访问权限,即使黑客控制某一Modbus主站,也无法向Modbus从站发送该主站权限之外的控制命令,在一定程度上保护了Modbus从站的正常运行.

最后,针对Modbus/TCP缺乏完整性检测,本方法提供了协议完整性检测机制,分别检测了Modbus/TCP数据报文的端口号、 MBAP报文头的协议标志符和长度,端口号的检测表明此数据报文为Modbus/TCP协议的数据报文,协议标志符的检测表明此数据报文能够被Modbus从站识别,长度的检测能够在一定程度上防止利用超长数据载荷的缓存区溢出攻击.

5 实验验证与分析 5.1 功能验证

本文将本方法实现于Linux透明网桥中(以下称之为访问控制网桥),并串接在Modbus主站与Modbus从站之间,Modbus主站采用modpoll实现对从站的控制,通过设置访问控制规则策略,限制Modbus主站对Modbus从站的访问行为,从而验证本方法的有效性.

本文以功能码“16”写多个寄存器为例,Modbus主站的IP地址为192.168.1.101,Modbus从站的IP地址为192.168.1.4,服务端口为502,本次实验的访问控制规则如下:

白名单规则: [操作: Pass][源IP: 192.168.1.101][目的IP: 192.168.1.4][协议: tcp][源端口: any][目的端口: 502][功能码: 16][地址范围: 8~12][域值范围: 90~110]

默认规则: [操作: Drop][源IP: any][目的IP: any][协议: tcp][源端口: any][目的端口: any]

正常情况下,本文利用modpoll向Modbus从站执行写单个寄存器操作,功能码是16,写寄存器的地址为10,写入值为100,这完全符合白名单规则,图 6给出了modpoll的执行结果,从图中可以看出,此次操作执行成功,modpoll给出了“Writing 1 reference. ”,Modbus从站的第10个寄存器被写入值100,也就是说此次操作的数据流顺利通过网桥到达Modbus从站. 为了验证能够拦截不合理的域值,通过向第10个寄存器写入值200,图 7给出了modpoll的执行结果,从图中可以看出,modpoll出现了“Reply time-out!”错误,即回答超时,表明此次操作的数据包被成功拦截,因此modpoll没有收到Modbus从站的应答数据包,此次操作没有执行成功. 同理,为了验证能够拦截不合理的地址值,通过向第14个寄存器写入值100,图 8给出了modpoll的执行结果,从图中可以看出,同样出现了“Reply time-out!”错误,此次操作同样没有执行成功. 另外,为了验证对不合理功能码的拦截作用,通过执行功能码15的写多个线圈操作,对第10个线圈写入值为1,图 9给出了modpoll的执行结果,从图中可以看出,出现了“Reply time-out!”错误,说明此次操作没有执行成功. 从上述几个简单实验可以看出,本文所提出的访问控制方法能够控制Modbus主站对Modbus从站的访问操作,隔离非法的Modbus通信数据流,防止对Modbus从站的恶意操作,从而保障Modbus从站的正常运行.

图 6 正常访问下modpoll执行结果 Fig. 6 The result of modpoll under normal condition

图 7 写入值为200时modpoll执行结果 Fig. 7 The result of modpoll when the value is 200

图 8 写入寄存器地址为14时modpoll执行结果 Fig. 8 The result of modpoll when the register address is 14

图 9 对功能码05操作时modpoll执行结果 Fig. 9 The result of modpoll when the function code is 05

为了与文[16]的方法进行对比,本文在Iptables/Netfilter加载了文[16]所提及的Modbus/TCP过滤模块,同样应用在Modbus主站与Modbus从站之间,限制Modbus主站对Modbus从站的访问行为. 本次实验的主要白名单规则设置如下:

这里,funcode表明允许的功能码,refnum表明允许写入的地址,同时设置默认的规则操作为丢弃. 同样假设第10个寄存器的合法写入域值应该在90至110之间.

当modpoll向Modbus从站执行正常写寄存器操作时,即完全符合白名单规则,如图 10所示,操作的功能码为16,寄存器地址为10,写入值为95,可以看出此次操作执行成功,modpoll给出了“Writing 1 reference.”,第10个寄存器被写入值95,说明此次操作的数据流被成功放行至Modbus从站. 当modpoll采用同样的功能码和寄存器地址,而写入值为1 000,向Modbus从站执行异常的写寄存器操作时,如图 11所示,此次操作同样执行成功,modpoll给出了“Writing 1 reference.”,第10个寄存器被写入值1 000,说明该方法并没有成功过滤掉此次异常操作的数据包. 另外,当modpoll分别执行图 8图 9两次实验的操作时,其相应的结果与图 8图 9描述的一致. 从上述实验可以看出,文[16]的方法虽然在一定程度上保护Modbus从站不受非法访问,但也存在着一些不足之处: 首先,该方法无法限制寄存器值的写入范围,Modbus从站有可能接受过大或过小的域值,对控制系统造成破坏; 其次,该方法的白名单规则无法设置一个连续的地址区间,每条规则只能设置一个地址值,过多的规则会影响该方法的执行效率. 综上所述,本文所提出的方法要优于文[16]的方法.

图 10 正常访问下modpoll写入值为95时执行结果 Fig. 10 The result of modpoll when the value is 95 under normal condition

图 11 异常访问下modpoll写入值为1 000时执行结果 Fig. 11 The result modpoll result when the value is 1 000 under abnormal condition
5.2 模拟实验分析

为了分析本文的访问控制方法在真实工业控制系统环境中的安全防御效果,本文搭建了基于Modbus/TCP通信的工业SCADA(supervisory control and data acquisition)系统模拟实验环境,如图 12所示,该环境分为3层: 数据监控层包含两个Modbus主站(工程师站和恶意攻击者),其中工程师站不仅具有对现场过程监视功能,而且具有修改现场工艺参数的能力; 控制单元层由支持Modbus/TCP通信的控制PLC(programmable logic controller)组成,通过访问控制网桥与数据监控层连接,主要实现接受工程师站的控制命令,根据自身的控制逻辑驱动现场执行机构进行响应; 虚拟现场设备层由3个开关量和液位传感器等组成,3个开关量分别代表容器的两个进料口阀门开关和一个出料口阀门,物料A和物料B依次通过阀门开关A和B进入容器合成产品C,当达到液位上限时,关闭阀门开关A和B,打开阀门开关C,排出产品C,达到液位下限时,重复上述操作过程.

图 12 实验环境拓扑图 Fig. 12 Experimental environment topology

本次实验中设定虚拟现场设备每5 min完成一次上述工艺操作流程,采用写线圈的方式控制开关量,每一个开关拥有一个线圈地址. 假设恶意攻击者不知道具体的控制参数,只是盲目地向控制PLC发送功能码为15的写线圈数据包,试图改变虚拟现场设备的工作流程,攻击者的攻击速率为每分钟80~100个数据包(每个数据包中只有一个随机的线圈地址,相应的域值随机的写入1). 访问控制规则策略设置为只允许01和15功能码对3个开关的线圈地址进行读和写操作的数据包才能通过,其它的数据包默认为丢弃. 图 13给出了攻击时经过访问控制过滤的前后对比,由图可知,几乎所有的攻击流量都被访问控制网桥过滤,过滤后的流量呈现周期性的变化,即每5 min完成一次工艺流程,值得注意的是,在过滤后的流量中出现了一个异常点,这是因为攻击者这种盲目随机的方式恰巧产生了一个符合访问控制规则策略的数据包,从而造成了设备工作异常,然而这是一种极端的攻击情况,在实际的工艺操作过程中并不会出现,并且出现这种情况的概率非常小,仅仅为(1/216)×3,随着工艺的复杂程度越来越高,这种概率将变得越来越小.

图 13 过滤前后的流量对比 Fig. 13 Comparison of packet numbers before and after filtering
5.3 性能分析

为了分析本文所提出访问控制方法的性能指标,本文采用IXIA Optixia XM2网络性能测试仪对访问控制网桥分别在1条规则和200条规则下进行数据包转发性能测试,访问控制网桥的基本配置如下: Linux内核版本2.6.24、 内存4 GB、 CPU为Atom D525(1.8 GHz)、 网卡为10/100/1 000 Mbps自适应以太网卡,测试方法采用串联回路的方式,如图 14所示,IXIA Optixia XM2设备一个端口负责发送不同速率的测试流量,经过访问控制网桥转发后,另一个端口接受转发后的测试流量,从而分析出吞吐量、 时延、 丢包率等指标.

图 14 测试拓扑图 Fig. 14 Performance test topology

本文首先进行了吞吐量的测试,采用64字节短包在丢包率为0的情况下测试转发速率,结果发现吞吐量达到了140 Mbit/s,完全满足工业以太网百兆级网络通信的需求. 在此基础上,本文在分别设置1条规则和200条规则情况下,针对64字节短包、 512字节中长包和1 518字节长包进行了丢包率和延迟测试,实际测试流量为200 Mbit/s(双向,每一方向测试流量为100 Mbit/s),512字节中长包,结果如表 1所示,本文发现在1条规则和200条规则情况下,丢包率都为0,并且转发延迟也都在百微秒级,而实际上大多数工业控制系统的工业以太网转发延迟达到毫秒级即可满足可用性需求. 由以上分析可知,采用本方法的访问控制网桥不仅能够为工业控制系统提供安全保护,而且还能够满足工业应用的网络通信需求.

表 1 不同规则数下的性能测试 Tab. 1 Performance test under different rule numbers
测试条件1条规则200条规则
包长测试流量丢包率延迟丢包率延迟
64 Byte200 Mbit/s0342.60 μs0192.76 μs
512 Byte200 Mbit/s0699.22 μs0901.28 μs
1 518 Byte200 Mbit/s0891.82 μs0884.03 μs
6 原型平台搭建

为了说明工业病毒如何对关键工控设备的攻击及本文所提出访问控制方法的防护作用,本文采用灯箱的方式搭建了石化液位控制系统攻击与防护演示平台,如图 15所示. 该平台模拟了炼油、 化工生产工艺中液体净化的液位控制过程,通过上位机组态软件中堆缓冲区溢出漏洞(该漏洞主要原因是上位机组态软件未经正确的验证用户输入,使得写缓冲区超出其长度内容,造成缓冲区的溢出),工业病毒破坏上位机组态软件的堆栈,使得上位机组态软件的程序执行指针指向工业病毒中的恶意代码,从而运行恶意代码,恶意代码主要进行两部分工作: 一是,保持上位机监控画面仍然按照正常工艺流程显示,令攻击无法被工程师或操作员通过监控画面察觉; 二是,构造Modbus/TCP写寄存器的指令,使得3个子净化罐同时向主净化罐注入液体,造成主净化罐液体超出警戒线而发生爆炸. 整个攻击的操作过程如下: 首先,将上位机插入带有工业病毒的U盘,利用Windows XP自带的AutoRun功能,工业病毒会主动将其恶意代码存至上位机中一段指定的内存段中,然后,工业病毒利用上位机组态软件的堆缓冲区溢出漏洞,执行恶意代码,进行破坏操作,不仅使得上位机显示一切正常,而且发送恶意的Modbus控制指令攻击PLC,使得净化罐中液体超过警戒线而无法及时排出,因此在工作人员无法察觉的情况下导致重大事故. 当将访问控制网桥串接于上位机与PLC之间时,再次插入带有病毒的U盘,可以观察到,上位机界面正常显示,同时控制系统未发生任何故障. 根据演示平台,作者还搭建了石化液位控制系统攻击与防护的真实原型系统,如图 16所示,从而证明了本文所提出访问控制方法的可行性.

图 15 石化液位控制系统攻击与防护演示平台 Fig. 15 Attack and protection demonstration platform for petrochemical level control system

图 16 石化液位控制系统攻击与防护真实原型系统 Fig. 16 Attack and protection prototype system for petrochemical level control system
7 总结

本文首先对Modbus/TCP协议进行了安全性分析,然后提出了一种基于功能码深度检测的Modbus/TCP通信访问控制方法,分别介绍了该方法的基本模型、 协议完整性检测、 功能码分类深度检测以及访问控制规则策略,不仅实现了传统的功能码、 地址范围的检测,同时还实现了寄存器或线圈的域值检测. 最后通过安全性分析和模拟实验,本文验证了该方法能够有效地拦截不合理的Modbus/TCP通信数据流,从而保障Modbus从站不受非法的访问. 在此基础上,本文还搭建了石化液位控制系统攻击与防护演示平台及相应真实原型系统,证明了该方法的实际可行性.

参考文献
[1] 彭勇, 江长清, 谢丰, 等. 工业控制系统信息安全研究进展[J]. 清华大学学报: 自然科学版, 2012, 52(4): 1396-1408. Peng Y, Jiang C Q, Xie F, et al. Industrial control system cybersecurity research[J]. Journal of Tsinghua University: Science and Technology, 2012, 52(4): 1396-1408.
[2] Kang D H, Kim B K, Na J C. Cyber threats and defence approaches in SCADA systems[C]//2014 16th International Conference on Advanced Communication Technology (ICACT). Piscataway, NJ, USA: IEEE, 2014: 324-327.
[3] Knijff R M. Control system/SCADA forensics, what's the difference?[J]. Digital Investigation, 2014, 11(3): 160-174.
[4] Industrial Control Systems Cyber Emergency Response Team. ICS-CERT year in review[EB/OL]. (2014-02-24)[2015-03-01]. https: //ics-cert.us-cert.gov/sites/default/files/documents/Year_In_Review_FY2013_Final.pdf.
[5] Modbus-IDA. Modbus messaging on TCP/IP implementation guide v1.0a[EB/OL]. (2004-06-04)[2015-03-01]. http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0a.pdf.
[6] Goldenberg N, Wool A. Accurate modeling of Modbus/TCP for intrusion detection in SCADA systems[J]. International Journal of Critical Infrastructure Protection, 2013, 6(2): 63-75.
[7] Kobayashi T H, Batista A B, Brito A M, et al. Using a packet manipulation tool for security analysis of industrial network protocols[C]//IEEE Conference on Emerging Technologies and Factory Automation. Piscataway, NJ, USA: IEEE, 2007: 744-747.
[8] NSFOCUS. Industry control system security report[EB/OL]. (2013-06-24)[2015-03-02]. http://www.nsfocus.com.cn/report/NSFOCUS_ICS_Security_Report_20130624.pdf.
[9] Huitsing P, Chandia R, Papa M, et al. Attack taxonomies for the Modbus protocols[J]. International Journal of Critical Infrastructure Protection, 2008(1): 37-44.
[10] Hayes G, Ei-khatib K. Securing modbus transactions using hash-based message authentication codes and stream transmission control protocol[C]//2013 Third International Conference on Communications and Information Technology. Piscataway, NJ, USA: IEEE, 2013: 179-184.
[11] Phan R C W. Authenticated modbus protocol for critical infrastructure protection[J]. IEEE Transactions on Power Delivery, 2012, 27(3): 1687-1689.
[12] 王婷婷. SCADA系统中数据传输安全性研究[D]. 上海: 华东理工大学, 2013. Wang T T. Security research on SCADA system data transmission[D]. Shanghai: East China University of Science and Technology, 2013.
[13] Erez N, Wool A. Control variable classification, modeling and anomaly detection in Modbus/TCP SCADA systems[J]. International Journal of Critical Infrastructure Protection, 2015, 10(1): 59-70.
[14] Fovino I N, Carcano A, Murel T D L, et al. Modbus/DNP3 state-based intrusion detection system[C]//2010 24th IEEE International Conference on Advanced Information Networking and Applications. Piscataway, NJ, USA: IEEE, 2010: 729-736.
[15] 尚文利, 张盛山, 万明, 等. 基于PSO-SVM的Modbus TCP通讯的异常检测方法[J]. 电子学报, 2014, 42(11): 2314-2320. Shang W L, Zhang S S, Wan M, et al. Modbus/TCP communication anomaly detection algorithm based on PSO-SVM[J]. Acta Electronica Sinica, 2014, 42(11): 2314-2320.
[16] Pothamsetty V, Franz M. Transparent Modbus/TCP filtering with Linux[EB/OL]. (2004-05-11)[2015-03-02]. http://modbusfw.sourceforge.net/.
[17] 张盛山, 尚文利, 万明, 等. 基于区域/边界规则的Modbus/TCP通讯安全防御模型[J]. 计算机工程与设计, 2014, 35(11): 3701-3707. Zhang S S, Shang W L, Wan M, et al. Security defense module of Modbus TCP communication based on region/enclave rules[J]. Computer Engineering and Design, 2014, 35(11): 3701-3707.
[18] Igor N F, Alessio C, Andrea C, et al. Critical state-based filtering system for securing SCADA network protocols[J]. IEEE Transactions on Industrial Eletronics, 2012, 59(10): 3943-3950.
[19] Liu C, Pan Y, Chen A, et al. A DFA with extended character-set for fast deep packet inspection[J]. IEEE Transactions on Computers, 2013, 63(8): 925-1937.
[20] Yang Y E, Le H, Prasanna V K. High performance dictionary-based string matching for deep packet inspection[C]//2010 IEEE INFOCOM. Piscataway, NJ, USA: IEEE, 2010: 1-5.
[21] Myungkeum Y. Using whitelisting to mitigate DDoS attacks on critical Internet sites[J]. IEEE Communications Magazine, 2010, 48(7): 110-115.
[22] Stouffer K, Falco J, Scarfone K. NIST SP 800-82, Guide to industrial control systems (ICS) Security Revision 1[EB/OL]. (2013-05)[2015-03-02]. http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-82r1.pdf.
"http://dx.doi.org/10.13976/j.cnki.xk.2016.0248"
中国科学院主管,中国科学院沈阳自动化研究所、中国自动化学会共同主办。
0

文章信息

万明, 尚文利, 曾鹏, 赵剑明
WAN Ming, SHANG Wenli, ZENG Peng, ZHAO Jianming
基于功能码深度检测的Modbus/TCP通信访问控制方法
Modbus/TCP Communication Control Method Based on Deep Function Code Inspection
信息与控制, 2016, 45(2): 248-256.
INFORMATION AND CONTROL, 2016, 45(2): 248-256.
http://dx.doi.org/10.13976/j.cnki.xk.2016.0248

文章历史

收稿日期:2015-06-10
录用日期:2015-11-05
修回日期:2015-11-13

工作空间