miércoles, abril 13, 2016

Veil-Evasion, The Shellter & PayDay para ofuscar binarios

El año pasado coincidí con Pedro Sánchez en Gsick Minds, congreso que se celebra en A Coruña hacia finales de año. Siempre es un placer para mí coincidir con este señor de la profesión que tanto nos apasiona. Siempre aprendo con Pedro, él tiene esa facilidad. Su charla me llamó la atención, hizo que algo que para muchos pueda ser complejo, resultara sencillo. Ahí está el gran mérito de Pedro en esa charla. Me gustó como utilizó herramientas que facilitaban mucho la vida a la hora de evadir, sobretodo, las firmas de los antivirus. La idea es la de conseguir que un binario, manteniendo su funcionalidad, deje de ser reconocido por los motores de antimalware. De esto ya habló Chema Alonso por aquí en el año 2007, haciendo modificaciones manualmente, en el artículo "El morphing de Superman".

Figura 1: Ofuscación de binarios

Tras ver la charla de Pedro me dije que tenía que mirar más dichas herramientas y hacer mis propios “juguetes”, pero por desgracia en aquel momento el trabajo apretaba y el fin de año estaba cerca. Ahora ha pasado el tiempo y he podido ir probando diferentes herramientas, quizá las más famosas Veil-Framework, que tiene un módulo en Powershell para hacer Pentesting denominado PowerView, y Shellter, que es una de las más potentes a la hora de rebajar el ratio de detección de los antivirus. Como curiosidad hay que decir que Shellter tiene el código fuente cerrado, aunque como dice el autor en su sitio web puede ser comprado.

En el artículo de hoy veremos una serie de comparativa básica respecto a los resultados que podemos sacar con estas herramientas automáticas de generación de binarios con payloads. El objetivo es sencillo: cuanto menor ratio de detección, más sencillo será poder evadir mecanismos de protección. Las herramientas que trataremos serán:
• Veil-Evasion de Veil-Framework.
• Shellter.
• PayDay.
Quizá la menos conocida sea PayDay, que es una script en Python que nos facilita la interacción con Metasploit y con Veil-Framework para la generación de los binarios. Como se puede ver, siempre hay una nueva capa de abstracción que simplifica, aún más, el proceso.

Un pequeño test con Virus Total

En esta pequeña prueba Generaremos diferentes binarios y los subiremos a Virus Total, con el objetivo de poder comparar en qué casos tendríamos más éxitos. Está claro que si profundizásemos con Veil-Evasion y Shellter podríamos obtener unos binarios aún mejores, en lo que a evasión se refiere, aunque puede que el resultado fuera el mismo en algunos casos. Es decir, puede que generemos diferentes binarios y ambos nos dieran el mismo ratio de detección, aunque uno es, a posteriori, más fácilmente detectable.

Figura 2: Handler de Metasploit

Para estos pequeños ejemplos utilizaremos el handler de Metasploit para recibir las conexiones de los binarios maliciosos creados. Os dejo simplemente su configuración en Metasploit, ya que las ejecuciones como tal no las veremos.

Figura 3: Tips & Tricks en la web de Shellter

En el sitio web de Shellter podemos encontrar un listado de tricks y tips que os recomiendo que echéis un ojo. Es un listado que el autor de la herramienta ha ido recopilando de su experiencia y de los emails que ha ido recibiendo de los usuarios de la herramienta.

Veil-Evasion

La primera de las versiones que veremos será Veil-Evasion, una herramienta diseñada para generar payloads de Metasploit con los que bypassear soluciones antivirus comunes. Veil-Evaison proporciona diferentes payloads con diferente ranking, el cual indica la eficiencia o el éxito que se presupone con cada uno de estos payloads. Por supuesto, se pueden añadir características a Veil-Evasion, lo que ha conseguido que sea un framework que está creciendo bastante.

Figura 4: 50 payloads en esta versión de Veil-Evasion

Desde Github se puede descargar, aunque sus dependencias son muchas. El proceso de instalación puede ser largo, pero claramente merece la pena. Tal y como se puede ver en la imagen superior Veil-Evasion proporciona una serie de comandos. En la versión utilizada para el ejemplo se han cargado 50 payloads. Con el comando “list” podemos listarlos y obtener algo más de información. El listado se proporciona por categorías, podemos ver payloads generados para C, C#, Go, Powershell, Python, Ruby, etcétera.

Figura 5: Selección de meterpreter en Python en Veil-Evasion

Para esta prueba, como se ve en la imagen anterior, se elige un meterpreter en Python con conexión inversa sobre TCP. Una vez queremos generar el EXE utilizamos el comando generate, entonces nos preguntará por la ruta en la que se quiere guardar y con qué motor crear el ejecutable. En el caso de Python puede ser Pyinstaller, Pwnstaller o Py2Exe, donde Pwnstaller es Pyinstaller ofuscado.

Figura 6: Configuración final

