Capire il ShimCache di Windows (AppCompatCache)

4 min di lettura

La maggior parte degli analisti incontra lo ShimCache nello stesso modo: qualcuno del team dice "tira fuori l'AppCompatCache, vedi se il binario è lì", e funziona abbastanza spesso da far guadagnare all'artefatto una reputazione che non merita del tutto. Ho passato abbastanza ore a discutere righe di ShimCache nelle revisioni dei casi da sapere che l'artefatto vale il suo peso, ma solo se lo tratti per quello che realmente è. Non un registro di esecuzione. Non un audit dei processi. Un elenco di eseguibili che Windows ha esaminato abbastanza a fondo da decidere se uno shim di compatibilità dovesse scattare.

Questo è il quadro. Il resto è meccanica.

Cosa registra davvero la cache

L'Application Compatibility Cache, quasi sempre abbreviato in ShimCache o AppCompatCache, vive nell'hive SYSTEM e contiene fino a circa 1.024 voci su Windows moderno. Ogni voce porta il percorso completo dell'eseguibile, l'ora di ultima modifica $STANDARD_INFORMATION del file e (nelle versioni più vecchie) un flag che indica se il binario è stato effettivamente eseguito. Quel flag è sparito in Windows 10 e 11. Fai finta che non sia mai esistito.

Windows costruisce la cache in memoria a ogni avvio e la scrive sul disco solo a uno shutdown pulito. Un BSOD, un hard reset o un kill di VM a livello hypervisor divora tutto ciò che era in memoria volatile. Questo singolo fatto spiega metà delle storie "ma ho visto il binario in produzione" che si trasformano in ticket "l'hive su disco non mostra nulla".

Dove vive

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

Quel AppCompatCache finale è un valore, non una sottochiave. Il suo contenuto è un singolo blob binario il cui layout è cambiato a ogni release maggiore di Windows: XP, 7, 8, 8.1 e la famiglia 10/11 usano tutte schemi diversi. Parsare offline significa estrarre l'hive SYSTEM (più i suoi log di transazione SYSTEM.LOG1 e SYSTEM.LOG2) e decodificare il blob contro la versione corretta. Questo strumento parsa quel singolo file dell'hive SYSTEM nel tuo browser, senza upload. Non rigioca i log: se l'hive è dirty, rigiocali prima con rla.exe di Eric Zimmerman.

Perché gli investigatori ci ricorrono

Lo ShimCache si guadagna lo stipendio perché sopravvive. Un attaccante può rilasciare un binario, eseguirlo, cancellarlo, ripulire la cartella Prefetch, e lo ShimCache mantiene comunque il percorso completo. Questo lo rende un solido testimone di esistenza per:

  • Malware già rimosso dal disco.
  • Binari di sistema rinominati usati come payload living-off-the-land.
  • Tooling montato da una share di rete che nessuno ha mai scaricato localmente.

Combina i dati di percorso con AmCache per l'attribuzione tramite hash e puoi pivotare sul threat intel anche quando il file è sparito da tempo.

Tre cose che fregano

  1. Il timestamp è la mtime del file, non quando il programma è stato eseguito. Il timestomping cambia ciò che la cache registra.
  2. Una voce non è prova di esecuzione. La cache di Win10/11 non ha affatto un flag di esecuzione.
  3. La cache si svuota solo a uno shutdown pulito. I reboot duri distruggono silenziosamente le voci recenti.

Tratta ogni riga come un'ipotesi. Corrobora con Prefetch, AmCache, EVTX / Sysmon o gli hive del registro prima di scrivere qualcosa di definitivo in un report.

Dove andare ora

Il resto del blog è organizzato in due cluster.

Capire lo ShimCache

Usarlo nelle indagini