Modbus 安全防护白皮书:9个明文传输的真实风险Szene与Unterteilung层防御方案

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  1. 1. 写在前面的话
  2. 2. Modbus zu底缺了什么
  3. 3. 九个真实风险Szene
  4. 4. Szene 1:Modbus TCP 直连公网——502 端口暴露在 Shodan 上
  5. 5. Szene 2:水厂/变电站 Modbus RTU 通过 4G DTU 透明传输上云
  6. 6. Szene 3:Modbus 转 MQTT 网关——MQTT 侧裸奔
  7. 7. Szene 4:工厂内网 Wi-Fi 上的 Modbus TCP 被嗅探
  8. 8. Szene 5:Gebäude selbst kontrollieren BACnet-Modbus 网关配置页未设密码
  9. 9. Szene 6:风电场 SCADA 的 Modbus 控制指令被重放
  10. 10. Szene 7:OEM Ausrüstung默认配置被利用
  11. 11. Szene 8:Register.写入攻击——修改AusrüstungParameter
  12. 12. Szene 9:RS-485 总线物理接入——车间门没锁
  13. 13. Unterteilung层防御:从物理层zu监控层的vollständig方案
  14. 14. 网络层:把 Modbus 关进笼子
  15. 15. 传输层:Modbus 加 TLS 的方案
  16. 16. 应用层:Modbus 安全代理/网关
  17. 17. 物理层:RS-485 总线的物理安全
  18. 18. 监控层:Modbus 流Quantität异常检测
  19. 19. 合规性参考
  20. 20. 最低成本防护清单
  21. 21. 和 OPC UA 的安全模型对比
  22. 22. 写在后面

写在前面的话

Modbus 不安全。这不Was ist das?新发现——1979 Jahr Modicon 设计这个Vereinbarung的时候,连互联网都没普及,更不会想zu有一天 PLC 会通过 4G 模块直接暴露在公网上。那时候的威胁模型是「电缆会不会被老鼠咬断」,不是「有没有人在 502 端口上做中间人攻击」。

但这不代表 Modbus 不能用。一个Vereinbarung的问题和工程现场的问题是两回事。在机柜里、在被隔离的控制网上、在一对一物理Verbindung的 RS-485 总线上,Modbus 明文的缺点几乎不构成威胁。问题出在什么时候?出在你把那根 RS-485 线接上一个 4G DTU,然后 DTU 配了个公网 IP,然后默认密码还没改。

这篇Artikel不讲安全理论,讲九个你我都可能遇zu的情况——不是「如果」而是「已经发生过」。然后我们讨论在不换Ausrüstung、不推翻现有架构的前提下,怎么把风险降zu一个可接受的水平。

Modbus zu底缺了什么

先搞清楚 Modbus 缺失的zu底Was ist das?。不是「不安全」三个字就能概括的。

**没有认证机制。** Modbus TCP 的 MBAP 头里有个 Unit ID Feld,1 Byte。这玩意儿是Geräte Adresse,不是身份凭证。任何能建立 TCP Verbindungzu 502 端口的人,都可以Senden SieFunktionscode 0x03 Lesen Sie das Register、Funktionscode 0x06 Schreiben eines einzelnen Registers。试试看:telnet 过去发 `x00x01x00x00x00x06x01x03x00x00x00x01` ——只要Ausrüstung在线,它就会返回Registerdaten。不需要密码,不需要 token,不需要任何形式的身份验证。

拿Funktionscode 0x05 Schreiben Sie eine einzelne Schleife.来说。这一帧只有 12 Bytes:

| TX ID   | Proto | Len  | UID | FC  | Coil Addr | Value    |
|---------|-------|------|-----|-----|-----------|----------|
| 00 01   | 00 00 | 00 06| 01  | 05  | 00 01     | FF 00    |

这个帧的意思是:把Ausrüstung 01 的Schleife Adresse 0001 置为 ON。如果你是一个合法的 SCADA 客户端,这没问题。如果你是一个连上 502 端口的陌生人,这也是Wirksam的。Ausrüstung不会区别对待。

