Beweise gelöschter Binärdateien aus Amcache wiederherstellen
Das mit Abstand unterschätzte Merkmal von Amcache.hve ist, dass sie die Binärdateien überlebt, die sie aufzeichnet. Ein Angreifer löscht ein Tool, sobald er es nicht mehr braucht. Amcaches Snapshot von Pfad, Hash, Herausgeber, Version und Inventarzeit dieser Binärdatei bleibt in der Hive typischerweise wochen- oder monatelang danach.
Diese Seite ist der praktische Workflow, wenn die Binärdatei weg ist und die Hive alles ist, was Sie haben.
Für den Hintergrund zum Artefakt siehe die Vollständige Amcache-Referenz. Für den Vergleichskontext siehe Amcache vs. Prefetch und Amcache vs. Shimcache.
Warum Amcache die Binärdatei überlebt#
Der Appraiser schreibt den Inventar-Snapshot einmal pro Durchlauf. Sobald ein Eintrag in Root\InventoryApplicationFile steht, bleibt er in der Hive, bis:
- Ein späterer Appraiser-Durchlauf ihn aktiv entfernt (die Ausnahme, nicht die Regel), oder
- Die Hive selbst gelöscht wird oder veraltet.
In der Praxis halten Einträge auf einer Windows-11-Workstation monatelang, auch wenn die Binärdatei weg ist. Auf lange laufenden Workstations sind mehrere Jahre alte Einträge Routine.
Das macht Amcache zum verlässlichsten Post-Deletion-Artefakt für PE-Dateien unter Windows.
Was Sie tatsächlich wiederherstellen#
Wenn eine Binärdatei gelöscht wird, verlieren Sie typischerweise:
- Die Binärdatei selbst.
- Dateisystem-Zeitstempel in der MFT (können gewischt oder überschrieben sein).
- Die Möglichkeit, den Hash der Binärdatei direkt zu verifizieren.
Was Sie in Amcache behalten:
| Wiederhergestellt | Aus |
|---|---|
| Vollständiger Pfad zum Inventarzeitpunkt | FullPath / LowerCaseLongPath |
| SHA-1 der ersten 31 MiB | Hash (0000 vom FileId abstreifen) |
| Dateigröße | Size |
| PE-Linkdatum | LinkDate |
| Herausgeber | Publisher / PublisherName |
| Versions-Strings | Version, BinFileVersion, ProductVersion |
| Produktname | ProductName |
| Applikationsidentität | ProgramId |
| Wann der Appraiser sie sah | KeyLastWriteTimestamp |
Genug, um den Hash an VirusTotal zu schicken (siehe Amcache FileId erklärt), die ProgramId über Hosts hinweg zu pivotieren (siehe Lateral Movement und Amcache-ProgramId-Pivoting), das Drop-Event zeitlich über KeyLastWriteTimestamp einzugrenzen (siehe Amcache-Zeitstempel erklärt) und die Identität der Binärdatei zu rekonstruieren, auch wenn ihre Bytes weg sind.
Der Post-Deletion-Workflow#
Ein wiederholbarer Workflow für "wir vermuten, dass sie hier ein Tool abgelegt und dann gewischt haben".
1. Hive plus Transaktionslogs sammeln#
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\' -ForceWenn Sie vermuten, dass der Angreifer auch die Live-Hive angefasst hat, zählen Sie Volume Shadow Copies auf und greifen Sie auch die Kopie aus jedem Shadow. Siehe Wo Amcache.hve auf der Platte liegt. Auf einer Workstation umfassen zwei oder drei Shadow Copies typischerweise die letzten ein bis zwei Wochen. Jede ist ein separates Parse-Ziel.
2. Mit Multi-Pass parsen#
AmcacheParser.exe `
-f 'C:\Triage\Amcache.hve' `
--csv 'C:\Triage\Parsed' `
--csvf 'HOST01_amcache.csv' `
--mpDas --mp-Flag ist kritisch. Es stellt verwaiste Einträge wieder her, die der Appraiser dissoziiert, aber nicht vollständig gelöscht hat. Einige davon sind genau die "gerade gelöschten" Zeilen, die Sie suchen.
3. Nach verdächtigen unsignierten PEs in benutzerschreibbaren Pfaden filtern#
Standard-Triage-Filter, mit einer Änderung: weglassen jede Prüfung, ob FullPath auf der Platte existiert, weil die Datei nicht mehr existiert.
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 KeyLastWriteTimestampDas ist die Liste der abgelegten (und wahrscheinlich gelöschten) Binärdateien, wie der Appraiser sie gesehen hat.
4. Gegen das Dateisystem querverweisen#
Für jede Zeile prüfen, ob die Datei noch 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, bei denen OnDisk = False, sind Ihre Kandidaten für gelöschte Binärdateien.
5. Mit VirusTotal anreichern#
Alles hashen, einreichen, Ergebnisse erfassen. Selbst ein Lookup mit geringer Frequenz gegen die öffentliche API holt bekannt-böse Ergebnisse auf einem typisch infizierten Host hoch.
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 Amcaches Hash ein Präfix-Hash ist, kein Vollinhalts-Hash. Siehe Amcache FileId erklärt.
6. Den Drop zeitlich eingrenzen#
Für jede bestätigt-böse gelöschte Binärdatei KeyLastWriteTimestamp ± 1 Stunde nehmen und aus diesem Fenster ziehen:
- Alle weiteren Amcache-Zeilen (Treiber, Geräte, andere Dateien, die im selben Fenster inventarisiert wurden, oft der Rest des Toolkits).
- Prefetch (
PECmd-Ausgabe). Bestätigt die Ausführung. - Security 4688 / Sysmon 1. Prozesserstellung mit Kommandozeile.
- Sysmon 11. File Create. Bestätigt, wann die Datei geschrieben wurde.
- MFT-Einträge für
\Users\bob\...\. Dateisystemseitige Korroboration. - USN-Journal-Einträge. Das andere Dateisystemjournal, das oft das einfängt, was die MFT übersieht.
Aus diesen Joins rekonstruieren Sie typischerweise die gesamte Drop-+-Execute-+-Cleanup-Sequenz, auch wenn die Binärdatei weg ist.
Anti-Forensik-Gegenmaßnahmen#
Einige konkrete Angreifertechniken und wie man sie erkennt.
Drop und Delete innerhalb eines Appraiser-Zyklus#
Angreifer legt ab, führt aus und löscht innerhalb eines einzigen Appraiser-Intervalls (<24h auf Workstations). Die Binärdatei taucht eventuell nie in Amcache auf.
Erkennung: Prefetch (das Ausführung in Echtzeit aufzeichnet und das Löschen der Binärdatei überlebt) und Sysmon 1 / 11 gegen Amcache querverweisen. Binärdateien, die in Prefetch / Sysmon vorhanden, aus Amcache aber abwesend sind, sind Intra-Appraiser-Drops.
Direkte Hive-Modifikation#
Ein fähiger Angreifer mit Admin-Rechten kann Amcache.hve editieren, um bestimmte Einträge zu entfernen. Unüblich (fummelig, die meisten Angreifer machen sich die Mühe nicht), aber möglich.
Erkennung: die Live-Hive UND die Version jeder Volume Shadow Copy parsen. Diffen. Einträge in Shadows, aber nicht in der Live-Hive, sind Hinweise auf gezielte Bereinigung. Einträge an unerwarteten Offsets in der Live-Hive sind Hinweise auf Umstrukturierung.
Appraiser-Sabotage#
Die geplante Aufgabe deaktivieren oder AllowTelemetry auf null setzen. Stoppt neue Amcache-Schreibvorgänge vollständig. Alte Einträge bleiben, bis sie ausaltern. Die Hive friert zum Zeitpunkt der Sabotage ein.
Erkennung: die Task-Historie des Appraisers in Microsoft-Windows-TaskScheduler%4Operational.evtx über Ihren EVTX-Parser prüfen. Auf die Verteilung von KeyLastWriteTimestamp der Hive schauen. Wenn sie abrupt aufhört und Sie neuere Einträge erwarten würden, Sabotage vermuten. Auch HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags und HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection\AllowTelemetry prüfen.
Hive-Löschung#
Das stumpfe Instrument. Windows erstellt die Hive beim nächsten Appraiser-Lauf neu, aber vorherige Inhalte sind vom Live-System verloren.
Erkennung: Der früheste KeyLastWriteTimestamp der neu erstellten Hive ist viel neuer als erwartet. Gegen Volume Shadow Copies und forensische Backups vergleichen, die vorherige Hive aus Shadows wiederherstellen.
Was Amcache nicht wiederherstellen kann#
Amcache ist gut. Sie ist nicht magisch.
- Die Binärdatei selbst. Sie haben einen Hash und Metadaten, keine Bytes.
- Die Kommandozeile bei der Ausführung. Nutzen Sie Prefetch's Dateiliste und 4688 / Sysmon 1.
- Netzwerkziele, mit denen die Binärdatei Kontakt hatte. Nutzen Sie SRUM, Firewall-Logs, EDR-Netzwerktelemetrie.
- Den Benutzerkontext. Nutzen Sie 4688 / Sysmon 1.
Amcache ist ein Artefakt im Post-Deletion-Toolkit. Mit den anderen kombinieren, um vollständig zu rekonstruieren.
Weiterführende Quellen#
- Yogesh Khatris Amcache-Tiefenanalyse.
- Maxim Suhanov, Resurrecting deleted registry keys (für Internals zur Transaction-Log-Recovery).
- MITRE ATT&CK T1070.009 Clear Persistence.
Verwandt#
Verwandte Beiträge
- Amcache: die vollständige forensische Referenz der Windows-.hve-Hive
Amcache ist die Hive, in die der Compatibility Appraiser jede PE-Datei auf der Platte einträgt, mit SHA-1, vollständigem Pfad, Herausgeber, Linkdatum und Key-Schreibzeit. Die Referenz, vom Format bis zur Ermittlungspraxis.
- Amcache FileId erklärt: das SHA-1-Hash-Format, das Windows speichert
FileId ist '0000' plus der SHA-1 der ersten 31 MiB. Streifen Sie das Präfix ab, sonst liefern Ihre VirusTotal-Abfragen still nichts. Die vollständige Referenz, mit den Fallen.
- Volatility und Amcache: die Hive aus Speicherabbildern extrahieren
Ein praktischer Leitfaden zur Wiederherstellung von Amcache aus einem Windows-Speicherabbild mit Volatility — wann speicherseitige Wiederherstellung die einzige Option ist, welche Plugins zu verwenden sind und wie an AmcacheParser übergeben wird.
- RegRipper amcache-Plugin: was es tut und wann man es verwendet
Ein praktischer Leitfaden zum amcache-Plugin von RegRipper — was es parst, wie sich seine Text-Ausgabe von AmcacheParsers CSV unterscheidet und wann man darauf zurückgreift statt (oder zusätzlich zum) Zimmerman-Tool.