viernes, 2 de octubre de 2009

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

Siempre había querido escribir un diario, solo que nunca pense que tendría algo que contar. Quizás realmente siga sin tener nada interesante que escribir, pero lo cierto es que un día tenía que ser el primero, y éste es tan bueno para ello como podría serlo cualquier otro. Lo mejor será que empiece por el principio, y el principio fué hace algunas semanas, en casa de un buén amigo.

Supongo que todos los que, de alguna forma, disfrutamos haciéndoles perrerías a los ordenadores, padecemos algo de deformación profesional. En mi caso se manifiesta sintiéndome tentado a toquetear siempre que advierto el menor signo de vida palpitando en un monitor, y eso es lo que pasó. Lo último que recuerdo fué la luz intermitente de mi pendrive y un fichero comprimido en rar dentro de una carpeta con un nombre muy sugerente: malware.

Hasta ayer no recordaba esa carpeta, y menos aún el ficherito de marras, pero al final ha sido el detonante de todo esto. Una vez extraído el fichero, siempre con cuidado de no hacer doble click sobre él, solo por si las moscas, se me ocurrió pedir la ayuda de un profesional, y el primero que me vino a la mente fue VirusTotal. El concepto es sencillo, una aplicación web que permite analizar ficheros utilizando para ello diversos antivirus y que ofrece, como resultado, un completo informe sobre la posibilidad de que sea software malicioso.

Al final el ejecutable resultó ser un bicho, una variante del skintrim. Una búsqueda en google devuelve muchos resultados, análisis y descripción de sus principales características, método de infección y relatos pormenorizados del proceso de desinfección. Dado mi caracter extremadamente curioso y analizando los hechos a posteriori el proceso de accción/reacción para el hilo de mis pensamientos era totalmente previsible: mejor me infecto yo mismo y lo estudio en libertad. Pero si vamos a hacer las cosas, por lo menos hagámoslas bién, al menos lo mejor que sepamos y/o podamos.

Lo primero es disponer de un entorno de pruebas, algo así como una sandbox. Los requerimientos son simples: un entorno controlado, fácilmente recuperable y que resulte barato. La solución vino de la mano de VMware Server y un PC, con una máquina virtual; un sistema operativo virtualizado, el guest, corriendo sobre un software especializado, el hipervisor, corriendo a su vez en un sistema operativo físico, el host. No sé porque este tipo de entorno me recuerda a esas famosas muñequitas rusas, matrioskas creo que se llaman, muñecas que contienen muñecas.

Preparando la jaula

El sistema operativo anfitrión ya lo tengo, un Windows Vista Service Pack 2. La instalación del hypervisor es trivial, previo registro en la web de VMware descargo el ejecutable para la última versión disponible de VMware Server, la 2.0.1 en el momento de ensuciar este papel. Y una vez instalada, lanzado el interfaz web de la aplicación, el cual se apoya en un servidor Tomcat, y correctamente autentificado preparo la máquina virtual sobre la que instalaré el sistema operativo invitado, un Windows XP con el Service Pack 3 integrado utilizando para ello nLite.

Menú Virtual Machine, Create Virtual Machine. Una ventana y un recorrido por etapas nos ayudará en el proceso, as que cual abnegado ciclista subiendo la pared del Mortirolo comienzo en Name y Location dándole el nombre, Windows XP SP3, y ubicación, el datastore standard o lo que es lo mismo, el directorio por defecto utilizado por la aplicación para almacenar las máquinas virtuales.

Siguiente etapa, Guest Operating System, así que selecciono Windows operating system y tirando de desplegable Microsoft Windows XP Professional (32-bit). Continúo ahora, parando en Memory and Processors para establecer 512 MB y un único microprocesador, tomando ambas decisiones en base al hardware del sistema anfitrión. Y siguiendo con el hardware virtual llega el momento del espacio en disco, Hard Disk, Create a New Virtual Disk y dentro de Properties su tamaño, que seguro que con 10GB tengo más que suficiente y dado que no toco el resto de opciones el espacio será asignado conforme vaya siendo necesario.

Para abreviar, en los siguientes pasos establezco un adaptador de red en modo NAT (Network Adapter y Propierties), una unidad de CDROM asociada al dispositivo físico (CD/DVD Drive y Properties), sin unidad de diskette (Floppy Drive y Properties) y sin controladora USB (USB Controller), así aislo aún más si cabe el entorno para las pruebas.

