martes 27 de octubre de 2009

Volatility 1.3.2 is out!

Vía echo6 me entero de la noticia. Parece que después de un intenso trabajo de desarrollo ya tenemos una nueva versión estable del framework para el análisis de volcados de memoria de sistemas Windows.

Si somos realmente intrépidos podremos descargar la rama de desarrollo utilizando subversion desde el sitio en Google Code. En cualquier caso seguro que estarán encantados de que informemos sobre cualquier posible bug derivado de su uso.

Destacar la gran labor que está llevando a cabo Jamie Levy en la parte de documentación, disponible también en el sitio de Google y donde, ¡atención!, aparecemos enlazados :)

Leer más...

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.

Leer más...

lunes 12 de octubre de 2009

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

Continuando por donde lo dejé llega el momento de la infección, autoinfección o como quiera que deba llamársele, que al final el resultado va a ser el mismo. Ya tengo todo lo que necesito en el directorio C:\analisis, incluyendo el programa fileverifier++ (C:\analisis\fv), regshot (C:\analisis\regshot) y las utilidades de sysinternals que he escogido para estas labores (C:\analisis\sysinternals).

Dentro de ese mismo directorio además tengo un fichero con las sumas md5 para el sistema "limpio" (C:\analisis\fv\baseline.01.txt) y una instantánea del registro, también en las mismas condiciones (C:\analisis\baseline.regshot.01.hiv).

Por último, y también en esa ubicación, he extraido el contenido del fichero descargado de offensivecomputing, con nombre malware. Así que vamos con la acción. Ah, casi olvido mencionar que, cuando terminé la instalación de Windows en la máquina virtual agregué las VMware-tools. Tendré que tener más cuidado a partir de ahora e intentar registrar detalladamente cada uno de mis pasos, mejor que sobre a que falte.

Comienza la batalla

'Colgando la herreruza en mano diestra y asida toledana en la siniestra enfilo al sarraceno plantado en el centro de la arena doblando el gesto en mala gana, pués tanto es al matar ser hábil con las armas como asustar con traza y semblante'.

No he podido evitarlo y he dejado volar mi prosa en forma de homenaje, a fín de cuentas éste
es mi diario y hago con él lo que me place. Pero mejor vuelvo a la tierra y continúo con lo que me trae liado.

No puedo evitar sentir cierto nerviosismo, y sin querer mi mente vuela al pasado, cuando todo el PC consituía para mí un insondable misterio; pero no tan lejano, apenas unos 10 años. En aquel entonces, y atraido de rebote por el mundo de la informática por cuestiones que no vienen ahora al caso, me dedicaba a saturar mi conexión a internet descargando cualquier manual que incluyera la palabra hacker, proviniera de fuentes de dudosa reputación o destacara multitud de calaveras estampadas sobre fondos negros, negros como los supuestos y arcanos conocimientos que pretendían desvelar.

El día en cuestión estrenaba mi flamante antivirus, y tras unos pocos clics guiado por un asistente de instalación finalizaba la primera actualización de la base de datos de firmas. En ese momento el miedo se apoderaba de mí cuando una onerosa advertencia clamaba numerosas infecciones, destacando entre ellas una variante del famosos CIH, del cual todavía conservo una copia en un diskette de 3,5. Y mírame ahora, provocando lo que entonces parecía el fín de mis sueños informáticos.

Inicio el proceso y para ello lanzo antes procmon (aka Process Monitor), el cual se pone de inmediato a registrar cualquier evento que se produzca en el sistema. Inicio también Wireshark y accedo al menú Capture, Interfaces... seleccionando como tal "VMware Accelerated AMD PCNet Adapter (Microsoft's Packet Scheduler) 192.168.198.133" y pulsando a continuación el botón Start para comenzar con el registro de conexiones. Temo que de momento voy a prescindir del resto de aplicaciones dado que tengo la intuición de que con lo anterior tendré más que suficiente.

La instalación del bicho comienza solicitando el idioma, donde dejo la opción predeterminada a Español. Siguiente, acepto las condiciones de licencia, dejo el directorio de instalación por defecto continuando con Instalar para realizar el proceso que, tras pulsar Finalizar, muestra un mensaje de felicitación indicando que ya podemos utilizar las características de MailSkinner y abre el navegador predeterminado llevándome a la web de los desarrolladores, cuyo dominio parece no estar actualmente activo.

Regreso al intefaz de Wireshark, menú Capture y detengo el registro de conexiones con la opción Stop, tras lo que guardo el resultado con File, Save As... en el directorio C:\analisis y nombre malware.pcap, cerrando por último la aplicación.

Procedo de forma similar ahora con procmon y para ello, en el menú File, desmarco Capture Events lo que detendrá el registro de eventos. Para guardar los resultados, también el menú File escojo Save y en el cuadro de diálogo marco All events y Native Process Monitor Format (PML) utilizando como destino el directorio C:\analisis\sysinternals.

Ahora, y seguro de tener ya el bicho suelto procedo a obtener las sumas md5 de todos los ficheros del sistema. Utilizo fileverifier++, como antes, ejecutándolo en la forma siguiente:

C:\analisis\fv>fvc -a Md5 -f MD5SUM -c -r C:\ > baseline.02.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\Administrador\Configuracion local\Temp\Perflib_Perfdata_13c.dat"
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\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_7c8.dat"

