Der Schutz von industriellen Steuerungssystemen und OT-Umgebungen vor Angriffen aus der Ferne ist wichtiger denn je, insbesondere angesichts von Schwachstellen wie CVE-2017-14469 und jetzt CVE-2021-22659, die die weit verbreitete Micrologix 1400-Steuerung von Rockwell Automation betreffen. Studenten des OPSWAT Fellowship-Programms testeten diese Schwachstelle in einer kontrollierten Umgebung und unterstrichen damit die Notwendigkeit von Sicherheit.
In diesem Blog gehen wir darauf ein, wie die Studenten gezeigt haben, wie Angreifer die Schwachstelle ausnutzen können, um Systeme zum Absturz zu bringen, und wie das Fehlen einer angemessenen Eingabevalidierung ausgenutzt werden kann, um den SPS-Betrieb zu stören.
Was ist ein PLC? Rockwell Automation Micrologix 1400 Erklärt
Eine SPS (Speicherprogrammierbare Steuerung) ist ein Industriecomputer, der für die Automatisierung von Prozessen durch die Steuerung von Maschinen und anderen industriellen Vorgängen konzipiert ist. Er arbeitet in rauen Umgebungen und ist so programmiert, dass er auf der Grundlage von Sensoreingaben bestimmte Aufgaben ausführt. Die MicroLogix 1400-Steuerung von Rockwell Automation ist eine kompakte und modulare SPS, die häufig in kleinen bis mittleren Anwendungen eingesetzt wird. Sie ist bekannt für ihre Kosteneffizienz und Flexibilität, unterstützt verschiedene Kommunikationsprotokolle und bietet digitale und analoge E/A-Optionen für die Anbindung an Geräte.
Die Programmierung erfolgt in der Regel mit der Software von Rockwell Automation über die Kontaktplanlogik, mit der die Benutzer Steuerungssequenzen erstellen können. Die MicroLogix 1400 ist vielseitig und eignet sich für Aufgaben wie die Maschinensteuerung und Prozessautomatisierung. Dank ihrer Modularität können Benutzer das System je nach den spezifischen Anwendungsanforderungen erweitern und anpassen.
Einführung in CVE-2021-22659
Im Januar 2021 erhielt Rockwell Automation einen Bericht von Parul Sindhwad und Dr. Faruk Kazi vom COE-CNDS am Veermata Jijabai Technological Institute (VJTI), Indien, über eine Sicherheitslücke in der MicroLogix™ 1400-Steuerung. Sie identifizierten eine Sicherheitslücke in Version 21.6 und früher, die es einem nicht authentifizierten Angreifer ermöglicht, ein speziell gestaltetes Modbus-Paket zu senden, das es dem Angreifer ermöglicht, zufällige Werte im Register abzurufen oder zu ändern. Wenn dies erfolgreich ausgenutzt wird, kann dies zu einem Pufferüberlauf führen, der einen Denial-of-Service-Zustand zur Folge hat. Die FAULT-LED blinkt ROT und die Kommunikation kann unterbrochen werden. Um den Denial-of-Service-Zustand wiederherzustellen, muss der Fehler vom Benutzer behoben werden.
NVD stufte diese Sicherheitslücke als hoch ein.
Phasen des Angriffs
Ein entfernter, nicht authentifizierter Angreifer mit Netzwerkzugriff auf die anfällige MicroLogix 1400 SPS könnte ein speziell gestaltetes Paket senden, um die Werte im Register zu ändern. Dies könnte einen Denial-of-Service-Zustand für das Gerät verursachen, der zu einer Beschädigung des Systems und zu Ausfallzeiten führt. Ein solcher Vorfall kann den Fertigungsbetrieb und andere Geschäftsaktivitäten des Unternehmens erheblich stören.
Modbus-Protokoll
Das 1979 von Modicon entwickelte Modbus-Protokoll ist eine Nachrichtenstruktur, die für die Client-Server-Kommunikation zwischen intelligenten Geräten entwickelt wurde. Ursprünglich für die Verwendung mit den SPS von Modicon konzipiert, hat es sich inzwischen zu einem Standard-Kommunikationsprotokoll für die Kommunikation zwischen industriellen elektronischen Geräten entwickelt.
Es gibt Modbus-Protokolle für Ethernet (Modbus TCP) und serielle Leitungen (Modbus RTU und Modbus ASCII). Modbus RTU (Remote Terminal Unit) überträgt Daten direkt in binärer Form über die serielle Kommunikation, und Modbus TCP (Transmission Control Protocol) bettet Modbus-Protokolldaten in TCP-Pakete zur Übertragung über TCP/IP-Netzwerke ein.
Struktur der Modbus-Nachrichten
Modbus ist ein Anfrage-Antwort-Protokoll, bei dem der Client eine Anfrage an ein Modbus-Gerät sendet und das Gerät anschließend eine Antwort liefert.
Eine Modbus-Nachricht, die von einem Primärgerät an ein Sekundärgerät gesendet wird, enthält die Adresse des Sekundärgeräts, den "Befehl" (z. B. "Register lesen" oder "Register schreiben"), die Daten und eine Prüfsumme (LRC oder CRC).
Datenadressen werden in Modbus-Abfragen zum Lesen oder Ändern von Daten verwendet. Modbus definiert vier Datentypen: Spule, Eingangsstatus, Eingangsregister und Halteregister. Zwei davon speichern Ein-Aus-Werte (1-Bit), die als Spulen und diskrete Eingänge bezeichnet werden, und zwei speichern numerische Werte als 16-Bit-Wörter, die als Register bezeichnet werden. Jedes dieser Register ist entweder schreibgeschützt oder lesend/schreibend.
Datenart | Zugang | Beschreibung |
Spule | Lesen und Schreiben | Einzelbit-Ausgänge. |
Diskreter Eingang | Schreibgeschützt | Einzelbit-Eingänge. |
Eingabe-Register | Schreibgeschützt | 16-Bit-Eingaberegister. |
Bestandsregister | Lesen und Schreiben | 16-Bit-Ausgaberegister. |
Es gibt drei Kategorien von Modbus-Funktionscodes:
- Öffentliche Funktionscodes - Von 1 bis 127, außer bei benutzerdefinierten Codes.
- Benutzerdefinierte Funktionscodes - in zwei Bereichen von 65 bis 72 und von 100 bis 110.
- Reservierte Funktionscodes - werden von einigen Unternehmen für ältere Produkte verwendet und sind nicht für die Öffentlichkeit zugänglich.
Funktionstyp | Name der Funktion | Funktionscode | ||
Datenzugang | Bit-Zugriff | Physikalische diskrete Eingänge | Diskrete Eingänge lesen | 2 |
Interne Bits oder physikalische Spulen | Spulen lesen Einzelspule schreiben Mehrere Coils schreiben | 1 5 15 | ||
16-Bit-Zugriff | Physikalische Eingaberegister | Lesen von Eingangsregistern | 4 | |
Interne Register oder physikalische Ausgaberegister | Mehrere Holding-Register lesen Einzelne Holding-Register schreiben Schreiben mehrerer Holding-Register Lesen/Schreiben von mehreren Registern Maske Schreibregister FIFO-Warteschlange lesen | 3 6 16 23 22 24 | ||
Akteneinsicht | Datensatz lesen Dateisatz schreiben | 20 21 | ||
Diagnostik | Ausnahmestatus lesen Diagnostik Get Com Ereigniszähler Com-Ereignisprotokoll abrufen Slave-ID melden Geräteidentifikation lesen | 7 8 11 12 17 43 | ||
Andere | Gekapselte Schnittstelle Transport | 43 |
Funktionstyp: Datenzugriff Untertyp: Bit-Zugriff Kategorie: Physikalische diskrete Eingänge Funktionsname: Lesen diskreter Eingänge Funktionscode: 2 |
Funktionstyp: Datenzugriff Untertyp: Bit-Zugriff Kategorie: Interne Bits oder physikalische Spulen Funktionsname: Spulen lesen Funktionscode: 1 |
Funktionstyp: Datenzugriff Untertyp: Bit-Zugriff Kategorie: Interne Bits oder Physical Coils Funktionsname: Write Single Coil Funktionscode: 5 |
Funktionstyp: Datenzugriff Untertyp: Bit-Zugriff Kategorie: Interne Bits oder Physical Coils Funktionsname: Write Multiple Coils Funktionscode: 15 |
Funktionstyp: Datenzugriff Untertyp: 16-Bit-Zugriff Kategorie: Physical Input Registers Funktionsname: Read Input Registers Funktionscode: 4 |
Funktionstyp: Datenzugriff Untertyp: 16-Bit-Zugriff Kategorie: Interne Register oder physikalische Ausgaberegister Funktionsname: Lesen mehrerer Holding-Register Funktionscode: 3 |
Funktionstyp: Datenzugriff Untertyp: 16-Bit-Zugriff Kategorie: Interne Register oder physikalische Ausgaberegister Funktionsname: Write Single Holding Register Funktionscode: 6 |
Funktionstyp: Datenzugriff Untertyp: 16-Bit-Zugriff Kategorie: Interne Register oder physikalische Ausgaberegister Funktionsname: Write Multiple Holding Registers Funktionscode: 16 |
Funktionstyp: Datenzugriff Untertyp: 16-Bit-Zugriff Kategorie: Interne Register oder physikalische Ausgaberegister Funktionsname: Read/Write Multiple Registers Funktionscode: 23 |
Funktionstyp: Datenzugriff Untertyp: 16-Bit-Zugriff Kategorie: Interne Register oder physikalische Ausgaberegister Funktionsname: Mask Write Register Funktionscode: 22 |
Funktionstyp: Datenzugriff Untertyp: 16-Bit-Zugriff Kategorie: Interne Register oder physikalische Ausgaberegister Funktionsname: FIFO-Warteschlange lesen Funktionscode: 24 |
Funktionstyp: Datenzugriff Untertyp: File Record Access Funktionsname: Read File Record Funktionscode: 20 |
Funktionstyp: Datenzugriff Untertyp: File Record Access Funktionsname: Write File Record Funktionscode: 21 |
Funktionstyp: Diagnostik Funktionsname: Exception Status lesen Funktionscode: 7 |
Funktionstyp: Diagnostik Funktionsname: Diagnostik Funktionscode: 8 |
Funktionstyp: Diagnostics Funktionsname: Get Com Event Counter Funktionscode: 11 |
Funktionstyp: Diagnostics Funktionsname: Get Com Event Log Funktionscode: 12 |
Funktionstyp: Diagnostik Funktionsname: Slave-ID melden Funktionscode: 17 |
Funktionstyp: Diagnostik Funktionsname: Geräteidentifikation lesen Funktionscode: 43 |
Funktionstyp: Sonstige Funktionsname: Encapsulated Interface Transport Funktionscode: 43 |
Ausbeutung
Schwachstellenanalyse
Bei der Analyse entdeckten unsere OPSWAT , dass das Protokoll bei der Modbus-TCP-Kommunikation keine Authentifizierung und Verschlüsselung der übertragenen Pakete vorsieht. Außerdem ist die Eingabevalidierung in der MicroLogix 1400 SPS nicht ordnungsgemäß implementiert. Folglich kann ein entfernter Angreifer das Modbus-TCP-Paket mittels Packet Sniffing analysieren und beliebige Anfragen an die SPS ohne Authentifizierung über das Modbus-TCP-Protokoll senden. Aufgrund der fehlenden Eingabevalidierung des MicroLogix 1400 PLC-Geräts könnte ein entfernter authentifizierter Angreifer eine große Anzahl von Paketen mit zufälligen Werten senden und so möglicherweise einen Absturz der SPS verursachen.
Überschreiben von Registern
Zunächst haben wir versucht, Modbus-TCP-Pakete zu erfassen, die zum Lesen oder Schreiben von Registern auf der SPS verwendet werden. Zu diesem Zweck untersuchten wir Pakete, die von einer Anwendung namens Modbus Poll generiert wurden, die das Lesen und Schreiben von Registern auf der MicroLogix 1400 SPS ermöglicht.
Durch die Verwendung von Wireshark, um alle Pakete von der Netzwerkschnittstelle zu erfassen, konnten wir das Modbus-TCP-Paket zum Schreiben eines einzelnen Registers identifizieren:
Auf der Grundlage der Struktur der gesnifften Pakete haben wir ein einfaches Python-Skript entwickelt, um TCP-Pakete zu senden, die das Schreiben eines Registers auf der Ziel-SPS anfordern. In diesem Szenario lautet die IP-Adresse der SPS 192.168.93.89.
Das Register der SPS wurde nach dem Empfang unseres bösartigen, nicht authentifizierten Pakets geändert.