Una vez finalizado el proceso anterior la máquina virtual arranca de forma automática, por lo que con el cd de Windows insertado en la unidad lectora comienzo el proceso de instalación, el cual no describiré aquí por ser harto conocido. Aproximádamente una hora y varios clics de ratón más tarde ya tengo una máquina virtual con Windows XP Service Pack 3, a la que añado exclusivamente los siguientes programas:


Velando armas

Toca ahora escoger las herramientas para monitorizar las actividades del bicho, y como no podía ser de otra forma, Mark Russinovich y compañía tienen mucho que decir en esto. Cofundador junto con Bryce Cogswell del sitio web de sysinternals, denominación de origen adquirida en 1996 por Microsoft, es autor de numerosos documentos técnicos y herramientas que nos permitirán asomarnos a los secretos e interioridades para los sistemas operativos de la firma de Redmon. En concreto, de todas las disponibles, selecciono las siguientes:
  • Process Monitor v1.11
    Heredera de las discontinuadas Filemon y Regmon auna interesantes capacidades que nos permitirán monitorizar los entresijos del funcionamiento de Windows, y cito textualmente: "muestra en tiempo real el sistema de archivos, el Registro y la actividad de los procesos y subprocesos".

  • TCPView v2.4
    Herramienta que muestra información detallada de todos los sockets TCP/IP lanzados en el sistema, incluyendo las direcciones para los dos extremos de cada conexión; algo así como un nestat pero más avanzado.

  • Process Explorer v11.02
    Una de las utilidades más potentes de toda la suite. Es lo más parecido al Administrador de Tareas de Windows, pero multiplicando sus capacidades por 1000. Muestra el árbol de procesos ejecutándose en el sistema permitiendo alterar su ejecución, obtener volcados de depuración, listar los handles abiertos por el proceso y mucho, mucho más.
Pensando en el comportamiento habitual del malware en libertad, sin duda será muy interesante analizar en detalle todas las conexiones TCP/IP iniciadas durante la infección, y el mejor analizador que se me ocurre es Wireshark, o Ethereal, como se denominaba en sus orígenes. También será preciso instalar la librería de captura de paquetes WinPcap, incluida con el instalador del primero. Las versiones, 1.2.2 para el sniffer y 4.1 beta 5 para la librería.

Ya tengo lo necesario, o al menos eso creo, para monitorizar el proceso de infección y los momentos inmediatamente posteriores a la misma. Ahora generaré una captura del estado del sistema no infectado, de forma que, una vez haya soltado el bicho y este campe a sus anchas, pueda comparar su estado con el anterior y observar las diferencias. Creo que el primero se conoce como baseline, y para generarlo utilizaré, por una parte, la suma md5 de todos los ficheros que lo componen, y por otra el contenido del registro de Windows.

Para generar la suma MD5 utilizaré FileVerifier++, en concreto la versión de línea de comandos. Existen muchas herramientas que permiten generar esta suma, md5deep sin ir más lejos, pero me he decantado por el primero dado que se trata de un programa que utiliza directamente el API de Windows, además de la cantidad de algoritmos de generación para la suma de comprobación. Una vez descargado y extraido el contenido del paquete zip, no el instalable, para obtener el hash MD5 de todos los ficheros que componen la instalación de Windows:
C:\analisis\fv>fvc -a Md5 -f MD5SUM -c -r C:\ > baseline.01.txt