Aparecen los mismos errores que para la captura inicial, así que parece que no voy del todo mal. El siguiente paso es el estado del registro por lo que lanzo regshot y, como antes, incluyo las siguientes opciones:
  • En Scan dir, indico C:
  • En Output path C:\analisis
  • En Add comment into the log esta vez lo dejo vacio
Continúo con 1st shot, Shot and Save... y como directorio y nombre del fichero indico:
C:\analisis\baseline.regshot.02.hiv

Creo que ya lo tengo todo, así que detengo la máquina virtual mediante el interfaz de vmware server y, desde el sistema operativo anfitrión, procedo a recuperar los ficheros de registro. Esto no resulta difícil dado que tengo instalado el Virtual Disk Development Kit y, lo más
importante para que funcione correctamente en Windows Vista, deshabilitado UAC.

El procedimiento para montar el disco virtual asignándole la letra de unidad Z: es tal cual sigue:
C:\Users\javi>cd \

C:\>cd "%ProgramFiles%\VMware\VMware Virtual Disk Development Kit\bin"

C:\Program Files\VMware\VMware Virtual Disk Development Kit\bin>vmware-mount.exe
Z: "D:\Maquinas Virtuales\Windows XP SP3\Windows XP SP3-000001.vmdk"
C:\Program Files\VMware\VMware Virtual Disk Development Kit\bin>vmware-mount.exe

Z:\ => D:\Maquinas Virtuales\Windows XP SP3\Windows XP SP3-000001.vmdk

Y ahora utilizando mi socorrida gui, entendiendo por tal el Explorador de archivos de Windows Vista, recupero los ficheros adecuados, es decir:
C:\analisis\fv\baseline.01.txt
C:\analisis\fv\baseline.02.txt
C:\analisis\baseline.regshot.01.hiv
C:\analisis\baseline.regshot.02.hiv

Como de momento no necesito más ficheros mejor desmonto el disco virtual:
C:\Program Files\VMware\VMware Virtual Disk Development Kit\bin>vmware-mount.exe
/d Z:

y continúo la campaña...

Descubriendo a los infiltrados

Comenzaré identificando los ficheros creados por el bicho, y para ello se me ocurre comparar las sumas md5 para los resultados de fileverifier++. Dado que existe un estado inicial y un estado posterior a la infección debería poder detectarlos fácilmente. Para esta tarea tengo dos opciones, una de línea de comandos y otra en modo gráfico.

La opción de línea de comandos pasa por utilizar fc, aka file compare, tal como sigue:
C:\>fc /L /W baseline.01.txt baseline.02.txt > diferencias.txt

Si abro el fichero resultante observo como las diferencias aparecen por bloques, indicando las líneas que no coinciden precedidas del nombre del fichero en el que se encuentran. Pero para hacerlo un poco mas visual voy a utilizar ahora windiff.

El binario podemos encontrarlo junto a las herramientas de soporte incluidas en el CD de instalación a partir de Windows 2000 y hasta Windows XP y la versión para servidores, Windows 2003. Para los más vagos o, que como yo, están utilizando Windows Vista, podremos descargarla desde aquí.

Una vez desempaquetado y ejecutado, menú File, Compare Files... y abro primero baseline.01.txt y luego baseline.02.txt. Aparece un mensaje indicando que, efectivamente, los ficheros son diferentes. Para ver estas diferencias pulso Expand, y para limpiar un poco la salida facilitando así su análisis menú Options y desmarco Show Identical Lines y en el menú, View Picture.

Las líneas correspondientes al primer fichero van precedidas del simbolo <! y las del segundo por !>. Para poder tratar los resultados mediante el menú Edit, Edit Composite File se abrirá el editor de textos establecido por defecto con el contenido mostrado por la aplicación. Una vez eliminada la paja descubro los ficheros generados como resultado de la instalación del malware:
 !> 1a8e612eaf5fd2c0cef092f13c0d6c03 ?Md5*C:\\Archivos de programa\
MailSkinner\anim_0.gif
!> 84068d65550d997ad34de5370802ee43 ?Md5*C:\\Archivos de programa\MailSkinner
\anim_help.gif
!> 8c36ac4555d727a99d99ddfe3b1bf085 ?Md5*C:\\Archivos de programa\MailSkinner
\MailSkinner.exe
!> d23a7ac46be84f97dd212b1828af8dbf ?Md5*C:\\Archivos de programa\MailSkinner
\OLSkinner.dll
!> 37c4c38362eaef9fae307086d12bca5f ?Md5*C:\\Archivos de programa\MailSkinner
\uninst.exe
!> 0e701d85faf33eebbfc3b31adabeceb1 ?Md5*C:\\WINDOWS\msskinner\msbackup.dat
!> 80bc32dd690bdfc7a0e73ff608ea095d ?Md5*C:\\WINDOWS\system32\uwyoq.dat
!> 9b900c774f0ea4d52b5ad1332cd5fe0a ?Md5*C:\\WINDOWS\system32\uwyoq.exe
!> 798831331633f45a88915bf1a7018366 ?Md5*C:\\WINDOWS\system32\uwyoq_nav.dat
!> 2a71f842809fc4294ba35a1fb0386822 ?Md5*C:\\WINDOWS\system32\uwyoq_navps.dat

Y guardo lo anterior, que seguro me servirá para posteriores consultas, o quizás para comprobar que voy por buén camino, quien sabe.

