Menú principal

jueves, 9 de junio de 2011

Reversing MacDefender: Análisis sobre cómo se distribuye

A través de una entrada en Cyberhades hemos llegado a un interesante estudio hecho con técnicas de ingeniería inversa por Leon Szpilewsky sobre Cómo se está distribuyendo MacDefender, y todas sus mutaciones (MacSecurity, MacProtector, MacGuard o MacShield) para poder cambiar los servidores en caso de que estos sean cerrados. Para que todo el mundo pueda entender, digamos que MacDefender (y sus mutaciones) utilizan un módulo de carga, que en este caso se llama avRunner.app, que es el que busca en uno de los servidores de Internet el rogue AV para lanzar su instalación en el cliente que se quiere infectar.

Figura 1: Esquema de distribución de MacDefender y sus mutaciones

En su estudio Leon analiza avRunner.app con IDA Pro para explicar todo el proceso, y ha puesto a disposición de todos el fichero del malware [avRunner.app.zip ¡Ojo, no lo ejecutes, es un malware!] y un enlace a la versión de evaluación de IDA Pro por si quieres repetir el análisis.

Tras abrir avRunner.app con IDA Pro y hacer el seguimiento normal de un proceso escrito en Objective-C en Cocoa, como es el caso de MacDefender, Leon llega a un bloque de código en el que se puede ver una estructura de una dirección URL pero a la que le faltan dos parámetros, que son: la dirección del servidor web y un valor de un parámetro.

Figura 2: Bloque de código con descarga de fichero desde URL

Parece evidente que el rogue AV se descarga con esa URL, pero... ¿cómo se construye la dirección del servidor y qué valor es el otro parámetro? Leon se dedica a seguir el flujo del programa, pasando por todas las llamadas a las funciones que se realizan durante la ejecución de avRunner.app hasta que llega a un procedimiento, en apariencia normal, que se utiliza para parsear una imagen en formato .PNG. Sin embargo, el parseo que se realiza de esa imagen es extraño.

Figura 3: Bloque de código de parseo de PNG

El procedimiento, en lugar de parsear toda la imagen, se dedica a seleccionar unos bytes al final de la misma a los que realiza un descifrado XOR que después concatena con la URL descubierta al principio. Si la imagen PNG, DownloadPict.png, que está siendo parseada se abre, se puede ver que al final aparece una cadena que no debería estar allí en principio.

Figura 4: Caracteres al final de la imagen

Suponiendo que se está utilizando esa cadena para mandar al módulo avRunner.app la dirección del servidor, Leon Szpilewsky realiza un pequeño programa para descifrar el contenido en esos bytes de la muestra, tal y como se puede ver en la siguiente imagen.

Figura 5: Programa para descifrar bytes al final de la imagen PNG

Al final, la cadena es una secuencia de valores, separados por puntos y comas, que le indica el nombre de la mutación, las direcciones IP a utilizar para descargarlo y el valor del parámetro a usar en la llamada.

Figura 6: cadena descifrada
 Con lo que las URLs de descarga, en este caso de MacGuard, serían:

Figura 7: URLs de descarga de MacGuard

El artículo en si es muy entretenido de leer además de muy educativo, y si estás pensando en aprender técnicas de ingeniería inversa en Mac OS X es altamente recomendable que hagas todas las pruebas del mismo.

No hay comentarios:

Publicar un comentario en la entrada

Artículos relacionados

Otras historias relacionadas

Entradas populares