Cómo analizar archivos prefetch de Windows
Tienes un directorio C:\Windows\Prefetch\ extraído de una imagen de triage y una pregunta que responder sobre ejecución de programas. El orden de abajo es el que realmente sigo, más o menos en la secuencia en que lo hago. Saltarte pasos es bajo tu responsabilidad; la fase en la que los analistas se queman casi siempre es la 3.
1. Triagea la carpeta
Parsea todo el directorio de una vez. PECmd sobre una carpeta, pyscca en bucle o el parser de este sitio: elige uno que maneje correctamente los archivos MAM-comprimidos de Win10/11. Las herramientas Python antiguas se saltan MAM en silencio y te dejan con una visión parcial.
Antes de pinchar nada, responde tres preguntas desde la tabla resumen:
- ¿Cuántos archivos? Una estación Windows 10/11 con uso normal está en las centenas. Doce archivos en un endpoint de seis meses significa o bien una SKU servidor, un wipe, o
EnablePrefetcher = 0. Cero archivos con el directorio presente suele significar que SysMain se detuvo. - ¿Qué versiones? Mayoritariamente v30 en Win10, mayoritariamente v31 en Win11. Una entrada suelta v17 en un host moderno es anómala: v17 solo se entrega en XP/Vista/7, así que encontrarla en una imagen de Win11 significa que el archivo se introdujo desde otro sitio.
- ¿Algún nombre obviamente inusual? Ordena por nombre de ejecutable y echa un vistazo. Variantes de PowerShell con sufijos aleatorios, binarios con nombres de un solo carácter, todo lo que parezca empaquetado, todo lo que viva en
\AppData\Local\Temp\o\Users\Public\.
2. Profundiza en las filas marcadas
Para cada candidato, tres preguntas:
- ¿Cuándo se ejecutó? En v26+ obtienes hasta ocho valores FILETIME en UTC, además del "last run". Mapea esos sobre la ventana del incidente. Si tu ventana es "entre martes 18:00 y miércoles 03:00" y tres de las ocho ranuras de última ejecución caen dentro, ese es tu recuento de ejecuciones para el periodo de interés.
- ¿Desde dónde se ejecutó? La sección de información de volumen lleva la ruta de dispositivo NTFS y el número de serie. Un número de serie que no coincide con el volumen primario del sistema apunta a medios extraíbles o a una imagen montada. Cruza el número de serie con los registros de volumen de la MFT y los seriales de unidad de LNK, que a menudo guardan el mismo número.
- ¿Qué tocó? La lista de métricas de archivos es cada ruta que el binario leyó en sus primeros diez segundos de ejecución monitorizada: típicamente unos cientos de entradas en una aplicación real. Referencias a directorios de perfil de usuario, recursos compartidos de red o DLLs del sistema renombradas son pistas. El secuestro del orden de búsqueda de DLL aparece aquí como un binario de confianza cargando algo desde
\AppData\Local\Temp\en lugar de\System32\.
3. Siempre, cruza referencias
Prefetch por sí solo te dice que un proceso arrancó. No te dice quién lo arrancó, con qué argumentos, ni si el binario en disco ahora es el binario que se ejecutó. Este paso es lo que convierte un hit prefetch en una afirmación defendible de ejecución.
- AmCache para SHA-1, tamaño de archivo, editor, estado de firma. Una entrada prefetch sin registro AmCache es inusual en Win10+. Una entrada AmCache sin Prefetch es común (binario presente, nunca ejecutado).
- Shimcache / AppCompatCache corrobora la ruta. Que tanto Prefetch como Shimcache sitúen el binario en
C:\Users\Public\evil.exees más difícil de rebatir que cualquiera por separado. - Security 4688 o Sysmon EID 1: si la auditoría de procesos estaba activa, aquí obtienes el proceso padre y la línea de comandos. Prefetch nunca registra argumentos.
- El USN journal te dice cuándo llegó el binario al disco; combínalo con el FILETIME más temprano de Prefetch para acotar el tiempo de permanencia.
- RecentFileCache en sistemas más antiguos para la misma cobertura que AmCache aporta en los modernos.
4. Busca manipulación
Un .pf es solo un archivo. Puede borrarse, plantarse o reescribirse. Tres comprobaciones baratas:
- Recalcula el hash del path y compáralo con el sufijo del nombre. El algoritmo de Win7+ es corto y el parser expone la ruta que parseó; una discrepancia significa que el archivo no se originó aquí.
- Un contador de ejecuciones de 1 con un "last run" que coincide con la ventana de compromiso sospechado en un host que lleva semanas encendido merece una segunda mirada. El
.pflegítimo puede haber sido borrado y haberse escrito uno nuevo cuando el binario volvió a ejecutarse tras la limpieza. - Ocho FILETIMEs de última ejecución agrupados al mismo segundo, o a segundos exactos, huelen a manipulación por lotes. Las ejecuciones reales se distribuyen entre offsets sub-segundo.
El artículo dedicado a la manipulación tiene más detalle; esto es la pasada rápida.
5. Exporta y documenta
Exporta salida estructurada (JSON o CSV) y guárdala junto a las notas del caso. Quieres un artefacto estable en marca temporal, fácil de grepear, fácil de diffear contra una recolección posterior del mismo host y fácil de incorporar a una herramienta de línea de tiempo. El CSV de PECmd se conecta directamente con la salida de línea de tiempo de KAPE; el JSON del parser de este sitio sirve para jq y un notebook.
Para más contexto sobre cada campo, consulta Entendiendo Windows Prefetch y Cambios en Prefetch v30 y v31.