Dove è memorizzato lo ShimCache e quando viene scritto?

3 min di lettura

TL;DR. Lo ShimCache vive a HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. Windows lo ricostruisce in memoria a ogni sessione e lo scrive nella hive SYSTEM solo allo spegnimento pulito — un riavvio forzato può perdere del tutto le voci recenti. Non dimenticare di riprodurre SYSTEM.LOG1 / SYSTEM.LOG2.

Molti incidenti con lo ShimCache derivano da un singolo malinteso: gli investigatori suppongono che la cache venga aggiornata come un file di log, con voci scritte su disco man mano. Non è così. Ecco esattamente dove vive lo ShimCache e quando Windows ci scrive.

ShimCache: scritture in memoria vs flush su disco

Il percorso nel registro

Lo ShimCache vive nella hive SYSTEM, a:

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

Quell'ultimo AppCompatCache è un valore, non una sottochiave. Il suo dato è un singolo blob binario il cui schema varia per versione di Windows — XP, 7, 8, 8.1, 10 e 11 usano ciascuna un layout leggermente diverso. La panoramica del formato binario copre lo schema moderno Windows 10/11 in dettaglio.

Puoi leggere lo stesso valore offline estraendo la hive SYSTEM — è uno dei file in C:\Windows\System32\config\ — e puntandoci un parser. Lo Shimcache Parser fa esattamente questo, nel tuo browser, senza caricare il file da nessuna parte.

Il trucco del ControlSet «corrente»

Windows mantiene in realtà più ControlSet (ControlSet001, ControlSet002, talvolta di più). In ogni momento, esattamente uno è il set attivo, indicato dal valore HKLM\SYSTEM\Select\Current. CurrentControlSet è un alias runtime verso quello attivo.

Per il parsing offline dovresti:

  1. leggere HKLM\SYSTEM\Select\Current (un DWORD, tipicamente 1 o 2),
  2. percorrere il valore ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCache corrispondente,
  3. ricadere su ControlSet001 e ControlSet002 se Select\Current non è leggibile.

La maggior parte dei parser — questo strumento incluso — lo gestisce automaticamente.

Quando la cache viene scritta

Ecco la parte che sorprende: mentre il sistema è in esecuzione, lo ShimCache vive in memoria. Windows lo scrive nella hive SYSTEM solo allo spegnimento pulito. Quindi:

  • Un riavvio forzato, un'interruzione di corrente, un BSOD o un kill della VM a livello hypervisor scarteranno qualsiasi voce recente non ancora persistita.
  • Un triage a caldo di un sistema in funzione tramite reg.exe o RegRipper vede lo ShimCache precedentemente persistito, non quello in costruzione in memoria.
  • L'analisi della memoria (es. il plugin Volatility shimcachemem) può recuperare la cache corrente in memoria prima che vada persa.

Questa temporizzazione è il motivo per cui l'analisi dead-box di una hive spesso manca l'attività più recente, e perché gli investigatori si rivolgono ad AmCache (che scrive continuamente — vedi ShimCache vs AmCache) per colmare il vuoto.

E il log delle transazioni del registro?

La hive SYSTEM è accompagnata da file di log di transazione (SYSTEM.LOG1, SYSTEM.LOG2). Possono contenere scritture non flushate che non hanno mai raggiunto la hive principale. I parser offline robusti riproducono questi log prima di leggere lo ShimCache; se stai costruendo la tua analisi, tienili presenti o usa un parser che lo faccia.

Check-list rapida

  • Valore ShimCache: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache
  • ControlSet attivo selezionato da HKLM\SYSTEM\Select\Current
  • Conservato in memoria, scritto solo allo spegnimento pulito — corroborare con AmCache per l'attività recente
  • Riprodurre i log SYSTEM.LOG* prima del parsing per il quadro più aggiornato

Approfondimenti

Articoli correlati