Error: Error opening file "C:\\pagefile.sys"
Error: Error opening file "C:\\Documents and Settings\Administrador\NTUSER.DAT"
Error: Error opening file "C:\\Documents and
Settings\Administrador\ntuser.dat.LOG"
Error: Error opening file "C:\\Documents and
Settings\Administrador\Configuracion local\Datos de
programa\Microsoft\Windows\UsrClass.dat"
Error: Error opening file "C:\\Documents and
Settings\Administrador\Configuracion local\Datos de
programa\Microsoft\Windows\UsrClass.dat.LOG"
Error: Error opening file "C:\\Documents and Settings\LocalService\NTUSER.DAT"
Error: Error opening file "C:\\Documents and
Settings\LocalService\ntuser.dat.LOG"
Error: Error opening file "C:\\Documents and
Settings\LocalService\Configuracion local\Datos de
programa\Microsoft\Windows\UsrClass.dat"
Error: Error opening file "C:\\Documents and
Settings\LocalService\Configuracion local\Datos de
programa\Microsoft\Windows\UsrClass.dat.LOG"
Error: Error opening file "C:\\Documents and
Settings\NetworkService\NTUSER.DAT"
Error: Error opening file "C:\\Documents and
Settings\NetworkService\ntuser.dat.LOG"
Error: Error opening file "C:\\Documents and
Settings\NetworkService\Configuracion local\Datos de
programa\Microsoft\Windows\UsrClass.dat"
Error: Error opening file "C:\\Documents and
Settings\NetworkService\Configuracion local\Datos de
programa\Microsoft\Windows\UsrClass.dat.LOG"
Error: Error opening file "C:\\WINDOWS\system32\CatRoot2\edb.log"
Error: Error opening file "C:\\WINDOWS\system32\CatRoot2\edbtmp.log"
Error: Error opening file "C:\\WINDOWS\system32\CatRoot2\tmp.edb"
Error: Error opening file "C:\\WINDOWS\system32\config\default"
Error: Error opening file "C:\\WINDOWS\system32\config\default.LOG"
Error: Error opening file "C:\\WINDOWS\system32\config\SAM"
Error: Error opening file "C:\\WINDOWS\system32\config\SAM.LOG"
Error: Error opening file "C:\\WINDOWS\system32\config\SECURITY"
Error: Error opening file "C:\\WINDOWS\system32\config\SECURITY.LOG"
Error: Error opening file "C:\\WINDOWS\system32\config\software"
Error: Error opening file "C:\\WINDOWS\system32\config\software.LOG"
Error: Error opening file "C:\\WINDOWS\system32\config\system"
Error: Error opening file "C:\\WINDOWS\system32\config\system.LOG"
Error: Error opening file "C:\\WINDOWS\Temp\Perflib_Perfdata_79c.dat"

Los errores obtenidos como resultado parecen todos relacionados con ficheros de log abiertos en el momento de la ejecución o correspondientes a ficheros protegidos del sistema, así que no les daré importancia.

Ahora le toca el turno al contenido del registro de Windows y para ello utilizaré Regshot. Una vez descargado y extraido el ejecutable, con interfaz gráfico en este caso, especifico las siguientes opciones de ejecución:
  • En Scan dir, indico C:
  • En Output path C:\analisis
  • En Add comment into the log pongo Baseline regshot
Una vez adecuadamente configurado, 1st shot, Shot and Save... y el directorio y nombre del fichero que almacenará los resultados, el cual tendrá extensión .hiv y no será legible, al menos directamente.

Ahora que ya lo tengo todo listo, y de forma que pueda volver al estado inicial del sistema, es decir, sin estar infectado, voy a crear un snapshot de la máquina virtual. Desde el interfaz web de vmware server, y seleccionado el sistema en cuestión lanzo el comando Take snapshot desde el menú Virtual Machine.

Y ahora de caza

Solo resta obtener el bichito en cuestión, a ser posible incluyendo el lanzador o programa encargado de generar la infección. El mejor lugar para obtener malware "fresquito", sin tener que recurrir a colecciones privadas o a enviar un mensaje a un newsgroup solicitando "ayuda" es sin duda Offensive Computing. Además de incluir una extensa colección de malware perfectamente clasificado y con un potente buscador también pone a disposición de los usuarios un foro y artículos regularmente publicados incluyendo abundante información sobre el tema. Lo único que tenemos que hacer para disfrutar de todo el contenido es registrarnos, proceso totalmente gratuito y por demás recomendable.

Así que previo registro, autentificación y utilizando "skintrim" como cadena de búsqueda obtengo 20 coincidencias. Dada la cantidad de opciones no lo pienso más y descargo el primero de ellos, para el cual se incluyen los siguientes datos
descriptivos:
MD5:    730250b1891a23713851a7efda1ac05f

SHA1: cd5719ca25722316b89e9e303e49aeeec7398b29
SHA256: 70afa90f711d01b4548cbd0100dce5fd90c9d21f51abaa40dcfa9fce335c5be4
Original Submitted Filename: 730250b1891a23713851a7efda1ac05f.exe
Date Added: 2009-04-30 01:43:09.910815
Magic File Type: MS-DOS executable PE for MS Windows (GUI) Intel 80386 32-bit
Anti-Virus Results: BitDefender Trojan.Skintrim.AZV

Pulso download, parpadeo del router y en menos de 1 minuto un fichero en el Escritorio de la máquina virtual con nombre malware y password 'infected', que toda precaución es poca tratando con tan baja calaña.

Con esto ya lo tengo todo, el escenario, el enemigo, y las armas, pero malo es luchar cansado, así que mejor dejo el resto para mañana.

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

17 comentarios:

Txalin dijo...

