Analizando el gusano BUNDPIL – Parte III


Bienvenidos a la tercera y última entrega del análisis a este interesante gusano, en la pasada entrada vimos gran parte del comportamiento de este malware una vez se ha ejecutado en la PC cliente, analizamos los dos principales ejecutables creados sobre los que se basa el gusano para desplegar toda su rutina de infección y una parte de su payload. En este escrito concluiremos con el ciclo de vida de este gusano, veremos que trae el proceso del SO lanzado y modificado por él mismo para realizar otro grupo de acciones maliciosas sobre el host, continuemos.

Quitando las máscaras

Como vimos en la parte anterior, el gusano hacia el trabajo de algún tipo de lo que conocemos como RunPE, Process Hollowing, etc, como quieran llamarle, en fin, el caso es que el malware lanzaba un proceso del SO, específicamente “wuauclt.exe” o “svchost.exe” en caso de estar sobre x64, supongo que para aprovechar el nivel de permisos, autenticidad y hasta de free-pass sobre cualquier cortafuegos, si tenemos en cuenta que se tratan de un servicio de red y el proceso de actualizaciones automáticas de Windows. Si recordamos, las primeras dos instrucciones en el EP eran modificadas para simular un salto a una zona de código inyectada y descifrada con anterioridad en la memoria del proceso usurpado, y aquí es donde continua nuestro análisis.

El malware entre otras cosas comienza obteniendo el número de serie de la partición “C:” (GetVolumeInformationA). Luego de esto utiliza una función interesante, veamos

Captura

Verifica que pertence al grupo “Administradores” (CheckTokenMembership) utilizando el SID “S-1-5-32-544”, en cualquier caso tomara las cadenas y rutas de clave de registro que se adecuen a su nivel de acceso, igual tomara una extensión de forma aleatoria (GetTickCount & 7) todo esto lo usara más adelante.

Captura2

El gusano intenta crear un Mutex con la cadena que ha conformado con el número de serie de la partición que tomo al principio

Captura3

A la salida verifica que el error no sea (ERROR_ALREADY_EXISTS/0x0B7) en cuyo caso borra el fichero “C:\DOCUME~1\USERCONFIG~1\Temp\#MSI\msiexec.exe” y terminaría su ejecución, con esto garantiza una sola instancia del proceso modificado activo. Si no existen interferencias el gusano continua creando los directorios “%ALLUSERSPROFILE%\Local Settings\Temp” o “%USERPROFILE%\Local Settings\Temp” según haya sido la cadena que se haya seleccionado en la función que vimos hace unas líneas, y copia el fichero “msiexec.exe” (CreateFile/ReadFile/WriteFile) dentro de la subcarpeta “Temp” de la forma “%rand_filename.%rand_ext

Captura4

El nombre del fichero lo crea usando RtlRandom sobre las letras del alfabeto y usa la extensión seleccionada en la función que ya vimos anteriormente, para terminar el proceso le setea el FileTime de acuerdo al fichero “wuauclt.exe” o “svchost.exe” (GetFileTime/SetFileTime).

Posteriormente la aplicación vuelve a utilizar las cadenas y constantes seleccionadas de antemano para abrir la llave de registro seleccionada

Captura5

Una vez tiene el acceso a la llave deseada, la cual es usada para ejecutar el contenido del valor que se encuentre dentro juntamente con Windows, le establece nuevos permisos a la misma

Captura6

Con esto modifica la DACL (lista de control de acceso discrecional) permitiéndole la modificación…y esto es justo lo próximo que hace

Captura7

Crea un nuevo valor con la ruta de la copia del fichero “msiexec.exe” recién creado como “mszmvoywo.cmd”, para el nombre del valor utiliza una cadena que crea con el WORD menos significativo del DWORD del serial de la partición “C:”. Al crear el valor vuelve a cambiarle los permisos a la llave, pero esta vez utilizando la cadena “D:(A;;KRWD;;;WD)“, con lo que le quita todos los permisos y a su vez evita cualquier intento de borrado de la misma, finalmente elimina el fichero “C:\DOCUME~1\USERCONFIG~1\Temp\#MSI\msiexec.exe“.

En estos momentos el gusano inicializa el trabajo con sockets (WSAStartup) y se dispone a crear tres hilos de ejecución, los cuales entraremos a analizar seguidamente.

Hilo 1 – Run DLL from Memory

El hilo número uno comienza obteniendo acceso de lectura a la llave “HKEY_LOCAL_MACHINE\software\microsoft“, luego continua enumerando todos los valores bajo esta llave (RegEnumValue) con el fin de obtener el buffer (RegQueryValueEx) de un valor conocido “0022FF03“, que si recordamos contiene un binario con cabecera de fichero .ZIP que el mismo gusano creo con anterioridad. Una vez tiene mapeado el valor en memoria verifica que la cabecera este correcta, descifra parte del buffer, crea un hash del descifrado y lo compara con un valor hardcoded para ver si es correcto, luego le realiza otro descifrado más para finalmente obtener en memoria lo que sería un fichero MZ, específicamente una DLL, por lo que en realidad la cabecera .ZIP era solo tapadera de otro PE cifrado.

