Amcache: die vollständige forensische Referenz der Windows-.hve-Hive

TL;DR. Amcache ist die Windows-Registry-Hive (Amcache.hve), die der Microsoft Compatibility Appraiser schreibt. Sie protokolliert jede PE, die der Appraiser auf der Platte gesehen hat, mit SHA-1, vollständigem Pfad, Herausgeber, PE-Linkdatum und der Schreibzeit des Appraisers. Analysten nutzen sie, um die Präsenz einer Binärdatei zu belegen (nicht zwingend deren Ausführung), per Hash über Hosts hinweg zu pivotieren und Spuren gelöschter Angreifer-Tools wiederherzustellen.

Amcache.hve ist die Hive, die eine Frage beantwortet, die kein anderes Windows-Artefakt sauber beantwortet: "War diese ausführbare Datei je auf diesem Host vorhanden, mit welchem SHA-1, auf welchem Pfad, ungefähr wann?"

Diese Seite ist die Referenz zum Artefakt selbst: was es ist, wo es lebt, wie Windows es erzeugt, was jeder Top-Level-Key enthält, wie man es in einer Untersuchung nutzt und wie es sich zu benachbarten Artefakten verhält. Für die Abdeckung der Parsing-Tools siehe den AmcacheParser-Komplettleitfaden. Für die Kurzfassung siehe Amcache verstehen.

Auf einen Blick gegen die Nachbarn#

Artefakt Was es beweist Hash Pfad Kapazität Quelle
Amcache.hve Binärdatei war auf dem Host präsent SHA-1 (erste 31 MiB) Voll Tausende Compatibility Appraiser
Shimcache Vom Loader gesehen Keiner Voll ~1024 (LRU) Application-Compatibility-Loader
Prefetch Ausgeführt Keiner Voll ~1024 .pf-Dateien Windows Prefetcher
SRUM Ressourcenverbrauch, 30-60 Tage Keiner Voll App-Aggregate System Resource Usage Monitor
Security 4688 (EVTX) Prozess erstellt (Echtzeit) Keiner Voll Begrenzt durch Log-Rollover Audit-Subsystem

Faustregel: Amcache für Präsenz und Hash. Shimcache für die jüngste Aufmerksamkeit des Loaders. Prefetch für Ausführung. SRUM für Nutzung über die Zeit. 4688 für das Echtzeit-Event. Details je Paar: Amcache vs. Shimcache, Amcache vs. Prefetch, Amcache vs. SRUM, Amcache vs. AppCompatCache.

Was Amcache eigentlich ist#

Eine Registry-Hive. Gleiches Binärformat wie SYSTEM, SOFTWARE, SAM, SECURITY und NTUSER.DAT. Keine Log-Datei, keine Datenbank, keine flache Liste. Ein Key/Value-Baum mit typisierten Werten. Diese Struktur ist es, die sie zugleich reichhaltig und etwas mühsam von Hand zu lesen macht.

Die Hive wird vom Microsoft Compatibility Appraiser befüllt, einer geplanten Aufgabe unter \Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser. Der Appraiser scannt das System nach installierter und vorhandener Software, sammelt PE-Header-Metadaten und schreibt strukturierte Inventardatensätze in die Hive. Auf Windows-10/11-Workstations etwa täglich, auf Server mehrere Tage, auf Server Core wöchentlich oder seltener.

Der Appraiser war ursprünglich Teil des Customer Experience Improvement Program (CEIP). Der forensische Wert von Amcache ist in gewissem Sinne ein Zufall: Der Appraiser brauchte ein lokales Inventar, um zu wissen, was er an Microsoft schickt, und auf diesem lokalen Inventar pivotieren Analysten.

Warum Analysten sich dafür interessieren#

Drei Eigenschaften machen Amcache außergewöhnlich:

  1. Sie überlebt das Löschen. Ein Wiper entfernt die Datei von der Platte; der Inventar-Snapshot bleibt in der Hive. Oft monatelang. Transaktionslogs konservieren häufig auch Einträge, die die Live-Hive verloren hat.
  2. Sie hasht die Binärdatei vorab. SHA-1 der ersten 31 MiB zum Inventarzeitpunkt. Selbst wenn Sie die Binärdatei nicht mehr haben, haben Sie einen Hash, um ihn an VirusTotal, TI-Feeds oder interne Allowlists zu schicken.
  3. Sie zeichnet den Pfad auf. Wo die Binärdatei auf der Platte lag, ist oft die ganze Geschichte. \Users\<name>\AppData\Local\Temp\svchost.exe ist seine eigene Anklageschrift.

