-
安全产品
-
-
-
施耐德PLC产品的高危命令字
发布时间:
2017-12-29
来源:
作者:
访问量:
55
Modbus是20世纪70年代后期由Modicon(现为施耐德电气)为了配合其可编程逻辑控制器(PLC)一起使用,创建的基于串行的控制协议。Modbus是最常见的工业控制协议,主要是因为Modbus是一种开放的简单而强大的协议,可以在没有任何版税的情况下开放使用。自从引入Modbus以来,协议已被移植到以太网上工作。为了实现这一点,基于串行的协议被封装(基本上是“封装”)在TCP数据的头部,并且通过默认TCP端口502在以太网络上传输。由于其易于使用,Modbus可以在各种工厂甚至于变电站中找到。
Modbus 分组帧可以分为两部分:应用数据单元(ADU)和协议数据单元(PDU)。ADU 由地址,PDU 和错误检查方法组成。PDU 由功能码和Modbus帧的数据段组成。
Modbus 标准包含了大多数设备将支持的功能代码。这些功能码在 Modbus 标准中定义,如下图所示。
图1 Modbus协议功能码
Modbus协议的实现中常常包含一些厂商实现的非标准的功能码。一个典型的例子是施耐德PLC中的0x5a(90)功能码。和大多数专有协议一样,你必须使用工程软件来分析协议的工作原理。工控安全研究和顾问公司Digital Bond在知名项目ProjectBasecamp中最早在一个Metasploit模块(https://www.rapid7.com/db/modules/auxiliary/admin/scada/modicon_command)中,指出功能码 0x5a 的问题。该功能码实现了Modbus标准未允许的功能,如终止 CPU 的工作。这个高危功能码是通过记录工程软件(Unity Pro)与 Modicon PLC 的通信流量来发现的。
图2 Unity Pro菜单项
通过数据包重放,可以看到这个命令字终止了Modicon PLC所有的运行逻辑。对于需要实时控制的系统,这样的攻击可能导致灾难性后果。
记录工程软件和PLC之间的通信可以从协议中提供一些可用的信息。执行功能代码90的情况下,PLC泄露了令人惊讶的信息,如图510所示,包括最后加载程序到设备的机器主机名。当检查捕获自PLC和工程软件的流量时,Modbus中常常是未编码的字符串,从而易于从设备的响应中解析。
图3 功能码0x5a通信信息
在示例中,项目名称为“Project“,十六进制值为”\x50\x72\x6f\x6a\x65\x63\x74“。进一步检查数据包,十六进制”\x08\x00\x00“是小端序似乎是项目修订号,通过程序解释后,会显示为0.0.8。”\x0c\x3b\x0c\x0e\x01\xde\x07“是项目文件上次修改的日期。
上一条:
相关资讯

关注我们