Cómo analizar malware en .NET que se encuentra ofuscado

Hace unas dos semanas recibimos en nuestro Laboratorio de Investigación la muestra de una amenaza que llegaba a las víctimas como un falso correo de un sitio de compras en línea latinoamericano. Si bien este malware en .NET cuenta con una capa de protección, vamos a sortearla para analizar ciertas características interesantes.

El archivo que se propaga por correos de spam es de extensión .rar, comprimido. Al extraerlo se obtiene un ejecutable codeado en C# para la plataforma de .NET Framework. Dado que el código en .NET es compilado a un lenguaje intermedio, no a instrucciones de máquina dependientes de la arquitectura, es posible recuperar el código en un lenguaje de alto nivel mediante el uso de algún decompilador, como dnSpy.

Sin embargo, nos encontramos con una barrera: el código está ofuscado con SmartAssembly o alguno similar.

codigo C# ofuscado

Como se observa en la imagen, si bien está disponible el código en C#, no puede determinarse qué es lo que realiza, ya que los nombres de las clases, métodos y atributos se encuentran ofuscados; las strings están cifradas y se van cargando de manera dinámica de los resources. A partir de este punto puede debuggearse la aplicación (lo cual resultará tedioso y largo) o utilizarse algún unpacker como de4dot. En este caso, para desofuscar el código recurrí a algunos sistemas propios del Laboratorio de Investigación de ESET Latinoamérica.

Una vez que tenemos el código legible, podemos mencionar algunos puntos interesantes.

Anti-debugging

La aplicación incluye una clase de nombre Anti, con métodos para detectar la ejecución de Fiddler, Sandboxie, Wireshark y WPE Pro.

codigo anti

RunPE

Ya hemos hablado antes de esta técnica para inyectar código en procesos en memoria. Ahora podemos observar el código y poner un breakpoint antes de la llamada a ResumeThread, para hacer un dump del binario inyectado. El tamaño del ejecutable lo podemos calcular a partir del encabezado PE del ejecutable.

runpe

Creación de una tarea automatizada

Para garantizar la permanencia en el sistema afectado, el malware crea una tarea de Windows para la ejecución ininterrumpida. Adicionalmente, desactiva características del sistema operativo, como el control de cuentas de usuario o el acceso al intérprete de comandos o programador de tareas.

servicio malicioso

¿Qué información roba?

Si analizamos el comportamiento dinámico de la amenaza, veremos cómo un keylogger registra todo lo que ingresamos por teclado en un log. Además, se va dejando un registro de todas las aplicaciones que el usuario infectado ejecuta en el sistema.

log de eventos

Vemos el nombre de la aplicación, el texto de la ventana de cada aplicación, y debajo lo que se va ingresando por teclado. Se observa, entonces, que escribí un texto falso en notepad++, que luego abrí cmd.exe y ejecuté el comando dir, y que luego puse algunos filtros en Wireshark (previamente le había cambiado el nombre de Wireshark.exe a Tiburon.exe, para evitar el anti-debugging).

confuserex

Cabe destacar que el código inyectado mediante la técnica de RunPE también es un ejecutable de .NET Framework, aunque se encuentra ofuscado con ConfuserEx, como se observa en la imagen anterior.

Muestras analizadas

irregularidades.exe – d2c1455fe2dcf3a8957b64f5c2047ee1cc4bccc2

Créditos imagen: ©cskk/Flickr

Autor , ESET

Síguenos