lunes, octubre 22, 2018

Evadiendo el AV/IDS con Powershell: Fun with Flags! (wrong!) Fun with Meterpreter!

He podido disfrutar de unas pequeñas vacaciones y mientras uno tiene horas de avión puede aprovechar para pensar en cosas. En ocasiones las cosas en las que se piensan son la parte de hobby de la que para muchos de nosotros es también nuestro trabajo. En esas horas de avión pensé en varias cosas, quizá algunas las veáis en un tiempo, pero también hay oportunidad de leer. A mí me gusta leer cosas sobre mis pasiones tecnológicas como son el Ethical Hacking, Powershell, Metasploit, Payloads avanzados, evasión, y un largo etcétera de conceptos y técnicas que son de mi interés.

Figura 1: Evadiendo el AV/IDS con Powershell: Fun with Flags! (wrong!) Fun with Meterpreter!

De lo que hoy voy a hablar no es una técnica nueva, ni mucho menos, ya que la podemos encontrar hace dos años, pero este tipo de técnicas o "tricks" que van saliendo son la forma de evasión de los elementos de seguridad. En algunas ocasiones, la gente piensa que la evasión es perpetua y se debe entender que es la caza del gato y el ratón, tal y como ocurre con el malware y los antivirus o los exploits y las soluciones de protección ante ejecución de código. En este artículo se habla de esta técnica, la cual es bastante interesante para entender el juego del gato y del ratón en este ámbito.

Figura 2: AV/IDS Evasion with Powershell

Lo normal, es encontrar una gran cantidad de información sobre evasión de antivirus para la parte del stager, por ejemplo, técnicas de codificación, cifrado o, incluso, realizando la compilación de una versión propia del ejecutable que contiene la shellcode. Esto es relativamente sencillo hoy en día con Python, Ruby, generar macros VBA o, incluso, crear un pequeño código en Powershell.

De lo que uno encuentra menos son artículos o posts centrados en la evasión de soluciones de seguridad como un IDS o un IPS. Si analizamos dónde ocurre la acción hay que entender que el proceso del stager ocurre en memoria y el stager es inyectado en ella. Es decir, todo ocurre en la memoria, por lo que los antivirussufren’ más para poder hacer algo. La DLL que se inyecta no tocará el disco. Sobre técnicas de evasión escribimos Borja Merino y yo en el libro de Hacking con Metasploit de 0xWord.

¿Qué ocurre en un entorno corporativo?

Aquí tenemos más soluciones de seguridad. Podemos encontrar un IDS, un IPS, un Proxy Web que analice el tráfico, etcétera. Aquí la evasión puede ser más costosa. Esta es una lista de elementos de seguridad que hay que tener en cuenta en un entorno corporativo:
• Proxy web con interceptación SSL (Bridging HTTP-s)
• IPS (Intrusion Prevention System)
• IDS (Intrusion Detection System)
• Antivirus en hosts (Servers & endpoints)
Al menos, esto sería algo normal, básico en un entorno. Los canales TLS/SSL no valdrían según el esquema anterior, porque se tiene la capacidad de ver el contenido de la comunicación. El antivirus en los hosts e, incluso, en el Proxy permitiría analizar parte o totalidad del tráfico. Los IDS/IPS con firmas conocidas o asociadas al Meterpreter.

Figura 3: Esquema de seguridad en entorno corporativo

Entonces tenemos un objetivo claro, evadir esto. Lo cual puede no ser sencillo y debemos entender que es un problema temporal, puede haber técnicas de evasión que funcionen bien en un momento determinado o contra unas soluciones determinadas. Pero es temporal, ya que es el juego del gato y el ratón. En un momento determinado hay una técnica que permite evadir diferentes mecanismos, pero cuando se conoce, los proveedores pondrán mitigación para solventar este hecho. Así de forma iterativa.

El objetivo y el desafío

El objetivo está claro, como he dicho, es evadir estos mecanismos para lograr la comunicación y ejecución del stager. El desafío podemos verlo en diferentes puntos. El stager utilizará el Proxy en caso de que haya un Proxy en la organización. Para ello, debe poder detectarlo y utilizar el que esté configurado en la máquina. El stager debe ser ofuscado de tal forma que evite al AV, al IDS y la detección del Proxy.

