Recuperar evidencia de binarios borrados desde Amcache
La característica más infravalorada de Amcache.hve es que
sobrevive a los binarios que registra. Un atacante puede borrar
una herramienta en el momento en que ya no la necesita; el
snapshot de Amcache de la ruta, hash, publisher, versión y hora de
inventario de ese binario típicamente persiste en el hive durante
semanas o meses después.
Esta página es el flujo de trabajo práctico para usar Amcache cuando el propio binario se ha ido.
Para la referencia más amplia del artefacto, ver la referencia completa de Amcache; para la comparación canónica, ver Amcache vs Prefetch y Amcache vs ShimCache.
Por qué Amcache sobrevive al binario#
El Compatibility Appraiser, la tarea programada que puebla
Amcache, escribe el snapshot del inventario una vez por
escaneo. Una vez que una entrada está en
Root\InventoryApplicationFile, se queda en el hive hasta que:
- Una pasada posterior del appraiser la elimina activamente (que es la excepción, no la regla), o
- El propio hive se borra o caduca.
En la práctica, en una estación de trabajo típica de Windows 11, las entradas persisten durante meses incluso después de que el binario subyacente se haya ido. En una estación de trabajo de larga vida, las entradas de varios años son rutinarias.
Esto convierte a Amcache en el artefacto post-borrado más fiable para archivos PE en Windows.
Qué recuperas#
Cuando se borra un binario, típicamente pierdes:
- El propio binario.
- Las marcas de tiempo del sistema de archivos (la entrada de la MFT también puede ser borrada o sobreescrita).
- La capacidad de verificar el hash del binario directamente.
Lo que conservas en Amcache:
| Recuperado | De campo de Amcache |
|---|---|
| Ruta completa en el momento del inventario | FullPath / LowerCaseLongPath |
| SHA-1 de los primeros 31 MiB | Hash (quitar prefijo 0000 de FileId) |
| Tamaño del archivo | Size |
| Fecha de link PE | LinkDate |
| Publisher | Publisher / PublisherName |
| Cadenas de versión | Version, BinFileVersion, ProductVersion |
| Nombre del producto | ProductName |
| Identidad de aplicación | ProgramId |
| Cuándo lo vio el appraiser | KeyLastWriteTimestamp |
Ese conjunto de campos recuperados es suficiente para:
- Enviar el hash a VirusTotal / feeds de TI — ver Amcache FileId explicado.
- Pivotar sobre
ProgramIda través de otros hosts — ver Movimiento lateral y pivoteProgramIdde Amcache. - Acotar en el tiempo el evento de drop usando
KeyLastWriteTimestamp— ver Marcas de tiempo de Amcache explicadas. - Reconstruir la identidad del binario aunque sus bytes se hayan ido.
El flujo de trabajo post-borrado#
Un flujo de trabajo repetible para "creemos que dejaron una herramienta aquí, luego la borraron":
1. Recoge el hive más los journals de transacciones#
Copy-Item 'C:\Windows\AppCompat\Programs\Amcache.hve' 'C:\Triage\' -Force
Copy-Item 'C:\Windows\AppCompat\Programs\Amcache.hve.LOG1' 'C:\Triage\' -Force
Copy-Item 'C:\Windows\AppCompat\Programs\Amcache.hve.LOG2' 'C:\Triage\' -ForceSi sospechas que el atacante también borró o modificó el hive en vivo, enumera las Volume Shadow Copies y toma la copia del hive de cada shadow también — ver Dónde está Amcache.hve en disco. En una estación de trabajo, dos o tres shadow copies típicamente abarcan la última semana o dos; cada una es un objetivo de parseo separado.
2. Parsea con multi-pasada#
AmcacheParser.exe `
-f 'C:\Triage\Amcache.hve' `
--csv 'C:\Triage\Parsed' `
--csvf 'HOST01_amcache.csv' `
--mpEl flag --mp es crítico aquí: recupera entradas huérfanas
que el appraiser desasoció pero no borró completamente. Algunas de
ellas son exactamente el tipo de filas "recién borradas" que estás
buscando.
3. Filtra PEs sin firmar sospechosos en rutas escribibles por usuario#
Este es el filtro de triage estándar, con una modificación: omite
cualquier filtro sobre FullPath existiendo en disco porque el
archivo ya no existe.
Import-Csv 'C:\Triage\Parsed\HOST01_amcache_UnassociatedFileEntries.csv' |
Where-Object {
$_.IsPeFile -eq 'True' -and
-not $_.Publisher -and
$_.FullPath -match '\\Users\\|\\ProgramData\\|\\AppData\\|\\Temp\\'
} |
Select-Object KeyLastWriteTimestamp, FullPath, Hash, Size, LinkDate |
Sort-Object KeyLastWriteTimestampEsta lista es lo que el atacante dejó (y probablemente borró), tal como lo vio el appraiser.
4. Cruza contra el sistema de archivos#
Para cada fila, comprueba si el archivo todavía existe en disco:
$rows = Import-Csv ... | Where-Object { ... }
$rows | ForEach-Object {
$exists = Test-Path -LiteralPath $_.FullPath
[pscustomobject]@{
Path = $_.FullPath
Hash = $_.Hash
SeenAt = $_.KeyLastWriteTimestamp
OnDisk = $exists
}
} | Where-Object { -not $_.OnDisk }Las filas donde OnDisk = False son los candidatos a binarios
borrados.
5. Enriquece con VirusTotal#
Hashea todo, envía, captura resultados. Incluso una búsqueda de bajo volumen contra la API pública saca a la luz coincidencias conocidas como maliciosas en un host típico infectado.
import csv, requests, time
API = 'https://www.virustotal.com/api/v3/files/'
HEADERS = {'x-apikey': '<your-key>'}
with open('deleted_candidates.csv', newline='') as f:
for row in csv.DictReader(f):
h = row['Hash']
if not h:
continue
r = requests.get(API + h, headers=HEADERS)
if r.status_code == 200:
stats = r.json()['data']['attributes']['last_analysis_stats']
if stats.get('malicious', 0) > 0:
print(h, row['Path'], stats)
time.sleep(15)Para archivos mayores de 31 MiB, recuerda que el hash de Amcache es un hash de prefijo, no un hash del archivo completo — ver Amcache FileId explicado para el matiz.
6. Acota en el tiempo el evento de drop#
Para cada binario borrado confirmado-malo, toma su
KeyLastWriteTimestamp ± 1 hora y extrae de esa ventana:
- Todas las demás filas de Amcache (driver + dispositivo + otros archivos inventariados en la misma ventana — a menudo el resto del toolkit del atacante).
- Prefetch (salida de
PECmd) — confirma ejecución. - Security 4688 / Sysmon 1 — creación de proceso con línea de comandos.
- Sysmon 11 (file create) — confirma cuándo se escribió el archivo.
- Entradas de MFT para
\Users\bob\...\— corroboración a nivel del sistema de archivos.
Típicamente reconstruyes la secuencia completa de drop + ejecutar
- limpieza a partir de estos joins, aunque el propio binario se haya ido.
Contramedidas anti-forense#
Algunas técnicas específicas que los atacantes usan para esconder binarios de Amcache, y cómo detectarlas:
Drop y borrado dentro de un ciclo del appraiser#
Si el atacante deja un binario, lo ejecuta y lo borra todo dentro de un único intervalo del appraiser (típicamente <24 h en estaciones de trabajo), el binario puede no aparecer en Amcache en absoluto.
Detección: cruza Prefetch (que registra ejecución en tiempo real, sobreviviendo al borrado del binario) y Sysmon 1 / 11 (creación de proceso y archivo en tiempo real) contra Amcache. Los binarios presentes en Prefetch / Sysmon pero ausentes de Amcache son drops "intra-appraiser".
Modificación directa del hive#
Un atacante capaz con admin puede editar Amcache.hve para
eliminar entradas específicas. Esto es poco común (sobre todo
porque es complicado y la mayoría de los atacantes no se
molestan) pero es posible.
Detección: parsea el hive en vivo Y las versiones del hive de todas las Volume Shadow Copies. Hazles diff. Las entradas presentes en shadows pero ausentes del en vivo son evidencia de limpieza deliberada. Las entradas presentes en el hive en vivo pero en offsets inesperados son evidencia de reestructuración.
Sabotaje del appraiser#
Desactivar o lisiar la tarea programada Compatibility Appraiser detiene completamente las nuevas escrituras de Amcache. Las entradas antiguas permanecen (hasta que caducan), pero el hive se "congela" en el momento del sabotaje.
Detección: comprueba el historial de tareas del appraiser en
el log de eventos de Task Scheduler
(Microsoft-Windows-TaskScheduler/Operational). Mira la
distribución de KeyLastWriteTimestamp del hive — si se detiene
abruptamente en alguna fecha y esperarías entradas más nuevas,
sospecha sabotaje. También comprueba
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
en busca de valores DisableInventory o desactivación similar.
Borrado del hive#
El borrado directo de Amcache.hve es la opción más burda.
Windows recrea el hive en la siguiente corrida del appraiser, pero
los contenidos previos se pierden del sistema en vivo.
Detección: el KeyLastWriteTimestamp más temprano del hive
recreado será mucho más reciente de lo esperado. Compara con
Volume Shadow Copies y con backups forenses; recupera el hive
previo de las shadows.
Lo que Amcache no puede recuperar#
A pesar de sus fortalezas como artefacto post-borrado, Amcache no recupera:
- El propio binario (tienes un hash y metadatos, no bytes).
- La línea de comandos del binario en ejecución (usa la lista de archivos de Prefetch y 4688 / Sysmon 1 en su lugar).
- Los destinos de red que contactó el binario (usa SRUM, logs de firewall, telemetría de red EDR).
- El contexto de usuario bajo el que corrió el binario (usa 4688 / Sysmon 1).
Amcache es un artefacto en el toolkit post-borrado. Empareja con las otras fuentes de evidencia de ejecución de Windows para una reconstrucción completa.
Ver también#
- Referencia completa de Amcache — el artefacto al completo.
- Amcache vs Prefetch — la comparación canónica presencia-vs-ejecución.
- Amcache vs ShimCache — el otro artefacto post-borrado para archivos PE.
- Amcache FileId explicado — el hash que recuperas de binarios borrados.
- Amcache para investigación de malware — el playbook más amplio de investigación de intrusión.
Para explorar tu hive en busca de candidatos a binarios borrados sin instalar nada, suelta un archivo en la página de inicio del parser — se parsea enteramente en tu navegador.
Artículos relacionados
- Volatility y Amcache: extraer el hive de imágenes de memoria
Una guía práctica para recuperar Amcache de una imagen de memoria de Windows usando Volatility — cuándo la recuperación del lado de memoria es la única opción, qué plugins usar y cómo entregar a AmcacheParser.
- Plugin amcache de RegRipper: qué hace y cuándo usarlo
Una guía práctica del plugin amcache de RegRipper — qué parsea, en qué se diferencia su salida de texto del CSV de AmcacheParser y cuándo recurrir a él en lugar de (o junto con) la herramienta de Zimmerman.
- ¿Pueden los atacantes limpiar Amcache?
Sí — un atacante con derechos de admin puede editar o borrar Amcache.hve, pero la limpieza es detectable: las Volume Shadow Copies, los journals de transacciones y el propio log del appraiser usualmente preservan el estado previo.
- Las columnas de salida de AmcacheParser explicadas: cada campo CSV decodificado
Referencia campo por campo para la salida CSV de AmcacheParser — FileId, PathHash, ProgramId, LinkDate, BinFileVersion, IsPeFile y cualquier otra columna, con los pivotes que importan en DFIR.