Firmware Analysis
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Firmware ist essentielle Software, die es Geräten ermöglicht, korrekt zu funktionieren, indem sie die Kommunikation zwischen den Hardwarekomponenten und der Software, mit der Benutzer interagieren, verwaltet und erleichtert. Sie wird im permanenten Speicher gespeichert, sodass das Gerät von dem Moment an auf wichtige Anweisungen zugreifen kann, in dem es eingeschaltet wird, was zum Start des Betriebssystems führt. Die Untersuchung und potenzielle Modifikation der Firmware ist ein kritischer Schritt zur Identifizierung von Sicherheitsanfälligkeiten.
Informationsbeschaffung ist ein kritischer erster Schritt, um die Zusammensetzung eines Geräts und die Technologien, die es verwendet, zu verstehen. Dieser Prozess umfasst das Sammeln von Daten über:
Die CPU-Architektur und das Betriebssystem, das es ausführt
Einzelheiten zum Bootloader
Hardware-Layout und Datenblätter
Codebasis-Metriken und Quellstandorte
Externe Bibliotheken und Lizenztypen
Update-Historien und regulatorische Zertifizierungen
Architektonische und Flussdiagramme
Sicherheitsbewertungen und identifizierte Schwachstellen
Zu diesem Zweck sind Open-Source-Intelligence (OSINT)-Tools von unschätzbarem Wert, ebenso wie die Analyse aller verfügbaren Open-Source-Softwarekomponenten durch manuelle und automatisierte Überprüfungsprozesse. Tools wie Coverity Scan und Semmle’s LGTM bieten kostenlose statische Analysen, die genutzt werden können, um potenzielle Probleme zu finden.
Der Erwerb von Firmware kann auf verschiedene Weise erfolgen, jede mit ihrem eigenen Komplexitätsgrad:
Direkt von der Quelle (Entwickler, Hersteller)
Bauen Sie es aus bereitgestellten Anweisungen
Herunterladen von offiziellen Support-Seiten
Nutzung von Google Dork-Abfragen zur Auffindung gehosteter Firmware-Dateien
Zugriff auf Cloud-Speicher direkt, mit Tools wie S3Scanner
Abfangen von Updates über Man-in-the-Middle-Techniken
Extrahieren von dem Gerät über Verbindungen wie UART, JTAG oder PICit
Sniffen von Update-Anfragen innerhalb der Gerätekommunikation
Identifizieren und Verwenden von hardcodierten Update-Endpunkten
Dumpen vom Bootloader oder Netzwerk
Entfernen und Lesen des Speicherchips, wenn alles andere fehlschlägt, unter Verwendung geeigneter Hardware-Tools
Jetzt, da Sie die Firmware haben, müssen Sie Informationen darüber extrahieren, um zu wissen, wie Sie damit umgehen sollen. Verschiedene Tools, die Sie dafür verwenden können:
Wenn Sie mit diesen Tools nicht viel finden, überprüfen Sie die Entropie des Images mit binwalk -E <bin>
. Wenn die Entropie niedrig ist, ist es unwahrscheinlich, dass es verschlüsselt ist. Bei hoher Entropie ist es wahrscheinlich verschlüsselt (oder auf irgendeine Weise komprimiert).
Darüber hinaus können Sie diese Tools verwenden, um Dateien, die in der Firmware eingebettet sind, zu extrahieren:
File/Data Carving & Recovery ToolsOder binvis.io (code), um die Datei zu inspizieren.
Mit den zuvor kommentierten Tools wie binwalk -ev <bin>
sollten Sie in der Lage gewesen sein, das Dateisystem zu extrahieren.
Binwalk extrahiert es normalerweise in einen Ordner, der nach dem Dateisystemtyp benannt ist, der normalerweise einer der folgenden ist: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Manchmal hat binwalk nicht das magische Byte des Dateisystems in seinen Signaturen. In diesen Fällen verwenden Sie binwalk, um den Offset des Dateisystems zu finden und das komprimierte Dateisystem aus der Binärdatei zu extrahieren und das Dateisystem manuell gemäß seinem Typ mit den folgenden Schritten zu extrahieren.
Führen Sie den folgenden dd-Befehl aus, um das Squashfs-Dateisystem zu extrahieren.
Alternativ kann auch der folgende Befehl ausgeführt werden.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Für squashfs (wie im obigen Beispiel verwendet)
$ unsquashfs dir.squashfs
Die Dateien befinden sich danach im Verzeichnis "squashfs-root
".
CPIO-Archivdateien
$ cpio -ivd --no-absolute-filenames -F <bin>
Für jffs2-Dateisysteme
$ jefferson rootfsfile.jffs2
Für ubifs-Dateisysteme mit NAND-Flash
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Sobald die Firmware beschafft ist, ist es wichtig, sie zu zerlegen, um ihre Struktur und potenzielle Schwachstellen zu verstehen. Dieser Prozess umfasst die Nutzung verschiedener Werkzeuge zur Analyse und zum Extrahieren wertvoller Daten aus dem Firmware-Image.
Eine Reihe von Befehlen wird für die erste Inspektion der Binärdatei (bezeichnet als <bin>
) bereitgestellt. Diese Befehle helfen dabei, Dateitypen zu identifizieren, Strings zu extrahieren, binäre Daten zu analysieren und die Partitionierungs- und Dateisystemdetails zu verstehen:
Um den Verschlüsselungsstatus des Images zu bewerten, wird die Entropie mit binwalk -E <bin>
überprüft. Niedrige Entropie deutet auf einen Mangel an Verschlüsselung hin, während hohe Entropie auf mögliche Verschlüsselung oder Kompression hindeutet.
Für das Extrahieren von eingebetteten Dateien werden Werkzeuge und Ressourcen wie die Dokumentation zu file-data-carving-recovery-tools und binvis.io zur Dateiansicht empfohlen.
Mit binwalk -ev <bin>
kann man normalerweise das Dateisystem extrahieren, oft in ein Verzeichnis, das nach dem Dateisystemtyp benannt ist (z. B. squashfs, ubifs). Wenn binwalk jedoch den Dateisystemtyp aufgrund fehlender Magic Bytes nicht erkennt, ist eine manuelle Extraktion erforderlich. Dies beinhaltet die Verwendung von binwalk
, um den Offset des Dateisystems zu lokalisieren, gefolgt vom dd
-Befehl, um das Dateisystem herauszuschneiden:
Nachfolgend, abhängig vom Dateisystemtyp (z. B. squashfs, cpio, jffs2, ubifs), werden verschiedene Befehle verwendet, um die Inhalte manuell zu extrahieren.
Mit dem extrahierten Dateisystem beginnt die Suche nach Sicherheitsanfälligkeiten. Es wird auf unsichere Netzwerk-Daemons, hardcodierte Anmeldeinformationen, API-Endpunkte, Funktionen von Update-Servern, nicht kompilierte Codes, Startskripte und kompilierte Binärdateien für die Offline-Analyse geachtet.
Wichtige Orte und Elemente, die zu inspizieren sind, umfassen:
etc/shadow und etc/passwd für Benutzeranmeldeinformationen
SSL-Zertifikate und Schlüssel in etc/ssl
Konfigurations- und Skriptdateien auf potenzielle Schwachstellen
Eingebettete Binärdateien für weitere Analysen
Häufige IoT-Geräte-Webserver und Binärdateien
Mehrere Tools helfen dabei, sensible Informationen und Schwachstellen im Dateisystem aufzudecken:
LinPEAS und Firmwalker zur Suche nach sensiblen Informationen
The Firmware Analysis and Comparison Tool (FACT) für umfassende Firmware-Analysen
FwAnalyzer, ByteSweep, ByteSweep-go und EMBA für statische und dynamische Analysen
Sowohl Quellcode als auch kompilierte Binärdateien, die im Dateisystem gefunden werden, müssen auf Schwachstellen überprüft werden. Tools wie checksec.sh für Unix-Binärdateien und PESecurity für Windows-Binärdateien helfen dabei, ungeschützte Binärdateien zu identifizieren, die ausgenutzt werden könnten.
Der Prozess der Emulation von Firmware ermöglicht dynamische Analysen entweder des Betriebs eines Geräts oder eines einzelnen Programms. Dieser Ansatz kann auf Herausforderungen mit Hardware- oder Architekturabhängigkeiten stoßen, aber das Übertragen des Root-Dateisystems oder spezifischer Binärdateien auf ein Gerät mit passender Architektur und Endianness, wie z. B. einem Raspberry Pi, oder auf eine vorgefertigte virtuelle Maschine, kann weitere Tests erleichtern.
Für die Untersuchung einzelner Programme ist es entscheidend, die Endianness und die CPU-Architektur des Programms zu identifizieren.
Um eine Binärdatei der MIPS-Architektur zu emulieren, kann man den Befehl verwenden:
Und um die notwendigen Emulationswerkzeuge zu installieren:
Für MIPS (Big-Endian) wird qemu-mips
verwendet, und für Little-Endian-Binärdateien wäre qemu-mipsel
die Wahl.
Für ARM-Binärdateien ist der Prozess ähnlich, wobei der Emulator qemu-arm
für die Emulation genutzt wird.
Werkzeuge wie Firmadyne, Firmware Analysis Toolkit und andere erleichtern die vollständige Firmware-Emulation, automatisieren den Prozess und unterstützen bei der dynamischen Analyse.
In diesem Stadium wird entweder eine echte oder emulierte Geräteumgebung für die Analyse verwendet. Es ist wichtig, den Shell-Zugriff auf das Betriebssystem und das Dateisystem aufrechtzuerhalten. Die Emulation kann die Hardware-Interaktionen möglicherweise nicht perfekt nachahmen, was gelegentliche Neustarts der Emulation erforderlich macht. Die Analyse sollte das Dateisystem erneut überprüfen, exponierte Webseiten und Netzwerkdienste ausnutzen und Bootloader-Schwachstellen erkunden. Firmware-Integritätstests sind entscheidend, um potenzielle Backdoor-Schwachstellen zu identifizieren.
Die Laufzeitanalyse umfasst die Interaktion mit einem Prozess oder einer Binärdatei in seiner Betriebsumgebung, wobei Werkzeuge wie gdb-multiarch, Frida und Ghidra verwendet werden, um Haltepunkte zu setzen und Schwachstellen durch Fuzzing und andere Techniken zu identifizieren.
Die Entwicklung eines PoC für identifizierte Schwachstellen erfordert ein tiefes Verständnis der Zielarchitektur und Programmierung in niedrigeren Programmiersprachen. Binäre Laufzeitschutzmaßnahmen in eingebetteten Systemen sind selten, aber wenn sie vorhanden sind, können Techniken wie Return Oriented Programming (ROP) erforderlich sein.
Betriebssysteme wie AttifyOS und EmbedOS bieten vorkonfigurierte Umgebungen für die Sicherheitstests von Firmware, ausgestattet mit den notwendigen Werkzeugen.
AttifyOS: AttifyOS ist eine Distribution, die Ihnen hilft, Sicherheitsbewertungen und Penetrationstests von Internet of Things (IoT)-Geräten durchzuführen. Es spart Ihnen viel Zeit, indem es eine vorkonfigurierte Umgebung mit allen notwendigen Werkzeugen bereitstellt.
EmbedOS: Eingebettetes Sicherheitstestbetriebssystem basierend auf Ubuntu 18.04, vorinstalliert mit Werkzeugen für die Sicherheitstests von Firmware.
Um das Entdecken von Schwachstellen in Firmware zu üben, verwenden Sie die folgenden verwundbaren Firmware-Projekte als Ausgangspunkt.
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)