Wo Amcache liegt#

C:\Windows\AppCompat\Programs\Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve.LOG1
C:\Windows\AppCompat\Programs\Amcache.hve.LOG2

.LOG1 und .LOG2 sind die Transaktionslogs der Hive. Sammeln Sie immer alle drei. Nimmt man nur die Hive, übersieht man still die jüngsten Schreibvorgänge, die noch in den Logs puffern.

Für die Langform-Pfad- und Sammlungsreferenz siehe Wo Amcache.hve auf der Platte liegt.

Schemageschichte#

Eine kleine, aber unordentliche Geschichte:

  • Windows 7 / Server 2008 R2: RecentFileCache.bcf, ein flaches Binärformat, deutlich spärlicher. Nicht Amcache.
  • Windows 8 / 8.1: Amcache.hve erscheint in Hive-Form mit den Keys Root\File und Root\Programs (Legacy-Schema).
  • Windows 10 Build 1709 (Fall Creators Update, 2017): Root\InventoryApplicationFile und die breitere Inventory*-Familie erscheinen (modernes Schema).
  • Windows 11: Setzt das Windows-10-Schema fort, mit kleineren Ergänzungen, granulareren Treiber-/Geräte-Datensätzen.

Moderne Analyse arbeitet gegen das moderne Inventory*-Schema. Die Legacy-Keys bleiben in manchen Builds und sind auf alten Systemen sowie auf Hosts mit deaktiviertem Appraiser zu prüfen. Versionsspezifika: Amcache auf Windows 11 und 10, Amcache auf Windows Server.

Hive-Struktur#

Auf einer modernen Windows-11-Hive enthält Root:

Root\
├── InventoryApplication
├── InventoryApplicationDriver
├── InventoryApplicationFile
├── InventoryApplicationFramework
├── InventoryApplicationShortcut
├── InventoryDeviceContainer
├── InventoryDeviceInterface
├── InventoryDevicePnp
├── InventoryDriverBinary
├── InventoryDriverPackage
├── InventoryMiscellaneousUUPInfo
├── File             (Legacy)
└── Programs         (Legacy)

Die fünf Keys, die Sie in den meisten Fällen anfassen:

Key Was er erfasst
InventoryApplicationFile Jede PE, die der Appraiser inventarisiert hat. Vollständiger Pfad, SHA-1, Linkdatum, Herausgeber, Version. Die reichste Einzelquelle.
InventoryApplication Installierte Anwendungen. Eltern der Dateieinträge via ProgramId.
InventoryDriverBinary Jede geladene Treiberbinärdatei, mit Signed-/Kernel-Mode-Flags. Kritisch für BYOVD.
InventoryDeviceContainer Gerätedatensätze mit Friendly Name: Drucker, Displays, Wechselmedien.
InventoryDevicePnp PnP-Enumerationsdatensätze, einer pro Geräte-Interface. Verknüpft via InstanceId mit DeviceContainer.

Für die vollständige Schlüssel-für-Schlüssel-Tour siehe Amcache-Registry-Struktur.

Schema-Versionierung#

Das Schema hat sich im Laufe von Windows 10 mehrfach verschoben. Neue Wertnamen tauchen auf, alte ändern Typ oder verschwinden. Deshalb ist ein generischer Registry-Viewer schlecht geeignet: Werte sind korrekt, aber unbeschriftet, und Sie verbringen mehr Zeit mit Querverweisen zu Blog-Posts als mit der Analyse. Verwenden Sie einen spezialisierten Parser (AmcacheParser, den Browser-Parser dieser Seite oder das RegRipper-Amcache-Plugin) und lassen Sie das Tool das Schema für Sie verfolgen.

Die Felder, die ihre Miete verdienen#

Eine Handvoll Werte pro Eintrag trägt 90 % der ermittlerischen Last.

FileId#

Der 41-Zeichen-String "0000" + sha1_hex. Die führenden "0000" sind ein historischer Typ-Tag. Die folgenden 40 Hex-Zeichen sind der SHA-1 der ersten 31 MiB. Streifen Sie das Präfix ab, bevor Sie an VirusTotal senden. AmcacheParser tut das für Sie in der Spalte Hash.

Zwei Fallen:

  • Der Hash deckt nur die ersten 31 MiB ab. Für Installer und große Binärdateien ist es ein Präfix-Hash, kein Vollinhalts-Hash. Unter 31 MiB entspricht der Präfix-Hash dem Standard-SHA-1.
  • VirusTotal liefert ein leeres Ergebnis, wenn Sie das "0000"-Präfix mitsenden, und das leere Ergebnis sieht identisch aus wie "unbekannter Hash". Irreführend.