Ahora analizaré las diferencias detectadas en las dos capturas del registro de Windows. Y para ello abro regshot, botón 1st shot, Load... y cargo el fichero baseline.regshot.01.hiv. Luego botón 2nd shot, Load... y cargo el fichero baseline.regshot.02.hiv. Por último pulso el botón cOmpare y como resultado se abrirá un txt en el bloc de notas con las modificaciones sufridas en el registro tras la instalación del malware. Nuevamente, una vez eliminada la paja me quedo con:
HKLM\SOFTWARE\Classes\CLSID\{180B4EE9-1795-4429-9651-F17A6515726D}\
VersionIndependentProgID\: "OutlookAddin.Addin"
HKLM\SOFTWARE\Classes\CLSID\{180B4EE9-1795-4429-9651-F17A6515726D}\
TypeLib\: "{5BAD7FAE-81F0-4439-8C1A-3E8907998047}"
HKLM\SOFTWARE\Classes\CLSID\{180B4EE9-1795-4429-9651-F17A6515726D}\
ProgID\: "OutlookAddin.Addin.1"
HKLM\SOFTWARE\Classes\CLSID\{180B4EE9-1795-4429-9651-F17A6515726D}\
InprocServer32\: "C:\Archivos de programa\MailSkinner\OLSkinner.dll"
HKLM\SOFTWARE\Classes\CLSID\{180B4EE9-1795-4429-9651-F17A6515726D}\
InprocServer32\ThreadingModel: "Apartment"
HKLM\SOFTWARE\Classes\CLSID\{180B4EE9-1795-4429-9651-F17A6515726D}\
: "Addin Class"
HKLM\SOFTWARE\Classes\Interface\{0A089E22-5736-4092-B3F8-3F0D5F345482}\
: "IEGEmailSkinnerAddin"
HKLM\SOFTWARE\Classes\TypeLib\{5BAD7FAE-81F0-4439-8C1A-3E8907998047}\
1.0\0\win32\: "C:\Archivos de programa\MailSkinner\OLSkinner.dll"
HKLM\SOFTWARE\Classes\TypeLib\{5BAD7FAE-81F0-4439-8C1A-3E8907998047}\
1.0\HELPDIR\: "C:\Archivos de programa\MailSkinner\"
HKLM\SOFTWARE\Classes\TypeLib\{5BAD7FAE-81F0-4439-8C1A-3E8907998047}\
1.0\FLAGS\: "0"
HKLM\SOFTWARE\Classes\TypeLib\{5BAD7FAE-81F0-4439-8C1A-3E8907998047}\
1.0\: "OutlookAddin 1.0 Type Library"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MailSkinner\
DisplayName: "MailSkinner"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MailSkinner\
UninstallString: "C:\Archivos de programa\MailSkinner\uninst.exe"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MailSkinner\
UninstallString2: ""C:\Archivos de programa\MailSkinner\uninst.exe" /S"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MailSkinner\
DisplayIcon: "C:\Archivos de programa\MailSkinner\MailSkinner.exe"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MailSkinner\
DisplayVersion: "1.0"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MailSkinner\
URLInfoAbout: "http://www.mailskinner.com"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MailSkinner\
Publisher: "OOO «Favorit»"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\uwyoq\
DisplayName: "Favorit"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\uwyoq\
UninstallString: ""c:\windows\system32\uwyoq.exe" -uninstall"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\uwyoq\
NoRemove: 0x00000000
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\uwyoq\
NoModify: 0x00000001
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\uwyoq\
NoRepair: 0x00000001

HKLM\SOFTWARE\MailSkinner\grpid: "37"
HKLM\SOFTWARE\MailSkinner\InstallOpt1: "1"
HKLM\SOFTWARE\MailSkinner\installdt: "20090127"
HKLM\SOFTWARE\MailSkinner\Installer Language: "1034"
HKLM\SOFTWARE\MailSkinner\nums: ""
HKLM\SOFTWARE\MailSkinner\bnrid: ""

HKU\S-1-5-21-1078081533-2146883321-1417001333-500\Software\Microsoft\
Windows\CurrentVersion\Run\MailSkinner: "c:\archivos de programa\
mailskinner\mailskinner.exe"
HKU\S-1-5-21-1078081533-2146883321-1417001333-500\Software\Microsoft\
Windows\CurrentVersion\Run\uwyoq: ""c:\windows\system32\uwyoq.exe" uwyoq"
HKU\S-1-5-21-1078081533-2146883321-1417001333-500\Software\
MailSkinner\grpid: "37"
HKU\S-1-5-21-1078081533-2146883321-1417001333-500\Software\
MailSkinner\InstallOpt1: "1"
HKU\S-1-5-21-1078081533-2146883321-1417001333-500\Software\
MailSkinner\installdt: "20090127"
HKU\S-1-5-21-1078081533-2146883321-1417001333-500\Software\
MailSkinner\UrlMV: "http://www.mailskinner.com/?hitmail=true&grpid=37"

Como curiosidad indicar que, en base a las modificaciones sufridas por el registro de Windows, en el resultado final obtenido de regshot aparece al final una lista con los nuevos archivos generados en el sistema.

Y con todas estas pistas, y mucha, mucha paciencia mañana seguiré analizando la actividad sufrida en el sistema durante el proceso de infección, comprobando detalladamente el log de process monitor.

Leer más...

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.

Leer más...

domingo 13 de septiembre de 2009

About malware

Interesantes lecturas acerca de malware. Primero desde la web de hakin9 hay disponible para descarga un número especial, "Hakin9 best of", completamente gratuito previa suscripción al boletín de noticias. Tres artículos dedicados al análisis de malware de la mano de Jason Carpenter, además de otras lecturas no menos recomendables.

