Amcache vs ShimCache: wann welches Artefakt gewinnt

Amcache und ShimCache (auch AppCompatCache genannt) sind die beiden Windows-Artefakte, die am häufigsten miteinander verwechselt werden, weil beide in der „Application Compatibility"-Infrastruktur sitzen und beide Binärprogramme aufzeichnen, die auf einem Host waren. Es sind unterschiedliche Mechanismen, gepflegt von unterschiedlichen Windows-Subsystemen, mit unterschiedlichen Grenzen und unterschiedlichem forensischen Wert.

Die wichtigsten Unterschiede:

ShimCache ist kürzer, dünner, kernelseitig gepflegt und vom Loader aktualisiert. Amcache ist länger, reicher, im User-Mode gepflegt und von einem geplanten Task aktualisiert.

Für die breitere Amcache-Referenz siehe die vollständige Amcache-Referenz. Für die Amcache-vs-Prefetch-Frage (ein anderer Vergleich) siehe Amcache vs Prefetch.


Was jedes aufzeichnet#

ShimCache / AppCompatCache#

Ein binäres Blob, gespeichert in der SYSTEM-Registry-Hive unter HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. Es wird kernelseitig gepflegt — jedes Mal, wenn der Loader ein Binärprogramm berührt (lädt, ausführt oder in manchen Fällen nur statet), wird der Cache aktualisiert.

Jeder Eintrag speichert:

  • Den vollständigen Pfad der Datei.
  • Einen Änderungs-Zeitstempel (die $STANDARD_INFORMATION-Änderungszeit der Datei zum Zeitpunkt des Cache-Updates).
  • Ein Flag, das angibt, ob das Binärprogramm ausgeführt wurde.
  • Auf einigen Windows-Versionen: einen Eintrags-Erstellungs-Zeitstempel.

Der Cache wird beim Herunterfahren in die Registry geflusht, nicht in Echtzeit. Das erzeugt eine kritische Eigenheit: Auf einem Live-System ist der On-Disk-Cache veraltet bis zum nächsten sauberen Herunterfahren. Um den frischesten ShimCache zu bekommen, brauchen Sie ein Speicherabbild oder ein System, das seit den interessierenden Ereignissen sauber heruntergefahren wurde.

Der Cache ist außerdem größenbegrenzt:

  • Windows 7 / Server 2008 R2: 1024 Einträge.
  • Windows 8 / 2012: 1024 Einträge.
  • Windows 10 / 11 / 2016+: 1024 Einträge.

Wenn das Limit erreicht ist, werden ältere Einträge nach LRU-Verfahren verdrängt. Ein stark genutzter Host kann ShimCache in Tagen durchwälzen.

Amcache#

Eine separate Registry-Hive (Amcache.hve), gepflegt vom geplanten Task Compatibility Appraiser, der auf Workstations ungefähr täglich und auf Servern seltener läuft. Die Hive zeichnet Tausende von Einträgen pro Host mit reichhaltigen Metadaten auf: SHA-1-Hash, Publisher, Version, Linkdatum, Installationskontext. Siehe Amcache-Registry-Struktur für das vollständige Schema.


Der fundamentale Unterschied#

Eigenschaft ShimCache Amcache
Speicherung SYSTEM-Hive, einzelner Binärwert Eigenständige Amcache.hve
Pflegender Kernel-Loader Geplanter Task im User-Mode
Update-Trigger Loader berührt das Binärprogramm Appraiser-Scan
Persistenz auf Festplatte Beim Herunterfahren Kontinuierlich (mit Transaktionsprotokollen)
Max. Einträge ~1024 Effektiv unbegrenzt (Tausende typisch)
Zeichnet Hash auf? Nein Ja — SHA-1 der ersten 31 MiB
Zeichnet Publisher / Version auf? Nein Ja
Zeichnet ProgramId auf? Nein Ja
Zeichnet Treiber- / Gerätedaten auf? Nein Ja (Treiber- + Geräte-Unterschlüssel)
Granularität pro Eintrag Pfad + 1–2 Zeitstempel Pfad + reichhaltige Metadaten + mehrere Zeitstempel
Auf Live-System verfügbar Veraltet (Herunterfahren nötig) Frisch
Überlebt Löschung des Binärprogramms Ja Ja
Im Speicher verfügbar Ja (nützlichster Ort) Ja (weniger kritisch)