Volle Abdeckung: Amcache FileId erklärt.

ProgramId#

Ein 44-Zeichen-Identitätshash, den Windows einer logischen Anwendung zuweist, abgeleitet aus Name, Herausgeber, Version und Sprache. Verknüpft eine Datei in InventoryApplicationFile mit ihrer übergeordneten Anwendung in InventoryApplication. Über Hosts hinweg stabil für dieselbe Installation. Nützlich für Cross-Host-Pivots.

Volle Abdeckung: Amcache ProgramId erklärt.

Zeitstempel#

Amcache legt mehrere unterschiedliche Zeitstempel offen. Sie zu verwechseln, ist der häufigste Fehler neuer Analysten:

Feld Was es darstellt
KeyLastWriteTimestamp Registry-Last-Write des umgebenden Keys. Das Nächste an "wann Amcache das aufgezeichnet hat".
LinkDate PE-TimeDateStamp. Wann die Binärdatei kompiliert wurde. Vom Angreifer kontrolliert. Nicht als Präsenzzeitpunkt behandeln.
LastModified (sofern vorhanden) Inventarseitiger Last-Modified-Marker. Nicht in jedem Schema.
MsiInstallDate Wann das übergeordnete MSI installiert wurde (falls vorhanden).

Der richtige Pivot für "wann ist diese Binärdatei auf diesem Host aufgetaucht?" ist KeyLastWriteTimestamp. Siehe Amcache-Zeitstempel erklärt.

Pfad, Herausgeber, IsPeFile#

Der Triage-Filter, der die meiste Arbeit erledigt:

IsPeFile = True UND Publisher leer UND FullPath unterhalb von \Users\, \AppData\, \ProgramData\ oder \Temp\.

Auf InventoryApplicationFile angewendet, holt das die überwältigende Mehrheit der Commodity-Malware-Artefakte auf einem typisch infizierten Host hoch. Reichlich False Positives (portable Apps, Dev-Tools, eigene Skripte), aber es ist ein Triage-Filter, keine Detection Rule.

Was Amcache nicht ist#

Drei beständige Missverständnisse, die falsche Befunde erzeugen:

Kein "Beweis der Ausführung"#

Eine Binärdatei in Amcache bedeutet, dass der Appraiser die Datei zum Inventarzeitpunkt gesehen hat. Der Appraiser inventarisiert nach Pfad, nicht danach, ob die Binärdatei lief. Eine Binärdatei kann in Amcache auftauchen, ohne je ausgeführt worden zu sein.

Für die Ausführung: Prefetch (am stärksten), Sysmon 1, Security 4688, Shimcache zur Korroboration, SRUM für die Korrelation über längere Fenster. Siehe Amcache vs. Prefetch und Amcache vs. Shimcache.

Nicht vollständig#

Der Appraiser übersieht Dinge:

  • Dateien außerhalb der Pfade, die er scannt.
  • Dateien, die zwischen Appraiser-Läufen aufgetaucht und wieder verschwunden sind (transiente Drops).
  • Dateien auf gehärteten Hosts, auf denen der Appraiser deaktiviert ist.
  • Auf älteren Windows-Builds Dateien außerhalb des Legacy-Scopes Programs / File.

Abwesenheit aus Amcache ist kein Beweis dafür, dass die Binärdatei nie vorhanden war. Es ist ein Beweis, dass der Appraiser sie nicht gesehen hat.

Nicht manipulationssicher#

Die Hive liegt an einem bekannten Ort auf der Platte. Ein Admin kann sie bearbeiten, löschen oder den Zeitplan des Appraisers stoppen. Bei Commodity-Einbrüchen unüblich (der Lärm überwiegt selten den Wert), aber möglich. Behandeln Sie Amcache als ein Signal unter vielen, nicht als Ground Truth. Siehe Kann Amcache geleert werden?.

Amcache in einer Untersuchung einsetzen#

Die Standardschleife bei einem Windows-Einbruch:

  1. Sammeln: Amcache.hve + Amcache.hve.LOG1 + Amcache.hve.LOG2. KAPEs Amcache-Target erledigt das in einem Befehl. Velociraptors Windows.Forensics.Amcache macht es remote.
  2. Parsen: AmcacheParser mit --mp, um verwaiste Einträge wiederherzustellen.
  3. Triage-Filter: unsignierte PE in benutzerschreibbarem Pfad gegen *_UnassociatedFileEntries.csv. Typischerweise zehn bis dutzende Zeilen auf einem infizierten Host.
  4. Pivotieren: SHA-1 gegen VirusTotal, TI-Feed, historische Detektionen. FullPath gegen die Dateisystem-Timeline und Prefetch.
  5. Ausführung korroborieren: Prefetch (entscheidend), Sysmon 1 / 7 (Prozess- und Image-Load), Security 4688.
  6. Zeitlich eingrenzen: KeyLastWriteTimestamp ± 1 h. Alle Events, MFT- / USN-Einträge und Registry-Schreibvorgänge aus diesem Fenster ziehen.