Por último, y ahora de la mano de Wesley McGrew, una presentación complementaria al material utilizado para el CSE 4243/6243 Information and Computing Security class.

¡Que aproveche!

Correción 21/09/2009:

Me temo que me precipité con lo de la disponibilidad de la edición especial de hakin9. El fichero que estaba disponible únicamente contenía las primeras páginas de la publicación, además de que a fecha de hoy parece ya no estarlo. Sin embargo sí merece la pena mencionar que la editorial libera muchos de sus artículos publicados pasados unos meses de su aparición en la edición impresa.

Mi más sinceras disculpas.

Leer más...

lunes 24 de agosto de 2009

Ensayo acerca del tiempo

Parece que rompí la promesa y ahora mismo estoy de vacaciones sentado delante de mi teclado. El motivo, pensar un poco en el tiempo, más concretamente, en la importancia de las líneas de tiempo, (a.k.a. timeline).

Una timeline sería un diagrama cronológico donde cada uno de los registros se correspondería con un evento determinado. Para el caso del análisis forense de sistemas existen una serie de valores asociados a todos los ficheros/directorios y que resultan de especial interés. Se trata de las marcas de tiempo, MAC times, o lo que es lo mismo:

  • Fecha de creación
  • Fecha de modificación
  • Fecha de último acceso
Estos valores podemos consultarlos desde la línea de comandos de Windows, método preferente dado que así no los alteraremos de forma involuntaria:
dir /tc fichero | findstr /r "[0-9]*/[0-9]*/[0-9]*"
dir /tw fichero | findstr /r "[0-9]*/[0-9]*/[0-9]*"
dir /ta fichero | findstr /r "[0-9]*/[0-9]*/[0-9]*"

Los comandos anteriores se utilizan para obtener, respectivamente, la fecha de creación, modificación y último acceso para un fichero determinado. La coletilla se encargará de filtrar la salida para mostrarnos únicamente esta información.

Las diferentes operaciones realizadas sobre ficheros en particiones NTFS provocan la actualización de las diferentes marcas de tiempo. Podemos consultar un resumen de estos procesos en el artículo 299648 de la base de datos de conocimientos de Microsoft.

Muy a tener en cuenta es la forma en que Windows trata el proceso de modificación del parámetro fecha de último acceso. Bajo sistemas de ficheros NTFS este valor no resulta actualizado a veces hasta incluso una hora después de producirse el acceso, todo para conseguir un mayor rendimiento. Según menciona Brian Carrier en su recomendadísimo "Filesystem Forensic Analysis" el valor se almacenaría en memoria hasta su posterior volcado a disco.

El siguiente artículo de la MSDN indica como crear un valor del registro que deshabilitará por completo el proceso de actualización de este valor. De hecho, bajo Windows Vista, esta funcionalidad viene aplicada por defecto.

Si a esto le sumamos que podemos alterar cualquiera de los valores MAC de forma voluntaria ya tenemos una forma burda de dificultar una investigación.

Modificando las marcas de tiempo

Podemos utilizar la API de Win32, concretamente las funciones CreateFile para abrir un fichero y SetFileTime para modificar cualquiera de las marcas de tiempo asociadas al mismo. Sirva como ejemplo el siguiente "programa" generado por un servidor utilizando estos dos artículos de la MSDN:

Changing a File Time to the Current Time
Opening a File for Reading or Writing

El "código" anterior establecerá la fecha de creación de un fichero, indicado como argumento desde la línea de comandos, a la fecha y hora en que se ejecute. Su modificación para otros menesteres resulta realmente trivial. Huelga decir que no me responsabilizo en forma alguna por los efectos negativos que puedan derivarse de su uso (u mal uso).

Y recurriendo a utilidades de terceros dado que en Windows no existe un comando touch integrado como el de los sistemas *NIX, podemos utilizar, por mencionar alguno, el binario ChangeTime. A continuación un ejemplo de uso para modificar la fecha de creación de un fichero, prueba.txt, dejando el resto de parámetros como estaban y consultando sus valores antes y después del proceso:
C:\>ChangeFileTime.exe prueba.txt

*********************************************************************

Filename : prueba.txt
Creation Time : 20-08-2009 23:55:47
Last Access Time : 20-08-2009 23:55:47
Last Modified Time : 20-08-2009 23:55:47

*********************************************************************

C:\>ChangeFileTime.exe -c prueba.txt

*********************************************************************

Filename : prueba.txt
Creation Time : 20-08-2009 23:55:47
Last Access Time : 20-08-2009 23:55:47
Last Modified Time : 20-08-2009 23:55:47

*********************************************************************


Note : You can press if you want to retain previous date/time

Creation Time : 20-08-2009 23:55:47
New Date( dd-mm-yyyy) : 20-08-2009

New Time( hh-mm-ss) : 23:00:00

Last Access Time : 20-08-2009 23:55:47
New Date( dd-mm-yyyy) :

New Time( hh-mm-ss) :

Last Modified Time : 20-08-2009 23:55:47
New Date( dd-mm-yyyy) :

New Time( hh-mm-ss) :

C:\>ChangeFileTime.exe prueba.txt

*********************************************************************

Filename : prueba.txt
Creation Time : 20-08-2009 23:00:00
Last Access Time : 20-08-2009 23:55:47
Last Modified Time : 20-08-2009 23:55:47