**没有加密。** TCP 载荷里的每一个Bytes都是明文。Wireshark 用 `modbus` 过滤器可以直接看zu事务 ID、Funktionscode、Register-Adresse、Daten值。抓一包 Modbus TCP 流Quantitätgleich ist拿zu整套Registerabbildung表。一个有心人看你工厂的 Modbus 流Quantität五Unterteilung钟,能画出所有Ausrüstung的Register.图。

**CRC 验不了篡改。** Modbus RTU 的 CRC-16 和 Modbus TCP 依赖的 TCP Prüfungen und,设计目的都是检测物理传输层的比特Fehler.——线缆Geräusche、电磁干扰导致的Daten翻转。它们不是密码学哈希,不能防刻意篡改。攻击者截获一帧,改Registerwert,重新Berechnung CRC,转发出去,Von der Station无法区Unterteilung这一帧是不是被改过。

看一下攻击流:

原始帧 (Hauptstation→Von der Station): 01 06 00 01 17 70 D8 0B  (写保持Register-Adresse0001=6000, 对应50Hz)
截获→篡改后帧:        01 06 00 01 02 58 C9 C3  (改成600, 对应5Hz)

CRC 变了,但攻击者也算得出来。Von der Station收zu后照样执行。变频器上限频率从 50Hz 变成了 5Hz——Elektrische Motoren没烧,但泵不出水了。

**没有防重放。** Modbus 没有Zeit戳、没有SequenzNr.保护(MBAP 里的事务 ID 只是用来匹配Bitte与Antwort,不是安全Seriennummer.)。同一帧可以无限重放。上个月你给风机发了停机指令,攻击者录下来,下个月再发一次——解码完全一样,Ausrüstung照样停。

九个真实风险Szene

不是说理论上的漏洞,是下面这些事情已经在不同现场发生过。有些是我自己碰zu的,有些是同行聊起的,有些是公开报告里的。

Szene 1:Modbus TCP 直连公网——502 端口暴露在 Shodan 上

Shodan 上搜 `port:502`,Ergebnis数一直在涨。两三Jahr前公开Daten大概六七千台,现在早就过万了。这些Ausrüstung里有 PLC、RTU、网关、智能电表,有的跑在Daten中心,有的挂在水厂 SCADA 的主干网上。Shodan 还会抓取Geräte zurück.的 Modbus Antwort,直接Ausrüstung zeigen型Nr.、固件版本。

什么都不用破解。你把Ausrüstung IP 配成公网Adresse,502 端口没做任何 ACL——这就跟把车间大门开着、AusrüstungOperationen面板对着马路一样。

nmap 扫一下更直观:

nmap -p 502 --script modbus-discover <target_ip>

这个 NSE Drehbuch会尝试LesenAusrüstung信息。如果AusrüstungAntwort了 0x11(报告Von der Station ID)或 0x2B(Ausrüstung识别),它直接告诉你制造商、产品代码、固件版本。零门槛。

Szene 2:水厂/变电站 Modbus RTU 通过 4G DTU 透明传输上云

现场用的是 RS-485 跑 Modbus RTU,几十台仪表挂在总线上。为了Fern entfernt监控,加了个 4G DTU,配置成透明传输模式——DTU 把Seriöse Daten打包成 TCP 包发zu云端Der Server。公网 IP,端口 8899(不是 502,但schlecht别不大)。

问题来了:DTU 和云Der Server之间的链路是明文 TCP。任何能在这段链路做 MITM(中间人)的人——不一定是国家级攻击者,可能是运营商内部人员、4G 信Nr.劫持Ausrüstung、或者同基站下的其他Ausrüstung利用 LTE 网络漏洞——都可以:

1. 监听所有 Modbus RTU 流Quantität,拿zuvollständig的Registerabbildung和实时Daten 2. 注入伪造的写指令(Funktionscode 0x06 或 0x10),修改AusrüstungParameter 3. 甚至向Von der StationSenden SieRundfunk指令(Adresse 0x00),同时控制总线上所有Ausrüstung

去Jahr有个水厂的案例:攻击者通过公开的Cloud-Plattform IP 连上了 DTU 的后台管理端口(默认密码 admin/admin),直接看zu整个泵站的控制界面。万幸只是看了,没Operationen。