Metasploit proporciona una serie de payloads que son compatibles con lo que se necesita. Ofrece varias. Una que se puede utilizar en estos escenarios es meterpreter/reverse_winhttp. Este Meterpreter permite utilizar el Proxy del sistema, utilizar las credenciales del Proxy y poder ofuscar el código con stage_encoder.

Figura 4: Libro de Metasploit para Pentesters 4ª Edición & Hacking con Metasploit en 0xWord

Antes de continuar, una aclaración con Meterpreter. Hay que recordar que Meterpreter es un payload de Metasploit, el cual es ejecutado en una máquina a través de un stager de tamaño pequeño. Éste se ejecuta en el equipo y se establece una comunicación con la máquina del atacante para descargar un stage payload, el cual será una DLL que es cargada en memoria y ejecutada a través de la técnica Reflective DLL.

Una de las vías que abre el mundo de la evasión es el siguiente: se trata de identificar payloads de Metepreter que disponen de la posibilidad de detectar servidores Proxy, utilizar credenciales de estos y disponer de la posibilidad de ‘encoder’. Anteriormente comenté reverse_winhttp, por lo que se puede hacer uno propio tomando como base éste u otros tipos que permitan las características anteriores. Quizá sea lo más inteligente, pero también lo más complejo.

Una idea "tonta"

El investigador Arno, propuso una técnica sencilla en el artículo de la Figura 2 y que vale para algunas configuraciones corporativas. Es una técnica que él mismo calificó de ‘tonta’, pero lo importante es ver que hay que probar diferentes ideas y ver cuáles pueden funcionar y cuáles no. Como se puede ver en ese artículo, lo importante es que los pequeños tricks que van saliendo día a día pueden ayudarte en tu Ethical Hacking.

Figura 5: Script con SecureRandom

Lo que hizo el investigador fue añadir un número aleatorio de bytes al comienzo del stage que es enviada de vuelta. Metiendo 64 KB al principio del stage conseguía engañar al antivirus, aunque esto siempre es un proceso prueba y error. Para hacer esto modificó el fichero meterpreter_loader.rb. Hay que tener en cuenta que hay que añadir una librería nativa de Ruby, la cual puede instalarse con ‘gem install rubysl-securerandom’.

Figura 6: Script con el código en PowerShell

Además, se modifica el código añadiendo, justo antes de meter la DLL, la variable randomData. Ahí se generan los 64KB aleatorios y luego se concatena el código de la DLL. Se publicó un ejemplo de script en Powershell para simplificar el proceso. Este script genera dos hilos. A continuación, se explica qué es lo que hace:
1. El hilo 1 inicia un Proxy HTTP que escucha en la interfaz de loopback en el puerto 8080. 
2. El hilo 2 carga y ejecuta en memoria un Meterpreter reverse_winhttp configurado para conectarse al Local Proxy. Es decir, la configuración es LHOST apuntando a 127.0.0.1 y LPORT apuntando al 8080. 
3. El Local Proxy del hilo 1, está configurado para conectarse al C&C, utilizando la configuración determinada del servicio Proxy y, si fuera necesario, utilizar autenticación NTLM. 
4. Cuando se ejecuta el stager de Meterpreter en el hilo 2, lo primero que se solicita es la DLL. 
5. Dicha solicitud pasará por el Local Proxy, el del hilo 1, el cual se encarga de transmitir la solicitud al C2, a través del proxy corporativo. Además, se encarga de eliminar los 64 KB de datos aleatorios. 
6. Desde este punto, toda comunicación entre el Meterpreter y el C2 pasa por el proxy local sin modificar.
A continuación, se puede ver el código dónde se invocan los dos hilos comentados anteriormente en el código.

Figura 7: Lanzamiento de ambos hilos en el código de Powershell

De nuevo comento que la técnica no es nueva y que es un trick válido para algunos escenarios corporativos. Lo importante es entender que este tipo de técnicas van saliendo y se van descubriendo, en muchos casos, con prueba y error el hecho de evadir un IDS o un IPS o algunas de las complejas soluciones de seguridad que existen en ciertas entidades. Puedes encontrar más cosas de evasión en el libro de Hacking con Metasploit.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.

1 comentario:

Alberto Salvia Novella dijo...

No es Linux, por tanto inútil para un hacked 😛

Entrada destacada

Seis recomendaciones personales de libros de @0xWord para disfrutar y aprender

Este verano pude disfrutar de la lectura de un libro que me encantó. El libro de Factfulness que me había regalado mi compañera Beatriz Ce...

Entradas populares