
Patcher des binaires via MITM : BackdoorFactory + mitmProxy.
BLOG : http://secureallthethings.blogspot.com/2017/08/closing-door-end-of-backdoor-factory.html
Pour les professionnels de la sécurité et les chercheurs uniquement.
###FONCTIONNE MAINTENANT UNIQUEMENT AVEC v.0.17 >= MITMPROXY >= v.0.11
Docker:
# sudo echo 1 > /proc/sys/net/ipv4/ip_forward # linux
# sudo sysctl -w net.inet.ip.forwarding=1 # macOS
docker pull secretsquirrel/bdfproxy
docker run -it -p 8080:8080 secretsquirrel/bdfproxy bash
# ./bdf_proxy.py
Pour installer sur Kali :
apt-get update
apt-get install bdfproxy
Black Hat USA 2015 :
Vidéo : https://www.youtube.com/watch?v=OuyLzkG16Uk
Document : https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
DerbyCon 2014 :
Vidéo : http://www.youtube.com/watch?v=LjUN9MACaTs
Le passage sur BDFProxy se situe à environ 18 minutes.
Contactez le développeur sur :
IRC :
irc.freenode.net #BDFactory
Twitter :
@midnite_runr
Ce script utilise deux bibliothèques : The Backdoor Factory (BDF) et mitmProxy.
###Concept : Patcher les binaires pendant le téléchargement façon MITM.
###Pourquoi : Parce que de nombreux sites d'outils de sécurité distribuent encore des binaires via des moyens non-SSL/TLS.
Voici une courte liste :
sysinternals.com
Microsoft - MS Security Essentials
Almost all anti-virus companies
Malwarebytes
Sourceforge
gpg4win
Wireshark
etc...
Oui, certaines de ces applications sont protégées par des mécanismes d'auto-vérification. J'ai travaillé sur un moyen de contourner automatiquement les vérifications NSIS à titre de preuve de concept. Cependant, cela ne résout pas le problème initial de la modification de bits pendant le téléchargement et de l'exécution d'une charge utile malveillante. De plus, par défaut, BDF supprime le pointeur de la table de certificats PE Windows pendant le téléchargement, supprimant ainsi la signature du binaire.
##Dépendances :
Pefile - le plus récent
ConfigObj
mitmProxy - Build Kali .10
BDF - le plus récent
Capstone (fait partie de BDF)
##Environnement pris en charge : Testé sur toutes les builds Kali Linux, que ce soit un ordinateur portable physique puissant, un Raspberry Pi ou une VM, chacune peut exécuter BDFProxy.
##Installation : BDF se trouve dans bdf/
Exécutez la commande suivante pour récupérer la plus récente :
./install.sh
OU :
git clone https://github.com/secretsquirrel/the-backdoor-factory bdf/
Si vous obtenez une erreur de certificat, exécutez la commande suivante :
mitmproxy
Et quittez [Ctr+C] après le chargement de mitmProxy.
##Utilisation : Mettez tout à jour avant chaque utilisation :
./update.sh
LISEZ LA CONFIGURATION !!!
-->bdfproxy.cfg
Vous devrez configurer vos paramètres d'hôte et de port C2 avant d'exécuter BDFProxy. NE CHEVAUCHEZ PAS les paramètres de PORT C2 entre différentes charges utiles. Vous enverriez des shells Linux vers des machines Windows et les choses planteraient partout. Après l'exécution, un script de ressources metasploit sera créé pour vous aider à configurer vos communications C2. Vérifiez-le attentivement. D'ailleurs, tout ce qui se trouve en dehors de la section [Overall] se met à jour à la volée, vous n'avez donc pas besoin de tuer votre proxy pour modifier les paramètres afin de les adapter à votre environnement.
Mais attendez ! Vous devrez configurer votre machine mitm pour le mitm ! Si vous utilisez un wifiPineapple, j'ai modifié un script créé par hack5 pour vous aider avec la configuration. Exécutez ./wpBDF.sh et entrez les configurations correctes pour votre environnement. Ce script configure iptables pour ne faire passer que le trafic http (non-ssl) via le proxy. Tout autre trafic est transféré normalement.
Ensuite :
./bdf_proxy.py
Voici un peu d'art ASCII sympa pour les configurations physiques possibles du proxy :
Usage LAN :
<Internet>----<mitmMachine>----<userLan>
Usage WiFi :
<Internet>----<mitmMachine>----<wifiPineapple>)))
##Test :
Supposons que vous souhaitiez utiliser votre navigateur avec Firefox et FoxyProxy pour tester votre configuration.
Mettez à jour votre configuration comme suit :
transparentProxy = None
Configurez FoxyProxy pour utiliser BDFProxy comme proxy.
Le port par défaut dans la configuration est 8080.
##Journalisation :
Nous en avons. La fenêtre du proxy se remplira rapidement de quantités massives de liens de chat selon le client que vous testez. Utilisez tail -f proxy.log pour voir ce qui est patché et bloqué par vos paramètres de liste noire. Cependant, gardez un œil sur la fenêtre principale du proxy si vous avez choisi de patcher les binaires manuellement, les choses vont vite et en arrière-plan il y a du multi-threading du trafic, mais les requêtes et réponses initiales sont verrouillées pour votre plaisir visuel.
##Scénarios d'attaque (tous avec autorisation des cibles) : -Point d'accès WiFi malveillant -Redirection ARP -Implantation physique dans une armoire de câblage -Implantation logique chez votre FAI préféré
##Signalement de bogues
Les bogues arrivent, mais si je ne comprends pas votre problème, je ne peux pas vous aider.
Soumettez les problèmes ici : https://github.com/secretsquirrel/BDFProxy/issues
Incluez les informations suivantes à partir de la sortie de ces commandes (utilisez pastebin pour les commandes les plus longues) :
# bdfproxy only supports v11 -> v17
$ mitmproxy --version
$ uname -a
# Use pastebin perhaps
$ cat bdfproxy.cfg
$ ./bdf_proxy.py
###Journal des modifications :
####07/04/2016
Prise en charge du préprocesseur BDF et de mitmProxy v17
####12/20/2015
Ajout d'options de configuration dans bdfproxy.cfg pour prendre en charge la signature de code PE depuis BDF => CODE_SIGN Voir le README de BDF pour plus de détails
####11/13/2015
Suppression des dépendances python-magic car il existe deux bibliothèques portant ce nom. Ce qui prête à confusion.
####10/19/2015
Ajout du support pour le patching du répertoire d'importation BDF dans une code cave plutôt qu'une nouvelle section. Mettez IDA_IN_CAVE à True dans le fichier bdfproxy.cfg pour cela. EXPÉRIMENTAL...
####8/12/2015
Ajout du support pour la méthode de remplacement PE, remplace le binaire téléchargé par un fourni par l'attaquant. Pour l'utiliser, changez PATCH_METHOD en replace et fournissez un SUPPLIED_BINARY
####8/6/2015
Ajout du support pour onionduke. Pour l'utiliser, changez PATCH_METHOD en onionduke et SUPPLIED_BINARY en le binaire que vous souhaitez lier à l'exécutable cible.
Ajout du support pour définir la vérification et le patching du requestedExecutionLevel dans le manifeste PE en tant que highestAvailable pour les binaires PE x86 et x86_64. Mettez RUNAS_ADMIN à True.
Ajout du support pour définir si on prend en charge les machines XP héritées via le drapeau XP_MODE à True. Cela peut permettre d'éviter les antivirus car leurs émulateurs peuvent échouer si ce paramètre est défini sur FALSE.