Modbus 协议

Modbus TCP / Modbus RTU Industrial Communication Protocol

Modbus 是工业领域应用最广泛的通信协议之一,采用主从架构和明文传输,缺乏内置安全机制,是工控安全事件中暴露频次最高的协议之一。

概述

Modbus 协议由 Modicon 公司(现施耐德电气)于 1979 年开发,是最早的工业通信协议之一,也是当前应用最广泛的 PLC 通信标准。Modbus 采用主从(Master-Slave)架构,由主站发起请求、从站响应,支持读写线圈(Coil)、寄存器(Register)、离散输入和输入寄存器四类数据对象。作为一种开放的公开协议标准,Modbus 并不需要许可费用,几乎所有 PLC 厂商都支持其通信协议,这也是它能够如此广泛普及的重要原因之一。

Modbus 的简洁性是其广泛普及的原因,但也导致了严重的安全缺陷——协议本身不包含任何安全机制。根据 CNVD 公开通报,涉及 Modbus 协议的工控设备漏洞占比常年位居前列,Modbus 协议的明文传输和无认证特性使其成为攻击者首选的攻击入口之一。在近年来的多个著名攻击事件中,包括 Triton 以及 LockerGoga 攻击中,都与 Modbus 协议的安全缺陷有关。

Modbus 协议的历史渊源可以追溯到上世纪末工控领域的信息化初期。当时,Modicon 公司为了解决 PLC 之间的数据交换难题,设计了一种简单而有效的通信协议。经过几十年的发展,Modbus 已经成为工业通信领域的事实标准,几乎所有的 PLC、DCS 系统都内置了 Modbus 的支持。然而,随着 IT/OT 融合的加深,Modbus 的安全缺陷逐渐成为工控网络的重要安全隐患。许多老旧的工控设备仍然运行着基于 Modbus 协议的控制系统,这些设备在面对现代网络攻击时显得尤为脆弱。

通信机制

Modbus 协议有两种主要变体:Modbus RTU 和 Modbus TCP。Modbus RTU 运行在 RS-232 或 RS-485 串行链路上,帧格式由从站地址(1字节)、功能码(1字节)、数据域和 CRC 校验(2字节)组成。典型功能码包括 0x01-0x06 的读写操作和 0x0F/0x10 的批量写入。Modbus RTU 以紧凑的二进制编码方式传输数据,具有较高的传输效率,是工业环境中串口通信的首选协议。

Modbus TCP 将 Modbus 协议封装在 TCP/IP 之上,默认使用 502 端口。报文在 RTU 帧基础上增加了 7 字节的 MBAP 头(事务标识、协议标识、长度和单元标识),去掉了 CRC 校验(由 TCP 层保证传输可靠性)。Modbus TCP 保留了与 Modbus RTU 完全相同的功能码和数据模型,确保了两种变体之间的无缝互操作。Modbus TCP 广泛应用于以太网环境下的 PLC 通信,是工业物联网部署中的常用选择。

Modbus Plus 是 Modbus 的增强版本,基于令牌传递机制,支持多主通信和更高的传输速率,但属于施耐德专有协议,互操作性受限。随着工业以太网的普及,Modbus Plus 的应用场景逐渐减少,但仍在一些老旧的施耐德自动化系统中使用。

Modbus 的功能码体系是其核心设计。0x01(读线圈)和 0x02(读离散输入)用于读取位值;0x03(读保持寄存器)和 0x04(读输入寄存器)用于读取 16 位整数值;0x05(写单个线圈)和 0x06(写单个寄存器)用于写入单个值;0x0F(写多个线圈)和 0x10(写多个寄存器)用于批量写入操作。这些功能码构成了 Modbus 协议的基本操作能力,也正是攻击者关注的重点对象。

安全风险分析

Modbus 协议的安全缺陷源于其设计年代(1979年),彼时工业网络与外部网络物理隔离,安全性不在设计考量范围内。核心风险包括:无身份认证——任何设备均可伪装为主站向从站发送命令;无加密——所有数据明文传输,功能码、寄存器地址和数据值完全暴露;无完整性保护——攻击者可篡改报文内容且从站无法检测。这些设计缺陷使 Modbus 协议成为工控安全攻防的主要目标,被多次用于恶意攻击工具中。

功能码滥用是常见的攻击手段。攻击者利用功能码 0x05(写单个线圈)或 0x06(写单个寄存器)可直接控制 PLC 输出,功能码 0x10(写多个寄存器)可批量篡改控制参数。Modbus TCP 在网络层面还面临 502 端口扫描、会话劫持和拒绝服务等威胁。CNVD-2021 年度报告中,涉及 Modbus 协议的漏洞通报占比超过 15%,部分已公开的 CVE 显示攻击者可通过构造恶意 Modbus 报文导致 PLC 异常运行。这些攻击事件引起了工业界对 Modbus 协议安全性的广泛关注。

