
Der Ansatz eines Neulings beim Firmware-Hacking
Dieses Dokument beschreibt meine persönliche Erfahrung als Neuling im Reverse Engineering von Firmware und deren Ausnutzung.

Zur Demonstration werden wir CVE-2023-27216 analysieren und reproduzieren.
Um Firmware auszunutzen, sind folgende Schritte erforderlich:
gdbserver statisch erstellen, um Debugging zu ermöglichen.Normalerweise enthält eine Firmware-Binärdatei einen Bootloader (uBoot), eine Kernel-Datei, einen Kernel-Header für den Bootloader (uImage), ein komprimiertes Dateisystem (meist im SquashFS-Format), eine CRC/MD5-Tabelle (zur Überprüfung der Dateiintegrität) und andere diverse Dateien.
Zunächst einen Weg finden, die Firmware zu analysieren, etwas recherchieren, einige Ressourcen gefunden:

Extrahieren Sie die Firmware mit binwalk: binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin

Habe den extrahierten Ordner squashfs-root und einige seltsame Dateien erhalten.

Bonus: Wenn Sie keinen squashfs-root-Ordner sehen, verwenden Sie unsquashfs auf einer beliebigen .squashfs-Datei, die Sie sehen. Sie sind wie ZIP-Dateien 😅.
Überprüfen Sie die Architektur und Endianness der Firmware. Dies kann durch Überprüfung einiger aus der Firmware extrahierter Binärdateien erfolgen. Überprüfen Sie die Architektur und Firmware: file <binary>

Hier können wir fast bestätigen, dass die Firmware auf MIPS 32-Bit-MSB-Architektur läuft. Der Grund für 'fast' ist, dass einige Firmware auf einer anderen Architektur mit MIPS-kompatibel laufen kann, wie z.B. Lexra.
Überprüfen Sie den Ordner squashfs-root und finden Sie einige interessante Dateien:
usr/etc/init.d/rcS => Dies ist das Skript, das beim Hochfahren der Firmware ausgeführt wirdusr/etc/passwd => Dies ist die Datei, die die Benutzerinformationen enthältuserfs/romfile.cfg => Es gibt eine Anmeldeinformation admin:adminÜberprüfen Sie die Datei rcS und finden Sie interessanten Code:
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
passwd zu schreibenBoa ist ein uralter Webserver, der hauptsächlich in eingebetteten Geräten wie Routern in den 2000er Jahren verwendet wurde. Allerdings wurde die Entwicklung des Boa-Servers bereits 2005 eingestellt! Obwohl der Boa-Server seit fast 20 Jahren tot ist, lebt er dank unseres Herstellers bis heute weiter.

Ich empfehle die Verwendung eines Debian-basierten Betriebssystems für den Emulationsprozess, wie Ubuntu oder Kali. Es gibt ein weiteres Betriebssystem, das sich auf Firmware-Hacking konzentriert, genannt AttifyOS. In diesem Dokument habe ich Kali Linux verwendet. Beginnen Sie mit dem Emulationsprozess. Es gibt zwei Tools:

Lassen Sie uns durchgehen, wie man FAT verwendet, um eine Firmware vollständig zu emulieren. Zuerst klonen wir das Repository von GitHub auf Ihre Kali-Maschine. Und durchlaufen den Einrichtungsprozess. Sie müssen auch die Datei fat.config ändern, sonst funktioniert es nicht.
git clone https://github.com/attify/firmware-analysis-toolkit.git
cd firmware-analysis-toolkit
./setup.sh
vi fat.config # Modify to your sudo password.
Dann kopieren wir die Firmware-Binärdatei (die, die wir vom Hersteller heruntergeladen haben) in den Ordner von FAT auf unserer Kali-Maschine und führen sie aus.
./fat.py DSL-3782_A1_EU_1.01_07282016.bin
Hinweis: Während des Einrichtungsprozesses von FAT können Fehler auftreten. Es kann 'no libmagic' anzeigen.

Führen Sie einfach aus:
pip unistall python-magic
pip install python-magic
Dies sollte Ihr Problem beheben. Dann führen wir den Build-Befehl erneut aus. Es sollte jetzt einwandfrei funktionieren.

Drücken Sie Enter, um es auszuführen. Der Emulationsprozess sollte gut funktionieren. Sie können zu http://192.168.1.1 (auf der Kali-Maschine) navigieren, um zu überprüfen, ob es funktioniert.

Sie können sich auch an der Konsole anmelden, wenn Sie die Anmeldedaten haben. Hier ist admin:admin.

Wenn Sie die emulierte Firmware ausschalten möchten, drücken Sie einfach Strg+A X. Wenn Sie sie erneut ausführen müssen, führen Sie nicht erneut fat.py aus, da die Firmware bereits in ein Image eingebaut wurde. Sie müssen nur das bereits generierte Skript ausführen.
cd firmadyne/scratch/<Image-ID>
./run.sh
