
Parchear binarios mediante MITM: BackdoorFactory + mitmProxy.
BLOG: http://secureallthethings.blogspot.com/2017/08/closing-door-end-of-backdoor-factory.html
Solo para profesionales de seguridad e investigadores.
###AHORA SOLO FUNCIONA CON 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
Para instalar en Kali:
apt-get update
apt-get install bdfproxy
Black Hat USA 2015:
Vídeo: https://www.youtube.com/watch?v=OuyLzkG16Uk
Documento: 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:
Vídeo: http://www.youtube.com/watch?v=LjUN9MACaTs
Aproximadamente a los 18 minutos está la parte de BDFProxy.
Contacta al desarrollador en:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
Este script utiliza dos bibliotecas: The Backdoor Factory (BDF) y mitmProxy.
###Concepto: Parchear binarios durante la descarga al estilo MITM.
###Por qué: Porque muchos sitios web de herramientas de seguridad aún sirven binarios a través de medios no SSL/TLS.
Aquí hay una lista breve:
sysinternals.com
Microsoft - MS Security Essentials
Casi todas las empresas antivirus
Malwarebytes
Sourceforge
gpg4win
Wireshark
etc...
Sí, algunas de esas aplicaciones están protegidas por mecanismos de autoverificación. He estado trabajando en una forma de omitir automáticamente las comprobaciones de NSIS como prueba de concepto. Sin embargo, eso no detiene el problema inicial de la alteración de bits durante la descarga y la ejecución de una carga maliciosa. Además, BDF por defecto parcheará el puntero de la tabla de certificados PE de Windows durante la descarga, eliminando así la firma del binario.
##Dependencias:
Pefile - más reciente
ConfigObj
mitmProxy - Kali Build .10
BDF - más actual
Capstone (parte de BDF)
##Entornos compatibles: Probado en todas las compilaciones de Kali Linux, ya sea en una laptop física potente, una Raspberry Pi o una máquina virtual, cada una puede ejecutar BDFProxy.
##Instalación: BDF está en bdf/
Ejecuta lo siguiente para obtener la versión más reciente:
./install.sh
O:
git clone https://github.com/secretsquirrel/the-backdoor-factory bdf/
Si obtienes un error de certificado, ejecuta lo siguiente:
mitmproxy
Y sal [Ctr+C] después de que mitmProxy cargue.
##Uso: Actualiza todo antes de cada uso:
./update.sh
LEE LA CONFIGURACIÓN!!!
-->bdfproxy.cfg
Deberás configurar los ajustes de host y puerto C2 antes de ejecutar BDFProxy. NO superpongas los ajustes de PUERTO C2 entre diferentes cargas útiles. Estarás enviando shells de Linux a máquinas Windows y las cosas fallarán por todas partes. Después de ejecutar, se creará un script de recursos de Metasploit para ayudar a configurar tus comunicaciones C2. Revísalo cuidadosamente. Por cierto, todo fuera de la sección [Overall] se actualiza sobre la marcha, por lo que no es necesario matar el proxy para cambiar los ajustes que funcionen con tu entorno.
¡Pero espera! Necesitarás configurar tu máquina mitm para hacer mitm. Si estás usando una wifiPineapple, modifiqué un script publicado por hack5 para ayudarte con la configuración. Ejecuta ./wpBDF.sh e ingresa las configuraciones correctas para tu entorno. Este script configura iptables para dirigir solo tráfico http (no SSL) a través del proxy. Todo el otro tráfico se reenvía normalmente.
Luego:
./bdf_proxy.py
Aquí hay un bonito arte ASCII para posibles configuraciones físicas del proxy:
Uso en LAN:
<Internet>----<mitmMachine>----<userLan>
Uso en WiFi:
<Internet>----<mitmMachine>----<wifiPineapple>)))
##Pruebas:
Supongamos que deseas usar tu navegador con Firefox y FoxyProxy para conectarte y probar tu configuración.
Actualiza tu configuración de la siguiente manera:
transparentProxy = None
Configura FoxyProxy para usar BDFProxy como proxy.
El puerto predeterminado en la configuración es 8080.
##Registro:
Lo tenemos. La ventana del proxy se llenará rápidamente con grandes cantidades de enlaces de gatos dependiendo del cliente que estés probando. Usa tail -f proxy.log para ver qué se está parcheando y bloqueando por tu configuración de lista negra. Sin embargo, mantén un ojo en la ventana principal del proxy si has elegido parchear binarios manualmente, las cosas se mueven rápido y detrás de escena hay múltiples hilos de tráfico, pero las solicitudes y respuestas iniciales se bloquean para tu placer visual.
##Escenarios de ataque (todos con permiso de los objetivos): -Punto de acceso WiFi malicioso -Redirección ARP -Planta física en un armario de cableado -Planta lógica en tu ISP favorito
##Reporte de errores
Los errores ocurren, pero si no puedo entender tu problema, no puedo ayudarte.
Envía los problemas aquí: https://github.com/secretsquirrel/BDFProxy/issues
Incluye la siguiente información de la salida de estos comandos (usa pastebin para los comandos más largos):
# bdfproxy only supports v11 -> v17
$ mitmproxy --version
$ uname -a
# Use pastebin perhaps
$ cat bdfproxy.cfg
$ ./bdf_proxy.py
###Registro de cambios:
####07/04/2016
Soporte para BDF Preprocessor y mitmProxy v17
####12/20/2015
Se agregaron opciones de configuración en bdfproxy.cfg para soportar la firma de código PE desde BDF => CODE_SIGN Consulta el README de BDF para más detalles
####11/13/2015
Se eliminaron las dependencias de python-magic porque hay dos bibliotecas que se llaman así. Lo cual es confuso.
####10/19/2015
Se agregó soporte para el parcheo del directorio de importación de BDF en un code cave en lugar de una nueva sección. Establece IDA_IN_CAVE a True en el archivo bdfproxy.cfg para esto. EXPERIMENTAL...
####8/12/2015
Se agregó soporte para el método de reemplazo de PE, reemplazar el binario descargado por uno proporcionado por el atacante. Para usar, cambia PATCH_METHOD a replace y proporciona un SUPPLIED_BINARY
####8/6/2015
Se agregó soporte para onionduke. Para usar, cambia PATCH_METHOD a onionduke y SUPPLIED_BINARY al binario que deseas enlazar al ejecutable objetivo.
Se agregó soporte para establecer la verificación y el parcheo de requestedExecutionLevel en el manifiesto PE como highestAvailable tanto para binarios PE x86 como x86_64. Establece RUNAS_ADMIN como True.
Se agregó soporte para establecer si se deben admitir máquinas XP heredadas mediante la bandera XP_MODE como True. Esto puede tener evasión contra los antivirus, ya que sus emuladores pueden fallar si esta configuración está establecida en FALSE.