*********************************************************************

Bueno, aún no está todo perdido, existen otros valores de tiempo que el SSOO no nos muestra pero que, como las meigas, haberlos hailos. Empezaremos hablando de la "fecha de modificación para la entrada de la MFT", pero para eso, bajaremos varias capas de abstracción analizando la estructrura del disco en crudo.

Introducción al sistema de ficheros NTFS

Primero decir que esto es sólo una introducción, por lo que se quedarán muuuchas cosas en el tintero. Para ahondar más en el tema recomiendo nuevamente el libro de Brian Carrier, "Filesystem Forensic Analysis", y el todavía inacabado (esperemos que por poco tiempo) taller de análisis forense de NTFS publicado en Wadalbertia por el compañero Vic_Thor.

NTFS es, sin duda, uno de los sistemas de ficheros más extendidos en la actualidad y apareció en escena con la presentación de Windows NT. Se diseñó con la intención de que fuera fácilmente escalable y su principal característica es que toda la información relacionada con la estructura del sistema de ficheros se almacena precisamente en ficheros, los cuales no son directamente visibles desde el sistema operativo.

El corazón del sistema de ficheros lo compone la MFT, una tabla de registros por cada uno de los ficheros/directorios almacenados en disco. Cada una de las entradas tiene habitualmente un tamaño de 1024 bytes y la primera de ellas apunta a la ubicación del fichero $MFT, o sea, apunta a sí misma. Dado que la ubicación del $MFT no siempre necesariamente coincide, como también sucede con el resto de ficheros de metadatos, para localizarla se utiliza la dirección de inicio almacenada en el sector de arranque ($Boot), el cual siempre se ubica en el primer sector del sistema de ficheros.

Es más dificil leerlo que verlo, así que nos pondremos a ello. Siempre que sea posible trataré de utilizar herramientas 'free' y por ello descargaremos FTK Imager de AccessData, el hermano pequeño de Forensic Toolkit, también de la misma casa.

Para las pruebas voy a utilizar un pendrive de 2GB, el cual está formateado como NTFS y contiene un único fichero, prueba.txt, con el contenido "Hola Mundo". Desde FTK Imager puede analizarse directamente la estructura de un disco físico, pero en su lugar utilizaré las capacidades de la herramienta para crear imágenes de disco en diferentes formatos.

Una vez lanzada, menú 'Archivo', 'Crear imagen de disco...' y seleccionamos 'Unidad física' como tipo para la evidencia de origen. En la siguiente pantalla indicaremos el disco de origen:

FTK Imager: Selección de unidad

Ahora, tras pulsar el botón 'Agregar', indicaremos el tipo para la imagen de disco resultante (dd en nuestro caso) así como la información relativa al elemento de evidencia (Núm. caso, Núm. evidencia, etc). Por último indicaremos la ubicación del fichero resultante, nombre del fichero de imagen sin extensión y un 'Tamaño de fragmento de imagen' igual a 0 (no fragmentar).

Si hemos aceptado el resto de parámetros por defecto cuando finalice el proceso de creación de la imagen se realizará una verificación de integridad, mostrando un resumen del resultado del proceso que incluye las sumas de comprobación manejadas (SHA1 y MD5). Toda esta información y alguna más se almacenará en disco, junto al fichero de imagen, en un txt.

Ahora que ya tenemos la imagen vamos a analizar su contenido. De nuevo en FTK Imager accedemos al menú 'Archivo', 'Agregar elemento de evidencia...' y seleccionamos 'Archivo de imagen' como tipo para la evidencia de origen, localizando a continuación el fichero obtenido en el paso anterior.

FTK Imager: Lista de archivos

En el panel superior derecho, 'Lista de archivos', veremos los ficheros de metadatos, precedidos por el caracter $, asi como el fichero de texto que utilizaremos para las pruebas. Si seleccionamos el fichero $MFT en el panel inferior derecho podremos ver su contenido en hexadecimal. Nótese como la primera entrada, al igual que el resto, comienza con un valor de firma igual a FILE. Otro posible valor de firma es BAAD e indicará que la entrada de la MFT no es válida.

Si nos desplazamos 1024 bytes hacia delante (0400 en hexadecimal), encontraremos el valor de firma que marca el inicio de una nueva entrada, y una delgada línea discontínua incluida por FTK para facilitar su análisis.

FTK Imager: Vista hexadecimal

Ahora ya sabemos identificar los diferentes registros almacenados en la MFT, pero para localizar la entrada correspondiente a nuestro fichero prueba.txt de forma sencilla vamos a utilizar un "truco". Utilizaremos para ello la herramienta Mount Image Pro, la cual podremos descargar en versión trial, válida durante 14 días, desde el sitio oficial.

Una vez instalada y a través de su interfaz pulsaremos el icono 'Mount' seleccionando a continuación el fichero dd que estamos analizando. Aceptaremos los parámetros ofrecidos por defecto y, como resultado, tendremos una nueva unidad de disco que nos permitirá acceder al contenido de la imagen:

Mount Image Pro

Ahora descargaremos las OEM support tools desde la página de Microsoft y extraeremos el binario nfi.exe, el cual nos mostrará información sobre un volumen formateado como NTFS. Bastará con ejecutar:
C:\>nfi.exe F:

En este caso le estoy indicando como parámetro la unidad 'F:', asignada automáticamente por Mount Image Pro para el montaje de la imagen dd. Si analizamos los resultados obtenidos identificaremos las diferentes entradas almacenadas en la MFT, numeradas empezando por 0 y correspondiéndose la última de ellas con el fichero objeto de análisis, prueba.txt:
File 35
\prueba.txt
$STANDARD_INFORMATION (resident)
$FILE_NAME (resident)
$DATA (resident)

El primer dato que encontramos es el número de entrada de la MFT, seguido del nombre de fichero al que referencia. A continuación están los atributos que conforman la entrada, así como si están íntegramente contenidos en ella (resident) o no (nonresident).

Cada entrada de la MFT está compuesta por una cabecera de un tamaño fijo (48 bytes para Windows 2000 e inferiores o 56 bytes para Windows XP y superiores) y una serie de atributos, almacenados de forma secuencial. A su vez cada atributo está formado por una cabecera de 16 bytes y una serie de datos con estructura variable.

Vamos a verlo "en directo". Desmontaremos la imagen desde Mount Image Pro y volveremos a FTK Imager. Seleccionaremos el fichero $MFT y centraremos nuestra atención en el panel inferior derecho. Si nos encontramos al comienzo del fichero (MFT entry 0) y queremos analizar la entrada número 35, sabiendo que cada entrada de la MFT tiene un tamaño de 1024 bytes:
35 * 1024 = 35840

Y eso que yo y las matemáticas no somos muy buenos amigos.

Para desplazarnos a la dirección deseada botón derecho sobre el panel hexadecimal, 'Ir a desplazamiento...' e indicamos 35840 como el número de bytes en decimal, pulsando el botón 'Finalizar' a continuación.

Vale, ya estamos en la entrada de la MFT asociada a nuestro fichero y hemos descartado los 56 bytes de la cabecera hasta encontrarnos con el primer atributo almacenado. Los primeros 4 bytes de los 16 que componen la cabecera del atributo se corresponden con el identificador de tipo:
10 00 00 00 = 00 00 00 10 = 16

Si tenemos en cuenta que los datos se almacenan en formato litle endian obtendríamos que, en este caso, el valor final se corresponde con el de la $STANDARD_INFORMATION.

Este atributo es siempre residente, existe uno por cada fichero/directorio almacenado y contiene los metadatos asociados al elemento en cuestión. De la cabecera del atributo, cuya estructura es común para todos, también nos interesa el tamaño del mismo, que se almacena en los bytes 5 al 8 y que nos dará el desplazamiento en bytes hasta el comienzo del siguiente atributo:
60 00 00 00 = 00 00 00 60 = 96 bytes

Esto quiere decir que si contamos 96 bytes desde el inicio de la cabecera del atributo nos econtraremos con el comienzo del siguiente atributo:

FTK Imager: Vista hexadecimal

Volvamos a la $STANDARD_INFORMATION y analicemos las 4 marcas de tiempo ubicadas consecutivamente a partir del byte 25. Cada una de estas marcas de tiempo tiene un tamaño de 8 bytes (64 bits) y en NTFS se almacenan en formato UTC. Para nuestro ejemplo serían:
  • Fecha de creación
    ab c1 b7 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200

  • Fecha de modificación
    53 23 b8 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200

  • Fecha de modificación de la entrada MFT
    53 23 b8 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200

  • Fecha de último acceso
    ab c1 b7 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200
Juntos forman los MACE times del fichero prueba.txt (M=Modified, A=Accessed, C=Created y E=Entry modified). Para la interpretación de los valores de tiempo podemos utilizar DCode o el panel inferior izquierdo de la interfaz de FTK, en concreto la pestaña 'Intérprete de valores hexadecimales':

FTK Imager: Intérprete de valores hexadecimales

El valor de modificación de la entrada MFT se actualizará siempre que se modifique cualquiera de los atributos que ésta contiene. Ya hemos encontrado una cuarta marca de tiempo, pero ahora llegan las malas noticias, este valor también puede ser modificado para seguir dificultando una investigación.

Metasploit Anti-Forensics Project

Allá por el 2005, y de la mano de la gente del proyecto antiforense de Metasploit apareció la herramienta timestomp cuya ultima versión disponible de forma independiente tiene ya unos 5 añitos. Desde la publicacion del Metasploit Framework v3.0 el binario timestomp aparece integrado como una extensión del payload meterpreter.

Surgida como una aplicación anti-forense permite modificar los valores para las 4 marcas de tiempo almacenadas en el atributo $STANDARD_INFORMATION de un fichero. Posee también un flag que permite eliminar por completo estas marcas de tiempo para confundir la interpretación de los datos realizada por Encase, pero desde Windows Vista y utilizando la ultima versión independiente disponible no he conseguido aplicar esta funcionalidad.

Vamos a probarla y para ello utilizaremos nuevamente el pendrive original con cuya imagen de disco estábamos trabajando. Obtendremos primero los valores MACE asignados actualmente al fichero:
C:\>timestomp.exe F:\prueba.txt -v
Modified: Saturday 8/22/2009 23:9:26
Accessed: Saturday 8/22/2009 23:9:26
Created: Saturday 8/22/2009 23:9:26
Entry Modified: Saturday 8/22/2009 23:9:26

Y ahora modificaremos todos los atributos MACE, comprobando nuevamente sus valores al terminar:
C:\>timestomp F:\prueba.txt -z "Saturday 8/22/2009 01:00:00 PM"

