Amcache vs Prefetch: qué prueba realmente cada uno

Tanto Amcache como Prefetch son artefactos de Windows que te dicen qué binarios han estado en un host. Se confunden constantemente, y la confusión produce hallazgos incorrectos. Esta página es la guía práctica de qué prueba realmente cada uno y cuándo usar cuál.

La diferencia estrella, de entrada:

Prefetch prueba ejecución. Amcache prueba presencia.

Para la referencia más amplia de Amcache, ver la referencia completa de Amcache. Para la estructura del archivo, ver Estructura del registro Amcache.


Qué registra cada uno#

Prefetch#

Un directorio de archivos .pf (C:\Windows\Prefetch\) mantenido por el subsistema Prefetcher. Cada archivo se crea la primera vez que se ejecuta un binario, y se actualiza en ejecuciones posteriores. Cada archivo .pf contiene:

  • El nombre y hash del ejecutable.
  • Hasta 8 marcas de tiempo de ejecución (10 en Windows 11) — ejecuciones reales.
  • Un contador de ejecuciones.
  • Una lista de archivos que el ejecutable cargó durante sus primeros 10 segundos de ejecución.
  • Una lista de volúmenes referenciados.

Prefetch existe porque Windows usa los datos de archivos cargados para pre-cachear esos archivos antes de que el binario corra de nuevo, acelerando el tiempo de lanzamiento. El valor forense es un efecto secundario: la existencia de un .pf es prueba de que el binario se ejecutó.

Amcache#

Un único hive del registro (C:\Windows\AppCompat\Programs\Amcache.hve) poblado por la tarea programada Compatibility Appraiser. El appraiser recorre el sistema periódicamente (aproximadamente diariamente en estaciones de trabajo) e inventaría cada binario PE que encuentra, registrando:

  • Ruta completa, tamaño, hash SHA-1 de los primeros 31 MiB.
  • Metadatos PE (publisher, versión, fecha de link, idioma).
  • Contexto por aplicación (ProgramId, fecha de instalación).
  • Contexto por driver y por dispositivo para las categorías relevantes.

Amcache existe para soportar la infraestructura de telemetría-de-compatibilidad de Windows. El valor forense es, de nuevo, un efecto secundario.


La diferencia fundamental#

Pregunta Prefetch Amcache
"¿Corrió este binario en este host?" Sí — definitivo. No.
"¿Estuvo este binario alguna vez en disco?" No directamente (solo si corrió). Sí.
"¿Cuándo corrió?" Sí — hasta 8/10 marcas de tiempo por binario. No.
"¿Cuál es su SHA-1?" Hay un hash pero es un hash de Prefetch, no SHA-1. Sí — SHA-1 de los primeros 31 MiB.
"¿Cuál es su ruta completa?" Recuperable. Sí — directamente.
"¿Sobrevive al borrado?" El .pf sobrevive al borrado del binario. La entrada del hive sobrevive al borrado del binario.
"¿Sobrevive al reinicio del sistema?" Sí. Sí.
"¿Sobrevive al borrado del artefacto directamente?" No — los archivos .pf pueden borrarse. No — el hive puede borrarse (pero los journals de transacciones y VSS suelen preservarlo).

Los dos artefactos responden preguntas diferentes. Donde se solapan (mismo archivo, mismo host, misma ventana de tiempo), se corroboran mutuamente. Donde divergen, la divergencia es en sí misma información.


Cómo se solapan y divergen#

Ambos presentes (el caso típico)#

Un binario corre, el Prefetcher crea un .pf, y el appraiser lo inventaría en su siguiente pasada. Ves el binario en ambos artefactos. Prefetch te dice las horas de ejecución; Amcache te dice la ruta, publisher, hash y metadatos.

Solo Amcache — "presente pero nunca corrió"#

Encuentras un binario en *_UnassociatedFileEntries.csv sin .pf correspondiente. Razones posibles:

  • El binario se puso en disco pero nunca se ejecutó.
  • El binario se ejecutó pero Prefetch está desactivado (raro — la clave de registro PrefetchParameters lo controla).
  • El binario se ejecutó una vez pero el .pf se borró (anti-forense, limpieza de disco, eliminación intencional).

La lectura "presente pero nunca corrió" es la más común, y es un hallazgo muy diferente de "ejecutado". Una herramienta del atacante preparada pero nunca corrida, una DLL dejada que solo fue cargada por rundll32.exe (en cuyo caso se actualiza el .pf de rundll32.exe), un payload esperando un disparador que nunca llegó.

Solo Prefetch — "corrió pero sin inventario"#

Encuentras un .pf para un binario, pero ninguna fila en Amcache. Razones posibles:

  • El binario se ejecutó entre corridas del appraiser y se borró antes de la siguiente pasada. El Prefetch sobrevivió; Amcache nunca vio el archivo.
  • El binario vive en una ruta que el appraiser no escanea.
  • El appraiser está desactivado o ha estado funcionando mal.