Szene 3:Modbus 转 MQTT 网关——MQTT 侧裸奔

这种架构现在很Häufig:Modbus RTU Ausrüstung → 网关做Vereinbarung转换 → MQTT Broker(云端或本地)→ 上层应用消费。

网关把Registerdaten映射成 MQTT Topic,比如 `/plant1/pump1/pressure` → 保持Register. 40001 的值。这个设计本身没问题——MQTT 的发布/订阅模型确实比 Modbus 轮询更适合云端Szene。

问题出在 MQTT 侧:很多部署没开 TLS,Broker 不需要客户端证书认证,Topic 没有 ACL。攻击者只要知道 Broker Adresse和端口(通常 1883,明文 MQTT 默认端口),用 `mosquitto_sub` 就能订阅所有 Topic:

mosquitto_sub -h <broker_ip> -p 1883 -t "#" -v

`#` 是 MQTT 的多级通配符,订阅所有 Topic。几秒钟后,整个工厂的Temperatur、压力、电表读数、AusrüstungStatusAlleszu手。如果 Broker 还允许发布(很多网关的双向控制Funktion依赖这个),攻击者可以直接向控制 Topic Senden Sie指令:

mosquitto_pub -h <broker_ip> -p 1883 -t "/plant1/pump1/control" -m "STOP"

Szene 4:工厂内网 Wi-Fi 上的 Modbus TCP 被嗅探

不少工厂为了布线方便,把 Modbus TCP Ausrüstung和 SCADA Der Server挂在同一个 Wi-Fi 网络上。Wi-Fi 密码写在AusrüstungKennzeichnung上,贴在机柜外面——防君子不防小人。

内部员工(或者访客、维保人员、离职员工留下Die Ausrüstung)连上这个 Wi-Fi 后,Modbus TCP 流Quantität全是Rundfunk域内的明文。Wireshark 抓包:

过滤器: modbus && tcp.port == 502

抓个十Unterteilung钟就能把所有Ausrüstung的Registerabbildung画出来。如果攻击者还想更进一步,ARP 欺骗把 SCADA Der Server的流Quantität引zu自己机器上,然后作为中间人转发——Ausrüstung端的 Modbus Kommunikation不会中断,SCADA 界面一切正常,后台的Daten已经在被实时窃取。

Szene 5:Gebäude selbst kontrollieren BACnet-Modbus 网关配置页未设密码

Gebäude selbst kontrollierenDas System里,BACnet 和 Modbus 经常会混在一个网关上。比如 Delta Controls、Siemens Desigo 的一些网关产品,既有 Modbus RTU Schnittstelle接仪表,又有 BACnet/IP Schnittstelle上 BMS。

这些网关通常会提供一个 Web 配置页面。默认情况下,很多集成商上线时只改 IP Adresse、配置好Registerabbildung,密码还是出厂默认——或者压根没设密码。Web 页面暴露了vollständig的Registerabbildung表、Geräte Adresse、Funktionscode配置、甚至Online-Test.Funktion——可以直接在里面发 Modbus 读写指令。

Shodan 上搜 `BACnet gateway` 或特定网关型Nr.的产品页面,能找zu不少这样的入口。进去了不只是看Daten——能直接在 Web 界面上改Heizung.阀门开度、设KlimaanlageTemperatur设定值、启停冷水机组。

Szene 6:风电场 SCADA 的 Modbus 控制指令被重放

风电场 SCADA Das System通常用 Modbus TCP 和风机 PLC Kommunikation。控制指令包括启停、桨距角调整、偏航控制、功率限制等。

2015 Jahr乌克兰电网攻击Ereignisse之后,大家对 OT 安全总算开始重视。但风场的情况比较特殊——很多风场建在偏远地区,Fern entfernt运维依赖 VPN 或专线,运维人员流动性大,VPN 账Nr.管理经常跟不上。

如果一条「紧急停机」Modbus 指令(Funktionscode 0x05,写某一个线圈)在传输过程中被坏人截获——无论通过什么手段,可能是 VPN 客户端被控、可能是运维笔记本被植入木马、可能是内网横向移动——这个帧可以被保存下来。攻击者不需要理解 Das Modbus-Protokoll细节,不需要知道Registerabbildung,只需要几个月后在夜间重放这个帧。风机收zu后就会执行停机。

