第一章 Modbus协议概述

大家好,我是老周。在工控安全这行摸爬滚打了十几年,要说哪个协议最绕不开,那绝对是Modbus。今天咱们就来聊聊这个“老古董”——别小看它,直到现在,全球还有上百万套工业系统在跑着Modbus。

我个人习惯把Modbus比作工业界的“通用语言”。它简单、开放,但也正因为简单,安全问题才那么突出。嗯,咱们先从它的身世说起。

1.1 Modbus协议发展历史

Modbus是1979年由Modicon公司(就是现在的施耐德电气)发明的。你想想看,那会儿互联网还没影呢,工业现场就已经开始琢磨怎么让设备“说话”了。

我记得最早接触Modbus是在一个老旧的水处理项目上。那PLC还是串口通信,一根RS485线拉了几百米。当时我就想,这协议能活40多年,肯定有两把刷子。

发展历程其实很清晰:

  • 1979年:Modicon发布Modbus协议,最初用于PLC通信
  • 1990年代:成为事实上的工业标准,几乎所有自动化设备都支持
  • 2004年:施耐德将Modbus协议公开,成为真正的开放协议
  • 2007年:成为国家标准GB/T 19582
  • 至今:依然是工业控制领域部署最广泛的协议之一

核心观点:Modbus能活这么久,靠的就是“简单”。但简单是把双刃剑——开发容易,攻击也容易。

1.2 协议栈架构

Modbus的协议栈其实很薄。说白了,它就定义了应用层的报文格式,底层走什么它不管。这跟咱们现在用的HTTP有点像——HTTP不管你是走WiFi还是走光纤,它只管你的请求和响应格式。

Modbus协议栈分三层:

层级 说明 我的经验
应用层 定义报文格式、功能码、数据模型 这是攻击者最常下手的地方
数据链路层 RTU模式走串口,TCP模式走TCP/IP 串口通信更容易被物理窃听
物理层 RS-232/RS-485(RTU)或以太网(TCP) 485总线布线不规范会引入干扰

这里有个坑,我提醒一下大家:Modbus协议本身没有安全机制。它不加密、不认证、不校验来源。你想想看,一个没有密码的协议,在今天的网络环境下有多危险?

1.3 RTU与TCP模式区别

很多刚入行的朋友搞不清RTU和TCP到底有啥区别。我简单说:

Modbus RTU:走串口,报文是二进制格式。每个字节8位,加上起始位和停止位。效率高,但距离有限(RS485最远也就1200米)。

Modbus TCP:走以太网,报文封装在TCP/IP包里。端口号是502。可以跨网络通信,但引入了TCP/IP协议栈的漏洞。

避坑指南:我曾经在一个项目中,客户把RTU和TCP混用了。RTU设备直接通过串口转以太网模块接到办公网,结果办公网的ARP攻击直接打瘫了PLC。记住:RTU和TCP的报文格式不一样,不能直接互转!

两者的核心区别:

  • 报文格式:RTU有CRC校验,TCP有MBAP头(7字节)
  • 通信方式:RTU是主从模式,TCP是客户端/服务器模式
  • 地址空间:RTU设备地址1-247,TCP用IP地址标识
  • 安全性:RTU物理隔离相对安全,TCP暴露在网络上风险更高

1.4 典型工业应用场景

Modbus的应用场景,说白了就是“万物互联”的工业版。我见过的场景包括:

  1. 水处理系统:PLC采集液位、流量、压力数据,通过Modbus传给SCADA
  2. 楼宇自动化:空调、照明、电梯的控制,Modbus RTU走总线
  3. 电力监控:智能电表、继电保护装置,Modbus TCP上传数据
  4. 石油化工:DCS系统与现场仪表通信,Modbus作为网关协议
  5. 智能制造:机器人、AGV小车、传感器,Modbus TCP做数据交换

注意:这些场景里,Modbus通常跑在控制网段。但很多企业为了远程运维,把Modbus TCP直接暴露在办公网甚至互联网上。这就是典型的“开门揖盗”。我见过一个案例,某水厂的Modbus服务器直接配了公网IP,结果被境外IP扫描到,差点被篡改加药量。

嗯,说到这儿,大家应该对Modbus有个基本认识了。它简单、可靠、开放,但安全防护几乎为零。下一章咱们就深入分析它的安全漏洞——那些攻击者最喜欢利用的“后门”。

对了,如果你在实际项目中遇到过Modbus的安全问题,欢迎交流。我微信deep3321,公众号“蓝海资料掘金营”也会持续更新工控安全的内容。