In der Micro Logix 1400 verwenden die meisten mathematischen Anweisungen drei Parameter: Quelle A, Quelle B und Ziel
Die Werte für Quelle A und Quelle B können aus zwei 16-Bit-Registern namens N13:3 und N13:4 stammen. Außerdem sind die Werte in diesen 16-Bit-Registern wie N13:3 und N13:4 auf den Bereich von -32.768 bis +32.767 beschränkt. Wenn die Werte von N13:3 und N13:4 groß sind, kann das Ergebnis des Match-Befehls den maximalen Bereich des Datentyps überschreiten, was zum Absturz der SPS führen kann. Um einen Absturz der SPS auszulösen, müssen daher große Zufallswerte in alle Register, einschließlich N13:3 und N13:4, geschrieben werden. Um dies zu erreichen, haben wir unser Python-Skript wie folgt geändert:
Simulieren Sie den Angriff
Um einen realen Angriff zu simulieren, haben unsere OPSWAT Graduate Fellows versucht, die MicroLogix 1400 PLC in den OPSWAT CIP Labs zum Absturz zu bringen, unter der Annahme, dass sowohl der Angreifer als auch die PLC im selben Netzwerk sind und miteinander kommunizieren können.
Im normalen Betriebszustand der MicroLogix 1400 SPS bei OPSWAT Labs, wenn sich die SPS in der Betriebsart FERNBETRIEB befindet, sind alle Registerwerte gültig und liegen innerhalb des für ihre Datentypen vorgesehenen Bereichs, was darauf hindeutet, dass das Anwenderprogramm korrekt funktioniert.
Bei Ausführung unseres Python-Skripts werden zahlreiche Modbus-TCP-Pakete an die SPS gesendet, die das Schreiben großer Zufallswerte in alle Register ohne Authentifizierung anfordern:
Nach dem Empfang dieser bösartigen Paketanforderungen werden die Werte aller Register, einschließlich N13:3 und N13:4, auf 16.990 gesetzt. Das Ergebnis der ADD-Operation in den Registern N13:3 und N13:4 überschreitet den gültigen Bereich eines 16-Bit-Registers. Dieses Problem führt zu einem Integer-Überlauf, der zu einem Fehler führt und den Betrieb der SPS unterbricht, was durch den Zustand FAULTED angezeigt wird.
Unsere OPSWAT Graduate Fellows haben die MicroLogix 1400 PLC erfolgreich zum Absturz gebracht, indem sie CVE-2021-22659 ausnutzten.
Sanierung
Angesichts von Schwachstellen wie CVE-2021-22659 sind umfassende Abhilfemaßnahmen für den Schutz von OT- und cyber-physischen Systemen von entscheidender Bedeutung. Im Folgenden werden einige der wichtigsten Strategien vorgestellt, die zur Verhinderung der Ausbreitung von Angriffen eingesetzt werden können:
- Erkennung bekannter CVEs: Regelmäßiges Scannen von Netzwerken auf Sicherheitslücken wie CVE-2021-22659.
- Überwachung auf anomale Verhaltensweisen: Erkennung von ungewöhnlichen Häufungen in der Kommunikation mit der Micrologix 1400 SPS, die auf einen laufenden Angriff mit unerlaubter Datenübertragung hindeuten könnten.
- Erkennung neuer Geräteverbindungen: Das System sollte erkennen, wenn ein neues Gerät an die SPS angeschlossen wird.
- Netzwerksegmentierung: Die Isolierung betroffener Geräte kann dazu beitragen, die seitliche Ausbreitung von Angriffen zu verhindern und so die Auswirkungen zu minimieren.
MetaDefender OT Security von OPSWATerfüllt diese Anforderungen durch die Erkennung von CVEs, die kontinuierliche Überwachung des Netzwerks auf ungewöhnliche Verhaltensweisen und die Identifizierung nicht autorisierter Verbindungen. Mithilfe von KI lernt es normale Verkehrsmuster, legt ein Basisverhalten fest und implementiert Richtlinien, um Anomalien zu melden. Dies ermöglicht sofortige, fundierte Reaktionen auf potenzielle Bedrohungen.
Im Falle eines Angriffs, der CVE-2021-22659 ausnutzt, integriert sich MetaDefender OT Security mit der MetaDefender Industrial Firewall , um verdächtige Kommunikationen basierend auf festgelegten Regeln zu blockieren. Die Firewall nutzt KI, um regelmäßige Verkehrsmuster zu erlernen und Richtlinien durchzusetzen, um nicht autorisierte Verbindungen zu verhindern.
Durch die Kombination dieser Erkennungs-, Alarmierungs- und Netzwerksegmentierungsfunktionen wird MetaDefender OT Security zum idealen Verteidigungsmechanismus für industrielle Umgebungen, der das Risiko und die Auswirkungen von Cyberbedrohungen in betrieblichen Technologieumgebungen deutlich reduziert.
Erfahren Sie, wie die OPSWATfür umfassende Cybersicherheit Ihre Sicherheit verbessern und ausbauen kann. Sprechen Sie noch heute mit einem Experten für eine kostenlose Demo.