重放不挑Zeit、不挑目标。录一次,发一百次。而 Das Modbus-Protokoll原生没有任何机制能阻止这件事。

Szene 7:OEM Ausrüstung默认配置被利用

OEM Ausrüstung厂商为了提高出货效率,所有的 PLC/RTU 用统一的von der Station Adresse(比如Adresse 01)、统一的Funktionscode支持列表、甚至统一的Registerabbildung。更糟糕的是,有些厂商在固件里写死了Kommunikationsparameter——没法改。

这在AusrüstungTests阶段很方便。但在实际部署以后,变成安全噩梦。

假设一个Verteilung光伏项目用了同一批逆变器,所有Ausrüstung的von der Station Adresse都是 01,Registerabbildung完全一样(40001=功率,40003=电压,40005=BetriebStatus,40101=Schalter!机控制)。攻击者攻破Von denen一台Ausrüstung或者中间的网络节点,他gleich ist拿zu了所有Ausrüstung的控制蓝图。别Die Ausrüstung不用重新侦察——Registerabbildung完全是同一份。

Szene 8:Register.写入攻击——修改AusrüstungParameter

这个Szene最危险。Modbus 的保持Register.不光存测QuantitätDaten,还存AusrüstungParameter。变频器上限频率、PID Parameter、报警阈值、校准Koeffizienten——都在Register.里。能写Register.的人就能改变Ausrüstung的物理行为。

具体例子:

AusrüstungRegister-AdresseParameter正常值恶意值后果
变频器40018上限频率5000 (=50Hz)500 (=5Hz)泵出水不足,产线停产
温控器40005目标Temperatur250 (=25.0℃)800 (=80.0℃)过温保护跳闸,或者反过来改低导致冻结
电表40045电流变比1001电QuantitätDaten偏schlecht百倍,能耗核算崩盘
PLC40001Betrieb模式1 (Betrieb)0 (Stopp!)直接让 PLC Stopp!执行逻辑

不需要做什么复杂攻击。nmap 的 modbus-discover Drehbuch扫一遍拿zuRegisterabbildung,然后 modbus-cli 或 pymodbus 直接往里写:

from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('192.168.1.100')
client.write_register(18, 500)  # 把变频器上限频率改成5Hz

四行代码。不需要任何权限。变频器收zu了就执行。

Szene 9:RS-485 总线物理接入——车间门没锁

RS-485 总线的物理安全性几乎是零。总线上的所有Ausrüstung共享一对schlechtUnterteilung信Nr.线(A+/B-),任何人在总线的任何位置接上一个 USB-RS485 Konverter.,就能:

1. **被动监听**:把所有 RS-485 流Quantität记录下来,离线Unterteilung析 2. **主动注入**:伪装成Hauptstation或者Von der StationSenden Sie指令 3. **总线干扰**:持续Senden SieDaten造成总线冲突,DDoS 整个网络

一个 USB-RS485 Konverter.淘宝十几块钱。一个机智的攻击者在夜班巡检时,趁人不注意把Konverter.藏在线槽里,加一个微型 4G 模块做Fern entfernt接入。谁能发现?没有人会定期检查 RS-485 总线的电气Eigenschaften。

关键是 RS-485 总线的设计本身就是多站共享介质,不需要交换机、不需要端口接入许可。物理上挂上去就是网络的一员。Modbus RTU 的von der Station Adresse只有 1-247,攻击者可以枚举所有Adresse,逐个探测AusrüstungTypus。

Unterteilung层防御:从物理层zu监控层的vollständig方案

讲完九个Szene之后,一个自然而然的结论是:不能靠单一手段解决 Modbus 安全问题。它的问题Unterteilung布在Vereinbarung栈的每一层,防护也得跟着Unterteilung。

下面这些方案不是在讲理论——每一条都有对应的产品、开源Werkzeuge或者配置方法。按自己的现场条件挑着用。

网络层:把 Modbus 关进笼子

