Forense con Amcache: cómo encontrar evidencia de ejecución
La pregunta que pone a Amcache sobre la mesa es casi siempre alguna variante de "prueba que esto se ejecutó en este host" — una herramienta que el atacante borró, un binario que una alerta del EDR nombró pero que el analista no encuentra en disco, una pieza de malware que se autoeliminó tras el staging. Amcache.hve es el lugar más barato de un sistema Windows para responder a esa pregunta, porque el Compatibility Appraiser inventaría ejecutables portables existan o no todavía, y registra el único campo que sobrevive a todo lo demás: el hash SHA-1.
Este es el recorrido de principio a fin: recoge la hive, parséala, recorta el ruido, encuentra las entradas que importan, pivota sobre ellas y — la parte que la mayoría de guías se salta — entiende exactamente qué prueba y qué no prueba un hallazgo de Amcache. Si lo que quieres es la referencia del artefacto y no el flujo de trabajo, empieza por la referencia completa de Amcache; esta página trata de usarla para encontrar evidencia.
Qué prueba realmente una entrada de Amcache#
Acierta con esto primero, porque cada conclusión río abajo depende de ello.
La clave estrella de Amcache, Root\InventoryApplicationFile, contiene una entrada por cada PE que el appraiser vio. Una entrada significa: este ejecutable estaba presente en el sistema de archivos cuando el appraiser corrió, y aquí están sus metadatos. Eso es presencia, no ejecución. Para la inmensa mayoría de casos reales la distinción es académica — el mimikatz.exe de un atacante en C:\ProgramData\ llegó ahí para ser ejecutado — pero en un tribunal o en un informe lo enuncias con precisión:
- Afirmación fuerte, bien respaldada: el binario con este SHA-1 y esta ruta existió en este host en el momento de —o antes de— la pasada del appraiser que escribió esta entrada.
- Afirmación más débil, necesita corroboración: el binario se ejecutó. Confírmalo con Prefetch, ShimCache, Sysmon Event ID 1 o Security 4688.
El encuadre honesto — presencia primero, ejecución por corroboración — es lo que separa un hallazgo que sobrevive a la revisión de uno que se hace pedazos. Ve qué te dice Amcache para el tratamiento completo de este límite.
Paso 1: recoger la hive#
El archivo vive en una ruta fija en toda versión de Windows desde la 8 en adelante:
C:\Windows\AppCompat\Programs\Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve.LOG1
C:\Windows\AppCompat\Programs\Amcache.hve.LOG2
En un host vivo la hive está abierta, así que no puedes copiarla sin más con el Explorador. Usa una copia por handle crudo (KAPE, FTK Imager, RawCopy o el artefacto de Velociraptor) y llévate los dos logs de transacción .LOG con ella — cargan escrituras aún no volcadas a la hive, y un buen parser las reproduce. Las opciones completas de recolección están en recoger la Amcache.hve; la versión corta es: copia los tres archivos, nunca confíes en una copia en caliente sin los logs.
# KAPE, el camino de triage estándar
kape.exe --tsource C: --target Amcache --tdest C:\triage\
Paso 2: parsear con AmcacheParser#
El AmcacheParser de Eric Zimmerman es la herramienta de facto. Las opciones que importan:
AmcacheParser.exe -f Amcache.hve --csv .\out\ --mp -i
-f— la hive a parsear.--csv— directorio de salida para el conjunto de CSV.--mp— incluye las rutas\Microsoft\(no pre-filtres en tiempo de parseo; filtra después, donde puedes ver qué descartaste).-i— incluye entradas incluso donde los datos del appraiser son parciales.
Reproduce los logs de transacción automáticamente y emite un conjunto de CSVs — UnassociatedFileEntries.csv y AssociatedFileEntries.csv son los dos en los que vives. (¿No tienes una máquina Windows a mano? Suelta la hive en el parser de navegador — lee la hive del lado cliente vía WebAssembly y nunca la sube, lo que además satisface la regla de "sin subidas a terceros" que imponen los entornos regulados.) Para saber qué significa cada columna, mantén las columnas de salida de AmcacheParser abiertas en una pestaña.
Paso 3: leer los campos que cargan la evidencia#
Por cada entrada de archivo, estos son sobre los que construyes hallazgos:
| Campo | Qué te da | Peso probatorio |
|---|---|---|
FileId (SHA-1) |
Hash del archivo. La clave de pivote entre hosts y hacia threat intel. | El más alto. Sobrevive al borrado y al renombrado. |
LowerCaseLongPath |
Ruta completa donde vivía el binario. | Alto. La ubicación es intención (\Temp\, \ProgramData\ frente a \Program Files\). |
Name / OriginalFileName |
Nombre en disco frente a nombre interno del PE. Una discrepancia es una bandera. | Alto cuando no coinciden. |
Publisher / IsPeSigned |
Identidad de firma. En blanco / sin firmar en rutas de usuario es sospechoso. | Medio. |
LinkDate |
Timestamp de compilación del PE. | Medio, falsificable. |
Size |
Tamaño del archivo en bytes. | Medio, corroborante. |
KeyLastWriteTimestamp |
Cuándo escribió el appraiser esta entrada por última vez. | Medio — una cota, no un tiempo de ejecución. |
IsOsComponent |
Si Windows lo considera un archivo del SO. | Señal de filtro, no evidencia. |
El FileId merece atención especial: AmcacheParser te quita el relleno de ceros 0000 inicial, así que los 40 caracteres hex restantes son el SHA-1 real del archivo — pégalo directo en VirusTotal. La mecánica completa está en FileId de Amcache explicado y el flujo de caza en hashes SHA-1 para cazar malware.
Paso 4: filtrar el ruido#
UnassociatedFileEntries.csv en una workstation normal llega a decenas de miles de filas. No puedes leer eso. El orden de filtrado que aplico siempre, idéntico al que convergen los analistas veteranos:
- Descarta la fontanería del SO por ruta. Todo bajo
c:\windows\winsxs\,c:\windows\servicing\,c:\program files\microsoft\. - Descarta
IsOsComponent = True. Más ruido del SO que el filtro de ruta no pilló. - Conserva los vecindarios interesantes. Rutas en
\users\,\programdata\,\windows\temp\,\perflogs\, o cualquier cosa que contenga\appdata\. Los atacantes hacen staging donde pueden escribir. - Conserva publishers en blanco o
Unknown. El software firmado con un publisher real rara vez es la primera pista. - Ordena por
KeyLastWriteTimestampdescendente. Trabaja primero la ventana que te importa.
En PowerShell, contra el CSV parseado:
Import-Csv .\out\*_UnassociatedFileEntries.csv |
Where-Object {
$_.IsOsComponent -ne 'True' -and
$_.LowerCaseLongPath -notmatch '\\winsxs\\|\\servicing\\|\\program files\\microsoft\\' -and
$_.LowerCaseLongPath -match '\\users\\|\\programdata\\|\\windows\\temp\\|\\appdata\\|\\perflogs\\'
} |
Sort-Object KeyLastWriteTimestamp -Descending |
Select-Object KeyLastWriteTimestamp, LowerCaseLongPath, Name, Publisher, FileId |
Format-Table -AutoSizeVeinte mil filas se convierten en unas pocas docenas. Ese es el conjunto que de verdad lees.
Paso 5: un ejemplo trabajado — el binario borrado#
Este es el patrón que hace que valga la pena acudir primero a Amcache. El conjunto filtrado saca a la superficie una fila como esta:
KeyLastWriteTimestamp: 2026-06-09 23:51:07 UTC
LowerCaseLongPath: c:\programdata\intel\drivers\igfxsvc.exe
Name: igfxsvc.exe
OriginalFileName: rundll32.exe
Publisher: (vacío)
IsPeSigned: False
FileId: 0000a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2
Size: 1264640
Tres cosas hacen que esta entrada grite:
- Discrepancia Name/OriginalFileName. El archivo se llama
igfxsvc.exeen disco pero su cabecera PE dicerundll32.exe. El software gráfico legítimo de Intel no hace esto. Herramienta de sistema renombrada — o algo enmascarándose como ella. - Vecindario equivocado. Los drivers reales de Intel no viven bajo
c:\programdata\intel\drivers\. Esa ruta es camuflaje elegido por el atacante. - Sin firmar, sin publisher, en un directorio escribible. Tres señales débiles que se componen en una fuerte.
Ahora el binario en sí ha desaparecido del disco — el atacante lo borró. Aún tienes todo lo que necesitas:
- Pivota el SHA-1. Lleva
a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2(quita el0000) a VirusTotal / tu plataforma de intel. Un acierto nombra la herramienta. Ningún acierto significa ejecutarlo contra la Amcache de todos los demás hosts para ver dónde más aterrizó este archivo exacto. - Establece una cota temporal. El
KeyLastWriteTimestampde2026-06-09 23:51te dice que el archivo estuvo presente para ese momento. Acompáñalo con la referencia de timestamps para no sobreafirmar — este es el tiempo de escritura del appraiser, no el tiempo de ejecución. - Confirma la ejecución. Cruza a Prefetch buscando
IGFXSVC.EXE-<hash>.pf(run count + tiempos de última ejecución), a ShimCache, y a Sysmon EID 1 / Security 4688 para la creación real del proceso. Amcache dice estuvo aquí; esos dicen se ejecutó, tantas veces, en estos momentos.
Esa cadena — sacar a la superficie, pivotar, acotar, confirmar — es la columna vertebral de investigar un incidente real con Amcache y de la guía de investigación de malware.
Más allá de los ejecutables: evidencia de dispositivos y drivers#
La ejecución de programas es el titular, pero la misma hive responde a otras dos preguntas probatorias que los analistas infrautilizan:
- ¿Qué hardware tocó este host?
Root\InventoryDeviceContaineryRoot\InventoryDevicePnpdan el historial tabular de USB / periféricos más limpio que Windows expone — friendly names, fabricante/modelo, estado de conexión. Esta es la base de todo triage de exfiltración por USB; el método completo está en historial de USB y dispositivos desde Amcache. Es además, según los datos de búsqueda, la pregunta con la que la gente más a menudo llega a Amcache — el emparejamientoDeviceContainers/KeyLastWriteTimestamp. - ¿Qué drivers se cargaron?
Root\InventoryDriverBinaryregistra binarios de driver con sus propios hashes — el artefacto que compruebas para ataques BYOVD (bring-your-own-vulnerable-driver), donde se suelta un driver firmado pero vulnerable para ganar acceso al kernel.
Los límites que pillan a los analistas#
Los recorridos al estilo it-connect hacen bien en detenerse aquí, y yo también. Un hallazgo de Amcache solo vale tanto como tu conciencia de lo que la hive no puede decirte.
Los scripts son invisibles#
.ps1, .cmd, .bat, .vbs — ninguno tiene cabecera PE, así que el appraiser no los inventaría como entradas de archivo. Una intrusión solo de PowerShell puede no dejar ninguna traza de ejecución en Amcache para la lógica maliciosa en sí (aunque powershell.exe y cualquier herramienta compilada que soltara sí aparecerán). Para la ejecución de scripts necesitas Prefetch, el logging de ScriptBlock (EID 4104) y la línea de comandos en 4688/Sysmon. Esta es la razón más común por la que un analista concluye erróneamente "no se ejecutó nada".
Los componentes del SO se filtran por diseño#
Las entradas marcadas IsOsComponent = True — y muchos binarios living-off-the-land que vienen con Windows — pueden estar ausentes o atenuadas. Un atacante que usa solo certutil.exe, bitsadmin.exe, wmic.exe deja un rastro fino en Amcache precisamente porque son componentes del SO. Los LOLBins evaden el inventario igual que evaden todo lo demás.
Es un inventario, no un log#
No hay registro por ejecución ni run count — ese es el trabajo de Prefetch. Una entrada de Amcache por archivo, actualizada en su sitio. Si un binario corrió cincuenta veces ves una fila, y KeyLastWriteTimestamp refleja la última escritura del appraiser, no la última ejecución.
El retardo del appraiser es real#
El Microsoft Compatibility Appraiser corre aproximadamente a diario, limitado por el estado de inactividad y energía. Un binario que corrió dos horas antes de que sacaras la hive puede sencillamente no estar inventariado todavía. La ausencia de una entrada de Amcache nunca es prueba de que un binario no se ejecutó — ve por qué está vacía mi Amcache y cada cuánto se actualiza Amcache.
Los timestamps son cotas, no eventos#
KeyLastWriteTimestamp es el tiempo de escritura del appraiser. LinkDate es un timestamp de compilación que el autor controla y puede forjar. Ninguno es "el momento en que el programa se ejecutó". La lectura disciplinada está en timestamps de Amcache decodificados.
Correlación: dónde encaja Amcache en el cuadro#
Amcache se gana el sueldo como el primer vistazo rápido y el superviviente del borrado. Está en su punto más fuerte cuando se triangula:
| Pregunta | Amcache | Corrobora con |
|---|---|---|
| ¿Estuvo este binario en el host? | Sí — fuente primaria | $MFT, $J para timeline del sistema de archivos |
| ¿Se ejecutó? | Implica presencia | Prefetch, ShimCache, Sysmon 1, Security 4688 |
| ¿Cuántas veces / cuándo exactamente? | No | Prefetch (run count + 8 tiempos de última ejecución) |
| ¿Qué es este archivo, exactamente? | SHA-1 — primario | VirusTotal / threat intel |
| ¿Qué hardware se conectó? | Claves de dispositivo — primario | setupapi.dev.log, USBSTOR |
| ¿Se ejecutó un script? | No | EID 4104, 4688, Prefetch |
Para las comparaciones artefacto por artefacto, ve Amcache vs Prefetch, Amcache vs ShimCache y Amcache vs SRUM.
El flujo de trabajo en una pantalla#
- Recoge
Amcache.hve+ ambos archivos.LOG(copia cruda). AmcacheParser.exe -f Amcache.hve --csv .\out\ --mp -i.- Filtra: descarta rutas del SO e
IsOsComponent, conserva rutas de usuario escribibles y publishers en blanco, ordena porKeyLastWriteTimestampdesc. - Lee las filas supervivientes en busca de discrepancias ruta/nombre y vecindarios raros.
- Pivota el SHA-1 de cada candidato hacia intel y entre hosts.
- Acota el tiempo con
KeyLastWriteTimestamp; nunca lo llames el tiempo de ejecución. - Confirma la ejecución en Prefetch / ShimCache / EVTX.
- Enuncia la presencia como hecho, la ejecución como corroborada — y nombra lo que la hive no pudo ver.
Así es como conviertes Amcache.hve en evidencia en lugar de una corazonada.
Relacionado#
Artículos relacionados
- Dónde está Amcache.hve en disco (y cómo recogerlo)
Ruta: C:\Windows\AppCompat\Programs\Amcache.hve más los archivos .LOG. Siempre los tres. Y la forma correcta de recogerlo en un host vivo y desde shadow copies.
- FileId de Amcache explicado: el formato de hash SHA-1 que almacena Windows
FileId es '0000' más el SHA-1 de los primeros 31 MiB. Quita el prefijo o tus lookups a VirusTotal devuelven silenciosamente nada. La referencia completa, con sus trampas.
- Recuperar evidencia de binarios borrados desde Amcache
Amcache sobrevive a los binarios que registra. La ruta, el SHA-1, el publisher, el link date y el momento del inventario persisten meses después de que el atacante limpie el archivo. El flujo práctico.
- Amcache: la referencia forense completa de la hive Windows .hve
La referencia completa de Amcache.hve: qué registra el appraiser por PE — SHA-1, ruta, publisher, link date — del formato al uso investigativo.