A raiz de esto: http://xkcd.com/350/ llevo dandole vueltas a la cabeza al tema de montarme en un equipo viejo una "red de virus". La quiero monitorizar con zabbix, la idea es meter N virus en varias maquinas virtuales y ver como se comportan entre ellos.

Creo que tu post me sera muy util :)

neofito dijo...

Espero que te resulte util, y ya sabes, cualquier avance que consigas mantenme informado ;)

Saludos

hmontoliu dijo...

Muy entretendo, y como me ha parecido divertido lo de «velando armas» he creado en mi «pendrive de guerra», con todos los honores, en el directorio win_apps ;-) un directorio llamado velando_armas donde he guardado listos para desembarcar en cualquier PC en estado de sitio las aplicaciones:

* TPCview
* ProcessExplorer
* ProcessMonitor
* y mi querido Autoruns

Siempre mantengo otro directorio con la suite completa de sysinternals, pero me ha parecido divertido dedicarte un directorio.

PD: Te hubieras divertido mucho haciendo lo que yo hice el viernes por la tarde con un PC infestado hasta las trancas; hasta 5 tipos distintos de malware... pero se que tu te lo pasaste mejor :-P

Enorabuena por el artículo

neofito dijo...

Todo un honor, sin duda.

@hmontoliu dijo:
Enorabuena por el artículo

¿Que no tiene corrector ortografico el vim? X-D

Saludos

hmontoliu dijo...

Ups!

Antonio Sánchez dijo...

Muy bueno, esperando la segunda parte

por cierto, te espero en el 2º reto forense que ya está activo!!

salu2

neofito dijo...

Cierto!! Ya le he estado echando un vistazo, de nuevo muchas gracias por este tipo de iniciativas.

Saludos

Txalin dijo...

Hola Antonio,

Soy un neofito en esto del forensics, pero me gustaria alcahuetear en tu reto. ¿Podrias pasarme la url?

Gracias ;)

Delfi dijo...

Muy bueno, esperando con ansias el segundo.

Saludos!

neofito dijo...

@Txalin:

Puedes pasar por foro.elhacker.net para encontrar las imagenes.

@Delfi

Gracias!

Saludos

Antonio Sánchez dijo...

@Txalin:

como bien dijo neofito, en foro.elhacker.net, una vez ahí, en el subforo de hacking avanzado verás una chincheta con el enunciado del reto.

más abajo hay un post para ir comentándolo, además de comentarios del primer reto (ya finalizado), y arriba en otra chincheta el enunciado de este último y la solución del ganador

si vas a intentarlo, te aconsejo que te des de alta y me mandes un MP como dice en el hilo

salu2

manuonda dijo...

Hola que tal neofito tengo una duda y es sobre la instalacion de volatility en windows he bajado y realizado la instalacion . Creo que te has enterado de el concurso de el foro hacker.net me he bajado la primera imagen image.dd.tar pero cuando lo descomprimo y quiero realizar alguna auditoria como por ejemplo lo siguiene

python volatility connscan -f imagen.dd

no me sale nada. Se que has trabajado con volatility quisiera saber cual es el problema.
Muchas gracias por leer .
Y muchas grax por todo ahahaha
en cuanto he querido instalar ptk con xampp.
Y he realizado lo que indicabas sobre las lineas de poner comentarios pero sigue ocurriendo que no lo muestra y no puedo instalar crear la base y otras cosas
Perdon por escribir tanto pero me fascina este mundo de la seguridad
Y grax a gente como ustedes nos incita a seguir en este mundo

Grax

neofito dijo...

Hola manuonda

Seguro que con volatility no vas a lograr ver nada, dado que no es una captura de memoria sino una imagen de disco.

Respecto a lo de PTK, a ver si saco un rato para revisarlo y puedo intentar ayudarte.

Saludos

GigA ~~ dijo...

Enhorabuena Neofito, creo que este es tu mejor post desde que te sigo :) ¡Me ha encantado! Habrá que ver como sigue la historia xd

Por otro lado, justo hace unos días estaba buscando un repositorio de malware y no encontraba nada, tampoco parecía que nadie supiera de uno, así que con este link tengo un buen sitio donde comenzar, ¡gracias!

Salu2

neofito dijo...

Gracias!! Espero no defraudaros con la segunda parte, que su trabajo me esta costando.

Saludos

Anónimo dijo...

Buen post.
Para el checksum con MD5 sería preferible montar el disco de la maquina virtual y así no tendrías archivos abiertos en memoria.

neofito dijo...

Buen apunte, muchas gracias!!

Saludos