**Die一条铁律:Modbus 502 端口绝对不要直接暴露在公网上。** 这句话怎么强调都不过Unterteilung。如果你Die Ausrüstung供应商跟你说「直接把 IP 配成公网的,我们Fern entfernt维护方便」——换供应商。

具体Operationen:

**防火墙 ACL 白名单。** 不是黑名单,是白名单。502 端口只允许指定 IP(SCADA Der Server、Datenerfassung网关)访问。Linux iptables 两行搞定:

iptables -A INPUT -p tcp --dport 502 -s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 502 -j DROP

如果你Die Ausrüstung CPU 跑不动 iptables,用硬件防火墙(几百块的小型工业防火墙就行),或者至少在路由器/三层交换机上做 ACL。

**VLAN 隔离。** 把 Modbus Ausrüstung放在独立的 VLAN 里,和办公网络、Wi-Fi 网络、访客网络完全隔离。VLAN 间路由只放行 SCADA Der Serverzu 502 端口的流Quantität,其他一概不路由。交换机端口上做 MAC 绑定,防止有人把Ausrüstung拔了换自己的笔记本。

**VPN/IPsec 隧道。** 需要Fern entfernt访问的Szene,走 VPN 而不是把端口开zu公网上。IPsec 或 WireGuard 都可以。OpenVPN 的配置不复杂:

# 服务端只允许 502 端口流Quantität通过隧道
push "route 192.168.10.0 255.255.255.0"

这Garantie了 Modbus 流Quantität始终在加密隧道里传输。即使攻击者拦截了 VPN 链路,TLS/AES 加密也会让他拿不zu明文。

传输层:Modbus 加 TLS 的方案

提zu Modbus 加 TLS,得先说现状:**Modbus Organization 在 2018 Jahr 10 月发布了 Modbus/TCP Security 规范**。核心变化:默认端口从 502 改为 802,TLS 1.2 强制,X.509v3 证书做身份认证,同时引入基于Rolle的访问控制(Role-Based Access Control,RBAC)。

规范定义了四个Rolle:

Rolle IDRolle名权限
0Administrator全Funktionscode、全Register.、Ausrüstung管理
1Operator读写所有Register.,不能改配置
2EngineerTests诊断权限
3Observer只Lesen von Daten,不能写

这彻底解决了 Modbus 无认证的问题——客户端必须持有Wirksam证书才能建立 TLS Verbindung,证书中的RolleFeld决定了能执行哪些Funktionscode。

但现实是,支持 802 端口Die Ausrüstung少得可怜。绝大多数存QuantitätAusrüstung只支持 502 明文。不换Ausrüstung怎么加 TLS?

**stunnel 方案。** stunnel 是一个轻Quantität的 TLS 代理,能把任意 TCP Verbindung封装zu TLS 隧道里。部署架构:

SCADA 客户端 → stunnel(本地127.0.0.1:1502) → TLS → stunnel(Fern entfernt) → Ausrüstung(502)

stunnel 配置很短:

# 客户端 stunnel.conf
[modbus-client]
client = yes
accept = 127.0.0.1:1502
connect = 192.168.10.1:802
verifyChain = yes
CAfile = /etc/stunnel/ca.pem
cert = /etc/stunnel/client.pem
key = /etc/stunnel/client.key

# 服务端 stunnel.conf
[modbus-server]
client = no
accept = 802
connect = 127.0.0.1:502
cert = /etc/stunnel/server.pem
key = /etc/stunnel/server.key
CAfile = /etc/stunnel/ca.pem
verifyChain = yes

客户端软件连 `127.0.0.1:1502` 而不是直连Ausrüstung的 502。中间的 TLS 加密对上层完全透明。stunnel 本身只有几百 KB,可以跑在Eingebettet Linux 网关、Raspberry Pi、甚至 OpenWrt 路由器上。

**注意:** stunnel 解决的是传输加密问题,不解决应用层认证问题。它Garantie了传输链路不被窃听和篡改,但一旦 TLS 隧道建好,Modbus 帧本身依然是明文——只是这个明文只在加密隧道和保护的内网之间传输。如果攻击者能进入内网并直接连Ausrüstung的 502,stunnel 保护不了。

