2. 工业协议基础与通信模型
工业协议安全测试的第一步,不是打开扫描器,而是先弄清“数据到底沿着什么路径、以什么角色关系、在什么物理层上流动”。同一段 Modbus 报文,跑在 RS-485 串行总线上和跑在 TCP/IP 以太网上,其可攻击面、可观测点和测试方法完全不同。本节围绕三条主线展开:OSI 与 TCP/IP 的映射关系、主从/客户端-服务器/发布-订阅三种通信模型、串行与工业以太网两种承载方式,最后给出典型协议族的定位概览。
一、OSI 与 TCP/IP 的映射:安全测试的“分层定位”
OSI 七层模型是教学参照系,TCP/IP 四层模型是工程实现参照系。做协议安全测试时,我们真正关心的是:某个协议字段落在哪一层、该层的攻击面是什么、抓包工具在哪一层能看到它。
以 Modbus TCP 为例:应用层的功能码(如 0x03 读保持寄存器)和寄存器地址,在 TCP/IP 中属于应用层;它被封装进 TCP 段(端口 502),再进入 IP 包(协议号 6),最后进入以太网帧。而 Modbus RTU 没有 IP 和 TCP,它的应用层 PDU 直接加上 CRC 后走串行链路。这意味着:对 Modbus TCP 可以做端口扫描、TCP 会话劫持、IP 分片绕过;对 Modbus RTU 则只能从物理接入、时序和 CRC 校验入手。
测试中常见的分层定位判断依据:
- 能在 Wireshark 中按
tcp.port == 502过滤到的,属于 TCP/IP 承载; - 只能通过串口服务器或物理串口抓到的,属于串行承载;
- 协议字段是否被加密/签名,决定测试是“明文解析”还是“密文流量分析”。
下面这张图把 OSI 层、TCP/IP 层、典型工业协议字段和对应测试观测点放在同一张映射图上,便于快速定位“我要测的东西在哪一层”。
二、三种通信模型:角色关系决定测试切入点
主从模型(Master-Slave)是工业现场最经典的模型,Modbus RTU/TCP、Profibus DP 都采用它。主站发起请求,从站被动响应,从站之间不能直接通信。安全测试的关键点在于:从站通常不做身份认证,只要请求格式合法就会响应。因此测试时可以用一台主机模拟主站,向从站发送读/写请求,观察是否返回数据或执行写入。例如对一台假设地址为 1 的 Modbus 从站,发送功能码 0x03、起始地址 0、寄存器数量 10 的请求,若返回 20 字节数据,说明该从站对未授权主站开放了寄存器读取。
客户端-服务器模型(Client-Server)常见于 OPC UA、EtherNet/IP 的显式消息。客户端主动建立会话,服务器维护会话状态。与主从模型相比,它多了会话建立、认证、加密协商等环节,因此测试面更宽:证书校验是否严格、会话令牌是否可预测、匿名登录是否被允许。OPC UA 的测试中,常用 GetEndpoints 服务枚举服务器支持的安全策略,若发现 None 策略仍被启用,就是一个明确的风险点。
发布-订阅模型(Publish-Subscribe)用于对实时性要求高的场景,如 Profinet IO、EtherCAT、MQTT 在工业物联网中的使用。发布者周期性广播数据,订阅者按需接收,通常没有逐条确认。它的安全弱点是:数据帧一旦被注入,订阅者很难区分真伪。测试时可在同一网段发送伪造的发布帧,观察订阅端是否接受。例如在 Profinet IO 中,伪造带正确设备名的 RT 帧,可能干扰控制器对 IO 设备状态的判断。
| 通信模型 | 典型协议 | 角色关系 | 主要测试切入点 |
|---|---|---|---|
| 主从 | Modbus RTU/TCP、Profibus DP | 主站请求,从站响应 | 未授权读写、地址枚举、功能码滥用 |
| 客户端-服务器 | OPC UA、EtherNet/IP 显式消息 | 客户端建会话,服务器响应 | 证书校验、会话劫持、匿名访问 |
| 发布-订阅 | Profinet IO、EtherCAT、MQTT | 发布者广播,订阅者接收 | 帧注入、伪造发布者、订阅端信任 |
三、串行与工业以太网承载:物理层决定测试手段
串行承载(RS-232/RS-485/RS-422)的典型特征是:半双工或全双工差分信号、总线型拓扑、无 IP 层。测试时需要一个物理接入点,例如在 RS-485 A/B 线上并联一个 USB 转 485 适配器,设置与目标一致的波特率(如 9600、19200)、数据位 8、停止位 1、无校验。接入后可以用脚本发送 Modbus RTU 帧,观察总线上的响应。由于串行总线是共享介质,任何接入设备都能监听全部流量,这也是串行协议天然缺乏机密性的原因。
工业以太网承载则复杂得多。它保留了标准以太网帧格式,但在应用层和实时性上做了改造。测试时通常需要镜像端口或 TAP 设备获取流量,然后按协议过滤。例如 Profinet 使用 EtherType 0x8892,EtherNet/IP 使用 TCP 44818 和 UDP 2222,Modbus TCP 使用 TCP 502。抓到流量后,先判断是周期性 RT 数据还是非周期性显式消息,再决定是重放、篡改还是拒绝服务测试。
四、典型协议族概览:先定位,再深入
工业协议族可以按“现场层—控制层—信息层”粗略划分。现场层以 Profibus、Modbus RTU、IO-Link 为代表,强调实时和确定性;控制层以 Profinet、EtherNet/IP、EtherCAT、Modbus TCP 为代表,强调周期通信和设备互操作;信息层以 OPC UA、MQTT、HTTP/REST 为代表,强调语义互操作和跨系统集成。安全测试的优先级通常与协议暴露程度相关:信息层协议直接面向 IT 网络,攻击面最大;现场层协议物理隔离程度高,但一旦接入,往往缺乏认证和加密。
以 OPC UA 为例,它同时具备客户端-服务器和发布-订阅两种模式,支持安全策略 Basic256Sha256 和 None。测试时先枚举端点,再检查是否允许匿名、是否强制签名、证书是否可被替换。以 Modbus TCP 为例,它只有主从模型,没有认证字段,测试重点就是功能码和地址空间的越权访问。以 Profinet 为例,它使用发布-订阅做 RT 通信,测试重点转向设备名伪造和 IO 数据注入。
把这三层协议族与前面的通信模型、承载方式对应起来,就能形成一张“协议—模型—承载—测试点”的定位表。实际测试中,先确定目标协议属于哪一族、跑在哪种承载上、采用哪种角色关系,再选择对应的工具和方法,比盲目扫描更有效。