TL;DR. Construye una línea de tiempo fusionada de ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon. Usa ShimCache para definir el reparto (rutas), luego enriquece cada fila con timestamps de fuentes que sí registran eventos. Etiqueta cada timestamp con su semántica de fuente. Nunca fusiones "mtime de archivo" y "inicio de proceso" en una sola columna.
Una línea de tiempo de ejecución de programas es el artefacto más útil que produce un investigador de IR Windows. Bien hecha, cuenta una historia cronológica entre varias fuentes de datos. Mal hecha, exagera la evidencia y la cuestiona cualquiera que sepa lo que es una mtime. Aquí está el workflow que ejecuto, con el ShimCache como espina dorsal.
Por qué el ShimCache es una buena espina dorsal
El cache rara vez es la fuente más precisa para ningún campo individual, pero tiene ventajas únicas como ancla de línea de tiempo:
- Lleva la ruta del archivo explícitamente. Algunos artefactos solo tienen hashes o rutas parciales.
- Captura ejecutables que Windows simplemente examinó, así que incluye binarios que corrieron brevemente y se borraron (que Prefetch y BAM pueden perder).
- Sobrevive a muchos intentos anti-forenses que vacían otros artefactos, con salvedades importantes.
Usa el ShimCache para definir el reparto de personajes de la línea de tiempo. Luego enriquece cada fila con artefactos corroborantes para asignar tiempos fiables.
Las fuentes de datos a fusionar
Una línea de tiempo completa de ejecución saca de al menos estas cinco:
| Fuente | Qué añade a la fila |
|---|---|
| ShimCache | Ruta + mtime del archivo |
| AmCache | SHA-1, tamaño del archivo, editor, marca de instalación, marca de primera ejecución |
| Prefetch | Tiempos de inicio de proceso (hasta los últimos 8), módulos cargados |
| BAM/DAM | Marca "última ejecución" por usuario en Win10/11 |
| Security / Sysmon | Eventos de creación de proceso con línea de comandos, padre, usuario |
Para contexto, mira la referencia de artefactos de ejecución de programas. En casos más grandes, mete SRUM para uso de red y recursos, el USN journal para actividad de archivos, y archivos LNK más jump lists para historial del shell.
Un workflow reproducible
- Recolecta los artefactos. Hive SYSTEM con logs de transacciones,
Amcache.hvecon sus.LOG1y.LOG2,C:\Windows\Prefetch\*.pf, log de eventos Security exportado, log Sysmon si está disponible, NTUSER.DAT por usuario. La guía de adquisición cubre el hive SYSTEM en concreto. - Parsea cada uno a una tabla normalizada. Usa la suite de Eric Zimmerman (
AppCompatCacheParser,AmcacheParser,PECmd) para trabajo offline, o el Shimcache Parser para la parte ShimCache en tu navegador. - Fusiona por (ruta, SHA-1 opcional). La clave de join es la ruta del archivo, con SHA-1 de AmCache como señal secundaria. Vigila las diferencias de caja y la normalización de rutas (
\??\C:\vsC:\). - Etiqueta cada timestamp con su semántica de fuente. No mezcles "AmCache install_date" y "Prefetch run_time" en una sola columna. Responden a preguntas distintas. Mantenlos adyacentes pero distintos.
- Renderiza a una herramienta que maneje atribución de fuente por fila. El Timeline Explorer (TLE) de Eric Zimmerman y Plaso / log2timeline lo hacen bien los dos. CSV en una hoja de cálculo vale para casos pequeños.
Cómo se ve lo bueno
Una fila defendible en una línea de tiempo final:
2026-04-12 09:14:33 UTC C:\Users\alice\AppData\Local\Temp\setup.exe
ShimCache mtime: 2026-04-12 09:14:30 UTC
AmCache : SHA-1 a3b8c9..., signer "Acme Updates", install 2026-04-12 09:14:33
Prefetch : última ejecución 2026-04-12 09:15:01 UTC (1 ejecución)
Security 4688 : 2026-04-12 09:15:01 UTC, PID 4521, padre PID 1234 (svchost.exe)
Cada timestamp viene con fuente y la fila aguanta el cuestionamiento. Lo contrario ("ShimCache muestra que setup.exe se ejecutó a las 09:14:33") confunde mtime de archivo con tiempo de ejecución y es el tipo de afirmación que hace que rechacen los informes. Mira prueba de ejecución.
Cuando las fuentes discrepan
Los conflictos son datos.
- mtime de ShimCache ≠ primer-run de Prefetch. Normal. Miden cosas distintas. Anota ambos. No elijas uno.
- AmCache dice ejecutado, ShimCache está vacío para ese archivo. Razones posibles: limpieza anti-forense (patrones de detección), la entrada fue desalojada del tope de 1.024, el binario se ejecutó tras el último apagado limpio (sigue solo en memoria, saca un volcado de RAM).
- Prefetch ausente. Las SKU de servidor y hosts ajustados para SSD suelen tener Prefetch desactivado. Cae a AmCache más BAM.
- EVTX Security 4688 tiene nombre de programa pero no línea de comandos. El auditing de línea de comandos estaba apagado. Útil pero limitado. El parser EVTX cubre los prerrequisitos de política de auditoría.
Parar en el punto correcto
Una línea de tiempo no tiene que ser completa para ser valiosa. Una ventana enfocada ("¿qué corrió en el host X entre las 14:00 y las 18:00 del 2026-04-11?") montada con rigor le gana a una desbocada con atribución débil. El workflow de caza de malware ayuda a elegir esa ventana.
Lectura adicional
- Plaso / log2timeline. motor open source de líneas de tiempo que consume ShimCache, AmCache, Prefetch, y decenas de otros artefactos de Windows.
- Herramientas de Eric Zimmerman. parsers de referencia más Timeline Explorer.
- Velociraptor
Windows.Registry.AppCompatCache. recolección a escala.