应用层:Modbus 安全代理/网关

如果你不能在每Ein Gerät端部署 stunnel,或者需要更细粒度的控制,在 Modbus 总线和上层应用之间加一个安全代理/网关是性价比最高的方案。

Moxa MGate 系列、Hilscher netTAP、Advantech ADAM-4570 这些Das industrielle Netzwerk都支持访问控制列表。你可以在网关上配置:

– 哪个 IP 可以访问哪些von der Station Adresse – 允许哪些Funktionscode通过 – Register.级读写控制——比如Adresse 40001-40050 只读,40051-40100 可读写 – Verbindung速率限制(防暴力轮询/DoS)

选型时看清楚:不是所有 Modbus 网关都支持安全策略。很多廉价网关只是做透传,ACL Funktion在选型表里要找 `Access Control` 或 `Security Policy` Feld。

开源方案也不是没有。用 pymodbus 写一个代理也就几百行代码:

# 简化版 Modbus 安全代理逻辑
ALLOWED_FUNCTION_CODES = {0x03, 0x04, 0x06, 0x10}  # 只允许这些Funktionscode
READ_ONLY_REGISTERS = range(40001, 40051)  # 这个Adresse段只读

def proxy_handler(request):
    if request.function_code not in ALLOWED_FUNCTION_CODES:
        return exception_response(request.function_code, 0x01)  # Illegale Funktionen码
    
    if request.function_code in {0x06, 0x10}:
        for addr in request.addresses:
            if addr in READ_ONLY_REGISTERS:
                return exception_response(request.function_code, 0x02)  # Illegale Datenadressen
    
    # 转发zu实际Ausrüstung
    return forward_to_device(request)

这几行挡掉了Szene 8 里大部UnterteilungRegister.写入攻击。

物理层:RS-485 总线的物理安全

物理安全听起来「低级」,但九个Szene里至少三个和物理接入有关。

最低成本也能做的几件事:

1. **机柜上锁。** 不只是一个简单的钥匙锁——用电子门禁,记录谁什么时候开了哪个机柜。异常Zeit(凌晨两三点)的机柜开门=物理安全Ereignisse。 2. **RS-485 总线用带屏蔽的双绞线走线槽。** 线槽加封条,拆开有痕迹。不是防不住,是让攻击者留下证据。 3. **USB 端口禁用。** 工厂里的Arbeitskontrolle机/HMI 不需要插 U 盘。BIOS 禁用 USB、Windows 组策略禁用可移动存储。有人插 USB-RS485 Konverter.,Das System不识别。 4. **总线终端电阻加防拆Der Sensor。** RS-485 总线两端各有一个 120Ω 终端电阻。如果一个电阻被Entfernen(有人在线中间接了一个监听Ausrüstung导致阻抗变化),总线的电气Eigenschaften会变化——可以用总线Unterteilung析仪检测。

花不了多少钱,但挡住 90% 的物理接入攻击足够了。

监控层:Modbus 流Quantität异常检测

前面的所有措施都是「不让他进来」。但对「已经进来了」或者「合法用户做了不合法的事」的情况,你还需要检测能力。

Modbus 流Quantität的异常特征很明确——正是因为Vereinbarung简单,异常更容易识别:

**轮询周期突变。** SCADA Das System通常以固定周期轮询Ausrüstung(比如每秒一次)。如果某个Von der Station的Bitte频率突然从 1 次/秒变成 100 次/秒,大概率不是 SCADA 的行为。可能是有人在暴力扫描Register.。

**非标准Funktionscode出现。** 一个只用了 0x03(Lesen Sie das Register)和 0x06(Schreiben eines einzelnen Registers)的Das System,突然出现 0x08(诊断)或 0x2B(Ausrüstung识别)Bitte——这是侦察行为的典型特征。

**非工作Zeit流Quantität。** 工厂停产时段(比如晚上 11 点zu早上 6 点),Modbus 总线上不应该有大Quantität读写指令。如果有,报警。

