Schreiben Sie vorne.
Modbus ist nicht sicher. Das ist nichts Neues - als Modicon das Protokoll 1979 entwarf, war noch nicht einmal das Internet verfügbar, geschweige denn, dass eine SPS eines Tages direkt über ein 4G-Modul in das öffentliche Netz ausgesetzt sein würde. Das Bedrohungsmodell zu dieser Zeit war „Ob das Kabel von einer Maus gebissen wird" und nicht „Ob jemand einen Man-in - the-Middle - Angriff auf Port 502 durchführt".
Das bedeutet aber nicht, dass Modbus nicht funktioniert. Das Problem eines Protokolls und das Problem des Baustandes sind zwei verschiedene Dinge. In einem Schrank, in einem isolierten Steuernetz oder auf einem physikalisch verbundenen RS - 485 - Bus stellen die Plaintext-Mängel von Modbus kaum eine Bedrohung dar. Wann kommt das Problem? Sie haben das RS - 485 - Kabel mit einem 4G DTU verbunden, dann hat die DTU eine öffentliche IP, und dann hat das Standardpasswort nicht geändert.
Dieser Artikel behandelt nicht die Sicherheitstheorie, sondern neun Situationen, in denen Sie und ich wahrscheinlich stoßen - nicht „wenn", sondern „es ist schon passiert". Dann diskutieren wir, wie wir das Risiko auf ein akzeptables Niveau reduzieren können, ohne die Ausrüstung zu wechseln oder die bestehende Architektur zu stürzen.
Was in Modbus fehlt
Erfahren Sie, was in Modbus fehlt. Das Wort „unsicher" lässt sich nicht zusammenfassen.
* * Keine Zertifizierungsmechanismen. * * Der MBAP-Header von Modbus TCP enthält ein Unit ID-Feld von 1 Byte. Das Ding ist die Geräteadresse, kein Identitätsnachweis. Jeder, der eine TCP-Verbindung an den Port 502 herstellen kann, kann den Funktionscode 0x03 für das Lesen und Halten des Registers und den Funktionscode 0x06 für das Schreiben eines einzelnen Registers senden. Versuchen Sie es: Telnet sendet `x00x01x00x00x00x00x00x06x01x03x00x00x00x00x01` - es gibt Registerdaten zurück, solange das Gerät online ist. Kein Passwort, kein Token, keine Form der Authentifizierung erforderlich.
Schreiben Sie den Funktionscode 0x05 für eine einzelne Spule. Diese Seite hat nur 12 Bytes:
| TX ID | Proto | Len | UID | FC | Coil Addr | Value |
|---------|-------|------|-----|-----|-----------|----------|
| 00 01 | 00 00 | 00 06| 01 | 05 | 00 01 | FF 00 |Das bedeutet: Setzen Sie die Spule-Adresse 0001 des Geräts 01 auf ON. Wenn Sie ein legitimer SCADA-Client sind, ist das in Ordnung. Dies funktioniert auch, wenn Sie ein Fremder sind, der mit dem Port 502 verbunden ist. Geräte werden nicht unterschieden.
* * Keine Verschlüsselung. * * Jedes Byte in der TCP-Ladthest ist Klartext. Wireshark verwendet den `modbus` - Filter, um die Transaktions-ID, Funktionscode, Registeradresse und Datenwerte direkt zu sehen. Ein Paket von Modbus TCP-Traffic ist gleichbedeutend mit einem vollständigen Satz von Register-Map - Tabellen. Ein sinnvoller Mensch, der den Modbus-Traffic in Ihrer Fabrik für fünf Minuten betrachtet, kann ein Register-Diagramm aller Geräte zeichnen.
* * CRC konnte keine Manipulation erkennen. * * Die CRC - 16 von Modbus RTU und die abhängige TCP-Checksumme von Modbus TCP sind entworfen, um Bitfehler in der physischen Transportschicht zu erkennen - Datenüberlagerungen durch Kabelgeräusche und elektromagnetische Störungen. Sie sind keine kryptographischen Hashes und können nicht gegen absichtliche Manipulation geschützt werden. Der Angreifer fängt einen Frame ab, ändert den Registerwert, berechnet den CRC neu, leitet ihn weiter und kann nicht von der Station unterscheiden, ob der Frame geändert wurde oder nicht.
Sehen Sie sich den Angriffsfluss an:
原始帧 (主站→从站): 01 06 00 01 17 70 D8 0B (写保持寄存器地址0001=6000, 对应50Hz)
截获→篡改后帧: 01 06 00 01 02 58 C9 C3 (改成600, 对应5Hz)Die CRC hat sich geändert, aber auch die Angreifer können es zählen. Nach dem Empfang vom Bahnhof wird es auch durchgeführt. Die obere Frequenz des Frequenzumrichter wurde von 50 Hz auf 5 Hz - der Motor brannte nicht, aber die Pumpe konnte kein Wasser mehr abgeben.
* * Keine Wiederholung. * * Modbus hat keinen Zeitstempel und keinen Seriennummern-Schutz (Transaktions-IDs in MBAP werden nur verwendet, um Anfragen und Antworten zu entsprechen, nicht sicherer Seriennummern). Derselbe Frame kann unbegrenzt wiedergegeben werden. Letzten Monat haben Sie den Ventilator zum Stillstand gesendet, der Angreifer hat es aufgenommen und im nächsten Monat wieder geschickt - die Decodierung ist genau die gleiche, das Gerät bleibt.
9 echte Risikoszenarien
sind keine theoretischen Schwachstellen, sondern die folgenden Ereignisse, die bereits in verschiedenen Situationen geschehen sind. Einige sind mir persönlich begegnet, einige sind mit meinen Kollegen gesprochen, einige sind in öffentlichen Berichten.
Szenario 1: Modbus TCP direkt mit öffentlichen Netzwerken verbunden - - Port 502 auf Shodan ausgesetzt
Bei der Suche nach „port: 502" wächst die Anzahl der Ergebnisse. Vor zwei oder drei Jahren waren es etwa 6 - 7 000 Einheiten, jetzt sind es schon über 10.000. Diese Geräte sind PLC, RTU, Gateway, Smart-Zähler, einige laufen im Rechenzentrum, einige hängen am Backbone-Netzwerk von SCADA Wasserwerk. Shodan greift auch die Modbus-Antworten des Geräts zurück und zeigt direkt das Gerätemodell und die Firmware-Version an.
Nichts muss zerlegt werden. Sie haben die IP-Adresse des Geräts mit einer öffentlichen Netzwerkadresse zugeordnet, ohne ACLs für den Port 502 - das ist wie wenn Sie die Werkstätte mit offenen Türen und dem Gerätespanel auf der Straße stehen.
nmap ist intuitiver:
nmap -p 502 --script modbus-discover <target_ip>Dieses NSE-Skript versucht, Geräteninformationen zu lesen. Wenn das Gerät mit 0x11 (Meldung der Slave-Station - ID) oder 0x2B (Gerät-Identifikation) reagiert, gibt es Ihnen direkt den Hersteller, den Produktcode und die Firmware-Version an. Null-Schwelle.
Szenario 2: Wasserkraftwerk / Umspannstation Modbus RTU über 4G DTU Transparente Übertragung in die Cloud
Die RS - 485 - Modbus-RTU wurde vor Ort verwendet, Dutzende von Instrumenten wurden am Bus gehängt. Für die Fernüberwachung wurde eine 4G-DTU hinzugefügt, die für einen transparenten Übertragungsmodus konfiguriert ist - DTU verpackt die seriellen Portdaten in TCP-Pakete an den Cloud-Server.Öffentliche IP, Port 8899 (nicht 502, aber nicht viel Unterschied).
Das Problem kommt: Die Verbindung zwischen der DTU und dem Cloud-Server ist ein TCP-Text. Jeder, der eine MITM (Middler-in - the-Middle) auf dieser Linie fungieren kann - nicht unbedingt ein Angreifer auf nationaler Ebene, sondern möglicherweise ein Betreiber-Insider, ein 4G-Signal - Entführungsgerät oder ein anderes Gerät unter der Basisstation - kann eine LTE-Netzwerklücke ausnutzen:
1.Überwachen Sie den gesamten Modbus-RTU - Traffic, erhalten Sie vollständige Register-Zusammenarbeit und Echtzeit-Daten 2. Injektion gefälschter Schreibbefehle (Funktionscode 0x06 oder 0x10), Änderung der Gerätparameter 3. Senden Sie sogar Broadcast-Befehle an Slaves (Adressen 0x00), um alle Geräte auf dem Bus zu steuern.
Im vergangenen Jahr hat ein Angreifer einen Hintergrund-Management - Port der DTU (Standardpasswort admin / admin) über eine öffentliche Cloud-Plattform IP angeschlossen, um die gesamte Steuerungsschnittstelle der Pumpenstation direkt zu sehen. Zum Glück schaute ich nur an, keine Operation.
Szenario 3: Modbus zum MQTT-Gateway - MQTT-Seite - Nackt-Run
Diese Architektur ist heute üblich: Modbus RTU-Gerät → Gateway für Protokollübertragung → MQTT-Broker (Cloud oder lokal) → Applikationsverbrauch auf der oberen Ebene.
Das Gateway zugeordnet die Registerdaten in MQTT-Themen, z. B. `/ plant1/ pump1/ pressure` → behält den Wert des Registers 40001. Das Design an sich ist in Ordnung - das Publish / Subscribe-Modell von MQTT ist für Cloud-Szenarien besser geeignet als Modbus-Polling.
Das Problem liegt auf der Seite von MQTT: Viele Deployments haben kein TLS aktiviert, Broker benötigt keine Clientzertifikate und Topic hat keine ACL. Der Angreifer kann alle Themen mit `mosquitto _ sub` abonnieren, solange er die Adresse und den Port des Brokers kennt (normalerweise 1883, der MQTT-Standard - Port in Klartext):
mosquitto_sub -h <broker_ip> -p 1883 -t "#" -v`#` ist ein Multi-Level - Wildcard für MQTT, abonniert alle Themen. In wenigen Sekunden sind die Temperaturen, Druck, Zählerwerte und der Zustand der Ausrüstung in der gesamten Anlage verfügbar. Wenn der Broker auch Veröffentlichungen zulässt (von denen viele Gateways die bidirektionalen Steuerungsfunktionen abhängen), kann ein Angreifer direkt an die Steuerung Topic senden:
mosquitto_pub -h <broker_ip> -p 1883 -t "/plant1/pump1/control" -m "STOP"Szenario 4: Modbus TCP über das Wi-Fi - Netzwerk in der Fabrik gespielt wird
Viele Fabriken hängen Modbus-TCP - Geräte und SCADA-Server an demselben WLAN-Netzwerk, um die Verkabelung zu erleichtern. Das Wi-Fi - Passwort ist auf dem Gerätetikett geschrieben und außerhalb des Schranks befestigt - vor Gentlemen und Bösewichten.
Wenn ein interner Mitarbeiter (oder ein Gerät, das von Besuchern, Wartungskräften oder Mitarbeitern hinterlassen wurde) mit diesem WLAN verbunden ist, wird der Modbus TCP-Traffic vollständig in der Broadcast-Domäne ausgegeben. Wireshark-Packages:
过滤器: modbus && tcp.port == 502Innerhalb von zehn Minuten können Sie die Register-Zappen aller Geräte zeichnen. Wenn der Angreifer noch einen Schritt weitergehen möchte, leitet ARP-Betrug den Datenverkehr des SCADA-Servers auf seine eigene Maschine und leitet ihn dann als Mittelschüler weiter - die Modbus-Kommunikation auf der Geräteseite wird nicht unterbrochen, die SCADA-Schnittstelle ist normal und die Daten im Hintergrund werden bereits in Echtzeit gestohlen.
Szenario 5: Gebäudesteuerung BACnet-Modbus Gateway Konfigurationsseite ohne Passwort
Bei Gebäudesteuerungssystemen werden BACnet und Modbus häufig auf einem Gateway vermischt. Einige Gateway-Produkte von Delta Controls und Siemens Desigo verfügen sowohl über Modbus RTU-Schnittstellen als auch über BMS auf BACnet / IP-Schnittstellen.
Diese Gateways bieten normalerweise eine Web-Konfigurationsseite. Viele Integratoren wechseln standardmäßig nur die IP-Adresse, konfigurieren die Registerzuordnung und verwenden das Kennwort als Werkstandard - oder haben gar kein Kennwort. Die Webseite enthüllt eine vollständige Registerkarte, Geräteadressen, Funktionscode-Konfigurationen und sogar Online-Debugging - Funktionen - Modbus-Lese - und Schreibbefehle können direkt darin ausgegeben werden.
Shodan sucht nach „BACnet Gateway" oder auf der Produktseite eines bestimmten Gateway-Modells und findet viele solcher Eingänge. Sie können nicht nur die Daten sehen - die Öffnung des Heizventils direkt auf der Weboberfläche ändern, die Klimaanlage-Temperatur - Einstellungen einstellen und die Kühlgeräte starten und stoßen.
Szenario 6: Modbus-Steuerungsanweisung des SCADA des Windparks wird wiedergegeben
SCADA-Systeme für Windparks kommunizieren normalerweise über Modbus TCP und Windenergie-PLC. Steuerung Befehle umfassen Start-Stopp, Pitch-Winkel - Anpassung, yaw-Kontrolle, Leistungsbegrenzung und so weiter.
Nach dem Angriff auf das ukrainische Stromnetz im Jahr 2015 wurde die OT-Sicherheit endlich aufmerksam. Aber die Situation von Windparks ist etwas Besonderes - viele Windparks sind in abgelegenen Gebieten gebaut, der Fernbetrieb hängt von VPNs oder privaten Leitungen ab, die Mobilität des Betriebs und Wartungspersonals ist groß, und die VPN-Kontenverwaltung kann oft nicht mithalten.
Wenn ein Modbus-Befehl (Funktionscode 0x05, Schreiben einer Spule) während der Übertragung von einem schlechten Mann abgefangen wird - mit welchen Mitteln auch immer, ob es sich um einen VPN-Client handelt, um ein Betriebs-Notebook, das in einem Trojaner implantiert ist, oder um das Intranet zu bewegen - kann der Frames gespeichert werden. Der Angreifer braucht keine Details des Modbus-Protokolls zu verstehen, keine Register-Maps zu kennen, und braucht nur, um diesen Frame nach ein paar Monaten in der Nacht wiederzugeben. Nach dem Empfang wird der Windschuh abgeschaltet.
Keine Zeit wählen, keine Ziele wählen. Einmal aufgenommen, hundertmal verschickt. Das Modbus-Protokoll hat jedoch keinen Mechanismus, um dies zu verhindern.
Szenario 7: Standardkonfiguration von OEM-Geräten wird ausgenutzt
Um die Versandeffizienz zu verbessern, verwenden alle SPS / RTUs eine einheitliche Slave-Station - Adresse (z. B. Adresse 01), eine einheitliche Funktionscode-Unterstützungsliste und sogar eine einheitliche Registerzuordnung. Schlimmer noch, dass einige Hersteller die Kommunikationsparameter in die Firmware geschrieben haben - es ist nicht möglich, sie zu ändern.
Dies ist in der Ausrüstungsphase sehr bequem. Nach dem tatsächlichen Einsatz wurde es jedoch zu einem Sicherheitsalptraum.
Angenommen, ein verteiltes PV-Projekt verwendet die gleiche Anzahl von Wechselrichtern, alle Geräte sind die Slave-Station - Adresse 01, die Register-Zuordnung ist genau die gleiche (40001 = Leistung, 40003 = Spannung, 40005 = Betriebszustand, 40101 = Schalt - und Ausschaltsteuerung). Wenn ein Angreifer eines der Geräte oder einen zentralen Netzwerkknoten durchbricht, erhält er die Kontrolle über alle Geräte. Andere Geräte müssen nicht erneut erkunden - die Register-Zusammenarbeit ist exakt identisch.
Szenario 8: Register-Schreib - Angriff - Modifizierung von Geräteparametern
Diese Szene ist am gefährlichsten. Das Modbus-Haltregister speichert nicht nur Messdaten, sondern auch Geräteparameter. Die obere Frequenz des Frequenzumrichters, der PID-Parameter, der Alarmschwellenwert, der Kalibrierungsfaktor - alles im Register. Wer ein Register schreiben kann, kann das physikalische Verhalten des Geräts ändern.
Konkrete Beispiele:
| Gerät | Registeradresse | Parameter | Normaler Wert | Schädlicher Wert | Folgen |
|---|---|---|---|---|---|
| Frequenzumrichter | 40018 | Obergrenzfrequenz | 5000 (= 50Hz) | 500 (= 5Hz) | Mangel an Pumpenwasser, Fertigungslinie eingestellt |
| Temperaturregelgerät | 40005 | Zieltemperatur | 250 (= 25.0 ° C) | 800 (= 80.0 ° C) | Übertemperaturschutz-Trip, oder umgekehrt reduziert, was zu einem Einfrieren |
| Stromzähler | 40045 | Stromwandelverhältnis | 100 | 1 | Stromvolumen Daten 100 - mal Abweichung, Absturz der Energieverbrauchsrechnung |
| PLC | 40001 | Betriebsmodus | 1 (betrieben) | 0 (Stop) | Um die PLC direkt zu stoppen, die Logik auszuführen |
erfordert keine komplexen Angriffe. Das nmap-Skript modbus-discover durchsucht die Registerzuordnung und schreibt dann mit modbus-cli oder pymodbus:
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('192.168.1.100')
client.write_register(18, 500) # 把变频器上限频率改成5HzVier Zeilen Code. Keine Befugnisse sind erforderlich. Der Frequenzumwandler wird eingeholt.
Szenario 9: Physikalischer Zugang zum RS - 485 - Bus - Werkstätte Tür nicht verschlossen
Die physikalische Sicherheit des RS - 485 - Buses ist nahezu Null. Alle Geräte auf dem Bus teilen sich ein Paar differenzieller Signalleitungen (A + / B -), und jeder, der einen USB-RS485 - Adapter irgendwo am Bus anschließt, kann:
1. * * Passive Listen * *: Aufzeichnen Sie den gesamten RS - 485 - Datenverkehr und analysieren Sie ihn offline. 2. * * Aktive Injektion * *: Verkleidung als Masterstation oder Senden von Befehlen als Slave Station 3. * * Businterferenz * *: Das kontinuierliche Senden von Daten verursacht einen Buskonflikt, DDoS im gesamten Netzwerk
Ein USB-RS485 - Adapter kostet mehr als ein Dutzend Dollar. Ein kluger Angreifer während der Nachtwache patrouilliert, um den Adapter in der Kabel-Schachtel zu verstecken, fügt ein Mikro 4G-Modul für den Fernzugriff hinzu. Wer kann es entdecken? Niemand überprüft die elektrischen Eigenschaften des RS - 485 - Buses regelmäßig.
Der Schlüssel ist, dass das Design des RS - 485 - Buses selbst ein Multi-Stations - Shared-Medium ist, ohne dass ein Switch oder eine Port-Zugangslizenz erforderlich ist. Sie sind physikalisch Teil des Netzwerks. Die Modbus RTU hat nur 1 - 247 Slave-Stations - Adressen, die ein Angreifer alle Adressen aufzählen kann, um den Gerätetypen einzeln zu ermitteln.
Layered Defense: Komplettlösungen von der physischen bis zur Überwachungsschicht
Nach den neun Szenarien kommt es zu der natürlichen Schlussfolgerung, dass es keine einzige Lösung für Modbus-Sicherheitsprobleme gibt. Seine Probleme sind auf jeder Ebene des Protokollstacks verteilt, und der Schutz muss auch folgen.
Die folgenden Szenarien sind nicht theoretisch - jeder hat ein entsprechendes Produkt, ein Open-Source - Tool oder eine Konfigurationsmethode. Entsprechend den eigenen Standortbedingungen auswählen.
Netzwerk-Ebene: Schließen Sie Modbus in einen Käfig
* * Die erste eiserne Regel: Modbus 502 - Ports dürfen niemals direkt in das öffentliche Netzwerk ausgesetzt werden. * * Dieser Satz kann nicht zu viel betont werden. Wenn Ihr Geräteanbieter Ihnen sagt: „Wir können die IP direkt in das öffentliche Netzwerk zugeordnet haben, um die Fernwartung zu ermöglichen" - wechseln Sie den Anbieter.
Konkrete Operationen:
* * Whitelist für ACLs der Firewall. * * Es ist keine schwarze Liste, sondern eine weiße Liste. Der Port 502 ermöglicht nur den Zugriff von bestimmten IPs (SCADA-Server, Datenerfassung-Gateway). Zwei Linux-IPtables - Zeilen:
iptables -A INPUT -p tcp --dport 502 -s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 502 -j DROPWenn die CPU Ihres Geräts nicht mit iptables läuft, verwenden Sie eine Hardware-Firewall (ein paar hundert kleine Industrie-Firewalls) oder zumindest eine ACL auf einem Router / 3 - Layer-Switch.
* * VLAN Isolierung. * * Setzen Sie Modbus-Geräte in einem separaten VLAN, vollständig isoliert von Büronetzwerken, WLAN-Netzwerken und Gastnetzwerken. Das Routing zwischen VLANs leitet nur den Datenverkehr vom SCADA-Server an den Port 502 weiter, nichts anderes wird leitet. MAC-Bindung am Switch-Port, um zu verhindern, dass jemand das Gerät aussteckt, um sein eigenes Notebook zu wechseln.
* * VPN / IPsec Tunnel. * * * Szenarien, in denen Remote-Zugriff erforderlich ist, verwenden Sie ein VPN, anstatt den Port in das öffentliche Netzwerk zu öffnen. IPsec oder WireGuard sind möglich. Die Konfiguration von OpenVPN ist unkompliziert:
# 服务端只允许 502 端口流量通过隧道
push "route 192.168.10.0 255.255.255.0"Dadurch wird gewährleistet, dass der Modbus-Datenverkehr immer in einem verschlüsselten Tunnel übertragen wird. Selbst wenn ein Angreifer die VPN-Verbindung abfängt, verhindert die TLS / AES-Verschlüsselung den Zugriff auf Klartext.
Transport-Schicht: Modbus + TLS
Die Modbus-Sicherheitsspezifikation wurde im Oktober 2018 von der Modbus Organization veröffentlicht. Kernänderungen: Der Standardport wurde von 502 auf 802 geändert, TLS 1.2 obligatorisch, X.509v3 - Zertifikate für die Authentifizierung und Rollenbasierte Zugriffssteuerung (RBAC) eingeführt.
Die Norm definiert vier Rollen:
| Rollen-ID | Rollenname | Berechtigungen |
|---|---|---|
| 0 | Administrator | Vollständige Funktionscode, vollständige Register, Geräteverwaltung |
| 1 | Operator | Alle Register lesen und schreiben, nicht konfiguriert werden können |
| 2 | Engineer | Debugger-Diagnose - Berechtigungen |
| 3 | Observer | Daten nur lesen, nicht schreiben |
Dies löst das Problem der Modbus-Authentifizierung komplett - der Client muss ein gültiges Zertifikat besitzen, um eine TLS-Verbindung herzustellen, und das Rollenfeld im Zertifikat bestimmt, welcher Funktionscode ausgeführt werden kann.
Die Realität ist jedoch, dass es nur sehr wenige Geräte gibt, die 802 - Ports unterstützen. Die meisten Geräte unterstützen nur 502 Klartext. Wie kann man TLS ohne Gerät wechseln?
* * Tunnel-Programm. * * Stunnel ist ein leichter TLS-Proxy, der beliebige TCP-Verbindungen in einen TLS-Tunnel verkapseln kann. Deployment Architektur:
SCADA 客户端 → stunnel(本地127.0.0.1:1502) → TLS → stunnel(远程) → 设备(502)Stunnel-Konfiguration ist sehr kurz:
# 客户端 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 = yesDie Clientsoftware verbindet `127.0.0.1: 1502` anstatt 502 für das direkt angeschlossene Gerät. Die mittlere TLS-Verschlüsselung ist völlig transparent für die obere Schicht. Stunnel selbst ist nur ein paar hundert KB groß und kann auf eingebetteten Linux-Gateways, Raspberry Pi und sogar OpenWrt-Routern ausgeführt werden.
* * Hinweis: * * stunnel befasst sich mit der Übertragungsverschlüsselung, nicht mit der Anwendungsschicht-Authentifizierung. Es stellt sicher, dass die Übertragungsverbindung nicht abgehört und manipuliert wird, aber sobald der TLS-Tunnel erstellt ist, bleibt der Modbus-Frame selbst ein Klartext - nur dass dieser Klartext nur zwischen dem verschlüsselten Tunnel und dem geschützten Intranet übertragen wird. Wenn ein Angreifer Zugang zum Intranet und eine direkte Verbindung mit dem 502 - Gerät haben kann, kann der Tunnel nicht geschützt werden.
Anwendungsschicht: Modbus Security Agent / Gateway
Wenn Sie Stunnel nicht an jeder Gerätsseite bereitstellen können oder eine detailliertere Kontrolle benötigen, ist das Hinzufügen eines Security Agents / Gateway zwischen dem Modbus-Bus und der übergeordneten Anwendung die kostengünstigste Lösung.
Die Moxa MGate-Serie, Hilscher netTAP, Advantech ADAM - 4570 Diese Industrie-Gateways unterstützen Zugriffssteuerungslisten. Sie können auf dem Gateway konfigurieren:
- Welche IP-Adressen können auf welche Slave-Stationen zugreifen - Welche Funktionen werden erlaubt - Lese - und Schreibsteuerung auf Registerebene - z. B. Adresse 40001 - 40050 nur gelesen, 40051 - 40100 gelesen und geschrieben - Verbindungsgeschwindigkeitsbegrenzung (Anti-Force - Polling / DoS)
Bei der Auswahl sollte man klar sein: Nicht alle Modbus-Gateways unterstützen Sicherheitsrichtlinien. Viele billige Gateways tun nur die Übertragung, die ACL-Funktion sucht in der Auswahltabelle die Felder "Access Control" oder "Security Policy".
Auch Open Source-Programme gibt es nicht. Mit pymodbus schreiben Sie ein paar hundert Zeilen Code:
# 简化版 Modbus 安全代理逻辑
ALLOWED_FUNCTION_CODES = {0x03, 0x04, 0x06, 0x10} # 只允许这些功能码
READ_ONLY_REGISTERS = range(40001, 40051) # 这个地址段只读
def proxy_handler(request):
if request.function_code not in ALLOWED_FUNCTION_CODES:
return exception_response(request.function_code, 0x01) # 非法功能码
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) # 非法数据地址
# 转发到实际设备
return forward_to_device(request)Diese Zeilen verhindern die meisten Register-Schreib - Angriffe in Szenario 8.
Physische Schicht: Physische Sicherheit des RS - 485 - Buses
Die physische Sicherheit klingt „niedrig", aber mindestens drei von neun Szenarien beziehen sich auf den physischen Zugang.
Es gibt einige Dinge, die man mit niedrigsten Kosten tun kann:
1. * * Der Schrank ist abgeschlossen. * * Nicht nur ein einfaches Schlüsselsperre - mit elektronischer Zutrittskontrolle, um aufzuzeichnen, wer welchen Schrank geöffnet hat und wann.Öffnung der Schränktür zu ungewöhnlichen Zeiten (2 - 3 Uhr morgens) = physischer Sicherheitsvorfall. 2. * * RS - 485 - Bus mit Drehpaar-Leitungsschlitten mit Abschirmung. * * Die Schleife werden abgeschaltet und die Spuren entfernt. Es ist nicht unmöglich, den Angreifer zu verhindern, sondern Beweise zu hinterlassen. 3. * * USB-Anschluss deaktiviert. * * Die industrielle Steuerung / HMI in der Fabrik benötigt keine USB-Sticks. BIOS deaktiviert USB, Windows-Gruppenrichtlinie deaktiviert entfernbarer Speicher. Jemand hat einen USB-RS485 - Adapter angeschlossen, das System erkennt ihn nicht. 4. * * Busterminal-Widerstand + Entfernungssensor * * An beiden Enden des RS - 485 - Buses gibt es einen 120 Ω - Terminationswiderstand. Wenn ein Widerstand entfernt wird (jemand hat ein Überwachungsgerät im Netz angeschlossen, was zu einer Veränderung der Impedanz führt), ändern sich die elektrischen Eigenschaften des Busses - das kann mit einem Busanalysator erkannt werden.
Es kostet nicht viel, aber es reicht, um 90% der Angriffe auf physischen Zugriff zu blockieren.
Überwachungsschicht: Modbus Traffic Anomalie Erkennung
Alle Maßnahmen vor dem "Lassen Sie ihn nicht herein" waren. Aber für Situationen, in denen „eingekommen ist" oder „eine legitime Benutzer etwas illegal getan haben", müssen Sie auch die Fähigkeit zur Erkennung haben.
Die Ausnahme-Eigenschaften des Modbus-Traffics sind eindeutig - gerade weil das Protokoll einfach ist, sind Ausnahmen leichter zu erkennen:
* * Polling-Zyklus - abrupt. * * SCADA-Systeme abfragen das Gerät in der Regel in einem festen Zeitraum (z. B. einmal pro Sekunde). Wenn die Anforderungsfrequenz einer Slave Station plötzlich von 1 mal / Sekunde auf 100 mal / Sekunde steigt, ist es wahrscheinlich kein SCADA-Verhalten. Vielleicht ist jemand im Gewalt-Scan Register.
* * Nicht-Standard - Funktionscode wird angezeigt. * * Ein System, das nur 0x03 (Lese-Halt - Register) und 0x06 (Schreib-Einzel - Register) verwendet, erhält plötzlich eine 0x08 (Diagnose) oder 0x2B (Device Identification) - Anforderung - typisch für das Aufklärungsverhalten.
* * Nicht-Arbeitszeit * * Während der Ausfallzeiten (z. B. von 23: 00 Uhr bis 18: 00 Uhr) sollte es keine großen Lese - und Schreibbefehle auf dem Modbus geben. Falls ja, rufen Sie die Polizei.
* * Ausnahme-Funktionscode - Kombination. * * In kurzer Zeit entsteht eine intensive Kombination von 0x05 (Schreiben einer einzelnen Spule), 0x06 (Schreiben eines einzelnen Registers), 0x10 (Schreiben mehrerer Registers) und die Zieladresse erstreckt sich über mehrere nicht benachbarte Bereiche - fast sicher, dass es sich um eine bösartige Operation handelt.
In Bezug auf Open-Source - Tools:
# Zeek (原Bro) 有 Modbus 协议解析器
# 写一个检测脚本放在 Zeek 的策略目录Das Wireshark + Modbus-Plug - in kann für Offline-Traffic - Audits verwendet werden. Nehmen Sie den Busverkehr des Tages auf und sehen Sie die Funktionscodeverteilung mit Wireshark `Statistics` → `Protocol Hierarchy` → `Modbus`. Das Auftreten von Funktionscodes 0x08 und 0x2B ist eine rote Flagge.
Das NSE-Skript `modbus-discover` von nmap sollte regelmäßig von Ihrem eigenen SCADA-Server aus ausgeführt werden, um zu überprüfen, ob neue Modbus-Geräte im Netzwerk erscheinen:
nmap -p 502 --script modbus-discover 192.168.10.0/24Wenn Sie ein Gerät entdecken, das nicht zu Ihnen gehört, ist es ernst.
Compliance Referenzen
Wir sprechen nicht über die Regulierungsbestimmungen, sondern nur über einige Regeln, die sich direkt auf die Modbus-Bereitstellung auswirken.
IEC 62443 - 3 - 3 definiert sieben grundlegende Anforderungen (FR1 - FR7) für industrielle Automatisierung und Steuerungssysteme. FR2 (Nutzungskontrolle) erfordert Zertifizierung und Autorisierung für die industrielle Kommunikation, FR3 (Systemintegrität) erfordert die Integrität der Kommunikationsdaten. Klartext Modbus ist direkt nicht kompatibel mit FR2 und FR3. Mit stunnel / vpn können die kryptographischen Anforderungen erfüllt werden.
* * CIP-005 von NERC CIP (North American Power Reliability Standard) * * erfordert die Implementierung von Zugriffskontrollen für die elektronische Sicherheitsgrenze (ESP) des Stromsystems. Dies bedeutet, dass, wenn Sie in der US-Energieindustrie Modbus-Steuerungsbefehle übertragen, der 502 - Port muss entweder innerhalb des ESP oder durch den verschlüsselten Tunnel des ESP sein, und nicht nackt. CIP - 007 erfordert auch das Patchen des Systems und die Minimierung von Ports, die direkt mit der Firmware-Verwaltung von Modbus-Geräten verbunden sind.
* * China ISO 2.0 (GB / T 22239 - 2019) * * Es gibt spezielle Erweiterungsanforderungen für industrielle Steuerungssysteme. Zu den wichtigsten gehören: Grenzschutz und technische Isolierung zwischen Steuerungsnetzwerken und nicht-kontrollierenden Netzwerken; Verschlüsselungs-Authentifizierung bei der Übertragung von Steuerungsanweisungen mit WAN; Aufteilung der Sicherheitsdomain und Isolierung innerhalb des industriellen Steuerungssystems gemäß dem Geschäft. Wenn Modbus-Geräte in einem System mit gleichwertiger Sicherung von Stufe 3 und höher sind, sind grundlegende Netzwerk-Isolation, Kommunikationsverschlüsselung und Zugriffssteuerung obligatorische Anforderungen, es gibt keine Option.
Diese Compliance-Anforderungen sind nicht nur eine Decoration - Audits werden durch die Netzwerk-Architektur - Diagramme, Firewall-Regeln und die Validierung von Paketen geprüft. Modbus TCP lässt sich ohne Compliance-Audits in das öffentliche Netzwerk übertragen.
Liste der kostengünstigsten Schutz
Wenn Sie in einer kleinen und mittelständischen Fabrik mit einem begrenzten Budget, alten Geräten, die nicht ausgetauscht werden können, und keine speziellen Sicherheitsingenieure haben, sind die folgenden 5 Dinge, die Sie jetzt tun können. Diese 5 Stücke blockieren 90% der Angriffe und benötigen keine zusätzliche Ausrüstung: * *
1. * * Über prü fen Sie , ob alle 50 2 - Por ts über das öffent liche Netz werk zug äng lich sind . * * zuhttps://www.shodan.ioSu chen Sie Ihr öffent liches IP - Seg ment oder durch su chen Sie das ex terne Netz werk mit ` n map - p 50 2 < öffent liche IP > ` . Ent de cken Sie exp oni ert , sofort sch alten Sie die Port - M apping oder fü gen Sie AC hin zu . 2. * * Mod bus Gate way / D TU Ä nd ern des Standard pass wor ts . * * Nicht nur die Web - Ad min - Seite des Gate ways - bestä tigen Sie das AT - B ef ehl - Konf igur ations k enn wort von D TU (falls unterstüt zt), die A uth enti fizi erung von M Q TT Br oker , den vor g ete il ten Sch lüssel von VPN , alles ändern . 3. * * Set zen Sie das Mod bus - Ger ät in einem eigen stän digen V LAN und konf ig uri eren Sie die White List AC L s . * * Wenn der Switch kein V LAN unterstüt zt , muss mindestens ein separ ates IP - Sub net z werk auf dem Ro uter AC L s er stellt werden , die nur den IP - Z ug riff des SC ADA - Ser vers 50 2 erla uben . 4. * * Fü hren Sie ein Wir es har k - Pa cket - Cap ture - A udit auf einem SC ADA - Ser ver aus . * * Auf zeich nen Sie den Bus verkehr für eine Stunde und überprü fen Sie , ob es eine Aus nahme funktion (0 x 0 8, 0 x 2 B) oder eine Ger ät ad resse gibt , die nicht vor hand en ist . 5. * * Reg elmä ß ige Sc ans im Mod bus - N etz werk mit n map . * * Sch reiben Sie einen cron , der einmal w ö ch entlich ` n map - p 50 2 -- script mod bus - dis cover < sub net > ` aus führt , um die Aus gabe diff zu ver ändern . Ne ues Ger ät ers che int = J emand hat etwas h ine inge zogen .
Wir haben die obigen 5 Punkte umgesetzt und sprechen darüber, ob wir eine dedizierte OT-Sicherheitsplattform nutzen möchten oder SIEM-Integration durchführen möchten. Die meisten kleinen Fabriken haben nicht einmal den ersten Punkt gemacht.
Sicherheitsmodelle im Vergleich zu OPC UA
Modbus-Sicherheit kann OPC UA nicht umgehen. Es geht nicht darum, wer wen ersetzt, sondern darum, die Sicherheitsmodelllücke zwischen den beiden zu ermitteln, um eine unverschämte Entscheidung bei der Auswahl zu vermeiden.
| Dimension | Modbus TCP (native) | OPC UA |
|---|---|---|
| Authentifizierung | 无 | X.509 Zertifikat, Benutzername / Kennwort, Kerberos |
| Übertragungsverschlüsselung | 无 | TLS 1.2 / 1.3 (UA-TCP) oder HTTPS (UA-HTTPS) |
| Datensignierung | 无 | Jede Nachricht kann individuell signiert werden (UA-SecureConversation) |
| Zugriffssteuerung | 无 | Sitzungsebene + Knoten-Ebene ACLs |
| Auditprotokolle | Abhängigkeitsanwendungsschicht | Integrierte Auditereignistypen |
| Protokollkomplexität | Minimal, 12 - Byte-Frame | Binärcodierung, vollständiges OO-Objektmodell |
OPC UA Sicherheit im Protokollstack, Von der Übertragsschicht bis zur Anwendungsschicht gibt es entsprechende Sicherheitsmechanismen. Modbus überlässt alles den Implementierern. Es ist nicht, dass OPC UA "besser" ist als Modbus - es sind zwei völlig unterschiedliche Designphilosophien. Auch die Sicherheitskomplexität von OPC UA kostet es: TLS-Handshake, Zertifikatsverwaltung, Vertrauensketten, CRL / OCSP-Widerrufsprüfungen - das sind in Embedded Modbus-Geräten ein Wunder. STM32 benötigt nur eine UART und zwei bis dreihundert Zeilen C-Code, um Modbus RTU auszuführen, während OPC UA eine TLS-Bibliothek, einen XML-Parser und mindestens Dutzende KB RAM benötigt.
Das Ergebnis ist also nicht „Jeder benutzt OPC UA". Ja: Wenn Sie bereits Modbus verwenden, wechseln Sie nicht das gesamte System mit OPC UA, weil es unsicher ist - Stunnel, Firewall ACLs und Security-Agents kosten viel weniger als ein Wechsel. Wenn Sie ein neues System bauen, in der Auswahlphase, mit ausreichenden Geräteressourcen und eine IT / OT-konvergente Architektur benötigen - die natürlichen Sicherheitsfunktionen von OPC UA können Ihnen viel Aufwand bei der Compliance und der Betriebswartung sparen.
Schreiben Sie hinten.
Das Sicherheitsproblem bei Modbus ist kein technisches Problem, sondern ein Engineering-Managementproblem. Das Protokoll an sich hat keine Sicherheitsfunktionen, aber Sie können es in eine geschützte Umgebung durch die Bereitstellung einer Architektur bringen. Genauso wie Sie keinen Server ohne Firewall direkt an ein öffentliches Netzwerk hängen, sollten Sie auch kein Modbus-Gerät direkt an unzuverlässige Netzwerke stellen.
Letztendlich ist es nie eine Protokolllücke, die gefährlichste, sondern jemand, der denkt, dass „eine kleine Fabrik wie wir nicht angegriffen wird". Angreifer wählen keine großen Fabriken aus - die automatischen Scan-Tools sind gleichberechtigt und kommen mit offenem Port 502.
Sprechen Sie darüber, wenn Sie Fragen haben, oder öffnen Sie Wireshark selbst und fangen Sie ein Paket an - Sie werden wahrscheinlich überrascht sein.
Antwort veröffentlichen