Beweise gelöschter Binärprogramme aus Amcache wiederherstellen

Das einzelne am meisten unterschätzte Feature von Amcache.hve ist, dass es die Binärprogramme überlebt, die es aufzeichnet. Ein Angreifer kann ein Tool in dem Moment löschen, in dem er es nicht mehr braucht; der Amcache-Snapshot des Pfades, Hashes, Publishers, der Version und Inventarzeit dieses Binärprogramms persistiert typischerweise wochen- oder monatelang in der Hive.

Diese Seite ist der praktische Workflow für die Verwendung von Amcache, wenn das Binärprogramm selbst weg ist.

Für die breitere Artefakt-Referenz siehe die vollständige Amcache-Referenz; für den kanonischen Vergleich siehe Amcache vs Prefetch und Amcache vs ShimCache.


Warum Amcache das Binärprogramm überlebt#

Der Compatibility Appraiser, der geplante Task, der Amcache befüllt, schreibt den Inventar-Snapshot einmal pro Scan. Sobald ein Eintrag in Root\InventoryApplicationFile ist, bleibt er in der Hive, bis:

  • Ein späterer Appraiser-Lauf ihn aktiv entfernt (was die Ausnahme ist, nicht die Regel), oder
  • Die Hive selbst gelöscht oder herausgealtert wird.

In der Praxis persistieren Einträge auf einer typischen Windows-11-Workstation monatelang, selbst nachdem das zugrunde liegende Binärprogramm weg ist. Auf einer langlebigen Workstation sind mehrjährige Einträge Standard.

Das macht Amcache zum zuverlässigsten Post-Löschungs-Artefakt für PE-Dateien unter Windows.


Was Sie wiederherstellen#

Wenn ein Binärprogramm gelöscht wird, verlieren Sie typischerweise:

  • Das Binärprogramm selbst.
  • Dateisystem-Zeitstempel (der MFT-Eintrag kann ebenfalls gelöscht oder überschrieben sein).
  • Die Möglichkeit, den Hash des Binärprogramms direkt zu verifizieren.

Was Sie in Amcache behalten:

Wiederhergestellt Aus Amcache-Feld
Vollständiger Pfad zum Inventarzeitpunkt FullPath / LowerCaseLongPath
SHA-1 der ersten 31 MiB Hash (0000-Präfix von FileId entfernen)
Dateigröße Size
PE-Linkdatum LinkDate
Publisher Publisher / PublisherName
Versions-Strings Version, BinFileVersion, ProductVersion
Produktname ProductName
Anwendungsidentität ProgramId
Wann der Appraiser es sah KeyLastWriteTimestamp

Dieses Set wiederhergestellter Felder reicht aus, um:


Der Post-Löschungs-Workflow#

Ein wiederholbarer Workflow für „Wir denken, sie haben hier ein Tool abgelegt und dann gelöscht":

1. Sammeln Sie die Hive plus Transaktionsprotokolle#

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

Wenn Sie vermuten, dass der Angreifer auch die Live-Hive gelöscht oder verändert hat, listen Sie Volume Shadow Copies auf und schnappen Sie sich die Kopie der Hive aus jedem Schatten — siehe Wo Amcache.hve auf der Festplatte liegt. Auf einer Workstation umfassen zwei oder drei Schattenkopien typischerweise die letzte Woche oder zwei; jede ist ein separates Parse-Ziel.

2. Parsen mit Multi-Pass#

AmcacheParser.exe `
  -f 'C:\Triage\Amcache.hve' `
  --csv 'C:\Triage\Parsed' `
  --csvf 'HOST01_amcache.csv' `
  --mp

Das --mp-Flag ist hier kritisch: Es stellt verwaiste Einträge wieder her, die der Appraiser deassoziiert, aber nicht vollständig gelöscht hat. Einige davon sind genau die Art von „gerade gelöschten" Zeilen, nach denen Sie suchen.

3. Filtern Sie auf verdächtige unsignierte PEs in benutzerbeschreibbaren Pfaden#

Das ist der Standard-Triage-Filter, mit einer Änderung: Lassen Sie jeden Filter auf FullPath existiert auf Festplatte weg, weil die Datei das nicht mehr tut.

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

Diese Liste ist das, was der Angreifer abgelegt (und wahrscheinlich gelöscht) hat, wie der Appraiser es sah.

4. Querverweisen gegen das Dateisystem#

Prüfen Sie für jede Zeile, ob die Datei noch auf der Festplatte existiert:

$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 }

Zeilen, in denen OnDisk = False, sind die Kandidaten für gelöschte Binärprogramme.

5. Anreicherung mit VirusTotal#

Hashen Sie alles, reichen Sie es ein, erfassen Sie die Ergebnisse. Selbst ein Lookup mit geringem Volumen gegen die öffentliche API fördert auf einem typisch infizierten Host bekannte bösartige Treffer zutage.

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)

Für Dateien größer als 31 MiB denken Sie daran, dass der Hash von Amcache ein Präfix-Hash ist, kein Volltext-Hash — siehe Amcache FileId erklärt für die Nuance.

