‘Reversing’ de protocolos de red de malware con ‘angr’

Uno de los objetivos que en el análisis de un binario malicioso suele ser más difícil de obtener es el del descubrimiento de todas las funcionalidades que posee. Si además estas funcionalidades sólo se ejecutan a discreción de los atacantes a través de su centro de control, la cosa se complica. Por diversas razones, muchas veces no podemos llevar a cabo un análisis dinámico completo, como por ejemplo por la caída de la infraestructura del malware o el aislamiento de la muestra para evitar el contacto con el C&C. En estos casos suele ser más lento el análisis de la interacción entre el servidor del atacante y la muestra, ya que hay que crear un servidor ficticio o estar continuamente parcheando/engañando a la muestra para llevarla por todos los distintos caminos que queremos investigar. Dependiendo del tamaño y complejidad del código analizado o del objetivo del análisis, esta tarea puede variar su dificultad y extensión en el tiempo.

Voy a proponer un ejemplo de estudio de las funcionalidades de un RAT ficticio que pueden ser ejecutadas según las órdenes que reciba desde su panel de C&C. Nuestro objetivo sería crear un servidor que simule ser el del atacante. Para ello hemos de comprender el protocolo de comunicación entre el servidor y la muestra instalada en el dispositivo de la víctima.

En lugar de analizar todo el funcionamiento interno de la muestra utilizando las típicas herramientas de desensamblado y depuración, voy a delegar la responsabilidad de parte del análisis en una nueva herramienta que llevaba tiempo queriendo probar: ‘angr’. ‘angr’ es un entorno de trabajo para el análisis de binarios que hace uso tanto de análisis estático como dinámico simbólico del código. Este herramienta puede ser utilizada con distintos fines que se enumeran en su sitio web en el que además se muestran infinidad de ejemplos. Para esta entrada nos vamos a centrar en la ejecución simbólica, que puede definirse como el análisis de un programa para determinar qué condiciones de entrada han de darse para ejecutar diferentes partes de su código.
[Read more…]

Hooking de funciones VBScript con Frida

El trabajo de análisis requiere de una lucha continua contra código desconocido, ofuscado y cifrado. Recientemente me encontraba peleándome con un VBScript que, cómo no, se encontraba ofuscado (al menos dos capas de protección). Tras superar la primera protección y empezar con la segunda, comprobé que el método de descifrado en este punto no era trivial. Esto se sumaba a una aversión, por cuestiones meramente personales, por este lenguaje. Un análisis dinámico me podía dar la secuencia de comandos que finalmente se ejecutaban, pero perdía entonces visibilidad de todo cuanto había ocurrido por mitad. Y… ¿quién sabe? A lo mejor hay alguna técnica antianálisis por mitad que modifica el comportamiento del script para contactar contra otra infraestructura diferente. Siempre con el modo paranoico encendido.

Decidí que iba a atajar el asunto de raíz. Tanto el primer script como el segundo descifrado, después de desprotegerse, hacían uso de la función ‘Execute’ de VBScript para dar vida a su código antes protegido. Internamente, el proceso que ejecuta el script (‘wscript.exe’ en este caso), tendría que manejar el buffer descifrado y pasarlo a otra función que se encargue de ejecutarlo. Pero… ¿Dónde se encontraba susodicha función?

Con fines didácticos, en lugar de analizar la aplicación usando el modo rápido, voy a suponer que desconocemos la estructura del propio ‘wscript.exe’ y de las funciones de las librerías que carga. En primer lugar, ¿Qué hace el script y qué espero ver al analizar ‘wscript.exe’?

Ilustración 1: Script inicial cifrado

Ilustración 1: Script inicial cifrado

[Read more…]

Aunque la mona se vista de seda… ¿Mona se queda?

Solemos asociar que el llevar a cabo ataques contra entidades que consideramos seguras sólo puede ser realizado por atacantes altamente especializados y con profundos conocimientos sobre la temática. Aunque suele ser la norma, esto no siempre es así, y para ejemplo, la noticia que saltaba este verano de dos chicos que, movidos por el famoso juego ‘Pokemon Go’, llegaron a introducirse en una zona de seguridad de un cuartel de la Guardia Civil de Las rozas en Madrid. Muchas veces no son necesarios unos amplios conocimientos técnicos, sino más bien dar en el clavo con ciertas técnicas o ideas medianamente diferentes que se nos ocurran.

En esta entrada vamos a comprobar cómo se comportan diferentes motores “antivirus” (AV) ante amenazas ya conocidas por ellos mismos pero que se encuentran empaquetadas por un software que creen conocer. No se busca hacer una comparativa de antivirus, sino analizar cómo se comportan y concienciar sobre la fe ciega que muchas veces se pone en ellos.

Para la creación del packer, en lugar de construir uno propio desde 0, lo que nos daría bastante ventaja pero complicaría su creación, se ha utilizado uno de los más famosos no por su poder de ocultación, sino por lo extendido de su uso y porque su código es libre, UPX. Los motores antivirus deberían ser capaces casi de ver ‘a través’ del empaquetamiento. Para las pruebas y modificaciones que presentamos se ha utilizado versión 3.91 de UPX.
[Read more…]