原创 | 工控系统安全EtherNet/IP协议分析

  • A+
所属分类:安全文章 逆向工程

作者 | 长扬科技(北京)有限公司    汪义舟   梁  泽   张国栋

一、Ethernet/IP协议 

EtherNet/IP是一个现代化的标准协议。由控制网国际有限公司(ControlNet International)的一个技术工作组与ODVA(开放式DeviceNet供应商协会)在20世纪90年代合作设计。EtherNet/IP是基于通用工业协议(Common Industrial Protocol,CIP)的。CIP是一种由ODVA支持的开放工业协议,它被使用在诸如 DeviceNet 和 ControlNet 以及 EtherNet/IP 等串行通信协议中。美国的工控设备制造商Rockwell/Allen-Bradley已经围绕EtherNet/IP进行了标准化,其他厂商如Omron也在其设备上支持了EtherNet/IP。EtherNet/IP已经变得越来越受欢迎,特别是在美国。尽管EtherNet/IP比Modbus更现代化,但仍然存在协议层面的安全问题。EtherNet/IP通常通过TCP/UDP端口44818运行。此外,EtherNet/IP还有另一个端口 TCP/UDP端口2222。使用这个端口的原因是 EtherNet/IP实现了隐式和显示两种消息传递方式。显式消息被称为客户端/服务器消息,而隐式消息通常被称为I/O消息。

EtherNet/IP是为了在以太网中使用CIP协议而进行的封装。EtherNet/IP的 CIP帧封装了命令、数据点和消息等信息。CIP帧包括CIP设备配置文件层、应用层、表示层和会话层四层。数据包的其余部分是EtherNet/IP帧,CIP帧通过它们在以太网上传输。EtherNet/IP分组结构如图

原创 | 工控系统安全EtherNet/IP协议分析

CIP规范对数据包结构有很多的规定,这意味着每个使用 EtherNet/IP的设备必须实现符合规范的命令。下面是EtherNet/IP首部中封装的CIP帧字段:

原创 | 工控系统安全EtherNet/IP协议分析

• 命令

两字节整数,对应一个 CIP 命令。通用工业协议规范标准要求,设备必须能接收无法识别的命令字段,并处理这种异常。

• 长度

两字节整数,代表数据包中数据部分的长度。对于没有数据部分的请求报文,该字段为0。

• 会话句柄

会话句柄(session handle)由目标设备生成,并返回给会话的发起者。该句柄将用于后续与目标设备的通信。

• 状态码

Status字段存储了目标设备执行命令返回的状态码。状态码“0”代表命令执行成功。所有的请求报文中,状态码被置为“0”。其它的状态码还包括:

原创 | 工控系统安全EtherNet/IP协议分析0x0001 无效或不受支持的命令

原创 | 工控系统安全EtherNet/IP协议分析0x0002 目标设备资源不足,无法处理命令

原创 | 工控系统安全EtherNet/IP协议分析0x0003 数据格式不正确或数据不正确

原创 | 工控系统安全EtherNet/IP协议分析0x0065 接收到无效的数据长度

• 发送方上下文

命令的发送者生成这六字节值,接收方将原封不动的返回该值。

• 选项

该值必须始终为0,如果不为零,数据包将被丢弃。

• 命令相关数据

该字段根据接收/发送的命令进行修改。

如果请求发送方是工程师站,大多数会话中执行的第一条命令是“ListIdentity”命令。如下所示的数据包,命令字段是0x63,代表“List Identity”命令,上下文是“0x00006a0ebe64”。这个命令与Modbus功能码43非常相似,可以查询设备信息,如供应商、产品、序列号、产品代码、设备类型和版本号等。使用在Github项目pyenip中找到的Python 脚本ethernetip.py,你可以查询Ethernrt/IP 设备的信息。默认情况下,这个脚本不会解析一些响应,你需要取消脚本底部的 testENIP() 函数的注释后,它才会发送和接收“List Identity”命令。在执行脚本的同时,你可以使用Wireshark查看请求和响应的数据包。

原创 | 工控系统安全EtherNet/IP协议分析

二、EtherNet/IP协议身份鉴别请求攻击 

Digital Bond 在项目 Redpoint 中实现了一个脚本,可以用来从远程设备中获取信息。Redpoint 脚本使用了 “List Identity”命令字,并使用Nmap中的信息进行解析。它的“Conmmand Specific Data”部分包含了一个套接字地址(ip 地址和端口号)。这是暴露的远程设备的真实 ip 地址和端口号,即使它位于NAT设备之后。

我们发现大量的设备暴露的IP字段和实际扫描的IP地址不同。所以我们得出结论,大多数的Ethernet/IP设备部署在内部网络中,而不是直接暴露在互联网上。如下图所示的是使用Nmap扫描CompactLogix控制系统的扫描结果,可以看到暴露的设备ip和扫描ip不匹配,说明目标系统位于路由器或防火墙之后。

原创 | 工控系统安全EtherNet/IP协议分析