6. Zeitliche Eingrenzung des Drop-Ereignisses#

Nehmen Sie für jedes bestätigt-böse gelöschte Binärprogramm seinen KeyLastWriteTimestamp ± 1 Stunde und ziehen Sie aus diesem Fenster:

  • Alle anderen Amcache-Zeilen (Treiber + Gerät + andere im selben Fenster inventarisierte Dateien — oft der Rest des Angreifer-Toolkits).
  • Prefetch (PECmd-Ausgabe) — bestätigt die Ausführung.
  • Security 4688 / Sysmon 1 — Prozesserstellung mit Kommandozeile.
  • Sysmon 11 (Datei erstellen) — bestätigt, wann die Datei geschrieben wurde.
  • MFT-Einträge für \Users\bob\...\ — Dateisystem-Bekräftigung.

Sie rekonstruieren typischerweise die gesamte Drop- + Ausführungs-

  • Cleanup-Sequenz aus diesen Joins, auch wenn das Binärprogramm selbst weg ist.

Anti-Forensik-Gegenmaßnahmen#

Ein paar spezifische Techniken, die Angreifer verwenden, um Binärprogramme vor Amcache zu verbergen, und wie man sie erkennt:

Drop und Löschen innerhalb eines Appraiser-Zyklus#

Wenn der Angreifer ein Binärprogramm droppt, ausführt und löscht, alles innerhalb eines einzelnen Appraiser-Intervalls (typischerweise <24 h auf Workstations), erscheint das Binärprogramm möglicherweise nie in Amcache.

Detektion: Querverweisen Sie Prefetch (das Ausführung in Echtzeit aufzeichnet und Binär-Löschung überlebt) und Sysmon 1 / 11 (Echtzeit-Prozess- und -Datei-Erstellung) gegen Amcache. Binärprogramme, die in Prefetch / Sysmon präsent sind, aber aus Amcache fehlen, sind „Intra-Appraiser"-Drops.

Direkte Hive-Modifikation#

Ein fähiger Angreifer mit Admin kann Amcache.hve bearbeiten, um bestimmte Einträge zu entfernen. Das ist unüblich (meist, weil es fummelig ist und die meisten Angreifer es sich nicht antun), aber möglich.

Detektion: Parsen Sie die Live-Hive UND alle Versionen der Hive in den Volume Shadow Copies. Diffen Sie sie. Einträge, die in Schatten präsent, aber aus der Live-Hive abwesend sind, sind Beweise absichtlicher Bereinigung. Einträge in der Live-Hive an unerwarteten Offsets sind Beweise von Umstrukturierung.

Appraiser-Sabotage#

Den geplanten Task Compatibility Appraiser zu deaktivieren oder zu behindern stoppt neue Amcache-Schreibvorgänge vollständig. Alte Einträge bleiben (bis sie herausaltern), aber die Hive wird zum Zeitpunkt der Sabotage „eingefroren".

Detektion: Prüfen Sie die Task-Historie des Appraisers im Task-Scheduler-Ereignisprotokoll (Microsoft-Windows-TaskScheduler/Operational). Schauen Sie sich die KeyLastWriteTimestamp-Verteilung der Hive an — wenn sie an einem bestimmten Datum abrupt stoppt und Sie neuere Einträge erwarten würden, vermuten Sie Sabotage. Prüfen Sie auch HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags auf DisableInventory oder ähnliche Deaktivierungswerte.

Hive-Löschung#

Die offene Löschung von Amcache.hve ist die plumpste Option. Windows erstellt die Hive beim nächsten Appraiser-Lauf neu, aber der vorherige Inhalt geht vom Live-System verloren.

Detektion: Der früheste KeyLastWriteTimestamp der neu erstellten Hive wird viel jünger sein als erwartet. Vergleichen Sie mit Volume Shadow Copies und mit forensischen Backups; stellen Sie die vorherige Hive aus Schatten wieder her.


Was Amcache nicht wiederherstellen kann#

Trotz seiner Stärken als Post-Löschungs-Artefakt stellt Amcache nicht wieder her:

  • Das Binärprogramm selbst (Sie haben einen Hash und Metadaten, keine Bytes).
  • Die Kommandozeile des Binärprogramms bei der Ausführung (verwenden Sie stattdessen die Dateiliste von Prefetch und 4688 / Sysmon 1).
  • Die Netzwerkziele, die das Binärprogramm kontaktierte (verwenden Sie SRUM, Firewall-Logs, EDR-Netzwerktelemetrie).
  • Den Benutzerkontext, unter dem das Binärprogramm lief (verwenden Sie 4688 / Sysmon 1).

Amcache ist ein Artefakt im Post-Löschungs-Werkzeugkasten. Paaren Sie es mit den anderen Windows-Ausführungsbeweis-Quellen für eine vollständige Rekonstruktion.


Siehe auch#

Um Ihre Hive nach Kandidaten gelöschter Binärprogramme zu durchsuchen, ohne etwas zu installieren, legen Sie eine Datei auf der Startseite des Parsers ab — sie parst vollständig in Ihrem Browser.

Verwandte Beiträge

Zurück zu allen Beiträgen