Blog

ACTUALIDAD
28 Jul 2020

Utilizar Metasploit para crear un payload ofuscado y que evada la detección de los antivirus

/
Publicado por
/
Comentarios0

Utilizar Metasploit para crear un payload ofuscado y que evada la detección de los antivirus

Una de las cosas que puede distinguir a un Hacker experimentado de un Script Kiddie es la capacidad de escabullirse eficazmente de las defensas antivirus al ejecutar un ataque. Una forma de hacerlo es utilizar un Shellcode personalizado en un Exploit. Pero no todo el mundo es experto en escribir Shellcodes, aunque afortunadamente hay una manera fácil de hacerlo que además es rápida y efectiva.

La evasión de antivirus es un campo amplio al que algunas personas dedican gran parte de su trabajo. Es una parte importante del desarrollo de Exploits, y ciertamente es útil cuando se trata de evitar los mecanismos de defensa comunes. Cómo dijimos anteriormente, una de las formas de ofuscar Payloads es mediante la generación de un Shellcode personalizado. Este método se puede utilizar cuando se desarrolla un Exploit desde cero o cuando se utiliza un Exploit existente para poder esconderse mejor del software antivirus.

Utilizaremos nuestro Metasploit, por lo que lo lanzamos con el comando msfconsole. Cuando se carga un Payload, hay algunos comandos disponibles, incluido el comando generar, que será donde nos centraremos en este post.

  1. Comenzamos con la generación de nuestro Payload. Debemos elegir uno, casi cualquier Payload nos sería de utilidad, pero para esta demostración, utilizaremos una bind Shell:

Utilizamos el comando help para ver la ayuda del Payload:

El comando que nos interesa es generate, utilizaremos el comando generate -h para que nos muestre las opciones disponibles:

  1. Podemos generar un Shellcode sin ninguna opción, aunque las probabilidades de que este Payload pase por alto cualquier software antivirus moderno probablemente sean bastante bajas. A continuación, podemos ver el tamaño del Payload generado, 78 bytes, seguido de algunas otras configuraciones, y finalmente el código sin procesar.

  1. Podemos pedirle a Metasploit que seleccione automáticamente el mejor encoder, pero también podemos especificarle cuál utilizar para satisfacer nuestras necesidades personalizadas. Escribimos show encoders para ver una lista de los encoders disponibles y sus descripciones.

Por ejemplo, podríamos utilizar un encoder countdown XOR simple (x86 / Countdown). Especificamos el encoder con el que trabajaremos con el parámetro -e. El shellcode generado es un poco diferente ahora, además de ser un poco más grande, esta vez serian 94 bytes.

  1. Dependiendo del objetivo, es posible que ciertos caracteres no puedan existir en el Payload. El byte nulo (\ x00), excepto en casos raros, casi siempre causa problemas cuando está presente en un Payload. Para generar shellcode mientras se elimina un carácter específico, usaremos el parámetro -b.

También podemos omitir varios caracteres a la vez.

En cierto punto, sin embargo, esta característica tiene sus límites. Si no se permiten demasiados caracteres, es posible que no se permita generar el Payload, lo que da como resultado el siguiente error.

[-] Payload generation failed: No encoders encoded the buffer successfully.

  1. Otra técnica útil para evitar el antivirus es codificar el Payload con múltiples pases. Básicamente, lo que hace es coger el código de shell generado y lo ejecuta nuevamente a través del encoder con tantos pases como se hayan definido. Utilizamos el parámetro -i para especificar el número de iteraciones para codificar el Payload.

  1. Debemos tener en cuenta que podemos combinar múltiples opciones al generar el Shellcode y de esta forma mejorar nuestras posibilidades de evadir la detección de un antivirus. Si observamos atentamente, el puerto de escucha predeterminado para nuestra bind shell está establecido en 4444. Podemos modificarlo, al igual que cualquier otra opción, sólo debemos utilizar el parámetro -o seguido de la variable y el valor a establecer. Cambiemos, por ejemplo, el puerto de escucha a 1234.

  1. Otra característica muy útil, es la capacidad de codificar el Payload en diferentes formatos de salida. Se puede ver una lista de los formatos disponibles en las opciones de ayuda, como vimos anteriormente, con el comando generate -h. Para generar Shellcode en formato Java, por ejemplo, podemos utilizar el parámetro -f. Podemos ver que la salida es un poco diferente a los ejemplos anteriores.

  1. Finalmente, tenemos la opción de guardar nuestro Payload generado en un archivo, en lugar de mostrarlo directamente en pantalla. Utilizarimos el indicador -f seguido de la ruta del archivo. En este ejemplo, el archivo titulado «Payload» se guarda directamente en el directorio principal.

¿Realmente estás técnicas son útiles para evitar a un antivirus?

Virus Total es una herramienta en línea utilizada para examinar archivos sospechosos y de esta forma determinar si son maliciosos o no. Combina muchos productos antivirus y prueba archivos cargados para firmas conocidas en la base de datos. Podemos ver que nuestro Payload no es detectado por ninguno de los motores de Virus Total.

Debemos tener en cuenta, que al cargar un archivo en Virus Total lo agregará a la base de datos, así que no debemos cargar nada que no deseemos que sea detectado en el futuro.