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 elimina una herramienta en cuanto ya no la necesita. El snapshot de Amcache de la ruta, hash, publisher, versión y tiempo de inventario de ese binario suele persistir en la hive semanas o meses después.
Esta página es el flujo práctico cuando el binario ha desaparecido y la hive es todo lo que tienes.
Para el contexto del artefacto, ve la Referencia completa de Amcache. Para el contexto de comparación, ve Amcache vs Prefetch y Amcache vs Shimcache.
Por qué Amcache sobrevive al binario#
El appraiser escribe el snapshot de inventario una vez por pasada. Una vez que una entrada está en Root\InventoryApplicationFile se queda en la hive hasta que:
- Una pasada posterior del appraiser la elimine activamente (la excepción, no la regla), o
- La propia hive se borre o envejezca y se purgue.
En la práctica, en una workstation Windows 11, las entradas persisten meses incluso después de que el binario haya desaparecido. En workstations que llevan mucho corriendo, entradas con varios años son rutina.
Eso convierte a Amcache en el artefacto post-borrado más fiable para archivos PE en Windows.
Lo que en realidad recuperas#
Cuando un binario se borra, normalmente pierdes:
- El binario en sí.
- Los timestamps del filesystem en la MFT (pueden estar limpiados o sobrescritos).
- La capacidad de verificar el hash del binario directamente.
Lo que conservas en Amcache:
| Recuperado | De |
|---|---|
| Ruta completa en el momento del inventario | FullPath / LowerCaseLongPath |
| SHA-1 de los primeros 31 MiB | Hash (quita 0000 del FileId) |
| Tamaño de archivo | Size |
| Link date PE | LinkDate |
| Publisher | Publisher / PublisherName |
| Strings de versión | Version, BinFileVersion, ProductVersion |
| Nombre de producto | ProductName |
| Identidad de aplicación | ProgramId |
| Cuándo lo vio el appraiser | KeyLastWriteTimestamp |
Suficiente para mandar el hash a VirusTotal (ve FileId de Amcache explicado), pivotar el ProgramId entre hosts (ve Movimiento lateral y pivote por ProgramId de Amcache), acotar temporalmente el evento de drop vía KeyLastWriteTimestamp (ve Timestamps de Amcache explicados), y reconstruir la identidad del binario aunque sus bytes ya no estén.
El flujo post-borrado#
Un flujo repetible para "creemos que aquí dejaron una herramienta y luego la limpiaron".
1. Recoger la hive más logs de transacción#
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 tocó la hive viva, enumera Volume Shadow Copies y coge la copia de cada shadow también. Ve Dónde está Amcache.hve en disco. En una workstation, dos o tres shadow copies suelen cubrir la última semana o dos. Cada uno es un target de parseo aparte.
2. Parsear con multi-pass#
AmcacheParser.exe `
-f 'C:\Triage\Amcache.hve' `
--csv 'C:\Triage\Parsed' `
--csvf 'HOST01_amcache.csv' `
--mpEl flag --mp es crítico. Recupera entradas huérfanas que el appraiser desasoció pero no borró del todo. Algunas de ellas son exactamente las filas "recién borradas" que buscas.
3. Filtrar PEs sospechosos sin firmar en rutas escribibles por usuario#
Filtro de triage estándar, con una modificación: salta cualquier comprobación de que FullPath exista en disco, porque ya no.
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 KeyLastWriteTimestamp, FullPath, Hash, Size, LinkDate |
Sort-Object KeyLastWriteTimestampEsa es la lista de binarios dropeados (y probablemente borrados) tal y como los vio el appraiser.
4. Cruzar contra el sistema de archivos#
Para cada fila, comprueba si el archivo aún existe:
$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 tus candidatas a binarios borrados.
5. Enriquecer con VirusTotal#
Hashea todo, manda, captura resultados. Incluso un lookup de bajo volumen contra la API pública saca conocidos-malos en un host infectado típico.
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 de archivo completo. Ve FileId de Amcache explicado.
6. Acotar el drop en el tiempo#
Para cada binario borrado confirmado-malo, toma KeyLastWriteTimestamp ± 1 hora y saca de esa ventana:
- Todas las demás filas de Amcache (drivers, dispositivos, otros archivos inventariados en la misma ventana, a menudo el resto del toolkit).
- 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 MFT para
\Users\bob\...\. Corroboración al nivel del filesystem. - Entradas del journal USN. El otro journal de filesystem que a menudo atrapa lo que la MFT pierde.
Normalmente reconstruyes la secuencia entera de drop + ejecución + cleanup desde estos joins, aunque el binario ya no esté.
Contramedidas anti-forenses#
Algunas técnicas concretas del atacante y cómo detectarlas.
Drop and delete dentro de un ciclo del appraiser#
El atacante deja caer, ejecuta y borra dentro de un único intervalo del appraiser (<24h en workstations). El binario puede no aparecer nunca en Amcache.
Detección: cruza Prefetch (que graba ejecución en tiempo real y sobrevive al borrado del binario) y Sysmon 1 / 11 contra Amcache. Binarios en Prefetch / Sysmon pero ausentes de Amcache son drops intra-appraiser.
Modificación directa de la hive#
Un atacante capaz con admin puede editar Amcache.hve para quitar entradas concretas. Poco común (fastidioso, la mayoría de atacantes no se molesta) pero posible.
Detección: parsea la hive viva Y la versión de cada Volume Shadow Copy de la hive. Diff. Entradas en shadows pero ausentes de la viva son evidencia de limpieza deliberada. Entradas en offsets inesperados en la hive viva son evidencia de reestructuración.
Sabotaje del appraiser#
Deshabilitar la tarea programada o poner AllowTelemetry a cero. Detiene escrituras nuevas en Amcache por completo. Las entradas viejas permanecen hasta envejecer. La hive se congela en el momento del sabotaje.
Detección: revisa el historial de la tarea del appraiser en Microsoft-Windows-TaskScheduler%4Operational.evtx vía tu parser de EVTX. Mira la distribución de KeyLastWriteTimestamp en la hive. Si se corta de golpe y esperarías entradas más nuevas, sospecha sabotaje. Revisa también HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags y HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection\AllowTelemetry.
Borrado de la hive#
El instrumento contundente. Windows recrea la hive en la siguiente pasada del appraiser, pero el contenido anterior se pierde del sistema vivo.
Detección: el KeyLastWriteTimestamp más antiguo de la hive recreada es mucho más reciente de lo esperado. Compara con Volume Shadow Copies y backups forenses, recupera la hive previa desde shadows.
Lo que Amcache no puede recuperar#
Amcache es buena. No es mágica.
- El binario en sí. Tienes hash y metadatos, no bytes.
- La línea de comandos en la ejecución. Usa la lista de archivos de Prefetch y 4688 / Sysmon 1.
- Destinos de red que contactó el binario. Usa SRUM, logs de firewall, telemetría de red del EDR.
- El contexto de usuario. Usa 4688 / Sysmon 1.
Amcache es un artefacto en el kit post-borrado. Combínalo con los demás para una reconstrucción completa.
Lecturas adicionales#
- El deep dive de Amcache de Yogesh Khatri.
- Maxim Suhanov, Resurrecting deleted registry keys (para los internals de recuperación de logs de transacción).
- MITRE ATT&CK T1070.009 Clear Persistence.
Relacionados#
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.
- Amcache: la referencia forense completa de la hive Windows .hve
Amcache es la hive donde el Compatibility Appraiser anota cada PE en disco, con SHA-1, ruta completa, publisher, link date y un tiempo de escritura de clave. La referencia, del formato al uso investigativo.
- 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.
- 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.