Veil – Evasión de Antivirus

Hace un tiempo, por necesidades en el trabajo buscaba algo que me permitiera encapsular un payload de Metasploit y que éste no fuese detectado por los antivirus. En otras ocasiones he usado los “requetecifrados” con las múltiples opciones que permiten las herramientas msfpayload y msfencode. Otras veces me ha valido con las diversas herramientas que facilita SET (Social Engineering Toolkit) de Metasploit. Sin embargo, tras realizar varias pruebas, un antivirus actualizado detectaba el troyanete que iba dentro y saltaba enseguida. Quizás no elegía correctamente las opciones…

Así que buscando por Internet herramientas de evasión de antivirus enseguida me topé con VEIL. Si, lo sé, hemos estado todo el verano oyendo (y huyendo) de él, pero no, no es ese Veil…
Veil es una aplicación que cumple el propósito buscado: Empaquetar un payload de Metasploit y que los Antivirus no lo detecten. Está implementada en Python y, desde hace poco, está incluida en la distribución Kali Linux. Vamos con ella:

Descarga

Veil, desarrollada por @christruncer, se puede descargar desde la web del proyecto o puede hacerse un clonado de todos los ficheros mediante git:

#git clone https://github.com/veil-evasion/Veil.git

Instalación

La instalación no es muy enrevesada pero, como siempre, tenemos que andar con ojo con las dependencias. En este caso, Veil dispone de un instalador que permite la descarga e instalación de las dependencias (Wine, Python, PyInstaller, etc) en un Siguiente, Siguiente. Para ello se debe ejecutar el fichero /ruta_elegida/Veil/setup/setup.sh y responder a lo que nos vaya preguntando (son preguntas triviales). Cuando nos proponga descargar e instalar una serie de módulos, le diremos que sí.

Uso

Una vez instalado, vamos a hacernos un troyanete sencillo. Arrancamos Veil:

#python /ruta_elegida/Veil/Veil.py

y accedemos a la pantalla principal.

Las opciones son bastante simples y están explicadas, así que no hay escusa para no probarlas. Ahora vamos con el asunto principal, así que seleccionamos use.

A continuación se muestra la lista de payloads que hubiese aparecido si hubiésemos elegido la opción list. En ella se distinguen 18 payloads diferentes, agrupados por el lenguaje empleado para programarlo (c, c#, python…) y una valoración sobre la “calidad” del payload (poor, normal o excellent).

Vamos a elegir uno de los Excellent, ¿no? Y ya que estamos en un entorno Python y es un lenguaje que nos gusta, vamos a elegir el payload python/AESVirtualAlloc (opción 10).

La siguiente pantalla nos muestra las opciones del payload, que vamos a dejar tal y como están. Luego tenemos otra lista de opciones también muy básica.

Seleccionamos la opción que nos interesa: generate.

En la siguiente pantalla dejamos la opción por defecto para elegir el shellcode que queremos: msfvenom (opción 1) que según parece es una conjunción de los ya nombrados msfpayload y msfencode y seguimos.

Ahora toca elegir el payload que queremos que se ejecute. Por defecto nos ofrece nuestro gran amigo Meterpreter, pero puede seleccionarse cualquiera de los disponibles. Presionando el tabulador, se van mostrando las diferentes opciones. No os compliquéis, el seleccionado (windows/meterpreter/reverse_tcp) funciona muy bien. Si por cualquier causa os falla al probarlo, simplemente probad suerte con otro.

Bien, ya vamos acabando. Una vez elegido el payload, nos pedirá la IP y el puerto de LHOST, el equipo que recibirá la conexión inversa con Meterpreter. Luego nos dará la opción de añadir algún parámetro opcional de msfvenom, pero lo dejaremos como está. Pulsamos de nuevo enter y comienza la generación del shellcode.

Nos da la opción de ponerle un nombre al fichero resultante. Por ahora lo dejaremos con el nombre por defecto, luego ya se lo cambiáis si queréis (nominas2013.exe es mi preferido ;)

La siguiente pantalla ya es la última. Se nos ofrece la opción de usar Pyinstaller, el cual hemos instalado antes y con el que se genera un paquete .exe con todas las dependencias; o usar Py2Exe, el cual genera los tres ficheros necesarios para luego empaquetar el ejecutable.

Como hasta ahora, no nos complicamos y que lo haga él. Seleccionamos la opción 1 y finalizamos. En este momento empiezan a salir varios mensajes por consola mientras genera el ejecutable y finalmente, muestra un resumen de todo. En este se puede ver la ruta en la que ha dejado el resultado.

Cabe destacar el mensaje que se muestra al finalizar el proceso: No lo subas a una web de scanners antivirus (tipo VirusTotal). Estas Webs suelen mandar una firma de todos los archivos que se analizan a las casas de Antivirus, así que no os autotroleéis…

Pruebas

Vamos a ser rápidos. Probaremos en un precioso Windows7 con AVG actualizado a ver qué pasa…

Para la prueba debemos poner a escuchar nuestro equipo. Una forma sencilla que ya conocéis es mediante el handler de Metasploit. No hace falta añadir ninguna opción ya que el puerto por defecto es el 4444/TCP. Tampoco necesitamos ningún payload, ya va empaquetado en el ejecutable que hemos preparado. Lo lanzamos y esperamos…

Ejecutamos nuestro regalito en el Windows 7. Simplemente crea un proceso payload13.exe que no hace nada y no aparece ningún mensaje del Antivirus.

¡Tachán! Ya tenemos nuestro Meterpreter ejecutándose y controlado desde nuestra máquina.

Lanzamos el comando shell como prueba de que estamos ejecutándolo en la máquina Windows 7.

Comments

  1. Antonio Sanchez says:

    Buenas,

    Lo primero felicitaros por el blog y por este post.

    Llevo unos dias haciendo pruebas con Veil, diferentes AVs, diferentes tecnicas a la hora de ejecutar los diferentes Payloads, etc. No me voy a enrollar mucho, pero lo que mejor resultado me ha dado son los PowerShell payloads, al ser una aplicacion legitima de Windows es muy raro que sea detectado. Si por motivos varios Power Shell no se encuentra disponible en la victima, se pueden usar los Python Payloads. Usando las opciones por defecto saltas bastantes antivirus, pero otros como Kaspersky si que los detectan. Por suerte despues de varias pruebas he conseguido saltar Kaspersky usando varios “trucos”: firmar el .exe, usr Py2Exe en vez de Pyinstaller y finalmente automigrar el proceso antes de que se envie el payload a la maquina atacante.

    Voy a seguir haciendo pruebas que comparto con los autores, muy majos ellos (IRC #veil).

    Saludos, y perdon por la falta de tildes y demas, pero estoy en teclado Ingles.

  2. Hola Antonio.
    Agradecerte enormemente tu aportación. Lo que comentas sobre usar PowerShell tiene todo el sentido y, probablemente, sea mejor opción que Python en la mayoría de sistemas. Sin embargo, en el escenario que me encontré yo, estaba explícitamente prohibido el uso de PowerShell por políticas de Active Directory. Por eso usé Python que si funcionaba.
    En cuanto a los trucos, muy buena idea todos. Los apuntamos ;)

    Un saludo y ya nos cuentas como van esas pruebas!

  3. Muy buen artículo, interesante herramienta. Aún no he tenido tiempo de probar Kali pero esto es un aliciente :)

    A nosotros nos interesan estas pruebas desde nuestra óptica de análisis de antivirus. Buen trabajo!