[三菱] 入门工业通讯之EtherNet/IP协议分析

[复制链接]
查看41630 | 回复0 | 2024-5-21 08:30:23 | 显示全部楼层 |阅读模式
写在前面

前面我们系统得说了工业控制系统的通讯,大家肯定会想到PROFINET、ETHERNET/IP、ETHERCAT等工业以太网:

技术解读PROFINET、Ethernet/IP等7种主流工业以太网

最全整理工业通讯上的领域各种总线+协议+规范+接口—数据采集与控制

但是说到协议的分析,我们 不得不提到安全问题,前面我们系统的介绍过关于工业控制系统的架构、安全等:

工业控制系统安全入门与实践—从五层架构和安全标准说起

工业控制系统安全入门与实践——工控安全入门分析

也聊了西门子、施耐德、罗克韦尔等国际大厂的相关安全漏洞:

基于S7协议对西门子PLC S7-1500的漏洞分析与复现(附演示视频)

施耐德PLC漏洞历险记—一次与施耐德PLC的非正常接触

罗克韦尔 MicroLogix PLC漏洞的复现及解决方案

西门子、施耐德、罗克韦尔PLC程序设计漏洞探秘

今天来解析下由罗克韦尔主导的ETHERNET/IP协议~

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

一、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分组结构如图



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



• 命令

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

• 长度

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

• 会话句柄

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

• 状态码

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


0x0001 无效或不受支持的命令


0x0002 目标设备资源不足,无法处理命令


0x0003 数据格式不正确或数据不正确


0x0065 接收到无效的数据长度

• 发送方上下文

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

• 选项

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

• 命令相关数据

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

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



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

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

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



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



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



三、Ethernet/IP中间人攻击

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

攻击实例:

网络拓扑:



网络环境:

• 虚拟机

• Ettercap工具

• Wireshark

• 交换机

• PLC控制器

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

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



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



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



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



攻击示意图:



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



四、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需要重新编程。



五、结束语

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

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

硬核专辑

工业热点 | 数据采集 | 应用与库(西门子、罗克韦尔、倍福等)

WinCC技术 | 工业网络 | MES技术相关| 工业巨头战略布局 | 工业通讯案例

仿真与虚拟调试 | 职业感悟、认知提升 | 自动化控制标准合集



西门子TIA Portal+库卡机器人+VNCK实现数字化机床虚拟调试

2020-12-06



超炫酷的西门子TIA Portal的大神级操作~

2020-11-27



自动化+信息化:徐工传动数字化工厂实施方案

2020-11-24



基于TIA Portal V15的动态加密计时催款程序

2020-11-16



软件定义制造:五层架构下数字化工厂的信息系统

2020-11-13



智能自动化物流系统AGV基础知识(完整介绍)

2020-11-14



机床数字化通信三大标准-OPCUA、MTConnect、NC-Link

2020-11-07



一文讲透PROFINET组态调试、编程、应用等最重要的文档和知识点

2020-11-08



数字化工业,IT大佬与工业自动化巨头的IT\OT融合之旅

2020-11-02



PLC高级编程-西门子SCL结构化控制语言官方培训.pptx

2020-10-29



MES、SCADA下的数据采集—C#实现扫码器的串口通讯实例

2020-10-28



IT融合OT:数据、网络与WMS、MES如何贯穿五层自动化金字塔?

2020-10-20



免责申明:本公众号所载文章为本公众号原创或根据网络搜索编辑整理,文章版权归原作者所有。因转载众多,无法找到真正来源,如标错来源,或对于文中所使用的图片,资料,下载链接中所包含的软件,资料等,如有侵权,请跟我们联系协商或删除,谢谢!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则