C:\>timestomp.exe F:\prueba.txt -v
Modified: Saturday 8/22/2009 13:0:0
Accessed: Saturday 8/22/2009 13:0:0
Created: Saturday 8/22/2009 13:0:0
Entry Modified: Saturday 8/22/2009 13:0:0

Afortunadamente todavía existe un conjunto de valores MACE asociados a un fichero y que nos servirán para cotejar los resultados obtenidos, permitiendo detectar el uso de herramientas similares a timestomp.

El atributo $FILENAME

Antes de continuar repetiremos el proceso de generación de un fichero de imagen de la unidad física analizada, en este caso mi pendrive. No voy a indicar nuevamente los pasos a dar, basta con volver algunos párrafos atras para encontrarlos.

Una vez abierta nuevamente la imagen mediante FTK nos desplazaremos a la entrada número 35 de la MFT (offset 35840), descartaremos la cabecera y, teniendo en cuenta que el desplazamiento desde el primer atributo, $STANDARD_INFORMATION, hasta el siguiente son 96 bytes avanzaremos hasta el comienzo del mismo.

FTK Imager: Vista hexadecimal

Consultaremos antes los valores MACE de la $STANDARD_INFORMATION una vez modificados mediante timestomp:
  • Fecha de creación
    00 78 57 b1 17 23 ca 01 = sáb, 22 agosto 2009 13:00:00 UTC+0200

  • Fecha de modificación
    00 78 57 b1 17 23 ca 01 = sáb, 22 agosto 2009 13:00:00 UTC+0200

  • Fecha de modificación de la entrada MFT
    00 78 57 b1 17 23 ca 01 = sáb, 22 agosto 2009 13:00:00 UTC+0200

  • Fecha de último acceso
    00 78 57 b1 17 23 ca 01 = sáb, 22 agosto 2009 13:00:00 UTC+0200
Seguimos donde estábamos, los primeros 4 bytes de los 16 que componen la cabecera del atributo se corresponden con el identificador de tipo para $FILENAME:
30 00 00 00 = 00 00 00 30 = 48

Este atributo, al igual que el anterior, es siempre residente y existe uno por cada fichero/directorio almacenado. Dentro de una entrada MFT este atributo se utiliza para contener el nombre del elemento así como una referencia a su directorio padre.

Si contamos 32 bytes desde el comienzo del atributo encontraremos los 4 valores de 8 bytes conteniendo otro conjunto de marcas de tiempo:
  • Fecha de creación
    ab c1 b7 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200

  • Fecha de modificación
    ab c1 b7 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200

  • Fecha de modificación de la entrada MFT
    ab c1 b7 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200

  • Fecha de último acceso
    ab c1 b7 d4 6c 23 ca 01 = sáb, 22 agosto 2009 23:09:26 UTC+0200
Si tenemos en cuenta que estos valores únicamente se modifican cuando se crea o mueve un fichero, por lógica deberían ser anteriores a los valores del atributo $STANDARD_INFORMATION; por lo tanto, en nuestro caso, encontramos una evidencia de que las marcas de tiempo pueden haber sido alteradas deliberadamente.

La interpretación de los valores de tiempo dependerá de las características del caso; como decía Einstein "el tiempo es relativo".

Enlaces relacionados

Timeline Analysis Bibliography

The Linux-NTFS Wiki

Wikipedia: NTFS (en, es)

Taller Forensic II. NTFS (Iniciado.....)

Analysis of hidden data in the NTFS file system

Windows Vista Forensic Artifacts

Time and Timestamps

Beating the Daylight Savings Time bug and getting correct file modification times

Anti-Forensics

Metasploit Anti-Forensics Project

Forensic Wiki: Timestomp

Detecting timestamp changing utilities

NTFS Time Stamps --file created in 1601, modified in 1801 and accessed in 2008!!

Conclusión, al menos sabemos más que ayer, pero esperemos que un poco menos que mañana.

Leer más...

domingo 9 de agosto de 2009

RegRipper + XP Restore Points = ripXP

Para luchar con el calor no hay nada como ponerse delante del ordenador (modo irónico), pero como que también es una forma de distraerse y todavía no estoy de vacaciones, con la consecuente promesa de "lo más cerca de un PC 30 mts", pues allá que me he puesto.

Surgida después de una charla entre Rob Lee (el que tuvo la idea) y Harlan Carvey (el que la llevó a la práctica) nació esta potente herramienta. Se trata de explotar la capacidad cronologica que ofrecen los puntos de restauracion de XP para, de esta forma, obtener una línea de tiempo donde los hechos se corresponderán con las modificaciones ocurridas en un sistema, utilizando como fuente los ficheros del registro de Windows.

En el fondo regripper y ripxp son muy parecidos, tanto, que el segundo utiliza los plugins que incorpora el primero. Pero lo mejor es que la probemos, así que vamos al lío.

Descargamos la última versión disponible y la extraemos junto con RegRipper, la cual descargaremos también si es que no lo hemos hecho antes. En mi caso están las dos juntas aquí:

C:\rr>dir
El volumen de la unidad C es SYSTEM
El número de serie del volumen es: B00D-25C9

Directorio de C:\rr

