Wo wird der ShimCache gespeichert, und wann wird er geschrieben?

3 Min. Lesezeit

TL;DR. Der ShimCache liegt unter HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. Windows baut ihn in jeder Sitzung im Speicher neu auf und persistiert ihn in den SYSTEM-Hive nur bei sauberem Shutdown. Harte Reboots können aktuelle Einträge komplett verlieren. Spiele SYSTEM.LOG1 und SYSTEM.LOG2 ab, bevor du dem vertraust, was du liest.

Die meisten ShimCache-Missgeschicke gehen auf dieselbe Grundursache zurück: Der Analyst dachte, der Cache werde wie eine Logdatei aktualisiert. Wird er nicht. Der Cache liegt im Speicher, solange das System läuft, und die On-Disk-Kopie spiegelt immer nur den Zustand des letzten sauberen Shutdowns wider. Verstehe das falsch, und du schreibst einen Bericht, der sagt, der Host sei sauber, obwohl er es nicht ist.

ShimCache: In-Memory-Schreibvorgänge vs. On-Disk-Flush-Timing

Der Registry-Pfad

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache

Das abschließende AppCompatCache ist ein Wert, kein Unterschlüssel. Die Daten sind ein einzelner Binär-Blob, dessen Schema je nach Windows-Release variiert. XP, 7, 8, 8.1 und die 10/11-Familie verwenden alle unterschiedliche Layouts. Die Walkthrough zum Binärformat deckt das moderne Windows-10/11-Schema im Detail ab.

Offline ziehst du den SYSTEM-Hive (eine der Dateien unter C:\Windows\System32\config\) und richtest einen Parser darauf. Bring SYSTEM.LOG1 und SYSTEM.LOG2 mit. Der Shimcache Parser liest den SYSTEM-Hive im Browser, ohne Upload, nimmt aber nur diese eine Datei und spielt die Logs nicht ab. Ist der Hive dirty, spiele .LOG1 und .LOG2 vorher mit Eric Zimmermans rla.exe ein (oder lade ihn in Registry Explorer und speichere den bereinigten Hive) und parse dann das Ergebnis.

Die ControlSet-Falle

Windows pflegt tatsächlich mehrere ControlSets, typischerweise ControlSet001 und ControlSet002. Zu jedem Zeitpunkt ist genau eins aktiv, angezeigt durch HKLM\SYSTEM\Select\Current. CurrentControlSet ist ein Laufzeit-Alias für das jeweils aktive. Auf einem Live-System löst es immer korrekt auf; offline musst du die Arbeit selbst machen.

Ein verteidigungsfähiger Parser:

  1. Liest HKLM\SYSTEM\Select\Current (ein DWORD, meist 1 oder 2).
  2. Geht den entsprechenden Wert ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCache durch.
  3. Greift auf das Scannen von ControlSet001 und ControlSet002 zurück, falls Select\Current nicht lesbar ist.

Dieses Tool, Eric Zimmermans AppCompatCacheParser und Mandiants Shim Cache Parser handhaben diese Auflösung alle automatisch. Roll deinen eigenen auf eigene Gefahr.

Wann Windows tatsächlich schreibt

Hier ist der Teil, der Leuten zum Verhängnis wird. Während Windows läuft, lebt der ShimCache im Speicher. Die Festplattenkopie wird nur bei sauberem Shutdown geschrieben. Also:

  • Ein harter Reboot, Stromausfall, BSOD oder VM-Kill auf Hypervisor-Ebene zerstört jeden Eintrag, der noch nicht persistiert wurde.
  • Eine Live-Triage mit reg.exe oder RegRipper liest den zuvor persistierten Wert, nicht den derzeit im Speicher aufgebauten Cache.
  • Das windows.shimcachemem-Plugin von Volatility 3 gegen einen RAM-Dump holt den aktuellen In-Memory-Cache zurück. Das ist der einzige Weg, die Einträge der aktiven Sitzung von einem Host zu bekommen, der nicht sauber heruntergefahren wurde.

Wenn du an einer kompromittierten Kiste ankommst, die hart neu gestartet wurde, hält der On-Disk-Hive den Cache von vor dem Vorfall. Was der Angreifer in der aktiven Sitzung ausführte, ist weg, es sei denn, du hast auch Speicher erfasst. Die belegende Geschichte muss meist von AmCache kommen, das kontinuierlich schreibt und denselben Reboot übersteht.

Die Transaktionsprotokolle

SYSTEM.LOG1 und SYSTEM.LOG2 enthalten Registry-Schreibvorgänge, die noch nicht in den Haupt-Hive gemergt wurden. Jeder robuste Parser spielt diese Logs vor dem Lesen des ShimCache ab. Wenn du nur SYSTEM kopiert und die Logs übersprungen hast, liest du eine veraltete Sicht. Das ist der mit Abstand häufigste Erfassungsfehler. Der Akquisitionsleitfaden führt durch die sicheren Wege, alle drei zu greifen.

Schnelle Checkliste

  • ShimCache-Wert: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache.
  • Aktives ControlSet ausgewählt durch HKLM\SYSTEM\Select\Current.
  • Im Speicher gespeichert, nur bei sauberem Shutdown geleert. Aktuelle Aktivität mit AmCache belegen.
  • Vor dem Parsen immer SYSTEM.LOG1 und SYSTEM.LOG2 abspielen.

Weiterführende Lektüre

Verwandte Artikel