31 mayo 2012

Reversing malware tales: Dropper Dropped !

En esta entrega de la saga, vamos a analizar una amenaza de tipo 'Dropper', es decir, un fichero cuya misión es descargar e instalar otra pieza de malware con más funcionalidad.

La muestra me ha llegado como 'video_michel_telo.exe'. En este punto puede que algunos opinen que alguien que haya podido encontrar interesante ese supuesto vídeo bien merece lo que le pase, pero eso cae fuera del objetivo de este post.

Lo primero que vamos a hacer es abrir el fichero con OllyDbg, y nos encontramos con un warning:




Tiene pinta que el fichero está comprimido usando algún packer, le decimos que no y pasamos a ver que hay en la memoria (pulsando en el ícono M de Olly)


Como podemos observar, encontramos trazas de que el fichero ha sido comprimido con UPX por lo que, en este punto, no tenemos acceso a la forma del programa 'real' lo que impide, entre otras cosas, curiosear por las strings.

Afortunadamente, UPX es bastante sencillo de 'reversear', se puede encontrar información, por ejemplo, en este magnífico post que me ha servido como referencia.

Lo primero que vamos a hacer es abrir el programa con Olly y ver donde se detiene:



La primera instrucción ese ese PUSHAD y lo que tenemos que encontrar es la instrucción POPAD que se encuentra unas cuantas líneas mas abajo, hay que hacer scroll hasta localizar dicha línea.

Una vez localizada la línea, nos situamos ahí y pulsamos F2 para poner un breakpoint.

 

Acto seguido pulsamos F9 para que el programa se lance y llegue hasta nuestro breakpoint.

Una vez el programa se detiene en el breakpoint, si vamos pulsando F7 para que el programa avance instrucción por instrucción, llegamos a este punto

 

El objetivo es llegar a ese JMP que conduce realmente al 'entry point' del programa original, es decir, al pastel sin el envoltorio de UPX.

 

En ese punto, el programa real ya es visible y por lo tanto podemos pedir a Olly que realice el análisis completo


Después de eso, ya tenemos acceso, entre otras cosas, a todas las strings que contiene el programa (y que antes, al estar bajo UPX no teníamos acceso)

Así que hacemos un search de las strings del programa

 


Y ¡Sorpresa! encontramos material interesante




Como se puede observar, entre las strings del programa encontramos la URL de donde va a descargar la otra pieza de malware, el directorio que va a crear y el nombre del ejecutable.

Ahora vamos a buscar esa información usando otra aproximación al problema. Vamos a obviar que tenemos acceso a la información de las strings y vamos a intentar descubrir la misma información empleando otra técnica.

Primero le pedimos a Olly que nos enseñe las llamadas a las APIs que realiza el programa



De entre todas las llamadas hay dos bastante sospechosas, URLDownloadToFile() y ShellExecute() Si acudimos a MSDN, nos encontramos que la primera: 'Downloads bits from the Internet and saves them to a file' Muy interesante.

Y la segunda: 'Performs an operation on a specified file' no es muy descriptiva pero sirve para ejecutar un programa.

Tiene toda la pinta que va a descargar ese otro fichero y ejecutarlo. Vamos a poner dos breakpoints en esas funciones para verlo justo cuando suceda.



Ahora simplemente tenemos que ejecutar el programa pulsando F9 para que llegue a los breakpoints. Evidentemente este tipo de ejecuciones hay que hacerlas de forma controlada. La idea es tener el entorno seguro bajo control. En el próximo post explicaré como crear un entorno de análisis adecuado.

Al pulsar F9, el programa, como es lógico, se para en el breakpoint de URLDownloadToFile y si miramos en el stack, nos encontramos:


La URL que va a descargar y el lugar donde lo va a depositar.

Ahora, volvemos a pulsar F9 y por lógica, deberíamos llegar a la parte en la que trata de ejecutar dicho fichero.


Como podemos ver en el stack, ahí está la ejecución del fichero que se ha descargado.

Y esto es todo por hoy, no puedo olvidarme de dar las gracias al GDT por su colaboración

Seguiremos con la saga, DM

7 comments :

Madrikeka dijo...

Me encantan este tipo de post que estáis poniendo últimamente, me recuerdan a la epoca que estuve currando en un antivirus eliminando malware, y gracias a esto, estoy aprendiendo nuevas formas de analizarlos.

Un saludo!!!

Yago Jesus dijo...

¡¡ Muchas gracias !! 

tXambe dijo...

Muy interesante , si no es mucho pedir , podiais sacar algun tutorial ó indicarme alguna documentación buena.

Gracias y un saludo

Angel Alvarez Nuñez dijo...

Muy bueno Yago, gracias por enseñarnos XD

acidtrip dijo...

Muy bueno

Por cierto salieron ya algunos vídeos de la Rooted 2012 a la que no tuve oportunidad de ir. Acabo de ver tu charla y me encantó enorabuena

Oca dijo...

Hola, me encantan este tipo de post.
Supongo que lo descomprimes manualmente con UPX por aprender. Existe otra posibilidad, seguramente la conozcas, y es utilizar la opción -d de UPX. Suele funcionar a no ser que hayan toqueteado cosas de la rutina de UPX.


Saludos!

Yago Jesus dijo...

Claro, la idea era hacerlo todo desde olly sin ayudas externas.

A futuro, tenía pensado hablar de fuu http://code.google.com/p/fuu/ o/y TitanMist http://www.reversinglabs.com/blog/introducing-titanmist/ como herramientas para hacer frente a packers