La lectura "corrió pero sin inventario" es la señal más fuerte de limpieza deliberada. El binario vivió lo suficiente para ejecutarse, luego desapareció antes de la siguiente pasada de inventario. Esa temporización es característica de:

  • Cobalt Strike / Sliver / stagers C2 similares que dropper, ejecutan y se auto-borran.
  • Herramientas in-memory que escribieron un launcher diminuto en disco solo brevemente.
  • Despliegue de wiper donde el operador eliminó el dropper después de la ejecución exitosa.

Ambos ausentes — "nunca visto"#

Un binario aparece ni en Prefetch ni en Amcache. El caso más fuerte para "esto nunca ocurrió en este host" — pero no concluyente:

  • Ambos artefactos pueden ser borrados por un atacante con capacidad suficiente.
  • Un binario que nunca se ejecutó y fue inventariado en una ventana breve entre corridas del appraiser puede estar ausente de ambos incluso en circunstancias benignas.
  • En servidores con el appraiser desactivado, Amcache puede estar enteramente vacío durante algunos periodos.

Diferencias de hashing#

Una trampa que caza a los analistas nuevos:

  • El hash de Prefetch es un hash de ruta específico de Windows (no un hash de contenido). Está en el nombre del archivo .pf: NOTEPAD.EXE-1A2B3C4D.pf. No puedes enviarlo a VirusTotal.
  • El hash de Amcache es un SHA-1 real de los primeros 31 MiB. Puedes enviarlo a VirusTotal directamente. Ver Amcache FileId explicado.

Para obtener un hash de contenido desde Prefetch, necesitas el propio binario — el archivo .pf no contiene el binario ni un hash de contenido.


Cómo combinarlos en una timeline#

La forma correcta de usar ambos:

  1. Parsea ambos. AmcacheParser para Amcache; PECmd (también de Zimmerman) para Prefetch.
  2. Carga ambos CSVs en Timeline Explorer. Filtra Prefetch a la ventana de tiempo de interés del *_UnassociatedFileEntries.csv del host.
  3. Triage desde Amcache. Aplica el filtro "PE sin firmar en ruta escribible por usuario" para sacar a la luz binarios sospechosos.
  4. Confirma ejecución vía Prefetch. Para cada fila sospechosa, comprueba si existe un .pf. Si sí, tienes prueba de ejecución. Si no, tienes solo presencia.
  5. Cruza marcas de tiempo. Prefetch da horas de ejecución precisas; KeyLastWriteTimestamp de Amcache da una hora de inventario que acota cuándo apareció por primera vez el binario. La más temprana entre "primera corrida de Prefetch" y "primer inventario de Amcache" es tu mejor estimación de cuándo llegó el binario.

Para más sobre el pivote de Amcache acotado en tiempo, ver Marcas de tiempo de Amcache explicadas.


Tabla de decisión rápida#

Tu pregunta Mira...
¿Corrió este binario alguna vez en este host? Prefetch.
¿Cuándo corrió este binario? Prefetch (hasta 8/10 veces).
¿Estuvo este binario presente en este host? Amcache.
¿Cuál es su hash SHA-1? Hash de Amcache.
¿Cuál era su ruta completa? FullPath de Amcache (o recuperar de metadatos de Prefetch).
¿Se ejecutó múltiples veces? Contador de Prefetch.
¿Qué otros archivos cargó cuando corrió? Lista de archivos cargados de Prefetch.
¿Sigue el binario en disco? Comprobación del sistema de archivos; Amcache no lo dice.
¿Cambió el contenido del binario con el tiempo? Amcache (filas con mismo FullPath, diferente Hash, diferente KeyLastWriteTimestamp).
¿Está este binario presente en otros hosts? Hash y ProgramId de Amcache a través de hives recogidos.

Implicaciones anti-forense#

Ambos artefactos pueden ser manipulados, pero tienen debilidades diferentes:

  • Prefetch es por archivo. Un atacante que quiera limpiar tras un binario específico solo necesita borrar el .pf de ese binario. Fácil y dirigido.
  • Amcache es monolítico. Limpiar una entrada específica requiere editar el hive en su sitio — posible, pero más involucrado que borrar un archivo. Muchos atacantes simplemente borran todo el hive, lo que es ruidoso (el appraiser lo recrea) y forensicamente obvio.
  • Los journals de transacciones y VSS preservan historia de Amcache que el atacante puede no haber pensado en limpiar. Ver Dónde está Amcache.hve en disco para el flujo de recuperación VSS.

En una investigación donde sospechas manipulación, la ausencia de entradas esperadas en ambos artefactos es en sí misma el hallazgo.


Ver también#

¿Quieres mirar un hive junto a tus datos de Prefetch? Suelta el hive en la página de inicio del parser — se parsea enteramente en tu navegador y se empareja bien con la salida CSV de PECmd.

Artículos relacionados

Volver a todos los artículos