Im Januar 2024 richtete sich eine Cyberattacke gegen ein Heizkraftwerk in Lviv, Ukraine [1], wodurch fast 600 Gebäude 48 Stunden lang ohne Heizung waren, während die Außentemperaturen um den Gefrierpunkt lagen. [2] Dragos, ein Unternehmen, das sich auf Cybersicherheit für industrielle Kontrollsysteme (ICS) und Betriebstechnik (OT) spezialisiert hat, hat diesen Vorfall gründlich analysiert. [3] Im April 2024 identifizierte das Dragos-Team die für diesen Angriff verantwortliche Malware und nannte sie FrostyGoop. Diese Malware zielt auf Industriegeräte ab, die das Modbus TCP/IP-Protokoll verwenden. Indem er dieses Protokoll ausnutzt, kann FrostyGoop den regulären Betrieb dieser Geräte stören, was zu vielen Problemen führen kann, wie z.B. dem Abschalten der Geräte. Um die Funktionsweise von FrostyGoop besser zu verstehen, ist es wichtig, zunächst das Modbus-Protokoll zu besprechen.
Modbus
Das Modbus-Protokoll, das 1979 von Modicon entwickelt wurde, ist eines der am weitesten verbreiteten Kommunikationsprotokolle im industriellen Sektor. Obwohl es über vier Jahrzehnte alt ist, bleibt Modbus aufgrund seiner Einfachheit und Zuverlässigkeit ein Eckpfeiler der industriellen Automatisierung. Dieses Protokoll ermöglicht den Datenaustausch zwischen verschiedenen Geräten, wie z.B. Sensoren, Aktoren, Antrieben und Steuerungen.
Tabelle 1 Einige willkürlich ausgewählte Beispiele für Lösungen, die von einigen der renommiertesten Automatisierungsanbieter angeboten werden. Die Tabelle zeigt, dass Modbus immer noch weit verbreitet ist.
Anbieter | Beispiellösung zur Unterstützung von Modbus TCP/IP |
---|---|
ABB | Modbus TCP/IP Feldbusadapter für Antriebe: Link |
Siemens | Siemens SPS-Serien, die Modbus TCP/IP unterstützen: Link |
Mitsubishi Electric | Modbus TCP/IP-Schnittstellenmodul: Link |
Schneider Electric | Modbus TCP/IP Kommunikation Device Type Manager: Link |
Rockwell Automation | Modbus TCP-Kommunikation mit Logix-Steuerungen: Link |
Ursprünglich wurde Modbus mit seriellen Kommunikationsprotokollen wie RS-232 und RS-485 verwendet. Als die Industrienetzwerke jedoch immer ausgereifter wurden, wurde Modbus erweitert, um über TCP/IP zu arbeiten, die Protokollsuite, die für die meisten modernen Netzwerke, einschließlich des Internets, verwendet wird. Mit Modbus TCP/IP können Geräte über Ethernet-Netzwerke kommunizieren, was die Integration in die bestehende IT-Infrastruktur erleichtert und die Fernüberwachung und -steuerung von Industrieprozessen ermöglicht.
Modbus TCP/IP arbeitet mit einer Client-Server-Architektur, wie in der Abbildung dargestellt. Bei diesem Aufbau ist der Server in der Regel ein Gerät wie ein Sensor, ein Messgerät oder ein Stellglied, das Daten in bestimmten Speicherplätzen, den Registern, speichert. Der Client, z.B. eine SPS (Speicherprogrammierbare Steuerung) oder ein SCADA-System (Supervisory Control and Data Acquisition), fordert Daten vom Server an oder sendet Befehle an ihn.
Abbildung 1 Modbus TCP/IP Client/Server Architektur. Der Modbus TCP/IP Client kann industrielle Komponenten mit einem implementierten Modbus TCP/IP Server steuern (ausgewählte Werte in Register schreiben) oder überwachen (ausgewählte Registerwerte lesen).
Eines der wichtigsten Konzepte in Modbus ist die Verwendung von Holding-Registern. Holding-Register sind 16-Bit-Speicherplätze in einem Servergerät, in denen verschiedene Daten gespeichert werden können. Mit diesen Registern kann der Client Daten direkt lesen oder schreiben. Ein Client kann Holding-Register vom Server lesen, um Daten wie Sensorwerte oder Statusinformationen zu erhalten. Wenn Sie z.B. einen Temperatursensor mit einem implementierten Modbus-Server haben, könnte die aktuelle Temperatur in einem bestimmten Holding-Register gespeichert sein. Der Client kann den Temperaturwert abrufen, indem er dieses Register zur Überwachung oder Weiterverarbeitung ausliest. Neben dem Lesen von Daten können Clients auch Daten in Holding-Register schreiben. Dies wird in der Regel zur Steuerung von Geräten verwendet. Ein Client kann zum Beispiel einen Wert in ein Holding-Register schreiben, um ein Ziel zu setzen
Temperatur eines Thermostats oder die Geschwindigkeit eines Motors einstellen. Diese Fähigkeit ermöglicht die Echtzeit-Steuerung von industriellen Prozessen auf der Grundlage dynamischer Eingaben.
Aufgrund des Alters des Modbus-Protokolls weist es nach modernen Sicherheitsstandards eine erhebliche Einschränkung auf – es fehlt die Unterstützung für Authentifizierung und Autorisierung. Um die Kommunikation mit einem Modbus TCP/IP-Server herzustellen, benötigt ein Client nur die folgenden Informationen:
- Die IP-Adresse des Servers ,
- DieNummer des Ports (normalerweise Port 502, der in der Praxis selten geändert wird),
- Der Device Identifier (ein Wert zwischen 0 und 247).
Als einfaches Protokoll erlaubt Modbus nur das Lesen und Überschreiben von numerischen Werten in bestimmten Registern. Diese Variablen sind nicht von Haus aus im Protokoll selbst beschrieben. Hersteller, die Geräte mit integriertem Modbus TCP/IP-Server herstellen, stellen in der Regel in ihrer Dokumentation eine Registerübersicht zur Verfügung, in der angegeben ist, welche Parameter den einzelnen Adressen entsprechen.
Das folgende Beispiel zeigt eine Verbindung zu einem Modbus TCP/IP-Server, der auf einem lokalen Rechner mit der IP-Adresse 127.0.0.1 und einer Gerätekennung von 1 gehostet wird. In diesem Szenario werden 20 Register gelesen, beginnend mit dem ersten Register an Adresse 0. Die ersten sechs Register(Adressen 0-5) geben das aktuelle Datum und die Uhrzeit zurück. Um die Bedeutung der nachfolgenden Werte zu ermitteln, müssen Sie jedoch die Dokumentation des Geräts konsultieren.
Abbildung 2 Ein Beispiel für die Modbus TCP/IP Client Software. Die Werte der Holding-Register sind sichtbar. Mit dem Tool können Sie die Registerwerte überschreiben, indem Sie das entsprechende Feld auswählen und die Nummer bearbeiten. Die Software ist kostenlos und kann von https://en.radzio.dxp.pl/modbus-master-simulator/ heruntergeladen werden .
FrostyGoop
Nachdem wir bereits die theoretischen Grundlagen des Modbus-Protokolls behandelt haben, ist es einfacher, das Konzept hinter der FrostyGoop-Malware zu verstehen, die explizit auf Geräte abzielt, die dieses Protokoll verwenden.
FrostyGoop ist ein bösartiges Programm, das für die Ausführung auf Windows-Systemen entwickelt wurde. Es ist in der Programmiersprache Golang geschrieben und nutzt die öffentlich verfügbaren Modbus-Bibliotheken auf GitHub. [4] Diese Malware kann Register auf einem Modbus TCP/IP-Server auslesen und überschreiben. Seine Konfiguration kann über optionale Befehlszeilenargumente oder durch Angabe einer Konfigurationsdatei im JSON-Format eingestellt werden. Damit die Malware arbeiten kann, sind die IP-Adresse des Modbus TCP/IP-Servers, der Betriebsmodus (entweder Lesen oder Schreiben von Registern) und die Adressen der Zielregister erforderlich. Daher kann FrostyGoop, wie bereits erwähnt, als Modbus TCP/IP-Client betrachtet werden, der bösartige Aktionen durchführt, indem er falsche Daten in die Geräteregister einspeist. Da es sich bei diesen Daten häufig um Steuerungsparameter für industrielle Geräte handelt, könnte die Malware den Betrieb technischer Prozesse erheblich beeinträchtigen.
Die folgende Abbildung zeigt ein Beispiel für den von FrostyGoop erzeugten Netzwerkverkehr, wie er in Wireshark beobachtet wird.
Abbildung 3 Der von FrostyGoop erzeugte Datenverkehr sieht aus wie legitimer Datenverkehr, der von anderen Modbus TCP/IP Clients erzeugt wird. Wir können die Pakete sehen, die sich auf das Lesen von Daten vom Server (Read Holding Registers) und das Schreiben von Daten in das Gerät (Write Single/Multiple Registers) beziehen. [3]
Laut der vom Dragos-Team durchgeführten Analyse wurde die Malware im Netzwerk des Opfers entdeckt, das aus einem Router, Servern und Heizungssteuerungen bestand (die Hacker verschafften sich wahrscheinlich über eine Sicherheitslücke im Router Zugang zu diesem Netzwerk). Die böswilligen Modbus-Anfragen wurden direkt von dem Router an die Heizungssteuerungen gesendet.
die Computer der Hacker über fest kodierte Netzwerkrouten. Das Ziel des Angriffs waren Heizungsanlagensteuerungen der Marke ENCO. Interessanterweise haben die Angreifer diese Geräte auch aus der Ferne herabgestuft, so dass die Messwerte ungenau wurden und die Betreiber der Heizungsanlage keinen Überblick mehr hatten. In der zugehörigen FrostyGoop-Konfigurationsdatei(task_test.json) wurde eine IP-Adresse gefunden, die zu einem im Internet exponierten ENCO-Steuergerät gehörte. Dies veranlasste Dragos dazu, mit mittlerer Sicherheit davon auszugehen, dass FrostyGoop vor diesem Angriff auch dazu verwendet wurde, ein oder mehrere ENCO-Steuergeräte anzugreifen, bei denen der TCP-Port 502 über das Internet zugänglich war. [3] Somit war diese Malware höchstwahrscheinlich für die fehlende Wärme in mehr als 600 Gebäuden im Januar 2024 in Lviv verantwortlich.
Wie gefährlich ist der FrostyGoop?
Geräte mit Modbus TCP/IP, die dem öffentlichen Internet ausgesetzt sind, sind direkt anfällig für FrostyGoop-ähnliche Malware. Da das Modbus TCP/IP-Protokoll keine Authentifizierung unterstützt, ist es möglich, sich mit zugänglichen Hosts zu verbinden und zu versuchen, Registerwerte zu ändern, was sich direkt auf den Betrieb von physischen Industriegeräten auswirken kann.
Die folgende Abbildung zeigt eine geschätzte Anzahl von Geräten, bei denen Port 502 online geöffnet ist. Die Dragos-Gruppe schätzt, dass von diesen 640.000 Anlagen etwa 46.000 Geräte verwundbar sein könnten.
Abbildung 4 Ergebnisse der Suche nach öffentlich verfügbaren Geräten mit geöffnetem Port 502 auf der Shodan-Plattform.
Geräte, die sich innerhalb lokaler industrieller Netzwerke befinden, gehören zur zweiten Risikostufe. Wenn sich ein Angreifer Zugang zum internen Netzwerk verschafft, könnten bösartige Aktionen gegen diese Geräte möglich werden. Wenn ein Angreifer darauf abzielt, das ordnungsgemäße Funktionieren von Industrieanlagen zu stören
Einrichtungen könnten Geräte, die über das Modbus-Protokoll kommunizieren, zu ihren primären Zielen gehören.
Empfehlungen
Dieser Abschnitt ist für diejenigen interessant, die mit Geräten arbeiten, in denen ein Modbus TCP/IP-Server implementiert ist und die die damit verbundenen Risiken minimieren möchten. Die obige Diskussion führt zu einer entscheidenden Erkenntnis:
Dies ist die grundlegendste und kritischste Regel für die Verbesserung der Sicherheit von industriellen Kontrollsystemen (ICS) und Betriebstechnikumgebungen (OT), die das Modbus-Protokoll verwenden. Um die Sicherheit dieser Systeme weiter zu stärken, könnten wir die Implementierung zusätzlicher Maßnahmen in Betracht ziehen, die in der folgenden Tabelle aufgeführt sind.
Tabelle 2 Vorgeschlagene Maßnahmen zur Minderung von Risiken im Zusammenhang mit ICS-Geräten, die über das Modbus TCP/IP-Protokoll kommunizieren. Es ist jedoch anzumerken, dass diese Maßnahmen eine viel umfassendere Palette von Bedrohungen wirksam bekämpfen können. Die Maßnahmen sind mit den im MITRE ATT&CK ICS-Rahmenwerk in der letzten Spalte beschriebenen Abhilfemaßnahmen verknüpft.
Maßnahme | Beschreibung | MITRE ATT&CK ICS Mitigations Referenz |
---|---|---|
Netzwerk Segmentierung | Implementieren Sie eine Netzwerksegmentierung, um Ihre Modbus TCP/IP-Geräte von anderen Teilen Ihres Netzwerks zu isolieren, insbesondere vom öffentlichen Internet und anderen nicht vertrauenswürdigen Netzwerken. Indem Sie verschiedene Netzwerkzonen schaffen, begrenzen Sie die potenzielle Ausbreitung eines Angriffs und erschweren Eindringlingen den Zugriff auf sensible Systeme. | M0930: Netzwerk Segmentierung |
Verwendung von alternativen Industrieprotokollen | Wenn möglich, verschlüsseln Sie den Netzwerkverkehr, um die zwischen Clients und Servern übertragenen Daten zu schützen. Modbus selbst unterstützt zwar keine Verschlüsselung, aber Sie können den Modbus-Datenverkehr über ein VPN (Virtual Private Network) tunneln. | M0802: Kommunikation Authentizität |
Kontinuierliche Netzwerk-Überwachung | Setzen Sie strenge Zugriffskontrollen ein, um zu begrenzen, wer mit Modbus-Geräten kommunizieren kann. Verwenden Sie Firewalls, um den Zugriff auf Modbus TCP/IP-Server nur auf vertrauenswürdige IP-Adressen zu beschränken. | M0931: Netzwerk Intrusion Prävention |
Zugang Kontrolliert und Firewalls | Überwachen Sie Ihr industrielles Netzwerk regelmäßig auf ungewöhnliche oder nicht autorisierte Aktivitäten. Die Implementierung eines Intrusion Detection Systems (IDS) oder eines Intrusion Prevention Systems (IPS), das speziell auf industrielle Netzwerke zugeschnitten ist, kann dazu beitragen, potenzielle Bedrohungen in Echtzeit zu erkennen, so dass Sie sofort reagieren können. | M0807: Netzwerk Allowlists |
Verschlüsselung von Netzwerkverkehr | Wenn möglich, verschlüsseln Sie den Netzwerkverkehr, um die zwischen Clients und Servern übertragenen Daten zu schützen. Modbus unterstützt zwar keine Verschlüsselung, aber Sie können den Modbus-Datenverkehr über ein VPN (Virtual Private Network) tunneln. | M0808: Verschlüsseln Netzwerkverkehr |
Sicherheit Audits | Führen Sie regelmäßig Sicherheitsaudits und Schwachstellenbewertungen Ihrer ICS- und OT-Umgebungen durch. Diese Bewertungen können dazu beitragen, Schwachstellen in Ihrer aktuellen Einrichtung zu identifizieren und Einblicke in Bereiche zu geben, die verbessert werden müssen. | M0947: Audit |
Wenn wir die oben genannten Praktiken befolgen, können wir das Risiko von Cyber-Bedrohungen für unsere Modbus TCP/IP-Geräte erheblich reduzieren und die allgemeine Sicherheit des industriellen Netzwerks verbessern.
Ein tieferes Eintauchen in das Modbus-Hacking
Um die mit dem Modbus-Protokoll verbundenen Risiken besser zu verstehen, wurde eine kleine Simulation vorbereitet und in diesem Abschnitt vorgestellt. Als Teil der Simulation wurden drei kurze Python-Programme unter Verwendung der pyModbusTCP-Bibliothek geschrieben. [5]
Das erste Programm simuliert einen Heizungsregler, der als Modbus TCP/IP-Server arbeitet.
Das nächste Programm ist ein Beispiel für einen Modbus TCP/IP-Client. Wenn Sie dieses Programm ausführen, erscheint ein Fenster, das dem in der Abbildung unten dargestellten ähnelt. Dieses Fenster simuliert die Visualisierungsoberfläche, die typischerweise von Bedienern verwendet wird, die für die Überwachung und Steuerung der Heizungsanlage zuständig sind. Das Programm ruft die Daten von dem zuvor gestarteten Server ab. In der Schnittstelle werden die folgenden Parameter angezeigt:
- Gesamtsystemstatus – . [OK].
- Datum – aktuelles Datum.
- Temperatur – Außenbereich – die Temperatur außerhalb des Gebäudes, in dem das Heizsystem installiert ist.
- Temperatur – Innen – die Temperatur im Inneren des Gebäudes, in dem das Heizsystem installiert ist.
- Temperatur – Sollwert – die Solltemperatur im Gebäude.
- Temperatur – Hysterese – der Wert der Abweichung, um den die Temperatur relativ zur Solltemperatur fallen sollte, um die Heizung wieder zu starten.
Abbildung 5 Einfaches SCADA-ähnliches Fenster zur Überwachung des Heizungssystems.
Die Innentemperatur des Gebäudes ändert sich während der Simulation kontinuierlich. Das Heizsystem schaltet sich aus, wenn es die Solltemperatur überschreitet(Heizungsstatus: Aus). Die Temperatur beginnt dann zu sinken. Wenn die Temperatur unter den Sollwert abzüglich der Hysterese fällt, schaltet sich das Heizsystem ein(Heizungsstatus: Ein) und die Temperatur steigt an. Das System arbeitet korrekt und hält die Temperatur in der Nähe der Solltemperatur.
Das dritte Programm simuliert einen Client, der versucht, eine bösartige Aktion gegen das Heizungssystem durchzuführen. Führen Sie es mit dem folgenden Befehl aus:
Dieses Programm führt einen einfachen Angriff aus – es verbindet sich mit dem Modbus TCP/IP-Server und beginnt, jede Sekunde Nullen in die Halteregister zu schreiben. Diese Aktion setzt die Solltemperatur und die Hysterese auf Null zurück. Da die Solltemperatur gleich Null ist, wird das Heizsystem nie aktiviert, wodurch die Temperatur sinkt. Schließlich wird der Warnstatus auf der Visualisierung angezeigt. [COLD!].
Abbildung 6 Eine Simulation des einfachen Störangriffs auf das Heizungssystem mit Modbus TCP/IP-Server. Er schreibt Nullen in die Halteregister.
In diesem Szenario haben wir eine einfache Angriffssimulation auf den Modbus TCP/IP-Server durchgeführt, die den Betrieb der Heizungsanlage gestört und sie zu einer kontinuierlichen Abschaltung gezwungen hat.
Danksagung
Ich habe gerne an dem Webinar Cold Reality: The Impact of FrostyGoop Modbus Malware on Connected OT Systems am 6. August 2024 teilgenommen, das vom Dragos-Team vorbereitet wurde. Ich möchte mich bei ihnen dafür bedanken, dass sie ihre Analyse öffentlich zugänglich gemacht haben.
Bibliographie
[1] Н. Карнаух, “Частина Львова залишилась без опалення та гарячої води: слідчі перевіряють версію про хакерську атаку”, Januar 2024. [Online]. Verfügbar: https://suspilne.media/lviv/667490-castina-lvova-zalisilas- bez-opalenna-ta-garacoi-vodi-slidci-pereviraut-versiu-pro-hakersku-ataku/.
[2] A. Greenberg, “How Russia-Linked Malware Cut Heat to 600 Ukrainian Buildings in Deep Winter,” WIRED, Juli 2024. [Online]. Verfügbar: https://www.wired.com/story/russia-ukraine-frostygoop-malware-heating-utility/.
[3] Dragos, “Auswirkungen der ICS-Malware FrostyGoop auf vernetzte OT-Systeme”, Juli 2024. [Online]. Verfügbar: https://hub.dragos.com/hubfs/Reports/Dragos-FrostyGoop-ICS-Malware-Intel-Brief-0724_r2.pdf?hsLang=en.
[4] [Online]. Verfügbar: https://github.com/rolfl/modbus.
[5] [Online]. Verfügbar: https://pymodbustcp.readthedocs.io/en/latest/quickstart/index.html.