jueves, 22 de octubre de 2009

Crónica de una infección, día 3

Parece que olvidé extraer de la máquina virtual infectada los ficheros con la traza del malware, léase el log de Process Monitor (Logfile.PML) y la captura de Wireshark (malware.pcap). No repetiré aquí como montar el disco creado por Vmware Server, en todo caso siempre puedo consultar mis notas.

Después de advertir el tamaño del log de Process Monitor (casi 92MB), advierto que las pistas obtenidas en cuanto a nuevos ficheros y claves del registro creadas en el sistema junto con varias operaciones lógicas, serán cruciales para seguirle los pasos al engendro.

Del tirón con Process Monitor

Comenzaré con lo más obvio, así que voy a crear un filtro que me muestre sólo la actividad relacionada con el proceso malware. Pulso en el icono del embudo, conocido emblema de las tierras de Wadalbertia, menú Filter, opcion Filter... establezco Process Name en el primer campo, is como condición logica, malware.exe para el tercer campo e Include como acción, Add para seleccionarlo y OK para ejecutarlo, o lo que es lo mismo:


La salida sigue siendo extensa, pero como premio dos eventos para el timeline: inicio y fín del proceso de instalación para el bicho, o mejor le llamaremos "mulero" que queda como más mejor. Selecciono el campo Time of Day de la primera ocurrencia, botón derecho "Highlight '29/09/09 22:42:26,2578790'" y establezco el primer marcado, repitiendo el proceso con la última ocurrencia. Pero no, parece que al final del log aparecen cierres de handles posteriores a la finalización del proceso; mi marcado deberia estar en la operacion "Process Exit" asociada a malware.exe, asi que corrijo y sigo.


Probaré ahora utilizando la lista de nuevos ficheros creados como base para el filtro. En concreto explotaré la ruta "C:\Archivos de programa\MailSkinner" y para ello menú Filter, o embudito, "Path begins with", nuestra ruta, "then Include" botón OK.

La primera operación que parece interesante es IRP_MJ_CREATE, concretamente la que incluye en el campo Detail la cadena "OpenResult: Created", o lo que es lo mismo, elemento creado correctamente. Como antes nuevo marcado mediante botón derecho "Highlight '29/09/2009 22:42:33,2751790'". También marcaré la operacion de establecimiento de permisos de acceso y mactimes, que traducido al lenguaje del sistema operativo será IRP_MJ_SET_INFORMATION.

Y aprovechando el tirón, marcado también en las dos operaciones para las siguientes rutas:

C:\Archivos de programa\MailSkinner\anim_0.gif
C:\Archivos de programa\MailSkinner\MailSkinner.exe
C:\Archivos de programa\MailSkinner\anim_help.gif
C:\Archivos de programa\MailSkinner\OLSkinner.dll
C:\Archivos de programa\MailSkinner\uninst.exe

Para seguir con la investigación deshago el filtro asociado a la ruta con menú Filter, o embudito, seleccionando la entrada adecuada de la lista de operaciones; primero Remove y luego OK.

Voy ahora con las modificaciones del registro provocadas por el proceso malware.exe. Aprovecharé los filtros preconfigurados, a los que accedo con los 5 primeros botones de la barra de herramientas empezando por la derecha, o con los 5 últimos empezando por la izquierda, que tanto monta monta tanto Isabel como Fernando:
  • Show Registry Activity
  • Show File System Activity
  • Show Network Activity
  • Show Process and Thread Activity
  • Show Profiling Events


Sólo pulso el del registro y aún así todavía será necesario procesar demasiada información; mejor intentaré acotar más. Si consulto la lista obtenida del uso de regshot, advierto que las claves interesantes contienen la cadena MailSkinner, así que agrego filtro: "Path contains MailSkinner" y aplico con OK. Pero no contento con esto, dos filtros más, los cuales aplicaré a la vez: "Operation is RegCreateKey", "Operation is RegSetValue" y OK. Intentaré no alargar la narración, pero sin olvidar marcar las claves del registro obtenidas con regshot.

