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:


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\' -Force

Si 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' `
  --mp

El 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 KeyLastWriteTimestamp

Esta 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#

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

Volver a todos los artículos