一
背景介绍
自从1968年第一个可编程逻辑控制器(PLC)发明至今,可编程逻辑控制器已经被广泛应用在电力、能源、交通、核能和水处理等关键基础设施领域。而随着通信网络和万物互联的发展,这些设施比之前任何时候都更容易受到外界的攻击。
近十年全球针对关键基础设施攻击的事件频繁发生,最近发生且影响较大的是今年5月7日(当地时间)美国成品油管道公司Colonial(占据东海岸全部供应量45%)遭遇黑暗面黑客组织的勒索软件攻击,导致全美油价上涨(平均油价涨到了3.028美元/加仑,东南部州的油价更是高达9.99美元/加仑)和汽油供应紧张,制造了社会恐慌并极大地影响了公众的生活秩序。
网络安全厂商若想对关键基础设施进行安全防护,必须要了解工控现场的实际情况及设备间通信,但由于工控现场需要24小时不间断运行及安全性考虑,不具备现场研究的条件;同时,工控现场使用的设备和技术种类繁多,使得全面地了解工控领域的现场通信更加困难。
安全界有句名言,“你无法保护你所不了解的”,那么是否有一种方法或者一种等价方法,可以相对容易、快速地对工控现场的通信进行深入研究呢?
答案是肯定的,工业控制系统离不开上位机监控系统和下位机控制器即PLC,上位机软件相对比较容易获得,获得下位机PLC比较困难。
下面就介绍一种符合IEC 61131-3标准的开源PLC,即OpenPLC,并且基于OpenPLC和具体的SCADA协议来模拟工控现场的通信并进行网络安全实践。
二
OpenPLC介绍及体系结构
OpenPLC项目是根据IEC 61131-3标准(国际电工委员会)创建的,该标准定义了PLC的基本软件架构和编程语言。这意味着OpenPLC可以像真正PLC那样,支持5种标准的编程语言(图形化编程语言和文本化编程语言)。
OpenPLC支持的五种标准编程语言:梯形图(LD)、功能块图(FBD)、顺序功能图(SFC)、指令列表(IL)和结构化文本(ST)。
OpenPLC内部结构及说明:
OpenPLCWeb服务器是一个允许上传和编译PLC程序的实用程序。它运行在8080端口上,可以在大多数的Web浏览器中打开。可编程逻辑控制器程序作为单个文件上传,其中包含由OpenPLC提供的IEC 61131-3图形编辑器生成的代码。一旦文件被接收,它就被发送到MatIEC编译器。
MatIEC编译器将上传的PLC程序编译成等效的C程序。但是这个C程序是不完整的,因为它只包含用户创建的逻辑。
OpenPLC提供额外的C文件,添加对网络连接、内部映像表、硬件接口(用于处理物理I/O)的支持,以及一个为OpenPLC添加实时行为的实时库。网络层通过SCADA协议进行网络通信。
目前,OpenPLC支持Modbus/TCP和DNP3,将来可以通过在网络层插入相应的源代码来添加更多的协议。为了响应来自SCADA协议的网络请求,该层必须能够访问输入和输出图像表。
OpenPLC在TCP/IP之上支持Modbus和DNP3这两个SCADA协议,来自任何一个协议的读写请求都可以直接访问所有物理I/O点。默认情况下,Modbus在502端口可用,DNP3在20000端口可用。但是,OpenPLC有可选的命令行参数,这些参数只允许在特定端口上运行Modbus、DNP3,或者在非标准端口上同时运行两者。
Modbus实现是基于Modbus应用协议规范从零开始构建的。DNP3应用的实现基于opendnp3库(opendnp3 2017)。Opendnp3是用C++11编写的可移植、可伸缩的DNP3协议栈,并且经过严格的测试。
三
OpenPLC对工控现场的模拟
1、OpenPLC的安装及验证
从安装过程中可以看到,OpenPLC的安装会支持Modbus TCP和DNP3协议。最后显示“finished successfully”则说明OpenPLC安装成功了。
验证:在浏览器(Chrome)中输入访问URL: http://ip:8080,如果可以打开登录页面,则说明安装成功,功能正常。
3、PLC梯形图逻辑执行测试
实验内容:使用梯形图编程语言创建一个逻辑电路,电路的逻辑功能为按下PB1开关,LED灯亮;按下PB2开关,LED灯灭。
电路图:
操作步骤:
按下PB1开关,电路颜色变为绿色,LED灯被点亮。
按下PB2开关,电路颜色再次变为黑色,LED灯灭。
至此,已经验证了电路功能与电路逻辑相一致。
最后,为了让该逻辑电路的功能可以在OpenPLC中运行,还需要生成OpenPLC运行时程序。
4、工控现场上位机和下位机(PLC)通信实践
2)上位机(组态王6.5.3)配置
3)下位机(PLC)配置
上传程序文件openplc_test.st,该程序是模拟对电机的启动和停止。
点击“Monitoring”,可以看到电机没有运转,所有的值都为FALSE。
点击绿色的start按钮去启动电机。
再次查看“Monitoring”,可以看到电机已经运转,Start和MV1的值都变成True,Stop的值仍然为FALSE。
点击红色的stop按钮去停止电机。
再次查看“Monitoring”,可以看到电机已经停止运转,Start和MV1的值都变成FALSE,Stop的值变成TRUE。
四
针对工控现场的攻击行为
1、Modbus协议学习
ModbusTCP报文格式
从报文的格式中可以看出Modbus TCP是以太格式封装,上层Modbus ADU由三部分构成:Modbus应用协议头+功能码+数据,数据部分的内容和长度要根据具体的事务来定。
MBAP Header:
Modbus 应用协议头长度为7字节,含4部分。
事务处理标识符:用于区分事务,可以理解为报文的序列号,每次通信之后加1以区别不同的通信数据报文。
协议标识符:对于Modbus协议为0;
长度:长度域标识后续字节的个数;
单元标识符:标识不同的远端设备。
功能码及对应事件:
从列表中可以看出,功能码涉及到两大类,数据访问和诊断。在Modbus TCP中使用到的数据访问包含了线圈、离散量、输入寄存器、保持寄存器。
其中线圈和离散量的访问方式为按位访问,寄存器相关的为16位访问。
诊断中还会涉及到子功能码。
数据:
数据部分参见下图的Modbus TCP事务通信模型,数据分为两种:客户端的请求数据和服务端的响应数据。
了解了C/S的通信方式,再结合功能码表中的不同类型事务,下面就以功能码05(0x05)为例来说明“写单个线圈”的客户端请求报文和服务器端的响应报文。
上面实验中涉及到的“启动/停止”电机的动作,实际上就是Modbus协议执行“写单个线圈”的动作。
写单线圈输出状态图:
2、针对Modbus协议进行攻击
在详细掌握了Modbus特定功能码(写单个线圈)的请求报文格式、响应报文格式及输出状态逻辑图之后,就可以构造特定的modbus攻击报文(写单个线圈)去验证执行效果了。
通过该python代码的运行能够达到同样的效果,让电机停止运转,直观地验证了工控现场是存在被攻击的风险的。
五
使用威努特产品
对工控现场进行安全防护实践
1、VPN技术
传统的TCP/IP体系架构在进行通信时没有基于安全和认证的机制,任何人接入网络后都可以对通信进行“窥视”。
IPSec即“IP安全性”,是一种开放标准的框架协议,通过使用加密的安全和认证服务以确保端到端可以进行安全通讯。
威努特的防火墙产品支持标准的IPSec VPN协议,能够为工控现场的设备之间通信搭建一条安全的强加密通信隧道,提升安全性。
ESP封装报文(隧道模式)
从报文的封装格式可以看出,原始的报文内容会被ESP加密,同时进行认证;另外,隧道的IP地址会作为新的IP头。这样即使进行sniffer,抓取到的报文也只能看到外部的IP地址(即隧道两端的IP地址),无法知道真实的主机IP地址和通信内容。这尤其适合用来解决工控网络现场使用明文通信而带来的低安全性问题。
1)测试拓扑
2)上位机配置
在上位机pingPLC,验证连通性。
在上位机进行操作,启动电机,可以看到报文通过VPN隧道传输,电机被成功启动。
3)下位机
启动PLC
查看监控页面,电机已经被启动。
防火墙1上查看VPN隧道
防火墙2上查看VPN隧道
ping上位机,验证连通性。
Tunnel ip地址:
100.100.100.26,100.100.100.37;协议号50(ESP)
真实IP地址:报文解密后可以看到源IP 50.50.50.8,目的IP 60.60.60.200
报文内容:Modbus协议,写单线圈。
2. 白名单Whitelist
白名单是对工控现场的通信(使用哪些协议和进行哪些动作)进行提前定义,只有符合白名单的通信才被允许;违反白名单的报文将触发告警,并被拦截(防护模式下)。
1) 上位机
点击3次stop按钮去停止电机运转,结果失败!原因是防火墙应用了“Modbus只读白名单”,即任何尝试Modbus写的操作都被视为非法,报文将被拦截并发送告警信息。
2) 防火墙白名单识别异常动作
可以看到3次尝试停止电机的“动作”被两台防火墙感知到,因为这一“动作”违反了两台防火墙中定义的“Modbus只读白名单”。防火墙1发送了告警信息,因为其被配置为告警模式;而防火墙2在发送告警信息的同时对报文进行拦截(被配置为防护模式),成功地阻止了停止电机运转的“动作”。
3)下位机
电机仍然在正常运行,没有被停止。防火墙2拦截了违反白名单的停止电机运转的报文,成功地保障了设备稳定运行。
3. ACL
访问控制列表ACL可以对执行的具体动作、动作时间、服务、设备的二层地址、三层地址等进行精确控制,违反ACL的报文将被丢弃。
在这里就不做详细展开了。
六
OpenPLC对网络安全实践的意义
由于工控现场对设备运行具有高安全性和高可靠性的强需求,加之工控领域使用的技术和产品具有高度的非标准化特点,对工控领域的技术研究及防护不可能像在实验室中那样轻易地、快速地进行。
而OpenPLC技术的出现为解决上述问题提供了便利和技术可行性,同时也为安全厂商提供了一种快速搭建贴近客户现场仿真环境的方法,便于其对防护技术及效果进行验证,这对于安全厂商帮助工业领域的企业提高其自身运行的安全性具有积极的推动作用。
渠道合作咨询 张先生 18201311186
稿件合作 微信:shushu12121
原文始发于微信公众号(威努特工控安全):基于仿真技术的工控现场通信及安全实践