Amcache vs ShimCache: cuándo gana cada artefacto
Amcache y ShimCache (también llamado AppCompatCache) son los
dos artefactos de Windows que más a menudo se confunden entre sí,
porque ambos están en la infraestructura de "Application
Compatibility" y ambos registran binarios que han estado en un
host. Son mecanismos diferentes, mantenidos por subsistemas
diferentes de Windows, con límites diferentes y valor forense
diferente.
Las diferencias estrella:
ShimCache es más corto, más escaso, mantenido por el kernel y actualizado por el loader. Amcache es más largo, más rico, mantenido en modo usuario y actualizado por una tarea programada.
Para la referencia más amplia de Amcache, ver la referencia completa de Amcache. Para la pregunta Amcache vs Prefetch (una comparación diferente), ver Amcache vs Prefetch.
Qué registra cada uno#
ShimCache / AppCompatCache#
Un blob binario almacenado en el hive del registro SYSTEM bajo
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache.
Está mantenido por el kernel — cada vez que el loader toca un
binario (lo carga, lo ejecuta o en algunos casos solo le hace
stat), la cache se actualiza.
Cada entrada almacena:
- La ruta completa del archivo.
- Una marca de tiempo de modificación (el tiempo de modificación
$STANDARD_INFORMATIONdel archivo en el momento de la actualización de la cache). - Un flag indicando si el binario se ejecutó.
- En algunas versiones de Windows: una marca de tiempo de creación de la entrada.
La cache se vuelca al registro al apagar, no en tiempo real. Esto produce una peculiaridad crítica: en un sistema en vivo, la cache en disco está desactualizada hasta el siguiente apagado limpio. Para obtener la ShimCache más fresca, necesitas una imagen de memoria o un sistema que se haya apagado limpiamente desde los eventos de interés.
La cache también está limitada en tamaño:
- Windows 7 / Server 2008 R2: 1024 entradas.
- Windows 8 / 2012: 1024 entradas.
- Windows 10 / 11 / 2016+: 1024 entradas.
Cuando se alcanza el límite, las entradas más antiguas son expulsadas en modo LRU. Un host muy usado puede churnear ShimCache en días.
Amcache#
Un hive del registro separado (Amcache.hve) mantenido por la
tarea programada Compatibility Appraiser, que corre
aproximadamente diariamente en estaciones de trabajo y con menos
frecuencia en servidores. El hive registra miles de entradas por
host con metadatos ricos: hash SHA-1, publisher, versión, fecha
de link, contexto de instalación. Ver
Estructura del registro Amcache
para el schema completo.
La diferencia fundamental#
| Propiedad | ShimCache | Amcache |
|---|---|---|
| Almacenamiento | Hive SYSTEM, único valor binario |
Amcache.hve independiente |
| Mantenedor | Loader del kernel | Tarea programada en modo usuario |
| Disparador de actualización | El loader toca el binario | Escaneo del appraiser |
| Persistencia a disco | Al apagar | Continua (con journals de transacciones) |
| Máximas entradas | ~1024 | Efectivamente sin límite (miles típico) |
| ¿Registra hash? | No | Sí — SHA-1 de los primeros 31 MiB |
| ¿Registra publisher / versión? | No | Sí |
¿Registra ProgramId? |
No | Sí |
| ¿Registra datos de driver / dispositivo? | No | Sí (sub-claves driver + dispositivo) |
| Granularidad por entrada | Ruta + 1-2 marcas de tiempo | Ruta + metadatos ricos + múltiples marcas de tiempo |
| Disponible en sistema en vivo | Desactualizado (necesita apagado) | Fresco |
| Sobrevive al borrado del binario | Sí | Sí |
| Disponible en memoria | Sí (lugar más útil) | Sí (menos crítico) |
Para la mayor parte del trabajo DFIR, Amcache es el artefacto más rico. ShimCache sigue siendo esencial para preguntas específicas donde su posición del lado del kernel paga.
Cuándo gana ShimCache#
Un puñado de casos donde quieres ShimCache, no Amcache:
"¿Tocó el loader este binario, aunque no se haya ejecutado?"#
ShimCache registra los toques del loader de forma más agresiva que Amcache registra presencia. Un binario que fue brevemente stat'd por una aplicación pero nunca ejecutado y nunca inventariado por el appraiser todavía puede dejar rastro en ShimCache.
Esto es raro pero no imposible. ShimCache es el único artefacto que lo captura.
"Tengo una imagen de memoria pero ninguna imagen de disco"#
ShimCache vive en memoria del kernel continuamente y es uno de los
artefactos que el plugin shimcachemem de Volatility extrae
limpiamente. Amcache son datos del hive del registro en disco —
para obtenerlo desde memoria necesitas extraer el propio hive, lo
que es más trabajo.
"El appraiser está desactivado en este host"#
Los endpoints hardenizados a veces desactivan el Compatibility Appraiser para evitar telemetría a Microsoft. Esos hosts no tienen ninguna actividad de Amcache, pero el kernel sigue manteniendo ShimCache (es parte del loader, no del appraiser).
"Necesito cobertura pre-1709 de Windows 10"#
El schema moderno Inventory* en Amcache solo aterrizó en Windows
10 build 1709. Para builds 10/8.x más antiguos, Amcache es más
escaso. ShimCache antecede a Amcache y está disponible
consistentemente en Windows 7 y posteriores.
Cuándo gana Amcache#
La mayor parte del tiempo. Los casos donde Amcache es dramáticamente mejor:
"¿Cuál es el SHA-1 de este binario?"#
ShimCache: sin respuesta. Amcache: directamente en la columna
Hash. Esto por sí solo es razón para hacer de Amcache tu
primera parada en la mayoría de las investigaciones.
"¿Quién publicó este binario?"#
ShimCache: sin respuesta. Amcache: Publisher, PublisherName,
ProductName.
"¿Cuándo apareció este binario por primera vez en este host?"#
ShimCache: una marca de tiempo, pero es el tiempo de modificación
del archivo en el toque del loader, no el tiempo del toque en sí.
Útil pero indirecto. Amcache: KeyLastWriteTimestamp está más
cerca de "cuándo registró Amcache esto", lo que está más cerca de
"cuándo lo vio por primera vez el appraiser". Ver
Marcas de tiempo de Amcache explicadas.
"¿Está este binario relacionado con una aplicación instalada?"#
ShimCache: sin datos de relación. Amcache: ProgramId empareja con
InventoryApplication para contexto completo de producto
instalado. Ver
Amcache ProgramId explicado.
"Hunt cross-host"#
ShimCache: 1024 entradas por host, sin ProgramId, solo rutas.
Un hunt cross-host basado en hash es imposible solo desde
ShimCache. Amcache: Hash y ProgramId hacen triviales los
pivotes cross-host. Ver
Movimiento lateral y pivote ProgramId de Amcache.
"Evidencia de driver / dispositivo"#
ShimCache: solo binarios PE que el loader tocó. Amcache:
InventoryDriverBinary, InventoryDeviceContainer y
InventoryDevicePnp te dan una historia separada y estructurada
de drivers y dispositivos. Esencial para investigaciones BYOVD y
USB.
Cómo se corroboran mutuamente#
Cuando ambos artefactos tienen una entrada para el mismo binario, obtienes una confirmación multi-fuente:
- ShimCache dice que el loader lo tocó.
- Amcache dice que el appraiser lo inventarió, con un hash y metadatos.
- Prefetch (si está presente) dice que realmente se ejecutó, con horas de ejecución.
Si solo un artefacto tiene el binario, la ausencia en el otro es en sí misma una señal:
- Solo ShimCache: el loader lo tocó pero el appraiser nunca lo inventarió. Razones posibles: archivo borrado antes de la siguiente corrida del appraiser, archivo en una ruta que el appraiser no escanea, appraiser desactivado.
- Solo Amcache: el appraiser lo inventarió pero el loader nunca lo tocó (en la ventana de tiempo cubierta por la ShimCache actual). Razones posibles: el archivo estuvo presente pero nunca se cargó, el toque del loader del archivo fue expulsado del límite de 1024 entradas de ShimCache, se limpió ShimCache.
Flujo de trabajo conjunto estándar#
- Parsea ShimCache con
AppCompatCacheParser.exe(Zimmerman). - Parsea Amcache con
AmcacheParser.exe(Zimmerman). - Carga ambos en Timeline Explorer.
- Para cada entrada en el filtro de triage de Amcache "PE sin firmar en ruta escribible por usuario", comprueba ShimCache para la misma ruta. Si está presente, el loader lo tocó; si está ausente, solo presencia.
- Para cada entrada en ShimCache con el flag de ejecución establecido, comprueba Amcache para hash / metadatos de publisher.
- Cruza ambos con Prefetch para prueba de ejecución.
Tabla de decisión rápida#
| Tu pregunta | ShimCache | Amcache |
|---|---|---|
| ¿Estuvo el binario X en este host? | ✓ (solo ruta, últimas 1024) | ✓✓ (ruta + metadatos) |
| ¿Cuál es el SHA-1 del binario X? | ✗ | ✓ |
| ¿Se ejecutó el binario X? | parcial (flag de ejecución) | ✗ |
| ¿Cuándo apareció el binario X por primera vez? | parcial | ✓ |
| ¿Hunt cross-host por contenido? | ✗ | ✓ |
| ¿Hunt cross-host por aplicación? | ✗ | ✓ (ProgramId) |
| ¿Evidencia de driver / dispositivo? | ✗ | ✓ |
| ¿Cobertura en hosts hardenizados/sin appraiser? | ✓ | ✗ |
| ¿Cobertura en pre-Win10 1709? | ✓ | parcial |
| ¿Disponible fresco en sistema en vivo? | ✗ (necesita apagado) | ✓ |
Ver también#
- Referencia completa de Amcache — el artefacto al completo.
- Amcache vs Prefetch — la otra comparación importante de evidencia de ejecución.
- Amcache vs SRUM — evidencia de ejecución de ventana larga.
- Amcache para investigación de malware — cómo los tres artefactos se combinan en un playbook real.
Para explorar tu propio hive junto a tu parseo de ShimCache, suelta el archivo en la página de inicio del parser — corre enteramente en tu navegador.
Artículos relacionados
- Amcache vs SRUM: presencia vs uso de recursos en ventana larga
SRUM rastrea el uso de recursos por aplicación durante 30+ días; Amcache inventaría cada binario presente en disco. Aquí cómo se complementan en una timeline DFIR de Windows.
- Amcache vs Prefetch: qué prueba realmente cada uno
Amcache registra presencia; Prefetch registra ejecución. Una guía práctica de cuándo usar cada uno, en qué se solapan y cómo combinarlos en una timeline DFIR.
- ¿Cuál es la diferencia entre Amcache y AppCompatCache?
Amcache es un hive del registro más rico mantenido por el appraiser con hashes y metadatos. AppCompatCache (ShimCache) es un blob del registro más pequeño mantenido por el loader con rutas y marcas de tiempo solamente.
- Volatility y Amcache: extraer el hive de imágenes de memoria
Una guía práctica para recuperar Amcache de una imagen de memoria de Windows usando Volatility — cuándo la recuperación del lado de memoria es la única opción, qué plugins usar y cómo entregar a AmcacheParser.