Análisis forense de plataformas Windows: Tecnologías de aceleración y precarga (Prefetcher y SuperFetch)

Hola,

Continuando en la línea anterior sobre análisis forense en sistemas Windows, hoy vamos a comentar cómo incorporar a nuestra actividad la información procedente de las tecnologías de aceleración de carga de sistema y aplicaciones de las plataformas más recientes de Microsoft Windows. Emplearemos un formato similar al artículo anterior, describiendo primero el fundamento teórico, aplicando después la parte teórica a un ejemplo práctico.

Introducción

Prefetcher es un componente de plataformas Microsoft Windows aparecido originalmente en Windows XP. Uno de los comentarios más frecuentes cuando apareció XP, desde el punto de vista de la usabilidad, tenía que ver con la rapidez en la carga del sistema y las aplicaciones frente a las versiones anteriores de Windows. Esta aceleración se debe en parte a Prefetcher, un componente que según han ido sucediéndose las versiones de Windows, ha ido variando en las implementaciones. Así, por ejemplo, con la llegada de Windows Vista se incorporó SuperFetch, cuyo funcionamiento se basa en la monitorización del uso de los programas para adaptar el proceso de aceleración de carga cargando en memoria los elementos más accedidos por el patrón de uso del usuario. También con Vista se introdujo un componente llamado Readyboost, principalmente para para soportar SuperFetch ofreciendo un caché adicional de operación en disco empleando medios de almacenamiento masivos, aunque no trataremos esta tecnología en este artículo.

Tanto como para Prefetcher como para SuperFecth, el fundamento es exactamente el mismo: cuando se carga el sistema, como es lógico, un determinado número de ficheros es accedido y sus contenidos son cargados en la memoria. Dada la arquitectura del sistema, es frecuente que los mismos ficheros sean accedidos numerosas veces, lo que ralentiza la carga. La tecnología de prefetching observa el patrón de acceso descrito, graba la secuencia empleada y reutiliza la información para tratar de realizar una carga óptima del sistema en sucesivos encendidos del sistema. Los cambios suelen captarse demorando el proceso de monitorización al evento que culmine en primera instancia, entre la carga de la shell de usuario o el tiempo completo de carga del sistema, siendo el proceso similar para la captación de trazas de carga de aplicaciones.

Técnicamente, para cada aplicación o proceso del sistema sometido a prefetching, se genera un fichero .pf que incluye las referencias a los ficheros y directorios que dicha aplicación utilizó en la carga. Adicionalmente, el fichero tendrá la huella temporal de la última ejecución de la aplicación o proceso seleccionado. El resultado para el usuario es un sistema que carga más rápido, lo cual agradecerá. Para el analista forense, el resultado es otra fuente más de información valiosa, especialmente para descubrir trazas de uso y eliminación de aplicaciones por parte de los usuarios, lo cual, también se agradece. Este artículo se centrará en el análisis de Prefectcher para Windows XP.

Inspección de Prefetcher

La configuración de Prefetcher se almacena en la siguiente llave del registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters

Para acceder a dicha llave podéis utilizar cualquier herramienta de acceso al registro, y verificar su valor. Por defecto, el valor será 3, lo que implica que el prefetching está activo para el sistema y las aplicaciones.

prefetcher registry key

Una vez verificado el valor, podemos acceder a los contenidos de Prefetcher, ya que están ubicados en el directorio del sistema. Por defecto, y suponiendo que el sistema tiene la unidad lógica C: asignada, la ubicación será C:\WINDOWS\Prefetch. Algunos ejemplos son, para mi máquina Windows, las siguientes entradas de Firefox y Keepass:

shernando@hpsergio-linux:/media/0A8C1FAF8C1F9473/WINDOWS/Prefetch$ ls -la | grep FIREFOX
-rw------- 2 shernando shernando  127612 2010-11-02 19:04 FIREFOX.EXE-24B8FB1A.pf
shernando@hpsergio-linux:/media/0A8C1FAF8C1F9473/WINDOWS/Prefetch$ ls -la KEEPASS.EXE-35620CED.pf 
-rw------- 2 shernando shernando 108848 2010-11-02 17:38 KEEPASS.EXE-35620CED.pf

Es posible explorar los contenidos del fichero, para obtener información adicional que puede resultar útil en la investigación. Hay muchas herramientas que permiten leer los contenidos de los ficheros .pf, si bien es habitual emplear Prefetch Parser, Windows File Analyzer, prefetch-tool o WinPrefetchView.

Así, para el caso de Firefox, según prefetch-tool se obtiene que ha sido ejecutado 62 veces con la huella temporal que se muestra. Nótese la diferencia respecto a la consulta anterior, ya que la efectuada en Linux correspondía con el sistema sin cargar, mientras que los de prefetch-tool corresponden con el sistema en ejecución en el momento de escribir el artículo.

Analyzing 21 of 129 files
Filename: firefox.exe-24b8fb1a.pf
MD5: 1b856921749e18e225b4f4ac5cf538d5
SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709
Last accessed time: Sat Nov 06 20:16:24 2010
Last modified date: Sat Nov 06 21:16:29 2010
File creation date: Sun Sep 05 20:57:07 2010
Total number of runs: 62

Mediante WinPrefetchView o Prefetch Parser es posible conocer también el nombre de los ficheros accedidos por la aplicación en la inicialización, así como la ruta mapeada en Prefetcher, lo que servirá para localizarlos en el proceso de carga. Para Firefox estos son algunos ejemplos:

FIREFOX.EXE-24B8FB1A.pf \DEVICE\HARDDISKVOLUME1\WINDOWS\SYSTEM32\ NTDLL.DLL
FIREFOX.EXE-24B8FB1A.pf \DEVICE\HARDDISKVOLUME1\WINDOWS\SYSTEM32\ KERNEL32.DLL
FIREFOX.EXE-24B8FB1A.pf \DEVICE\HARDDISKVOLUME1\WINDOWS\SYSTEM32\ UNICODE.NLS
FIREFOX.EXE-24B8FB1A.pf \DEVICE\HARDDISKVOLUME1\WINDOWS\SYSTEM32\ LOCALE.NLS
FIREFOX.EXE-24B8FB1A.pf \DEVICE\HARDDISKVOLUME1\WINDOWS\SYSTEM32\ SORTTBLS.NLS

Resumen

En el proceso de investigación de un sistema Windows, a la hora de componer la línea temporal de eventos o para conocer la actividad del usuario, puede resultar de utilidad la consulta de los contenidos de Prefetcher. No sólo para saber qué elementos ha ejecutado, o el número de veces que han sido ejecutados, sino para tener información certera sobre la huella temporal.

La mayoría de los usuarios estándar de plataformas Windows ni tan siquiera conoce la utilidad de Prefetch, ni dónde se ubican los ficheros. Es por tanto que en la mayoría de los casos este directorio está repleto de información (existe una limitación, sólo se almacenan 128 entradas) que podemos explotar para el proceso forense. Teniendo en cuenta el desconocimiento de estas tecnologías, no es de extrañar que la mayoría de aplicaciones de gestión de privacidad eliminan los contenidos del directorio de prefetching en su proceso de limpieza. Existe un motivo claro para hacerlo.

Un saludo,