Capire lo ShimCache di Windows (AppCompatCache)

3 min di lettura

Lo ShimCache di Windows — noto anche come Application Compatibility Cache (AppCompatCache) — è uno degli artefatti più citati nella moderna incident response su Windows. È anche uno dei più fraintesi. Questa breve introduzione spiega cosa registra davvero, dove si trova e come gli investigatori dovrebbero (e non dovrebbero) interpretarlo.

Cosa registra lo ShimCache

Quando Windows esamina un eseguibile per decidere se applicare uno shim di compatibilità, registra tale esame nello ShimCache. Vengono conservate fino a 1.024 voci per sistema, ciascuna contenente almeno:

  • il percorso completo dell'eseguibile,
  • la marca temporale $STANDARD_INFORMATION di ultima modifica del file,
  • e, nelle versioni più vecchie di Windows, flag che indicano se il file è stato eseguito.

La cache risiede in memoria volatile mentre il sistema è in esecuzione e viene scritta nel registro solo allo spegnimento. Questo dettaglio temporale è importante: un riavvio forzato o una VM spenta bruscamente può perdere completamente le voci recenti.

Dove si trova

Lo ShimCache si trova nella hive SYSTEM in:

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

Il valore è un singolo blob binario la cui struttura varia per versione di Windows — XP, 7, 8, 8.1, 10 e 11 usano ciascuna un layout leggermente diverso. Analizzarlo offline significa estrarre il valore e decodificarlo secondo lo schema corretto. È esattamente ciò che fa questo strumento, interamente nel tuo browser, senza alcun upload.

Valore forense

Lo ShimCache è usato soprattutto per dimostrare l'esistenza di un programma: un determinato binario è stato, a un certo punto, presente sul disco di uno specifico host. È utile per:

  • attribuire la presenza di malware anche dopo l'eliminazione del file,
  • arricchire timeline di esecuzione costruite con Prefetch o AmCache,
  • corroborare i ritrovamenti di EDR o di telemetria Sysmon.

Tre insidie che fanno male

  1. La marca temporale è il mtime del file, non il momento di esecuzione. Un binario copiato senza preservare i timestamp mostrerà il proprio mtime originale.
  2. Una voce non è prova di esecuzione. Su Windows 10 e 11 il flag di esecuzione nella cache è stato rimosso del tutto. Combina lo ShimCache con Prefetch, AmCache e log eventi prima di affermare che un programma sia stato eseguito.
  3. La cache si riempie, espelle le voci vecchie e viene svuotata allo spegnimento. Le voci recenti che non sono mai finite sul disco vanno semplicemente perse.

Usato con cura e corroborato da altri artefatti, lo ShimCache è un punto di pivot ad alto segnale. Tratta ogni voce come un'ipotesi da confermare, non come una conclusione.

Da dove proseguire

Per approfondire, il resto del blog è organizzato in due gruppi tematici.

Capire lo ShimCache

Usarlo nelle indagini