BAM vs Prefetch vs ShimCache vs Amcache: ¿en cuál confiar?
Comparativa de las evidencias de ejecución en Windows: qué registran BAM, Prefetch, ShimCache y Amcache, cuánto tiempo lo conservan y cómo combinarlos.
TL;DR. BAM responde a qué cuenta ejecutó un programa y cuándo, recientemente. Prefetch responde a cuántas veces y qué cargó. Amcache responde a qué archivo exactamente (SHA-1). ShimCache responde a si esa ruta existía en disco. Ninguno lo responde todo, y cada uno falla a su manera — BAM olvida al cabo de una semana e ignora USB y red, Prefetch puede estar desactivado, ShimCache solo se escribe al apagar, y una entrada en Amcache no siempre implica ejecución. Úsalos como testigos que se complementan.
Esta es la comparación a la que volvemos una y otra vez al documentar evidencias de ejecución en Windows 10 y 11. Para BAM en sí, consulta la guía completa de BAM/DAM; para la comparación por usuario con UserAssist, BAM vs UserAssist.
De un vistazo
| BAM / DAM | Prefetch | ShimCache | Amcache | |
|---|---|---|---|---|
| Ubicación | Colmena SYSTEM, Services\bam\State\UserSettings\<SID> | C:\Windows\Prefetch\*.pf | Colmena SYSTEM, Control\Session Manager\AppCompatCache | C:\Windows\AppCompat\Programs\Amcache.hve |
| ¿Por usuario? | Sí (clave SID) | No | No | No |
| Marcas de tiempo | Última actividad registrada (1) | Hasta 8 últimas ejecuciones (Win 8+), contador | Fecha de modificación del archivo, no de ejecución | Horas de escritura de claves/entradas; no una «hora de ejecución» limpia |
| Identidad del archivo | Solo la ruta | Nombre + hash de la ruta, número de serie del volumen | Ruta (+ tamaño en algunas versiones) | SHA-1, tamaño, versión, editor |
| Retención | ~7 días, purga al arrancar | Número limitado de archivos .pf; se sustituyen los más antiguos | Tamaño de caché limitado; se expulsan los más antiguos | Larga |
| Se escribe | Al iniciar/terminar el proceso | Poco después del inicio (se vigilan los primeros segundos) | Solo al apagar | Mediante tareas de inventario |
| Punto ciego | USB, recursos de red, herramientas de consola desde la línea de comandos | Equipos con Prefetch desactivado | Sesión reciente sin apagado limpio | Depende de las pasadas de inventario |
| Analízalo con | BAM/DAM Parser | Prefetch Parser | ShimCache Parser | Amcache Parser |
Fuentes: BAM — Suhanov, BAM internals; Prefetch — documentación del formato libscca; ShimCache — Mandiant, Caching Out; Amcache — ANSSI, Analysis of the AmCache.
(1) Se actualiza al crearse y al terminar el proceso, según Suhanov.
Dónde gana BAM
La atribución. Es el único artefacto de la tabla que pone un SID a la ejecución. Cuando la pregunta es «¿fue la cuenta de servicio o el usuario?», BAM la resuelve — ver la atribución de BAM a usuarios.
Precisión en la última ejecución. Un FILETIME de 100 ns escrito en el momento de la actividad del proceso, frente a las marcas de Prefetch (también precisas, pero globales) o la fecha de modificación de archivo de ShimCache, que no es una hora de ejecución en absoluto.
Independencia de Prefetch. Prefetch depende de la opción EnablePrefetcher y a menudo no está disponible en servidores (por qué falta a menudo Prefetch en Windows Server). BAM no depende de esa opción — pero en compilaciones de Server comprueba primero que BAM existe (BAM en las distintas versiones de Windows).
Coste de recopilación. Está en la colmena SYSTEM que vas a recopilar de todos modos.
Dónde pierde BAM
La memoria. Alrededor de una semana, con purga al arrancar; las entradas de ejecutables borrados desaparecen en el siguiente arranque (limitaciones). Prefetch y Amcache pueden llegar mucho más atrás.
La cobertura. No hay entradas para ejecutables en soportes extraíbles ni recursos de red, y se han observado programas de consola lanzados desde la línea de comandos sin entrada. Prefetch sí registra programas iniciados desde un volumen extraíble — su información de volumen muestra entonces un número de serie distinto del de la unidad del sistema —, lo que lo convierte en el complemento natural.
La identidad. Solo la ruta. Una herramienta renombrada pasa inadvertida como tal; el SHA-1 de Amcache la identifica.
La profundidad. Una sola marca de tiempo. Prefetch da hasta ocho horas de ejecución, un contador y la lista de archivos y carpetas que el programa tocó en sus primeros segundos — a menudo suficiente para ver qué DLL o documentos abrió.
Interpretar las combinaciones
| BAM | Prefetch | Amcache | ShimCache | Historia probable |
|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | Ejecutado, identificado y atribuido. La posición más sólida. |
| ✓ | — | ✓ | ✓ | Ejecutado con ese usuario; Prefetch desactivado o limpiado. Revisa EnablePrefetcher y las marcas de tiempo de la carpeta Prefetch. |
| — | ✓ | ✓ | ✓ | Ejecutado, pero BAM no tiene registro: más de una semana y reinicio, ejecución desde USB/recurso compartido, lanzamiento de consola desde la línea de comandos, o borrado antes de un reinicio. |
| ✓ | — | — | — | Ejecución reciente, identidad del archivo desconocida. Consigue el archivo o su hash por otra vía. |
| — | — | — | ✓ | El archivo estuvo en disco; la ejecución no está demostrada. ShimCache por sí sola no prueba la ejecución en Windows 10+. |
| — | — | ✓ | — | El inventario vio el archivo; la ejecución necesita corroboración (el estudio de la ANSSI analiza cuándo una entrada de Amcache implica ejecución y cuándo no). |
Los registros de eventos: el quinto testigo
Los eventos de creación de procesos aportan la línea de comandos y el proceso padre que no tiene ninguno de los cuatro artefactos:
- Seguridad 4688 — solo si «Auditar la creación de procesos» está activado, y la línea de comandos solo si también lo está la directiva adicional (Microsoft Learn).
- Evento 1 de Sysmon — si Sysmon está desplegado (Sysmon).
Analízalos con EVTX Parser y cruza por ruta y hora. La atribución de BAM más la línea de comandos del 4688 es la pareja que zanja la mayoría de las discusiones.
Un orden de trabajo práctico
- BAM primero — es pequeño, por usuario, y te dice en qué cuentas centrarte.
- Prefetch — para contadores, ejecuciones anteriores y herramientas de consola que BAM no vio.
- Amcache — hash de cada ruta sospechosa de los pasos 1 y 2.
- ShimCache — rutas que existieron pero sin ejecución visible en otro sitio (depositadas, nunca ejecutadas o ejecutadas desde un lugar que BAM ignora).
- Registros de eventos, SRUM, diario USN — líneas de comandos, uso de red, creación y borrado de archivos.
Preguntas frecuentes
¿Es BAM mejor que Prefetch?
Ninguno es mejor: responden a preguntas distintas. BAM atribuye la ejecución a una cuenta de usuario con una única marca de tiempo reciente. Prefetch es global al sistema, pero guarda un contador de ejecuciones, hasta ocho horas de ejecución y los archivos que cargó el programa. Usa ambos siempre que puedas.
¿Qué artefacto de Windows muestra qué usuario ejecutó un programa?
Entre los artefactos de ejecución clásicos, BAM/DAM (claves por SID en SYSTEM) y UserAssist (en el NTUSER.DAT de cada usuario) son por usuario. Prefetch, ShimCache y Amcache son globales al sistema.