Modbus 的串口通信方式虽然在物理上相对隔离,但也并非没有安全风险。一旦攻击者获得工控网络的物理访问权限,通过串口即可直接与 PLC 进行通信。此外,许多 Modbus RTU 网络使用 RS-485 总线,这种总线特性允许多个设备共享同一通信线路,攻击者可以通过物理接入在不被察觉的情况下进行通信。

Modbus TCP 的网络暴露性更加严重。作为一种基于 TCP/IP 的协议,它可以轻松地在任何网络环境中传输,包括互联网。许多工控系统为了方便远程维护,开放了对外的 Modbus TCP 通信端口,这为攻击者提供了便捷的入侵途径。即使没有漏洞,Modbus 协议本身的缺乏认证机制也允许攻击者轻易地进行通信。

应用场景

Modbus 协议覆盖了工业领域几乎所有行业。在制造业中,Modbus 连接传感器、变频器、PLC 和 HMI,构成产线级通信网络。在能源行业,Modbus 用于 RTU(远程终端单元)与 SCADA 系统之间的数据采集。在水和污水处理行业,Modbus RTU 通过 RS-485 总线连接分散的现场设备。楼宇自动化系统中,Modbus 用于暖通空调、照明和能源计量设备的通信。

Modbus 的简单性使其在小型控制系统和旧设备改造项目中仍然占据主导地位。许多新设备在支持现代协议的同时,仍保留 Modbus 接口以兼容已有系统。Modbus 协议的简单实现也使其成为教学和测试环境的首选,这些场景同样需要考虑通信的安全性。随着工业物联网的发展,Modbus 作为一种轻量级协议,还被广泛应用于 IoT 设备之间的数据交换。

在中国,Modbus 协议的普及程度极高,几乎所有规模以上的制造企业都普遍使用 Modbus 进行设备通信。其中不少老系统仍然运行着数十年前的 Modbus RTU 网络,这些系统面临着更大的安全风险。随着《关键信息基础设施安全保护条例》的实施,越来越多的企业开始关注 Modbus 网络的安全防护。

参考资料

在网络层,通过工控防火墙对 Modbus TCP 流量进行深度包检测,基于功能码、寄存器地址范围和访问频率实施细粒度访问控制,禁止非授权的功能码(如写入功能码)。在串口层面,使用串口隔离网关或 Modbus TCP 协议转换器,将串口通信迁移到受控的 IP 网络。部署工控 IDS 对异常 Modbus 流量进行实时监测和告警。对于新建系统,优先选择支持安全机制的替代协议(如 OPC UA),或采用 Modbus/TCP Security 等增强方案。严格控制 502 端口的网络访问,仅允许授权的主站 IP 地址通信。这些防护措施能够在很大程度上缓解 Modbus 协议的安全隐患。

Modbus 网络的防护还需要从整体架构层面进行考虑。首先,需要建立 Modbus 网络的流量基线,通过监测分析了解正常的通信模式和数据范围。其次,应部署支持 Modbus 协议深度解析的安全设备,能够识别可疑的功能码组合和异常的寄存器访问模式。最后,定期进行 Modbus 设备的安全审计,检查设备固件版本和配置安全性,确保不使用存在高危漏洞的设备。

常见问题

Q: Modbus TCP 和 Modbus RTU 有什么区别?
Modbus RTU 基于 RS-232/RS-485 串口通信,采用紧凑的二进制帧格式;Modbus TCP 基于 TCP/IP 网络,使用 MBAP 报文头封装,默认端口 502。两者功能码和数据模型相同,但 Modbus RTU 多用于串口环境,Modbus TCP 适用于以太网环境。
Q: 为什么 Modbus 协议被认为不安全?
Modbus 协议无身份认证、无加密、无完整性校验,任何接入网络的设备均可发送读写请求,且数据以明文形式在网络上传输,容易被窃听和篡改。协议本身没有安全设计,这是其关键安全缺陷。
Q: Modbus 协议能否在安全环境中使用?
可以通过工控防火墙进行协议级过滤、网络隔离和使用 Modbus TCP 安全封装(如 Modbus/TCP Security)来提升安全性,但根本解决仍需协议升级。生产环境中应优先考虑支持认证加密的替代协议。
标签:Modbus TCPModbus RTU工业协议
发布日期:2026-05-19
选择区号