
Instrumentierter Fuzzer für PLC-basierte ICS-Steuerungsanwendungen, der die Codesys-Runtime auf Wago-Controllern angreift, um Speicherkorruption und absturzauslösende Eingaben aufzudecken.
ICSFuzz: Fuzzing-Werkzeug für ICS-Steuerungsanwendungen
ICSFuzz ist ein SPS-seitiges Fuzzing-Werkzeug zur Aufdeckung von Schwachstellen in ICS-Steuerungsanwendungen
von Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
Das Werkzeug benötigt einen bereits vorhandenen Cross-Compiler auf Ihrem Rechner. Da der Fuzzer nativ auf der SPS läuft, muss er mit einer ARM-basierten Cross-Toolchain wie OSELAS kompiliert werden. Um eine solche Toolchain zu installieren, befolgen Sie bitte die Anweisungen unter dem folgenden Link und passen Sie das Makefile mit dem Speicherort Ihres Cross-Compilers an.
OSELAS-Toolchain <https://pengutronix.de/en/software/toolchain.html>__Das ICSFuzz-Werkzeug ist ein spezialisiertes Sicherheitsbewertungswerkzeug zur Evaluierung von ICS-Steuerungsanwendungen. In diesem Stadium unterstützt es nur Anwendungen, die auf der Codesys-Plattform basieren, die für die Wago-SPS modifiziert und angepasst wurde. Da dieses Werkzeug bei uns ein fortlaufendes Projekt ist, sind Vorschläge für Verbesserungen und erweiterte Kompatibilität mehr als willkommen :) Schicken Sie mir einfach eine E-Mail an [email protected]
Dieses Werkzeug ist als einfache Anwendung erstellt, die auf Ihrer Wago-SPS ausgeführt wird. Führen Sie einfach das Makefile aus, kopieren Sie das erzeugte fuzzer-Binär auf Ihre SPS und führen Sie es aus! Da das Werkzeug auf beliebigen Prozessspeicher zugreift und diesen modifiziert, benötigt es Administratorrechte. Bitte stellen Sie sicher, dass Sie es als sudo- oder root-Benutzer ausführen.
Das Werkzeug ist derzeit mit Codesys 3.5, Patch 02.06.20(08) und älteren Versionen kompatibel. Bitte führen Sie ein Upgrade oder Downgrade der Firmware Ihrer SPS durch, damit sie ICSFuzz ordnungsgemäß hosten kann. Für visuelles Feedback zum Fuzzing-Prozess können Sie die e!cockpit-Plattform verwenden, die als Entwicklungs-/HMI-Tool für Wago-SPS angeboten wird. Darüber können Sie die der Anwendung zugeführten Fuzzing-Eingaben verfolgen und auch über einen möglichen Absturz informiert werden, da die Anwendung dann die Ausführung stoppt und die "run"-LED rot aufleuchtet. Da die Anwendung stoppt, ist die aktuelle (hängen gebliebene) Eingabe diejenige, die den Absturz verursacht hat. Sie können die Anwendung über e!cockpit neu starten und den Fuzzer erneut starten.
Der Fuzzer hat einen anfänglichen fest verdrahteten Startwert (im Quellcode als seed_input vermerkt), den Sie nach Belieben ändern können, während Sie mit dem Fuzzer spielen.
Wenn Sie unsere Arbeit interessant finden und sie in Ihrer (akademischen oder nicht-akademischen) Forschung verwenden, zitieren Sie bitte unser Paper zur Usenix Security 2021, das ICSFuzz beschreibt:
Tychalas, Dimitrios, Hadjer Benkraouda, and Michail Maniatakos. "ICSFuzz: Manipulating I/Os and Repurposing Binary Code to Enable Instrumented Fuzzing in {ICS} Control Applications." 30th {USENIX} Security Symposium ({USENIX} Security 21). 2021.
ICSFuzz basiert, wie alles Gute im Leben, auf den Schultern von Riesen. Das Framework basiert auf dem leistungsstarken AFL von Michal Zalewski zur Erzeugung der notwendigen Eingabemutationen, die der ICS-Anwendung zugeführt werden.
AFL <https://lcamtuf.coredump.cx/afl/>__