工业控制网络互联互通的安全问题*
2017-11-20傅一帆霍玉鲜姜洪朝
傅一帆,霍玉鲜,刘 金,姜洪朝
(中国电子信息产业集团有限公司第六研究所,北京 102209)
工业控制网络互联互通的安全问题*
傅一帆,霍玉鲜,刘 金,姜洪朝
(中国电子信息产业集团有限公司第六研究所,北京102209)
针对工业控制系统使用的OPC(ObjectLinkingandEmbeddingforProcessControl)通信协议的安全防护,通过分析OPC客户机和服务器之间的网络流,用截获的网络帧说明如何开放动态生成的TCP连接会话、如何识别同步读写帧,怎样对数据读写操作过滤;强调指出,这种传统的防火墙保护模式,仍可能存在利用暴露的密码攻击、假冒应用要求恶意增加访问次数破坏控制系统运行、借助不明信息流渗透攻击的隐患,为此给出一个防火墙多端口分区保护纵深防御的方案。
防火墙;OPC;工业控制网络;信息安全
0 引言
在移动终端制造行业中,整个生产线上仍存在着“信息孤岛”,为满足移动终端制造行业产品多样化及快速投向市场的需求,推进新一代信息技术与自动化技术的融合,已成为制造行业的发展趋势。因此要解决生产设备之间、生产设备与计划排产等应用之间的信息互通问题,普遍在工业控制系统中使用OPC(Object Linking and Embedding for Process Control)协议实现互连,通过支持OPC标准,不同厂家的设备之间可以实现过程控制数据的互操作。在实际应用中,OPC通信跨越了不同系统的边界,因此也带来很多安全问题。同时,由于OPC协议的应用数据是通过TCP协议动态生成的端口号创建的连接传输的,给传统的IT防火墙的过滤造成困难[1]。下面用黑箱分析的方法来分析OPC协议,探讨解决OPC通信的安全防护问题。
1 OPC协议的TCP动态端口号的生成
OPC通信采用客户机-服务器的模式,服务器指拥有控制数据资源的一端,客户机指对拥有的数据资源进行读写操作的一端[2]。通过监听客户机和服务器之间的网络流,分析可得到图1所示结果。
图1 OPC协议的TCP动态连接过程
如图1显示了OPC协议的动态创建数据通信连接的过程:首先客户机向服务器的OPC135端口发出连接请求,经过大约几十个帧后,从服务器的返回帧ISystemActivat RemoteCreateInstance response带回OPC服务器要创建的端口号,分析帧数据即可解出要创建的端口号。
针对动态链接过程的分析,得到解决工控防火墙分析OPC动态连接端口的思路:
(1)监视出/入OPC端口(TCP135号)的网络帧;
(2)从TCP端口号为135的网络帧中找出包含有返回动态端口号的帧;
(3)从包含有返回动态端口号的帧定位到包含有动态端口号的字符串(称为StringBindings)的开始位置,查找出该字符串数组的长度,从StringBindings的开始位置向后查找,解析出动态端口号;
(4)根据解析出的动态端口号,建立该端口的防火墙状态连接表项,放行该端口,并实时检测该连接状态,当遇到4次交互的结束包(FIN,ACK),或终止包(RST)或遇到防火墙的Timeout,则及时断开连接,撤除该端口的防火墙状态连接表项,以保证安全。
从截获的TCP端口号为135的网络帧中找出包含有返回动态端口号的帧数据,如下所示:
地址(十六进制) 网络帧数据(十六进制)
0000 90 fb a6 07 18 91 00 1b 11 04 3a c4 08 00 45 00
0010 03 f0 5d d3 40 00 80 06 97 2f 81 00 00 02 81 00
0020 00 03 00 87 0c f6 7e 72 7d d9 d1 5a 2e fd 50 18
0030 ff ff 1e 66 00 00 05 00 02 03 10 00 00 00 c8 03
0040 00 00 03 00 00 00 b0 03 00 00 01 00 00 00 01 00
0050 00 00 00 00 00 00 f8 a1 0d 00 98 03 00 00 98 03
0060 00 00 4d 45 4f 57 04 00 00 00a30100000000
00700000c00000000000004639 03 00 00 00 00
……
00f0 00 00 00 00 00 00 c0 00 00 00 00 00 00 46 02 00
0100 00 0028010000c8 01 00 00 01 10 08 00 cc cc
……
0260 1a ef b9 b2 53 09 02 00 00 00 05 00 07 00 c0 00
0270 00 00 c0 00510007 00 68 00 6f 00 6c 00 6c 00
0280 79 00 73 00 79 00 73 00 2d 00 32 00 32 00 32 00
0290 65 00 65 00 37 00 5b 00 33 00 38 00 34 00 33 00
02a0 5d 00 00 00 07 00 31 00 39 00 32 00 2e 00 31 00
02b0 36 00 38 00 2e 00 31 00 34 00 32 00 2e 00 31 00
02c0 5b 00 33 00 38 00 34 00 33 00 5d 00 00 00 07 00
02d0 31 00 39 00 32 00 2e 00 31 00 36 00 38 00 2e 00
02e0 32 00 2e 00 31 00 5b 00 33 00 38 00 34 00 33 00
02f0 5d 00 00 00 07 00 31 00 32 00 39 00 2e 00 30 00
0300 2e 00 30 00 2e 00 32 00 5b 00330038003400
031033005d 00 00 00 00 00 0a 00 ff ff 48 00 4f 00
0320 4c 00 4c 00 59 00 53 00 59 00 53 00 2d 00 32 00
要识别出有返回动态端口号的帧首先需找出包含有微软的全局唯一标识符(Globally Unique Identifier,GUID)的帧,此帧的GUID={ a3 01 00 00 00 00 00 00 c0 00 00 00 00 00 00 46},如果是不含有VLAN和QOS标识的普通帧,从地址0x6A(十六进制)往后的128位即是该GUID码。
通过查找绑定的字符串区找出端口号。在帧地址0x274取出2 B的字符串个数为0x5100,去小端后为0x51,一个字符占2 B,该绑定的字符串区长度为0xA2,从帧地址0x276开始,到帧地址(0x276+0xA2)结束,查找出包含在“[”(5b 00和“]”(5d 00)之间的字符串为{33 00 38 00 34 00 33 00},得出返回的端口号为3843。下一个要创建的用于数据传输的连接是以OPC服务器的3843端口号的TCP的连接,工控防火墙可据此进行过滤。
2 对传输数据读写的识别
监视由OPC客户机请求数据通信动态创建的所有TCP连接的网络流内容,下面以截获的网络帧为例说明。
(1)在OPC客户机请求数据通信动态建立的TCP连接中,逐个扫描由OPC客户机发出的网络帧中的通用唯一识别码 (Universally Unique Identifier,UUID),同步操作码UUID={52 3A C1 39 1E 01 D0 11 96 75 00 20 AF D8 AD B3},异步操作码UUID={71 3A C1 39 1E 01 D0 11 96 75 00 20 AF D8 AD B3},在截获的网络帧中,客户机端口号0x445,服务器端口号0xE50:
地址(十六进制) 网络帧数据(十六进制)
0000 00 1b 11 04 3a c4 90 fb a6 07 18 91 08 00 45 00
0010 00 70 13 96 40 00 80 06 e4 ec 81 00 00 03 81 00
0020 00 02 04 45 0e 50 84 cf 13 04 72 1a 6b 94 50 18
0030 fb 43 02 68 00 00 05 00 0e 03 10 00 00 00 48 00
0040 00 00 35 00 00 00 d0 16 d0 16 de 8e e0 05 01 00
0050 00 00 08 00 01 00523ac1391e01d0119675
00600020afd8adb300 00 00 00 04 5d 88 8a eb 1c
在帧地址0x56处,匹配识别出是同步操作的UUID。
(2)如果匹配了由OPC客户机发出的网络帧中的同步操作码UUID,则继续监视,当OPC服务器发回一个应答帧之后,在下一个从OPC客户机发出的网络帧中找到一个动态生成的16 B长的同步句柄ObjectID:
地址(十六进制) 网络帧数据(十六进制)
0000 00 1b 11 04 3a c4 90 fb a6 07 18 91 08 00 45 00
0010 00 c8 13 c9 40 00 80 06 e4 61 81 00 00 03 81 0
0020 00 02 04 45 0e 50 84 cf 17 14 72 1a 6d b8 50 18
0030 fe db 02 c0 00 00 05 00 00 83 10 00 00 00 a0 00
0040 10 00 3c 00 00 00 54 00 00 00 09 0004000fa4
00500000900b00009d93a8fc314b040f05 00
0060 07 00 00 00 00 00 00 00 00 00 9a 11 e6 9c aa 14
0070 18 4f 93 46 5d 35 36 34 a4 dd 00 00 00 00 01 00
0080 00 00 01 00 00 00 f0 85 37 00 01 00 00 00 55 73
0090 65 72 00 00 00 00 03 00 00 00 00 00 00 00 04 00
00a0 00 00 06 00 00 00 04 00 00 009ec97f7f02 00
00b0 00 00 a8 2a 17 00 01 00 00 00 00 00 00 00 0a 02
00c0 0c 00 a8 2a 17 00 01 00 00 00 00 00 00 00 00 00
00d0 00 00 00 00 00 00
该同步ObjectID由帧地址0x4E开始,长度为16 B,在该TCP连接中取代了同步操作码UUID的作用,一直到该TCP连接结束或断开。在帧地址0x4c开始向后的2 B,是操作码Opnum,Opnum=03 00表示读操作,Opnum=04 00表示写操作。工控防火墙可根据设置好的安全策略据此进行过滤保护,在此帧中,是写操作,其值在帧地址0xAA处向后的4 B中。
3 安全问题分析
可以用同样的方法对订阅方式进行分析,同时可对要写入的数据的域做限定保护,但这并不能做到安全保护[3],还存在着安全隐患:
(1)在一些OPC产品中,要求OPC服务器和客户机必须配置相同的账户名和登录密码,如果OPC通信是跨越不同的厂家或是不同的安全域,这是一条可以渗透攻击的通道。
(2) 恶意逻辑可以通过提高读取OPC数据的频度等操作构成对控制器的攻击。一般OPC服务器的数据来自于控制器或控制器采集的数据。控制器大多是以定时轮询方式工作,在一个定时轮询周期内要完成输入-控制处理计算-输出等一系列操作,根据应用要求周期从几百毫秒到几十毫秒不等,有些应用甚至到1 ms以下,控制器在轮询周期内设计的网络流量是确定且平稳有序的,但是一旦增加对数据的访问次数,即使控制器一旦接收到网络中断请求就做丢弃处理,仍会破坏控制器的工作节奏,例如一个强度达到了6 000 pps(Packet Per Second)的网络访问,可在几秒钟之内就会使某些类型的控制器复位,如果是小帧,该流量带宽也就3 M多,网络上负载的变动会大大干扰甚至破坏控制器的正常运行。
(3)在前面的分析中,可对OPC动态生成的端口号的通信连接实行过滤,可对读写过滤保护,甚至可对数据的范围识别过滤,但这些仅仅是OPC通信中的一小部分,作为OPC通信的基础,还有RPC和DCOM组件,尤其是DCOM组件,在通信中频繁出现,比如在上节中对OPC服务器的一个数据开始做同步写操作之前,已经来回传递了272个帧,这些帧的作用不像“读”和“写”那样含义明确,对这其中大量信息作分析不是件容易的事。按说都是为OPC通信服务的,不应阻拦,但这为会话劫持等攻击提供了机会,对这种OPC通信中不明信息流,是恶意逻辑可借以入侵和敏感信息外泄的通道,不仅可攻击生产系统,对移动终端智能制造生产线来说,甚至还可能侵入到在制品中,将恶意逻辑转移到生产的产品中。在攻与防的对抗中,如果守方对于底层计算资源的了解和掌握程度低于攻方,显然是不能做到有效的防护。
4 安全解决方案
针对上述问题,可以现有的防火墙技术为基础,利用多端口划分不同的安全区域,实现纵深安全防护,如图2所示。
图2 对OPC通信的分区保护方案
其中,防火墙1、2口为OPC服务器一方,3、4口为OPC客户机一方。对防火墙2-4端口配置OPC的TCP135号协议过滤和动态生成的端口号的协议过滤,包括读写过滤策略;防火墙的1-2端口仅是配置对控制器或现场设备数据的访问协议的放行策略,包括对访问频度的保护;防火墙的3-4端口仅配置请求访问对方的数据通信协议的放行策略。由于防火墙1-2端口和3-4端口数据通信含义和结构清楚,配置过滤策略可明确有效,防火墙端口2-4是OPC协议过滤,有暴露对方机器账户名、密码的问题,还有大量不明信息流的安全隐患,是潜在的渗透攻击的通道,但这会被防火墙1-2端口和3-4端口的安全策略所遏制,对两边的实际使用起到保护作用。若能增加对OPC服务器和客户的实时监控,还可从整体上进一步提高安全防护能力,当然对于双方之间的其他含义结构均明确的数据通信,可直接通过防火墙1-3端口实施过滤放行的策略,以减少通信的迟延。
5 结论
对于移动终端制造行业,在整个生产线上的工业控制系统中用于与信息网互联或各工控系统互联的OPC协议,研发防火墙安全保护策略时不能仅仅考虑动态生成TCP端口号的过滤、数据读写过滤问题,还要考虑到密码暴露、恶意提高访问数据频度等攻击,对OPC通信中不明信息流,是恶意逻辑可借以入侵和敏感信息外泄的通道,不仅可攻击生产系统,对移动终端智能制造生产线来说,甚至还可能侵入到在制品中,将恶意逻辑转移到生产的产品中,是更大的安全隐患。安全问题实质上是攻防双方在对存在的和潜在的计算资源的掌控能力上的斗争,如果守方对基础软件原理机制的掌握程度差于攻方,防护的效能会大打折扣。本文提出了一种用多端口防火墙分区过滤纵深防御的方案,以期在基础软件劣势情况下得到相对的安全,这也提示我们[4],自主研发安全可控的基础软件对保障安全的重要性。
[1] 屈婉莹,魏为民,朱苏榕.工业控制系统通信协议安全研究[C].2015年全国智能电网用户端能源管理学术年会论文集,北京:2015.
[2] 夏毅,李红春.自动控制系统的安全防护[J].仪器仪表用户,2014,21(2):97-100.
[3] 尚振阳,杨瑞先.实时数据库系统数据安全采集方案[J].电信科学,2016,32(10):175-180.
[4] 宫芳涛.基于二进制通信的OPC UA客户端及安全机制的研究与开发[D].北京:华北电力大学,2012.
The security in the industrial communication networks
Fu Yifan,Huo Yuxian,Liu Jin,Jiang Hongzhao
(The 6th Research Institute of China Electronics Corporation,Beijing 102209,China)
Aiming at the security issues of the OPC(Object Linking and Embedding for Process Control) communication protocol in industrial communication networks,through the analysis of frames on traffic between cient and server of OPC,it describes how to open dynamically generated TCP session,how to identify synchronized read and write frames based on OPC protocol,and how to filter read and write requests.It also points out the security risks posed by implementing traditional firewalls,such as facing threats due to leaked passwords,interruption in the operation of control systems by malware which disguises as an application and maliciously increases data access,and facing threats due to penetration of unknown frames on traffic,etc.To address these security threats,this paper provides a solution by creating zones of protection for mult-ports firewall.
firewall; OPC; industrial communication networks; information security
TP309.1
A
10.19358/j.issn.1674-7720.2017.21.001
傅一帆,霍玉鲜,刘金,等.工业控制网络互联互通的安全问题J.微型机与应用,2017,36(21):1-3,7.
工业和信息化部“智能制造综合标准化与新模式应用”;核高基重大专项(2017ZX01030202)
2017-07-01)
傅一帆(1953-),男,硕士,研究员级高工,主要研究方向:防火墙、嵌入式系统、信息安全。
霍玉鲜(1990-),女,硕士,助理工程师,主要研究方向:嵌入式系统、信息安全。
刘金(1990-),女,硕士,助理工程师,主要研究方向:嵌入式系统、信息安全。