El mensaje de no enviar ejemplos a los escáneres online nos lo dice todo. Yo haré como Pedro en su charla y solo para esta pequeña prueba lo haré ;). Los resultados son muy interesantes, no hemos utilizado funcionalidades o técnicas complejas. Todo ha sido “siguiente… siguiente… siguiente…”. El potencial de Veil radica en las diferentes plataformas para crear payloads y cómo Python, Ruby o Powershell ayudan a que los códigos pasen mucho más desapercibido.

Figura 7: Evaluación del binario por los motores AV de Virus Total

El resultado es que 12 motores de antivirus nos han detectado el binario, teniendo en cuenta que hemos utilizado un camino básico y un payload “clásico”. El resultado es 12 de 56, lo cual podría ser aceptable en muchas circunstancias.

Shellter

Como comenté anteriormente, la herramienta tiene muchas opciones y solo nos centraremos en una ejecución sencilla y básica. Lo primero que nos preguntará la herramienta al ser ejecutada es si queremos un modo de operación automático o manual. Lo hacemos lo más sencillo posible, que cualquiera con los mínimos conocimientos pudiera hacerlo, como dijo en la charla de Gsick Minds Pedro Sánchez.

Figura 8: Ejecución de Shellter con configuraciones por defecto

Shellter nos preguntará si queremos activar el modo sigiloso y le decimos que sí. En este instante deberemos elegir entre los payloads disponibles para que se inyecten en el binario. Si nos fijamos tenemos diferentes tipos de Meterpreter, la típica shell inversa TCP y la shell bindeada TCP. Además, un payload inline como es WinExec. Lo que nos preguntará Shellter es si queremos utilizar el listado que nos proporciona o queremos utilizar un listado personalizado, mediante importación de shellcodes. En este caso elegimos la opción básica y el payload de Meterpreter inverso TCP.

Figura 9: Configuración de payloads con Shellter

La primera etapa pesa unos pocos bytes como se puede ver en la lectura de Shellter. El payload es encodeado automáticamente, y posteriormente nos muestra más información sobre los métodos de la API a utilizar, sobre la ofuscación o el código polimórfico denominado basura. Justo después de esto, se configura la segunda etapa, y es que Meterpreter no es un payload de tipo inline. En la segunda etapa se pasan por fases similares. La salida por pantalla de Shellter es interminable, pero nos proporciona mucha información. Hay que recordar que esto es todo con valores por defecto.

Figura 10: Información del binario generado por Shellter

El binario que hemos utilizado, el cual se pide al principio es el de Putty. El famoso cliente para conexiones SSH, telnet, puerto serie, etcétera. Shellter hace un backup del binario e inyecta, en este caso, un Meterpreter dentro del fichero, tal y como vimos.

Figura 11: Ningún Antivirus detecta el nuevo binario

Los resultados con las opciones por defecto de Shellter cuando se lo pasamos a Virus Total son muy sorprendentes. Ningún motor antivirus ha detectado el binario como malicioso, obteniendo un 0 de 55.

PayDay

PayDay es un script escrito en Python cuyo objetivo es crear un binario con un Meterpreter inverso TCP inyectado. El script de PayDay se puede encontrar en Github. La sintaxis es sencilla y para generar un binario que utilice Metasploit (msfvenom) y Veil-Evasion simplemente hay que ejecutar: python payday.py –veil –msf –ip [dirección IP atacante].

Figura 12: Ejecución de PayDay

Los resultados obtenidos para el binario creado con PayDay pueden sorprender, ya que el uso del script es realmente sencillo. 39 motores AV han detectado el binario como malicioso de 56 que analizaron el fichero. Los resultados no fueron buenos.

Figura 13: 39 de 56 AV detectan la ofuscación del binario

Tras la comparativa se puede observar que hay herramientas que facilitan la evasión de AV y que con opciones básicas o por defecto se consiguen resultados muy potentes. Shellter es sin duda el que más sorpresas causa, por su sencillez y el poderío de los resultados que ha conseguido. ¿Cuál es tu favorito? ¿Qué otras herramientas utilizas para hacer estas tareas?

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking" y “Pentesting con Powershell

5 comentarios:

  1. Shellter is the best of course!

    ResponderEliminar
  2. :I

    hasta el dia de hoy la grandiosa heuristica sigue sin ser capaz de pillar el viejo y conocido prepending, o el appending, o un simple xor , dejar el codigo ejecutable en la secciones .data XDDD. los antivirus son como las farmacias, venden pomada para las arrugas.

    ResponderEliminar
  3. por cierto, este blog esta muy bueno. saludos.

    ResponderEliminar
  4. Preferiria no usar virustotal ya que vende las muestras, a empresas de antivirus.
    Para eso usaria NoDistribute https://nodistribute.com ;)

    ResponderEliminar
  5. Slowloris 411: Tienes toda la razón. Megadeth, Megadeth, aguante Megadeth.

    ResponderEliminar