TL;DR. Lo ShimCache prova che un file è esistito su disco; AmCache prova che è stato eseguito e lo identifica per SHA-1. Lo ShimCache viene flushato solo allo spegnimento pulito — AmCache scrive di continuo. Prendili entrambi; sono co-testimoni, non sostituti.
ShimCache e AmCache sono i due artefatti registry-based più citati nelle indagini di esecuzione di programmi su Windows. Sembrano intercambiabili. Non lo sono. Questa è una guida rapida per decidere quale utilizzare in base alla domanda a cui stai cercando di rispondere.
Colpo d'occhio
| ShimCache | AmCache | |
|---|---|---|
| Posizione | HKLM\SYSTEM\…\AppCompatCache | C:\Windows\AppCompat\Programs\Amcache.hve |
| Capacità | Fino a 1.024 voci | Migliaia di voci, nessun limite fisso |
| Dati per voce | Percorso, mtime, (legacy) flag di esecuzione | Percorso, SHA-1, dimensione, editore, data installazione, molto altro |
| Scritto quando | Solo allo spegnimento | Continuamente (e a intervalli pianificati) |
| Sopravvive a un crash | No — le voci recenti vanno perse | Sì — già su disco |
| Ideale per | Provare che un file esisteva su disco | Provare che un file è stato eseguito + identificarlo per hash |
Quando vince lo ShimCache
Lo ShimCache mantiene una voce per ogni eseguibile che Windows ha semplicemente esaminato per ragioni di compatibilità. Questo lo rende sensibile: un binario rilasciato e immediatamente eliminato da un attaccante può comunque lasciare una traccia nello ShimCache. Se la tua domanda è «questo file è mai esistito su questo host?» — lo ShimCache è il tuo alleato.
È anche l'unico dei due a catturare il mtime $STANDARD_INFORMATION del file. Quella marca temporale non è l'ora di esecuzione (un equivoco comune trattato in un altro articolo), ma ancora l'identità del file nel tempo.
Quando vince AmCache
AmCache è ciò che serve quando la domanda è «questo file è stato effettivamente eseguito, e quale file esattamente?». Ogni voce AmCache porta un hash SHA-1, la dimensione del file, l'editore, la data di installazione — abbastanza per identificare un binario senza ambiguità, anche se il file su disco è stato sostituito o cancellato.
AmCache persiste anche. Poiché Windows lo scrive continuamente invece che solo allo spegnimento, l'attività recente su un sistema crashato o riavviato forzatamente è più probabile che si trovi in AmCache rispetto allo ShimCache.
Come usarli insieme
In pratica, trattali come co-testimoni:
- Una voce in entrambi, ShimCache e AmCache, con percorsi corrispondenti e una marca AmCache recente, è una prova forte di esecuzione.
- Una voce solo nello ShimCache dice che il file era almeno su disco a un certo punto. Cerca prove corroboranti (Prefetch, AmCache, log eventi) prima di affermare l'esecuzione.
- Una voce solo in AmCache senza Prefetch e senza ShimCache di solito significa che l'host non è stato spento in modo pulito dall'attività — lo ShimCache non è mai stato scritto su disco.
Per i dettagli tecnici del layout binario dello ShimCache, vedi Analizzare lo ShimCache: il formato binario Windows 10 e 11. Per analizzare una hive subito senza installare nulla, usa lo Shimcache Parser — tutto avviene nel tuo browser.
Approfondimenti
- AppCompatCacheParser di Eric Zimmerman — l'implementazione C# di riferimento.
- Artefatto
Windows.Registry.AppCompatCachedi Velociraptor — logica di raccolta live. - ShimCache & AmCache forensic analysis (Mehrnoush) — walkthrough esteso con esempi di casi.