Vuelvo a deshacer los filtros para mostrar todas las operaciones relacionadas con el proceso malware.exe, así que menú Filter, o embudito, Filter... y selecciono las ocurrencias que no sean "Process Name is malware.exe" pulsando Remove en cada ocasión y aplicando finalmente con OK.

Para obtener las marcas de tiempo asociadas a los marcados que he ido estableciendo, menú Filter Highlight o Ctrl + H, benditos atajos. Agrando la ventana de diálogo para que muestre todos de un solo vistazo y repaso las marcas de tiempo que llevo hasta ahora y que conforman el timeline para el proceso de infección:


Seguiré con el binario MailSkinner, por lo que deshago el filtro para malware.exe y lo reutilizo indicando ahora MailSkinner.exe. Como antes, establezco los primeros marcados en "Process Start" y "Process Exit".

Aprovecho la lista de ficheros obtenida con fileverifier++ para generar un nuevo filtro:


Y una vez establecido el punto de marcado deshago el filtro asociado a la ruta para, utilizando los botones de la barra de herramientas y dejando solo el del registro, encontrarme uno más, el que establece el inicio automático de la aplicación MailSkinner:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"MailSkinner"="c:\archivos de programa\mailskinner\mailskinner.exe"

Apunte parar recordar: en el fichero obtenido previamente con regshot la ruta comenzaba en HKEY_USERS, seguía con el SID del usuario al que correspondía y finalizaba de forma similar a la anterior. Esto es porque la ruta HKCU (HKEY_CURRENT_USER) siempre apunta en tiempo real a la configuración para el usuario al que corresponde la sesión actualmente iniciada en el sistema. De otra forma, en este caso estabamos logueados como Administrador y realmente HKCU es un enlace en memoria apuntando a "HKU\SID_del_Administrador".

Vuelvo a resetear los filtros y me quedo únicamente con "Process Name is MailSkinner.exe then Include" y le agrego otro más, "Path contains uwyoq.exe then Include". Como premio a la insistencia tres puntos de marcado, el momento de creación y escritura del binario en disco, con un tamaño de 270.336 bytes, y el instante en que se lanzó el proceso.

Sitúo el cursor en la línea donde se registra la creación del fichero en disco y elimino todos los filtros para advertir, sorpresa, un fichero temporal que resulta sospechoso:
  C:\WINDOWS\Temp\244843.htm

Botón derecho sobre cualquiera de las apariciones del fichero, Include, Path y aprendo un nuevo modo de generar filtros. Si desplazo el cursor hacia arriba encuentro varias operaciones de escritura en disco para el fichero anterior hasta que este alcanza, atención, el mismo tamaño que el bichito analizado. Resumen:
  1. MailSkinner.exe crea el fichero 244843.htm
  2. Iexplore.exe crea y completa en su cache el fichero bin[1].htm
  3. Iexplore.exe sobreescribe el fichero 244843.htm utilizando como origen bin[1].htm
  4. MailSkinner.exe utiliza 244843.htm como origen para crear el ejecutable uwyoq.exe

Llega el momento de pensar un poco; si iexplore ha creado un fichero en la caché eso es señal inequívoca de que en algún momento realizo una conexión TCP/IP para obtener su contenido; como además tengo la captura del sniffer seguro que puedo extraer el ejecutable, así que vamos a poner en marcha otra utilísima aplicación.

Ahora le toca a Networkminner

Lo primero descargarlo, y una vez desempaquetado lanzo el ejecutable NetworkMiner.exe. El programa puede actuar como sniffer seleccionando el adaptador desde el desplegable y pulsando Start, pero en este caso ya tengo una captura, malware.pcap, que es la que quiero analizar. Menú File, Open o Ctrl + O, y selecciono la traza del bicho.

La pestaña inicial, Hosts, muestra un resumen de todas las máquinas que aparecen en cualquiera de las conexiones registradas, e incluye, siempre que sea posible, la identificación del sistema operativo, OS fingerprinting, utilizando las bases de datos de p0f, ettercap y satori.