Für die meisten DFIR-Arbeiten ist Amcache das reichhaltigere Artefakt. ShimCache bleibt essentiell für spezifische Fragen, in denen seine kernelseitige Position sich auszahlt.


Wann ShimCache gewinnt#

Eine Handvoll Fälle, in denen Sie ShimCache wollen, nicht Amcache:

„Hat der Loader dieses Binärprogramm berührt, auch wenn es nicht ausgeführt wurde?"#

ShimCache zeichnet Loader-Berührungen aggressiver auf, als Amcache Präsenz aufzeichnet. Ein Binärprogramm, das von einer Anwendung kurz statet wurde, aber nie ausgeführt und nie vom Appraiser inventarisiert wurde, kann trotzdem eine Spur in ShimCache hinterlassen.

Das ist selten, aber nicht unmöglich. ShimCache ist das einzige Artefakt, das das erfasst.

„Ich habe ein Speicherabbild, aber kein Festplatten-Image"#

ShimCache lebt kontinuierlich im Kernel-Speicher und ist eines der Artefakte, die das shimcachemem-Plugin von Volatility sauber extrahiert. Amcache sind Registry-Hive-Daten auf der Festplatte — um sie aus dem Speicher zu bekommen, müssen Sie die Hive selbst extrahieren, was mehr Arbeit ist.

„Der Appraiser ist auf diesem Host deaktiviert"#

Gehärtete Endpoints deaktivieren manchmal den Compatibility Appraiser, um Telemetrie an Microsoft zu verhindern. Diese Hosts haben keine Amcache-Aktivität, aber der Kernel pflegt ShimCache weiterhin (es ist Teil des Loaders, nicht des Appraisers).

„Ich brauche Abdeckung vor Windows 10 1709"#

Das moderne Inventory*-Schema in Amcache landete erst in Windows 10 Build 1709. Für ältere 10/8.x-Builds ist Amcache dünner. ShimCache ist älter als Amcache und konsistent ab Windows 7 verfügbar.


Wann Amcache gewinnt#

Meistens. Die Fälle, in denen Amcache dramatisch besser ist:

„Was ist der SHA-1 dieses Binärprogramms?"#

ShimCache: keine Antwort. Amcache: direkt in der Hash-Spalte. Allein das ist Grund genug, Amcache zur ersten Anlaufstelle in den meisten Untersuchungen zu machen.

„Wer hat dieses Binärprogramm veröffentlicht?"#

ShimCache: keine Antwort. Amcache: Publisher, PublisherName, ProductName.

„Wann erschien dieses Binärprogramm zum ersten Mal auf diesem Host?"#

ShimCache: ein Zeitstempel, aber es ist die Änderungszeit der Datei zum Zeitpunkt der Loader-Berührung, nicht die Berührungszeit selbst. Nützlich, aber indirekt. Amcache: KeyLastWriteTimestamp kommt „wann hat Amcache dies aufgezeichnet" näher, was wiederum „wann hat der Appraiser es zum ersten Mal gesehen" näher kommt. Siehe Amcache-Zeitstempel erklärt.

„Steht dieses Binärprogramm in Bezug zu einer installierten Anwendung?"#

ShimCache: keine Beziehungsdaten. Amcache: ProgramId verbindet mit InventoryApplication für den vollständigen Installations-Produktkontext. Siehe Amcache ProgramId erklärt.

„Hostübergreifende Jagd"#