**异常Funktionscode组合。** 短Zeit内出现 0x05(Schreiben Sie eine einzelne Schleife.)、0x06(Schreiben eines einzelnen Registers)、0x10(Schreiben mehrerer Register)的密集组合,且目标Adresse跨越多个不相邻的区域——几乎可以确定是恶意Operationen。

开源Werkzeuge方面:

# Zeek (原Bro) 有 Das Modbus-ProtokollAnalyse器
# 写一个检测Drehbuch放在 Zeek 的策略目录

Wireshark + Modbus 插件可以用来做离线流Quantität审计。把一天的总线流Quantität抓下来,用 Wireshark 的 `Statistics` → `Protocol Hierarchy` → `Modbus` 看FunktionscodeUnterteilung布。Funktionscode 0x08 和 0x2B 的出现是红旗。

nmap 的 `modbus-discover` NSE Drehbuch应该周期性地从你自己的 SCADA Der ServerBetrieb,检查有没有新的 Modbus Ausrüstung出现在网络上:

nmap -p 502 --script modbus-discover 192.168.10.0/24

发现了不属于你Die Ausrüstung,事情就严重了。

合规性参考

不展开讲法规条文,只说对 Modbus 部署直接有影响的几条。

**IEC 62443-3-3** 定义了Industrielle Automatisierung和控制Das System的七个基础要求(FR1-FR7)。Von denen FR2(使用控制)要求对工业Kommunikation实施认证和授权,FR3(Das Systemvollständig性)要求对KommunikationDaten进行vollständig性Prüfungen。明文 Modbus 直接不符合 FR2 和 FR3。加 stunnel/VPN 后可以满足密码学层面的要求。

**NERC CIP(北美电力可靠性标准)** 的 CIP-005 要求对电力Das System电子安全边界(ESP)实施访问控制。这意味着如果你在美国电力行业用 Modbus 传输控制指令,502 端口必须在 ESP 内部或者通过 ESP 的加密隧道,不能裸奔。CIP-007 还要求Das System打补丁和最小化端口,和 Modbus Ausrüstung的固件管理直接Related。

**中国等保 2.0(GB/T 22239-2019)** 对ArbeitskontrolleDas System有专门的扩展要求。主要包括:控制网络和非控制网络之间实施边界防护和Techniken隔离;使用广域网进行控制指令传输时采用加密认证;工业控制Das System内部根据业务划Unterteilung安全域并实施隔离。用 Modbus Die Ausrüstung如果在等保三级及以上的Das System里,基本的网络隔离、Kommunikation加密、访问控制是硬性要求,没有可选余地。

这些合规要求不是摆设——审计的时候会查网络架构图、防火墙Regeln、抓包验证。拿 Modbus TCP 明文走公网通不过任何一项合规审计。

最低成本防护清单

如果你在一个中小工厂、预算有限、Ausrüstung老旧不能换、也没有专职安全工程师,下面 5 条是你现在就能做的。**这 5 条挡住 90% 的攻击,不需要额外采购Ausrüstung:**

1. **检查所有 502 端口是否可以从公网访问。** zu https://www.shodan.io 搜你的公网 IP 段,或者在外部网络用 `nmap -p 502 <公网IP>` 扫一遍。发现暴露的,立刻关掉端口映射或者加 AC。 2. **Modbus 网关/DTU 改默认密码。** 不只是网关的 Web 管理页面——Bestätigen DTU 的 AT 指令配置密码(如果支持)、MQTT Broker 的认证、VPN 的预共享密钥,Alles改掉。 3. **把 Modbus Ausrüstung放在独立 VLAN,配置白名单 ACL。** 如果交换机不支持 VLAN,至少划一个独立的 IP 子网,路由器上做 ACL,只允许 SCADA Der Server IP 访问 502。 4. **在 SCADA Der Server上跑一次 Wireshark 抓包审计。** 记录一小时的总线流Quantität,检查有没有异常Funktionscode(0x08, 0x2B)、有没有出现在不该在的Geräte Adresse。 5. **定期用 nmap 扫描 Modbus 网络。** 写个 cron 每周跑一次 `nmap -p 502 –script modbus-discover <子网>`,把输出 diff 一下。出现新Ausrüstung=有人接了什么东西进去。

