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_INFORMATION del 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
¿Registra ProgramId? No
¿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
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#

  1. Parsea ShimCache con AppCompatCacheParser.exe (Zimmerman).
  2. Parsea Amcache con AmcacheParser.exe (Zimmerman).
  3. Carga ambos en Timeline Explorer.
  4. 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.
  5. Para cada entrada en ShimCache con el flag de ejecución establecido, comprueba Amcache para hash / metadatos de publisher.
  6. 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#

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

Volver a todos los artículos