ShimCache: 1024 Einträge pro Host, keine ProgramId, nur Pfade. Eine hash-basierte hostübergreifende Jagd ist allein aus ShimCache unmöglich. Amcache: Hash und ProgramId machen hostübergreifende Pivots trivial. Siehe Lateral Movement und Amcache-ProgramId-Pivoting.

„Treiber- / Geräte-Beweise"#

ShimCache: nur PE-Binärprogramme, die der Loader berührte. Amcache: InventoryDriverBinary, InventoryDeviceContainer und InventoryDevicePnp geben Ihnen eine separate, strukturierte Treiber- und Geräte-Historie. Essentiell für BYOVD- und USB-Untersuchungen.


Wie sie sich gegenseitig bekräftigen#

Wenn beide Artefakte einen Eintrag für dasselbe Binärprogramm haben, bekommen Sie eine Multi-Source-Bestätigung:

  • ShimCache sagt, dass der Loader es berührte.
  • Amcache sagt, dass der Appraiser es inventarisierte, mit Hash und Metadaten.
  • Prefetch (falls vorhanden) sagt, dass es tatsächlich ausgeführt wurde, mit Laufzeiten.

Wenn nur ein Artefakt das Binärprogramm hat, ist das Fehlen im anderen selbst ein Signal:

  • Nur ShimCache: Der Loader berührte es, aber der Appraiser inventarisierte es nie. Mögliche Gründe: Datei vor dem nächsten Appraiser-Lauf gelöscht, Datei in einem Pfad, den der Appraiser nicht durchsucht, Appraiser deaktiviert.
  • Nur Amcache: Der Appraiser inventarisierte es, aber der Loader berührte es nie (im Zeitfenster, das der aktuelle ShimCache abdeckt). Mögliche Gründe: Datei war präsent, wurde aber nie geladen, die Loader-Berührung der Datei wurde aus dem 1024-Einträge-Limit des ShimCache verdrängt, ShimCache wurde geleert.

Gemeinsamer Standard-Workflow#

  1. Parsen Sie ShimCache mit AppCompatCacheParser.exe (Zimmerman).
  2. Parsen Sie Amcache mit AmcacheParser.exe (Zimmerman).
  3. Laden Sie beide in Timeline Explorer.
  4. Prüfen Sie für jeden Eintrag im Amcache-Triage-Filter „unsigniertes PE in benutzerbeschreibbarem Pfad" ShimCache auf denselben Pfad. Falls vorhanden, berührte der Loader es; falls nicht, nur Präsenz.
  5. Prüfen Sie für jeden Eintrag in ShimCache mit gesetztem Executed-Flag Amcache auf Hash- / Publisher-Metadaten.
  6. Querverweisen Sie beides mit Prefetch für den Ausführungsbeweis.

Schnelle Entscheidungstabelle#

Ihre Frage ShimCache Amcache
War Binärprogramm X auf diesem Host? ✓ (nur Pfad, letzte 1024) ✓✓ (Pfad + Metadaten)
Was ist der SHA-1 von Binärprogramm X?
Wurde Binärprogramm X ausgeführt? teilweise (Executed-Flag)
Wann erschien Binärprogramm X zum ersten Mal? teilweise
Hostübergreifende Jagd nach Inhalt?
Hostübergreifende Jagd nach Anwendung? ✓ (ProgramId)
Treiber- / Geräte-Beweise?
Abdeckung auf gehärteten / Hosts ohne Appraiser?
Abdeckung auf vor Win10 1709? teilweise
Frisch auf Live-System verfügbar? ✗ (Herunterfahren nötig)

Siehe auch#

Um Ihre eigene Hive neben Ihrem ShimCache-Parse zu erkunden, legen Sie die Datei auf der Startseite des Parsers ab — sie läuft vollständig in Ihrem Browser.

Verwandte Beiträge

Zurück zu allen Beiträgen