把上面 5 条落实了,再谈要不要上专用的 OT 安全平台、要不要做 SIEM 集成。大多数小工厂连Die一条都没做。

和 OPC UA 的安全模型对比

聊 Modbus 安全绕不开 OPC UA。不是说谁替代谁,是搞清楚两者的安全模型schlecht距,避免选型时做出离谱决策。

维度Modbus TCP (原生)OPC UA
认证X.509 证书、用户名/密码、Kerberos
传输加密TLS 1.2/1.3 (UA-TCP) 或 HTTPS (UA-HTTPS)
Daten签名每条消息可单独签名 (UA-SecureConversation)
访问控制会话级+节点级 ACL
审计日志依赖应用层内置审计EreignisseTypus
Vereinbarung复杂度极简,12 Bytes帧BinärsystemCodierung,vollständig OO 对象模型

OPC UA 把安全做进了Vereinbarung栈,从传输层zu应用层都有对应的安全机制。Modbus 把一切扔给了实现者。这不是 OPC UA 比 Modbus 「更好」——这是两种完全不同的设计哲学。OPC UA 的安全复杂度也是代价:TLS 握手、证书管理、信任链、CRL/OCSP 吊销检查——这些在Eingebettet Modbus Ausrüstung上是天方夜谭。STM32 跑 Modbus RTU 只需要一个 UART 和两三百行 C 代码,跑 OPC UA 需要 TLS 库、XML Analyse器、至少几十 KB 的 RAM。

所以结论不是「大家都用 OPC UA」。是:如果你本来就在用 Modbus,别因为它不安全就推翻整个Das System换成 OPC UA——加 stunnel、防火墙 ACL、安全代理的成本远低于换Vereinbarung。如果你是新建Das System、选型阶段、Ausrüstung资源充足、需要面向 IT/OT 融合架构——OPC UA 天然的安全能力会让你在后期的合规和运维上省很多事。

写在后面

Modbus 的安全问题不是一个Techniken问题,是一个工程管理问题。Vereinbarung本身没有安全能力,但你可以通过部署架构把它放zu一个受保护的环境里。就像你不会把一台没有防火墙的Der Server直接挂在公网上一样,你也不应该让 Modbus Ausrüstung直接面对不可信网络。

说zu底,最危险的从来不是Vereinbarung漏洞,而是有人觉得「我们这种小厂没人攻击」。攻击者不挑大厂小厂——自动化扫描Werkzeuge一视同仁,502 端口开着就进来。

有问题再聊,或者你自己开 Wireshark 抓一包看看——大概率你会被惊zu的。

Techniken术语(共 13 个)—— Klick auf展开
Modbus RTU基于串行链路的ModbusVereinbarung,使用BinärsystemCodierung和CRC-Test
Modbus TCP基于Ethernet的ModbusVereinbarung变体,使用TCP/IP传输
RS485工业常用的schlechtUnterteilung串行Kommunikation标准,支持多点Kommunikation
FunktionscodeModbusFunktionscode指定读/写OperationenTypus,如01读线圈、03Lesen Sie das Register
Register.Modbus Register.存储Daten单元,Unterteilung线圈/离散输入/保持/输入Register.四类
PLC可编程逻辑Der Controller,Industrielle Automatisierung控制的核心Ausrüstung
SCADADatenerfassung与监视控制Das System,用于Fern entfernt监控工业过程
DTUDaten传输单元,将Seriöse Daten转为网络Daten实现Fernkommunikation
网关Vereinbarung转换Ausrüstung,如 Modbus RTU ↔ Modbus TCP
Die SerieBerechnung机与外部Ausrüstung进行串行Kommunikation的物理Schnittstelle
Der Sensor将物理Quantität转换为电信Nr.的检测装置
线圈Modbus位可读Schreiben von Daten,Adresse从00001开始
保持Register.Modbus 16位可读Schreiben von Daten,Adresse从40001开始
来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Technische Dokumentation von Modbus 字数 10854 字 · 阅读约 28 Unterteilung钟 更新 2026-08-20 永久链接 https://www.modbus.cn/45425.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和MeldungUnterteilung析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.