TL;DR. Construye una línea temporal fusionada de ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon. Usa ShimCache para definir el reparto (rutas) y luego enriquece cada fila con timestamps de otras fuentes. Etiqueta cada timestamp con su semántica de origen — nunca fusiones «mtime del archivo» y «arranque del proceso» en una sola columna.
Una línea temporal de ejecución de programas es el artefacto más útil que un investigador IR de Windows produce. Bien hecha, cuenta una historia cronológica a través de varias fuentes. Mal hecha, exagera la evidencia y se cae bajo escrutinio. Este post enseña a construir una con el ShimCache como columna vertebral.
Por qué el ShimCache es buena columna
El ShimCache rara vez es la fuente más precisa para un campo concreto, pero tiene ventajas únicas como ancla temporal:
- Lleva la ruta del archivo explícita (algunos artefactos solo tienen hashes o rutas parciales).
- Captura ejecutables que Windows simplemente examinó — incluye binarios que corrieron brevemente y fueron borrados, que Prefetch y BAM pueden perder.
- Sobrevive a muchos intentos anti-forense que borran otros artefactos (con advertencias importantes).
Usa el ShimCache para definir el reparto de tu línea temporal, y luego enriquece cada fila con artefactos corroborantes para asignar tiempos fiables.
Las fuentes a fusionar
Una línea temporal completa de ejecución se nutre al menos de estas cinco:
| Fuente | Qué añade a la fila |
|---|---|
| ShimCache | Ruta + mtime del archivo |
| AmCache | SHA-1, tamaño, editor, fecha de instalación, fecha de primera ejecución |
| Prefetch | Tiempos de arranque de proceso (hasta los 8 últimos), archivos cargados |
| BAM/DAM | Timestamp «última ejecución» por usuario en Win10/11 |
| Security/Sysmon | Eventos de creación de proceso con línea de comandos, padre, usuario |
Para el detalle de cada uno, mira la referencia de artefactos de ejecución.
Un flujo reproducible
- Recolecta los artefactos. Colmena SYSTEM (con logs de transacción),
Amcache.hve,C:\Windows\Prefetch\*.pf, registro Security exportado, log Sysmon si está disponible. - Parsea cada uno a una tabla normalizada. Usa la suite Eric Zimmerman (
AppCompatCacheParser,AmcacheParser,PECmd) o el Shimcache Parser para la parte ShimCache en tu navegador. - Fusiona por (ruta, SHA-1 opcional). La clave de unión es la ruta, con SHA-1 como señal secundaria cuando AmCache lo aporta. Ojo: el ShimCache puede tener la ruta ligeramente distinta (mayúsculas, normalización).
- Etiqueta cada timestamp con su semántica de origen. No fusiones «fecha de instalación AmCache» y «hora de ejecución Prefetch» en una sola columna — responden a preguntas distintas. Mantenlas adyacentes pero separadas.
- Renderiza a una herramienta que maneje atribución por fila. Timeline Explorer (TLE) de Eric Zimmerman y Plaso / log2timeline lo hacen bien. CSV en una hoja de cálculo funciona para casos más pequeños.
Cómo se ve algo «bueno»
Una fila defendible en una línea temporal final se parece a:
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…, firmante «Acme Updates», instalación 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, PID padre 1234 (svchost.exe)
Cada timestamp está sourceado y la fila aguanta el examen. Lo opuesto — «el ShimCache muestra que setup.exe corrió a las 09:14:33» — confunde el mtime del archivo con la hora de ejecución y es el tipo de afirmación que tumba un informe. Mira prueba de ejecución.
Cuando las fuentes no concuerdan
Los conflictos son dato útil:
- mtime ShimCache ≠ primera ejecución Prefetch. Es normal — miden cosas distintas. Anota ambas, no escojas una.
- AmCache dice ejecutado, ShimCache está vacío para ese archivo. Razones posibles: borrado anti-forense (patrones de detección), entrada expulsada del tope de 1.024, binario que corrió después del último apagado limpio.
- Prefetch ausente. SKU de servidor y hosts con SSD pesado a menudo tienen Prefetch desactivado — cae a AmCache + BAM.
Parar en el sitio correcto
Una línea temporal no tiene que estar completa para ser valiosa. Una ventana enfocada — «¿qué corrió en el host X entre 14:00 y 18:00 el 2026-04-11?» — construida con rigor le gana a una sprawling con atribución débil. El flujo de caza de malware te ayuda a elegir esa ventana.
Lectura adicional
- Plaso / log2timeline — motor de líneas temporales open-source que consume ShimCache, AmCache, Prefetch y decenas más.
- Herramientas Eric Zimmerman — parsers de referencia + Timeline Explorer.
- Velociraptor
Windows.Registry.AppCompatCache— colección a escala.