06/08/2009 21:12 <DIR> .
06/08/2009 21:12 <DIR> ..
25/05/2008 08:49 290 auditpol.bat
25/05/2008 08:42 2.666 faq
09/04/2008 07:28 556 license.txt
28/01/2008 12:21 365.568 p2x588.dll
06/08/2009 21:12 <DIR> plugins
25/05/2008 08:44 90.588 regripper.pdf
09/09/2008 13:37 679.149 rip.exe
31/08/2008 07:53 7.578 rip.pl
12/11/2008 11:02 696.826 ripxp.exe
05/11/2008 22:01 10.688 ripxp.pl
10/07/2009 16:25 1.101 ripxp_instructions.txt
12/05/2008 12:54 1.526.589 rr.exe
12/05/2008 12:54 10.947 rr.pl
26/05/2008 07:06 318 ua.bat
13 archivos 3.392.864 bytes
3 dirs 14.309.167.104 bytes libres

Recomendado un vistazo rápido a ripxp_instructions.txt, que junto con los flags aceptados por la aplicación, nos permitirá ir entrando en materia:
C:\rr>ripxp
RipXP v.20081001 - CLI RegRipper tool
RipXP [-r Reg hive file] [-p plugin module][-d RP dir][-lgh]
Parse Windows Registry files, using either a single module from the plugins folder.
Then parse all corresponding hive files from the XP Restore Points (extracted from
image) using the same plugin.

-r Reg hive file...Registry hive file to parse
-g ................Guess the hive file (experimental)
-d RP directory....Path to the Restore Point directory
-p plugin module...use only this module
-l ................list all plugins
-h.................Help (print this information)

Ex: C:\>rip -g
C:\>rip -r d:\cases\ntuser.dat -d d:\cases\svi -p userassist

All output goes to STDOUT; use redirection (ie, > or >>) to output to a file.

copyright 2008 H. Carvey

Ficheros para el análisis

Necesitamos "evidencias", las cuales yo he optado por extraer de una máquina virtual que tengo para hacer mis pruebas. Voy a utilizar FTK Imager, que frente a montar el fichero vmdk con vmware-mount, simplificará mucho las cosas, además de que resulta más profesional.

Una vez lanzada, menú 'Archivo', 'Agregar elemento de evidencia...' y seleccionamos 'Archivo de imagen' como tipo para la evidencia de origen, localizando a continuación el fichero correspondiente al disco de la máquina virtual.

Un inciso, vamos a crear la estructura de directorios para las pruebas, por ejemplo en la raíz del sistema (%SystemDrive% utilizando la correspondiente variable de entorno):
C:\>mkdir caso01\restore caso01\config caso01\hashes

Seguimos. Ya tenemos el fichero de evidencia abierto en FTK, asi que navegaremos hasta la ubicación de los puntos de restauración del sistema, que siempre y cuando no se hayan deshabilitado, lo cual no es la opción por defecto, encontraremos en System Volume Information, dentro del directorio raíz de cada uno de los discos en los que se encuentre habilitada la opción "Restaurar sistema".


Como en la imagen, botón derecho sobre la carpeta adecuada, 'Exportar archivos...', y lo guardamos en C:\caso01\restore. De paso también guardaremos los hashes, 'Exportar lista hash de archivos...', en un fichero CSV dentro de C:\caso01\hashes, con los valores tanto para MD5 como para SHA1.

Ahora los ficheros que componen el registro de Windows. Para las ramas comunes a todos los usuarios del sistema buscaremos en C:\WINDOWS\system32\config, los seleccionamos todos, botón derecho, 'Exportar archivos...' y los guardamos en C:\caso01\config.


Lo mismo para el fichero NTUSER.DAT del, en mi caso, único usuario del sistema. La ruta concreta dentro del fichero de imagen será Documents and Settings\Administrador, y los destinos C:\caso01\config y C:\caso01\hashes para NTUSER.DAT y el hash, respectivamente. Ya lo tenemos todo, así que cerraremos FTK Imager.

En el principio creó la línea de comandos

Continuamos con nuestras pruebas, ahora utilizando %COMSPEC%, o lo que es lo mismo, el binario cmd.exe. Vamos a probar el plugin 'samparse', el cual nos mostrará la información referente a los usuarios y grupos del sistema, así como sus relaciones, entendiendo por tales la pertenencia de los primeros a los segundos. Como disponemos de diferentes "snapshots" constituidos por los puntos de restauración del sistema analizado, mediante el uso de ripxp obtendremos un registro cronológico del proceso de creación, eliminación y modificación de cuentas de usuarios y grupos:
C:\>cd rr
C:\rr>ripxp -r ..\caso01\config\SAM -d "..\caso01\restore\_restore{5BCD77F5-6BBD
-4879-B1A8-5F08526BCAF6}" -p samparse > ..\caso01\analisis.sam.txt

La salida la hemos redirigido a un fichero para poder analizarla con más calma. Si observamos los resultados encontramos, en primer lugar, la información extraída de la clave SAM del sistema (obviamente la salida ha sido recortada):
RipXP v.20081001
Launched Wed Aug 5 20:47:08 2009 Z

..\caso01\config\SAM
...

Y si seguimos buscando, la información asociada a cada punto de restauración precedida por una cabecera con un resumen del mismo:
----------------------------------------
Restore Point Info
Description : Punto de control del sistema
Type : System Checkpoint
Creation Time : Thu May 14 20:29:04 2009
...

Queda patente la potencia de ripXP para la generación de una auténtica timeline de las modificaciones en el registro de Windows. Las limitaciones las ponemos nosotros, los medios, el señor Harlan Carvey.

Lecturas relacionadas

Análisis de la funcionalidad "Restaurar sistema".

RegRipper.

El registro de Windows.

Y esto ha sido todo de momento, en breve más, y mejor, espero.

Leer más...