TL;DR. El ShimCache reside en HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. Windows lo reconstruye en memoria en cada sesión y solo lo vuelca al hive SYSTEM en un apagado limpio. Los reinicios forzados pueden eliminar entradas recientes por completo. Reproduce SYSTEM.LOG1 y SYSTEM.LOG2 antes de fiarte de lo que lees.
La mayoría de los líos con el ShimCache se remontan a la misma causa raíz: el analista creyó que el cache se actualizaba como un archivo de log. No es así. El cache vive en memoria mientras el sistema está corriendo, y la copia en disco solo refleja el estado del último apagado limpio. Entiende eso mal y escribes un informe diciendo que el host está limpio cuando no lo está.
La ruta del registro
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache
Ese AppCompatCache final es un valor, no una subclave. Los datos son un único blob binario cuyo esquema varía por release de Windows. XP, 7, 8, 8.1 y la familia 10/11 usan diseños distintos. El recorrido por el formato binario cubre el esquema moderno de Windows 10/11 en detalle.
Sin conexión, sacas el hive SYSTEM (uno de los archivos bajo C:\Windows\System32\config\) y le apuntas un parser. Lleva SYSTEM.LOG1 y SYSTEM.LOG2 contigo. El Shimcache Parser lee el hive SYSTEM en el navegador, sin subida, pero solo acepta ese archivo y no reproduce los logs. Si el hive está sucio, reproduce antes .LOG1 y .LOG2 con rla.exe de Eric Zimmerman (o cárgalo en Registry Explorer y guarda el hive limpio) y luego parsea el resultado.
El truco del ControlSet
Windows mantiene en realidad varios ControlSets, normalmente ControlSet001 y ControlSet002. En cualquier momento hay exactamente uno activo, indicado por HKLM\SYSTEM\Select\Current. CurrentControlSet es un alias en tiempo de ejecución para el que esté activo. En un sistema vivo siempre resuelve correctamente; sin conexión, tienes que hacer el trabajo tú mismo.
Un parser defendible:
- Lee
HKLM\SYSTEM\Select\Current(un DWORD, normalmente 1 o 2). - Recorre el valor correspondiente
ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCache. - Recurre a escanear tanto
ControlSet001comoControlSet002siSelect\Currentno es legible.
Esta herramienta, el AppCompatCacheParser de Eric Zimmerman y el Mandiant Shim Cache Parser manejan esa resolución automáticamente. Implementa el tuyo bajo tu propio riesgo.
Cuándo escribe Windows realmente
Aquí está la parte que pilla a la gente. Mientras Windows corre, el ShimCache vive en memoria. La copia en disco se escribe solo en un apagado limpio. Así que:
- Un reinicio forzado, corte de luz, BSOD o kill de VM a nivel de hipervisor destruye cada entrada que no se haya persistido aún.
- Una triage en vivo con
reg.exeo RegRipper lee el valor previamente persistido, no el cache que se está construyendo en memoria. - El plugin
windows.shimcachememde Volatility 3 contra un volcado de RAM recupera el cache actualmente en memoria. Es la única forma de obtener las entradas de la sesión activa de un host que no se ha apagado limpiamente.
Si llegas a una máquina comprometida que ha sido reiniciada en bruto, el hive en disco mantiene el cache de antes del incidente. Lo que el atacante ejecutó en la sesión activa se ha perdido, salvo que también hayas capturado memoria. La historia corroborante suele tener que venir de AmCache, que escribe de forma continua y sobrevive al mismo reinicio.
Los registros de transacciones
SYSTEM.LOG1 y SYSTEM.LOG2 contienen escrituras de registro que aún no se han fusionado en el hive principal. Cualquier parser robusto reproduce esos logs antes de leer el ShimCache. Si copiaste solo SYSTEM y te saltaste los logs, estás leyendo una vista desfasada. Este es, con diferencia, el error de adquisición más común. La guía de adquisición recorre las formas seguras de coger los tres.
Lista rápida
- Valor de ShimCache:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. - ControlSet activo seleccionado por
HKLM\SYSTEM\Select\Current. - Almacenado en memoria, volcado solo en apagado limpio. Corrobora la actividad reciente con AmCache.
- Siempre reproduce
SYSTEM.LOG1ySYSTEM.LOG2antes de parsear.
Lectura adicional
- Microsoft Learn: Registry hives. referencia canónica para archivos de hive y ControlSets.
- ShimCacheParser de Mandiant. parser Python original, útil como referencia de formato.
- Velociraptor
Windows.Registry.AppCompatCache. lógica de recolección en sistema vivo.