Luego de que el gusano tiene mapeada en memoria la DLL hace uso de una técnica (http://github.com/fancycode/MemoryModule/) para cargar “on-the-fly” la misma sin tener que llevarla a disco, una vez la ha cargado ejecuta la función DllMain que realiza las siguientes acciones.

Captura8

Intenta abrir el Mutex “TLS” (OpenMutex), en caso de existir sale de la función, de lo contrario crea el mencionado Mutex y lanza un nuevo hilo de ejecución, veamos de que se trata

Hilo 1.2 – USB Spreading

El nuevo hilo comienza registrando una clase de ventana (RegisterClass) con los siguientes parámetros

Captura9

Vemos en la imagen que se le pasa como procedimiento de ventana la dirección de una función con un nombre bastante descriptible, más adelante la veremos en detalles. Continuando el flujo de ejecución, el hilo usara una función que intentara descargar un nuevo fichero de la web “http://suckmycocklameavindustry.in/%rnd_filename%

Captura10

Donde “%rnd_filename%” es una cadena aleatoria de caracteres, una vez que ha concluido la descarga (lo guarda en los temporales) el malware lee el contenido del fichero y verifica si los primeros bytes corresponden con la cadena “die();”, en cuyo caso saldría de esta función sin mas, de lo contrario guarda el buffer en la llave “HKEY_CURRENT_USER\Software\ImageBase” y borra el fichero temporal.

Seguidamente el gusano obtiene el listado de todas las unidades conectadas a la PC (GetLogicalDriveStrings) y busca entre todas las extraíbles, a las cuales les da un tratamiento especial.

Captura11

Vemos en la imagen como pasa por alto las unidades mapeadas como “A” o “B” y además al final vemos dos funciones importantes.

La función “PrepareUSB” busca entre todos los ficheros de la raíz del dispositivo (FindFirstFile/FindNextFile), si el resultado es una carpeta, el malware le añade al nombre de la misma las extensiones: “exe, bat, vbs, pif, cmd” e intenta eliminar los posibles archivos nombrados de esta forma (DeleteFile), lo más probable es que está intentando desalojar cualquier otro malware que se encuentre en el dispositivo y quedarse como “King of the Hill”. Ademas si encuentra la carpeta “Backup.” borra todos los ficheros que contenga y los subdirectorios. (DeleteFile/RemoveDirectory)

Si no es un directorio el gusano elimina cualquier fichero que empiece por los caracteres “~$W” o es “Thumbs.db”, tambien si es alguno de los siguientes: *.lnk, *.inf, *.ini o “LaunchU3.exe” los oculta (HIDDEN+ SYSTEM).

La función “CopyToUSB” comienza ocultando la vista de ficheros ocultos y del sistema modificando las claves del registro “Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced”, “ShowSuperHidden” y “Hidden”, luego minimiza todas las ventanas abiertas y envía un aviso al sistema (SHChangeNotify, SHCNE_ASSOCCHANGED) para hacer visibles los cambios.

Captura14

Captura15

Seguido de esto se toma el nombre del dispositivo extraíble (GetVolumeInformation) y su capacidad (GetDiskFreeSpace), más adelante verifica que no estén presentes en la raíz del extraíble las carpetas: “DCIM” o “Windows”, con esto chequea que no se trate de una SD de una cámara o una partición del sistema.

Captura12

En caso de que no se encuentre en alguno de los sucesos anteriores el malware se dispone a crear una carpeta sin nombre en la raíz del dispositivo (CreateDirectory), si la carpeta ya existe entonces sale de la función, sino comienza a mover todos los ficheros y carpetas de la raíz a dicho directorio (MoveFileEx) excluyendo, si son encontrados, a los ficheros: “desktop.ini”, “Thumbs.db“, “autorun.inf“, “LaunchU3.exe”. Seguidamente busca y elimina en caso de encontrarlo al fichero “USB:\UNNAMED_FOLDERdesktop.ini” y una vez eliminado lo vuelve a crear con el siguiente contenido y oculto:

[.ShellClassInfo]
IconResource=%systemroot%system32SHELL32.dll,7
IconFile=%SystemRoot%system32SHELL32.dll
IconIndex=7

Con este fichero garantiza que la carpeta obtenga el icono usado por el sistema para las unidades de disco. También intenta eliminar cualquier fichero de la forma “~$W%s.FAT32” (donde %s es una cadena aleatoria) que este en la raíz del dispositivo y vuelve a crear otro con la misma forma del nombre

Captura13

Al cual como vemos en la imagen le escribe los bytes de lo que vendría siendo un PE, específicamente una DLL, que como vimos en la 1ra parte de este análisis, es la encargada de ejecutar la shellcode contenida en “desktop.ini”.

Posteriormente el malware accede al conocido y ya usado valor “ImageBase” del registro, verifica que los primeros bytes no coincidan con la cabecera de un PE (“MZ”) y guarda todo el contenido en un fichero en la raíz del USB con nombre “Thumbs.db” (fichero “TrustedInstaller.exe” cifrado), finalmente intenta eliminar también de la raíz del dispositivo a “desktop.ini” si existe para volverlo a crear y ponerle dentro la shellcode que será usada para la ejecución del gusano. Para concluir se crea el acceso directo que acompaña los ficheros en el USB, veamos como

Captura16

En la imagen podemos ver como se conforma el nombre del acceso directo con los datos recogidos anteriormente del dispositivo extraíble, en caso de no haberlos podido obtener antes crea un nombre genérico “My Removable Device.lnk”, en caso contrario lo crea de la forma “%s (%I64uGB).lnk” y ambos con el destino marcado: “~$W%s.FAT32,_ldr@16 desktop.ini RET TLS “”“, finalmente llama a una función que se encarga de crear el acceso directo como tal valiéndose de objetos COM (CoCreateInstance).

Para terminar el malware acaba creando la ventana que usara para instalar su filtro de mensajes del sistema (CreateWindowEx), usando como ClassName y WindowName la cadena “abc”, luego de esto se queda en el loop de mensajes (GetMessage/TranslateMessage/DispatchMessage).

WNDPROC (Filtro USB)

El procedimiento de ventana que habíamos visto que se pasaba a RegisterClass anteriormente, lo que hace es establecer un filtro haciendo que la ventana reciba los mensajes del SO WM_DEVICECHANGE y monitoree los eventos DBT_DEVICEARRIVAL y DBT_DEVICEREMOVECOMPLETE

Captura17

Con esto garantiza que cada vez que un dispositivo extraíble sea insertado o retirado al gusano es notificado de ello y puede tomar las acciones de contaminación que ya vimos. Esta vez acepta tanto DRIVE_REMOVABLE como DRIVE_FIXED, en caso de alguno de los anteriores empieza borrando cualquier “autorun.inf” que se encuentre en la raíz del dispositivo para quitar cualquier otro malware que utilice esta técnica para iniciarse y asegurarse que el extraíble es solo suyo. Luego ya continua con las dos funciones que vimos más arriba “PrepareUSB” y “CopyToUSB” para garantizar la contaminación a dispositivos extraíbles, termina despues haciendo una llamada a RegisterDeviceNotification para mantenerse recibiendo las notificaciones de los dispositivos y asi concluye.

Hilo 2 – Execute Libraries Functions

El hilo numero dos se basa en enumerar los valores contenidos en la ruta “HKEY_LOCAL_MACHINE\ software\microsoft” y una vez obtenido el buffer de cada llave obtenida, los cuales deben contener rutas a librerías DLL descargadas por el mismo gusano, utiliza LoadLibrary para cargarlas en memoria y con GetProcAddress busca el inicio de una función dentro de las DLL las cuales ejecuta unas líneas mas abajo.

Hilo 3 – Downloader

El hilo número tres realiza básicamente las funciones de un downloader. Se conecta a las webs especificadas y hace peticiones POST/GET, veamos

Captura18

Ahí está el listado de páginas a las cuales el gusano hace peticiones para continuar descargando, ejecutando malware (librerías y ejecutables) y/o para mantenerse actualizado a sí mismo.

Captura19

El hilo tres se continuara creando una y otra vez cada 10 segundos, garantizando que las descargas se mantengan activas en todo momento.

Conclusiones

Hasta aqui ha llegado el analisis de este gusano. Como dije al principio de esta serie, hemos visto un malware a mi juicio muy bien hecho, empezando por sus capas de proteccion, su metodo de ejecucion, sus metodos de infeccion y propagacion, su codigo bien pensado y estructurado, ademas de todas las funcionalidades que se le implementaron, debido a esto, ademas, me atreveria a decir que el malware pudo haber sido obra de varios autores.

Espero que hayas disfrutado leyendo esta serie de articulos como yo he disfrutado escribiendolos y compartiendolos con ustedes, aqui ademas les dejo los ficheros del malware para aquel que desee echarles un vistazo por su cuenta, recuerden que se trata de una muestra de virus totalmente funcional, por lo que recuerda tomar las precauciones necesarias al manipular dicha muestra. El compactado esta protegido por la contraseña “malware” (sin comillas).

Descargar: W32-Bundpil

Bueno, ya saben, nos vemos en otra….quien sabe 😉  …

Anuncios

2 Respuestas a “Analizando el gusano BUNDPIL – Parte III

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s