Ofuscación de malware en macros de MS Office

Ofuscación de malware en macros de MS Office (II)

La “última” moda en la distribución de malware viene en forma de documentos de MS Office con macros que llegan a tu bandeja de entrada. Si estas macros se llegan a ejecutar, intentaran descargar un ejecutable y lanzarlo para infectar el sistema. Para dificultar el trabajo de los analistas, los autores de estas macros ponen distintos obstáculos. En este post voy a continuar donde lo dejé en mi anterior post. Veamos qué métodos de ofuscación utilizan los escritores de Malware para dificultar el trabajo de los analistas.

Ofuscación

El primer tipo de ofuscación es el más sencillo. Se utilizan cadenas de caracteres normales intercaladas con caracteres representados en su codificación decimal. A continuación un ejemplo:

Estás concatenaciones de ChrS quedan como se muestra a continuación al pasar las cadenas a su interpretación en ASCII:

Como podéis ver, las cadenas siguen sin ser especialmente legibles, pero si se analiza el script, o si se ha visto antes qué pinta tiene una cadena codificada en base64, se puede llegar a la conclusión de que la función ggSFhCPeLdOSshe lo único que hace es descodificar las cadenas en base64. Limpiando todo el código quedaría así:

En esta misma línea de ofuscación utilizando distintas codificaciones, algunas muestras utilizan la representación hexadecimal. Un ejemplo a continuación:

Si lo pasamos de hexadecimal a ASCII la cadenas quedarían así:

Estas cadenas. En principio, tampoco tienen mucho sentido, pero si analizamos la función XORI, encontramos el primero de los cifrados que vamos a analizar.

Cifrado

XOR
En el trozo de código anterior, la función XORI realiza un cifrado XOR sobre la primera cadena y utilizando la segunda cadena como clave. Este es un cifrado muy simple, una de las implementaciones que se pueden encontrar en la siguiente:

Este código que puede parecer complicado, se puede entender más fácil si lo traducimos a python:

Este código es el mismo código que publiqué hace unos meses en mi blog personal, pero un poco más limpio.
Básicamente se está “xoreando” la cadena en la variable a usando como clave la variable b.
Cifrado de Cesar
El cifrado de César es un cifrado de sustitución en el que cada letra se sustituye por la letra que se encuentra X posiciones después de esta, donde X es la clave de cifrado. Por ejemplo para un cifrado de César con clave 5, la tabla de sustitución sería la siguiente:

Screen Shot 2015-04-19 at 9.00.01 PM

En el ejemplo que aparece a continuación, podemos ver un ejemplo de ROT13, o lo que es lo mismo, un cifrado de César con clave 13.

Esta función recorre la cadena que recibe carácter a carácter y le resta 13. Es decir, se trata de un cifrado de Cesar de clave 13, desplazaría 13 posiciones hacia el inicio para descifrar, pero en lugar del abecedario, utiliza la tabla ASCII.

La cadena presente en la muestra analizada quedaría descifrada de la siguiente manera:

Conclusión

Los escritores de malware se las ingenian para hacernos la vida más difícil cada vez a los analistas. Estas protecciones que utilizan están en constante evolución, de forma que herramientas como oledump.py deben actualizarse constantemente a la misma velocidad que el malware evoluciona.
Hay muchos más trucos que se están utilizando para ofuscar estas macros (renombrar funciones, dividir la funcionalidad en distintas macros, etc.) y por eso mismo os invito a coger alguno de estos documentos y analizarlo para que veáis hasta donde llegan realmente los autores de estas macros para ofuscar el comportamiento malicioso.

Ernesto Corral

Ernesto Corral

Profesional de la seguridad de perfil técnico. Principalmente interesado en respuesta ante incidentes, malware e ingeniería inversa.
Me encanta participar en CTFs y últimamente estoy cacharreando con temas de hardware.

Ver descripción | Ver perfil en LinkedIn
Ernesto Corral