Hace algún tiempo escribimos sobre cómo entender códigos maliciosos escritos en AutoIt, ahora veamos como otro código malicioso escrito en este mismo lenguaje utiliza un método diferente para ofuscar su código y como podemos llegar a entender las acciones maliciosas que realiza.
En este caso queremos analizar una muestra que nos reportaron a nuestro laboratorio y que se encontraba alojada en un servidor de una empresa chilena. Lo primero que es importante resaltar antes de analizar la muestra es el hecho de que por las fechas de los archivos en el servidor, no se han tocado desde por lo menos hace tres años. De hecho el único archivo con una fecha de modificación reciente es el código malicioso.
La ventaja de análisis de los códigos maliciosos escritos en AutoIt es que es sencillo decompilar el archivo y llegar hasta el código fuente para entender de qué se trata la amenaza. Lo que hemos encontrado es que una vez que logramos decompilar el ejecutable todas las funciones están ofuscadas, y es en este caso donde debemos entrar a analizar como se comporta la amenaza.
Analizando la función para ofuscar el código malicioso
Lo primero que hay que identificar es la función utilizada para ofuscar el código malicioso. Simplemente encontrando cual es la función que más se repite y que siempre utilice una estructura similar podremos llegar a hallarla. En la siguiente captura de pantalla de una porción del código malicioso ofuscado nos encontramos en cuatro líneas de código una función que es utilizada más de treinta veces.
Esta función siempre tiene la misma estructura, en la cual se pasan tres argumentos de los cuales los dos primeros son siempre los mismos. Buscando esta función y puntualmente la porción de código que corresponde a la utilizada para desofuscar todas la líneas del archivo decompilado nos encontramos con el siguiente código.
Las variables parametro1 y parametro2 corresponden a los dos primeros argumentos de entrada de la función, que son de hecho los mismos a lo largo de todo el código malicioso. Luego de esto va tomando de a 3 caracteres de la cadena ofuscada y con esto aplica la función XOR utilizando la variable parametro2. De esta forma va concatenando los resultados para obtener el código desofuscado y que pueda ser ejecutado por la máquina de la víctima.
Inyección de las dll
Si bien en el momento que recibimos la muestra el servidor al cual se conectaba la muestra estaba fuera de línea, del análisis del código se puede detectar las acciones maliciosas que realiza esta muestra. Puntualmente, este código malicioso primero crea una estrctura que luego va a inyectar en una de dos archivos dll: user32.dll y kernel32.dll.
Luego de desofuscar las cadenas relacionadas con la función DllCall que es la que dinámicamente llama al archivo DLL, nos encontramos con algunas funciones que nos da idea del comportamiento malicioso: crear y terminar procesos, escribir procesos en memoria y obtener información sobre thread de ejecución. Incluso algunos de ellos utilizados en arquitecturas de 64bits. En un próximo post haremos un análisis más detallado de este comportamiento.
Es importante recordar los administradores web la importancia de hacer una adecuada gestión sobre los recursos utilizados por los servicios que están públicos. Como vemos en este caso, un servidor que no sea gestionado regularmente puede afectado por atacantes con el objetivo de alojar códigos maliciosos.
La muestra analizada (md5: 5dfaaf080b4182f712b673d749ce3f91) es una variante de la familia Win32/Packed.Autoit.