上图显示了一些信息,包括设备的制造商“Rockwell”。设备的制造商在响应中是一个两字节的制造商 ID,它映射了一组支持 Ethernet/IP 的厂商名单。但是,这个厂商名单不是公开的。我们在深入研究 Wireshark 捕获的数据包后,发现数据包被 Wireshark 解析后,制造商 ID 被替换成了制造商名称。这说明 Wireshark 拥有如何映射制造商ID和名称的信息。通过对Github上Wireshark源代码的一些搜索,我们发现了如下代码片段,它告诉我们该如何解析制造商 ID。在解析工控协议的时候,Wireshark 常常是一个强大而好用的资源。

原创 | 工控系统安全EtherNet/IP协议分析

使用像“List Identity”这样的命令,你可以简单的重放数据包,几乎不用修改数据包。会话句柄将被设置为0,意味着没有会话生成,因为该命令只是简单的发送命令和接收系统响应。为了进一步与设备进行通信,需要发送注册会话命令(0x65)。这个命令会设置会话句柄ID,这个ID将用于后续会话的通信。如下图所示,注册会话的请求使用标准ID“0x00000000”,目标设备返回了它生成的会话句柄“0x03A566BB”。

原创 | 工控系统安全EtherNet/IP协议分析

三、Ethernet/IP中间人攻击

简单的数据包重放对Ethernet/IP的某些指令无效。这使得攻击变得稍微复杂了一些。然而,对于大多数攻击者而言,只要对 Ethernet/IP 的协议稍有了解,这点困难将是微不足道的。一旦会话句柄通过协商被确定,只要通过手动改变序列号,就可以实现像中间人攻击。

攻击实例:

网络拓扑:

原创 | 工控系统安全EtherNet/IP协议分析

网络环境:

• 虚拟机

• Ettercap工具

• Wireshark

• 交换机

• PLC控制器

攻击测试:使用VM-Linux中的嗅探工具ettercap对目标主机进行嗅探。

单击Hosts选项,选择Scan for host,待扫描完成之后再选择Scan for host,然后选择Host list,此时可以看到已经扫描的主机列表,如图所示:

原创 | 工控系统安全EtherNet/IP协议分析

然后就可以选择要攻击的目标了,选择192.168.210.200的IP地址,如图所示:

原创 | 工控系统安全EtherNet/IP协议分析

明确攻击方式之后,我们选择"Sniff remoteconnections" — "确定"。

原创 | 工控系统安全EtherNet/IP协议分析

点击确定攻击之后,过滤攻击修改Ethernet/ip特定的数据包字段,高级序列号5,通过添加4(十进制)修改数据值。

原创 | 工控系统安全EtherNet/IP协议分析

攻击示意图:

原创 | 工控系统安全EtherNet/IP协议分析

此时使用Wireshark抓包工具可以发现,被攻击PLC的所有流量都是通过攻击者的VM主机发送出去的。通过此操作可直接给PLC下发指令。

原创 | 工控系统安全EtherNet/IP协议分析

四、EtherNet/IP协议终止CPU运行攻击

有些Ethernet/IP设备是支持终止CPU命令的。Metasploit模块,可以被用来终止一个Allen-Bradley ControlLogix控制系统中的大量 PLC,还可以引发其他恶意攻击事件比如令以太网卡崩溃。

只要了解 Session Handle 即可轻松攻击 Ethernet/IP。是这个攻击奏效的另一个关键是Allen-Bradley实现的一个命令字。Allen-Bradley在NOP(0x00)命令中实现了终止 CPU 的功能。如下图

这个命令在CIP或Ethernet/IP的规范中没有记录,是Allen-Bradley/Rockwell控制器的私有实现。通过对大量设备的测试,我们发现,在一些旧的固件中,不仅 ControlLogix CPU 被终止,而且设备崩溃,需要重新启动硬盘。对于当前的型号,PLC 必须拔下并重新插入才能再次运行。极少数情况下,PLC需要重新编程。

原创 | 工控系统安全EtherNet/IP协议分析

五、结束语

上述的攻击都是非常危险的攻击形式,时常与钓鱼网站、挂马网站等攻击形式结合,不仅造成信息的泄漏,还可能被借用于病毒木马的传播。更重要的是,这类攻击可能将我们认为绝对安全的网络连接变成完全被人监听控制的连接,使得网络连接的私密性得不到保障,造成重要数据轻易落入攻击者之手。由于网络环境的复杂性,我们有必要对各类攻击进行了解,具备初步判断网络连接安全性的能力。

防护手段:使用专业的工控防火墙系统,能智能识别和防护各类恶意攻击,结合工控协议的深度解析和黑、白名单策略相结合的防护机制,可有效的阻止针对工控系统的已知和未知的恶意攻击行为,极大的降低了工控系统受损的风险。



转载请注明来源:关键基础设施安全应急响应中心

原创 | 工控系统安全EtherNet/IP协议分析

本文始发于微信公众号(关键基础设施安全应急响应中心):原创 | 工控系统安全EtherNet/IP协议分析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: