Prefetch vs Amcache vs ShimCache
Windows registra evidencia de la ejecución de programas en al menos tres lugares distintos, cada uno con su propio formato, retención y peculiaridades:
- Prefetch (
C:\Windows\Prefetch\*.pf): caché de tiempos por ejecución - Amcache (
C:\Windows\AppCompat\Programs\Amcache.hve): hive del registro con el inventario de programas - ShimCache / AppCompatCache (
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache): caché de compatibilidad respaldada por el registro
Se solapan. Se contradicen. Cada uno captura algo que los demás dejan fuera.
Prefetch — la historia de los tiempos
Prefetch te dice cuándo se ejecutó un programa y con qué frecuencia. Cada
archivo .pf guarda hasta ocho marcas de tiempo recientes y un contador de
ejecuciones. También conserva la lista de archivos que el ejecutable cargó en
su primera ejecución, algo útil para el análisis de malware.
Lo que prefetch no te da: una lista completa de todos los programas que alguna vez se ejecutaron. Los archivos se eliminan cuando la caché se llena (normalmente con un tope de 1024 archivos), de modo que una estación de trabajo activa irá rotando las entradas más antiguas. Además, en Windows Server suele estar deshabilitado de forma rutinaria.
Recurre a prefetch cuando necesites frecuencia de ejecución, recencia o la huella de carga de un ejecutable. Usa el parser de este sitio para obtener todo eso de una sola pasada.
Amcache — la historia del inventario
Amcache es un hive del registro (Amcache.hve) que la infraestructura de
Application Compatibility de Windows mantiene poblado. Registra metadatos de
cada binario que el sistema ha visto, no solo de los que ha ejecutado. Eso
convierte a Amcache en el inventario más amplio: hashes SHA-1, tamaños de
archivo, fabricante, versión, marcas de tiempo de instalación e indicación de
si el binario está firmado.
Mientras que prefetch te dice que un programa se ejecutó ocho veces el martes pasado, Amcache te dice que el programa existe, cuál es su SHA-1 y, a grandes rasgos, cuándo apareció en el sistema. Los dos se complementan bien: el contador de ejecuciones de prefetch sumado al hash de Amcache basta para afirmar "este binario exacto se ejecutó N veces".
Para el parseo de Amcache, consulta el parser de Amcache.
ShimCache — la historia de la compatibilidad
ShimCache (también llamado AppCompatCache) es más antiguo y menos profundo que los otros dos. Registra la ruta del archivo, la marca de tiempo de última modificación y un flag que indica si hubo ejecución, con un tope estricto de en torno a 1024 entradas en versiones modernas de Windows. Existe principalmente para alimentar el motor de shimming de compatibilidad de aplicaciones, no para servir al análisis forense.
ShimCache se impone en un escenario concreto: cuando prefetch ha sido deshabilitado o borrado y Amcache no está disponible, ShimCache todavía puede conservar un registro. También resulta útil como fuente de corroboración: si los tres artefactos coinciden en una ruta y una marca de tiempo, la evidencia es sólida.
¿Cuál primero?
Para la mayoría de investigaciones del tipo "¿se ejecutó este programa?", el orden es:
- Prefetch para la evidencia de ejecución y la recencia
- Amcache para hash, versión e inventario más amplio
- ShimCache como respaldo de corroboración cuando los dos primeros estén incompletos o resulten sospechosos
Cada parser de esta familia se ocupa de uno de estos artefactos. Juntos cubren el hueco que cualquiera de ellos deja por sí solo.