Me adelanto a la pestaña Sessions para analizar las sesiones establecidas por la máquina infectada, véase 192.168.198.133, y localizo dos sesiones HTTP con dos máquinas distintas. La trama capturada que constituye el inicio de cada una de las sesiones y que también aparece indicada me permite localizarla dentro de la pestaña Frames y observar la información que agrega cada una de las capas del modelo TCP/IP. Pero como casi que voy a ir al grano, a través de la pestaña Files localizo uno que se parece mucho al que busco, aunque un poco más grande (270.390 bytes).

Lo seleccciono y con botón derecho puedo abrirlo directamente, lo cual no parece lo más prudente, o abrir la carpeta en la cual NetworkMiner se ha encargado de volcarlo. Una vez allí tiro de editor hexadecimal, HDD Hex Editor Neo concretamente, para eliminar todo lo que sobra:


Como me temía, el fichero ya tiene el mismo tamaño que uwyoq.exe. Para asegurarme definitivamente calculo el md5 por ejemplo, con md5deep:
C:\binaries>md5deep.exe bin.php.C868054A.octet-stream
9b900c774f0ea4d52b5ad1332cd5fe0a C:\binaries\bin.php.C868054A.octet-stream

El hash de uwyoq.exe lo saco utilizando FTK Imager, agregando como elemento de evidencia el disco de la máquina virtual infectada. Lo encuentro en system32, botón derecho 'Exportar lista hash de archivos...'. Como resultado un CSV que abro con OpenOffice, conteniendo el mismo md5.

Finalizando el timeline

Regreso ahora al log de process monitor para seguir al proceso uwyoq.exe. Primero deshago todos los filtros y establezco "Process Name is uwyoq.exe then Include", boton Add y OK. Mecánicamente resalto dos nuevos puntos de marcado, el inicio y fín del proceso, correspondiendo este último al momento en que decidí acabar el experimento y lo maté (aka un "KILL uwyoq.exe").

Siguiendo un procedimiento se me antoja lógico establezco sucesivamente filtros para los ficheros que restan de la lista de fileverifier++ tal que filtro-marco-elimino-filtro. El orden:
C:\WINDOWS\system32\uwyoq.dat 
C:\WINDOWS\system32\uwyoq_nav.dat
C:\WINDOWS\system32\uwyoq_navps.dat

Una vez localizados comienzo a buscar el momento en que se agrega al registro la clave de autoinicio para el malware. Deshago todos los filtros y nuevamente dejo únicamente pulsado el botón "Show Registry Activity", y añado "Path contains uwyoq then Include", aplico y localizo el punto exacto estableciendo el último marcado.

Aún quedan muchos cabos sueltos como, por ejemplo el propósito del resto de ficheros obtenidos con NetworkMiner, pero creo que por el momento ya tengo bastante. Ahora a completar el timeline, proceso que no he sido capaz de automatizar. La única forma que se me ocurre y me ha funcionado ha sido anotar manualmente los valores de tiempo para cada uno de los marcados a lo largo del registro de process monitor y utilizarlos después para crear tambien manualmente los correspondientes filtros, aplicarlos todos a la vez y guardar el resultado en formato CSV.

Apunte parar recordar: descubro tarde una funcionalidad más de Process Monitor; a través del menu Tools, Process Tree... o directamente Ctrl + T me muestra un cuadro de diálogo con el árbol de procesos y sus relaciones. Si además desmarco "Only show processes still running at end of current trace" aparecen todos los que, en algún momento, estuvieron en ejecución durante la captura de la traza.

Y así certifica el que suscribe asegurando que tal fué lo que pasó; pronto más, e intentaré que mejor.

Crónica de una infección, día 1
Crónica de una infección, día 2

2 comentarios:

Unknown dijo...

Hola, soy un ex-compañero del curso ese que hiciste de migración a Windows 2008 en abril al que le recomendaste algunos blogs sobre el tema del análisis forense. Únicamente felicitarte por tu buen trabajo :)

neofito dijo...

Hombre, encantado de volver a saludarte. Me alegro de que te guste el blog :)

Saludos