Der letzte Schritt ist der, den die meisten Analysten überspringen und den die meisten Berichte brauchen. Ein aus Amcache plus Prefetch plus einem 4688 stammender Befund ist berichtsfähig. Ein Befund nur aus Amcache bekommt die Einschränkung "Beleg für Dateipräsenz, Ausführung nicht korroboriert".

Für konkrete Szenarien:

Tooling#

Tool Am besten für
Eric Zimmermans AmcacheParser Produktives DFIR auf einer Windows-Workstation. Die kanonische Implementierung.
Browser-Parser Triage, Lehre, Nicht-Windows-Analysten, gehärtete Hosts. WebAssembly, kein Upload.
RegRipper-Amcache-Plugin Schnelle interaktive Analyse im Rahmen eines breiteren RegRipper-Sweeps.
Volatility-Plugins Die Hive aus einem Speicherabbild ziehen und an AmcacheParser übergeben.

Für die praktische "welches gerade"-Frage: AmcacheParser für die Untersuchung, der Browser-Parser für Triage oder einen schnellen Blick, ohne etwas zu installieren.

FAQ#

Wie groß ist Amcache.hve typischerweise?#

2-25 MB auf einer Windows-11-Workstation. 50+ MB auf Dev-Maschinen oder belebten Servern. Transaktionslogs sind klein, meist unter 1 MB pro Stück.

Wie weit zurück?#

Monate bis Jahre auf lange laufenden Workstations. Die Hive bereinigt Einträge nicht aktiv, solange die Binärdatei noch erkennbar ist. Sobald eine Binärdatei entfernt ist und der Appraiser mehrere Durchläufe hatte, das zu bemerken, altert der Eintrag in der Regel aus (aber nicht immer).

Erfasst Amcache DLLs?#

Ja, ab Windows 10 Build 1709. Sowohl EXEs als auch als PE klassifizierte DLLs.

Erfasst Amcache Skripte?#

Nein für .ps1, .bat, .vbs, .js. Amcache ist nur PE. Belege für die Skriptausführung kommen aus den PowerShell-Operational-Logs, AMSI, Sysmon oder Prefetch-Einträgen für cscript.exe / wscript.exe.

Amcache vs. Shimcache?#

Unterschiedliche Artefakte, obwohl beide zur Application-Compatibility-Infrastruktur gehören. Shimcache (AppCompatCache in SYSTEM) wird vom Loader gepflegt, ist auf 1024 Einträge gedeckelt, ohne Hash. Amcache wird vom Appraiser gepflegt, ist effektiv unbegrenzt, mit SHA-1 und reichhaltigeren Metadaten. Siehe Amcache vs. Shimcache.

Linux / macOS?#

dotnet AmcacheParser.dll mit der .NET-Runtime, oder der Browser-Parser, der überall läuft, wo es einen modernen Browser gibt. Siehe Wie man Amcache.hve unter Linux liest.

Gerichtsverwertbarkeit?#

Hängt von der Jurisdiktion und der Erfassung ab. Amcache ist gut dokumentiert und weit verbreitet. Dokumentieren Sie die Chain of Custody, hashen Sie vor und nach dem Parsen und nutzen Sie einen Parser, dessen Verhalten Sie im Kreuzverhör verteidigen können.

Weiterführende Quellen#

  • Yogesh Khatri, Amcache.hve in Windows 8. Das ursprüngliche öffentliche Reverse Engineering.
  • Eric Zimmerman, AmcacheParser. Goldstandard-Offlinetool.
  • Willi Ballenthin und das Mandiant-Team für die ursprüngliche Feld-Mappings im Legacy-Schema.
  • Maxim Suhanovs Registry-Internals-Forschung, die den Mythos "Amcache = Ausführung" beerdigt hat.

Wenn Sie eine Sache mitnehmen: Hash zuerst, Pfad zweitens, Zeit drittens. Amcache ist am besten als Hash-Index, der zufällig weiß, welche Dateien Windows gesehen hat, und am schlechtesten, wenn seine Zeitstempel als Ground Truth behandelt werden.

Verwandte Beiträge

Zurück zu allen Beiträgen