ShimCache vs Prefetch: quale dimostra che un programma è stato eseguito?

4 min di lettura

TL;DR. Prefetch è una vera prova di esecuzione con conteggi e tempi di esecuzione. Lo ShimCache dimostra solo che un file è esistito ed è stato esaminato. Se ti serve "è stato eseguito, e quando?", parti da Prefetch. Se Prefetch è disabilitato o ripulito, lo ShimCache diventa il tuo testimone di esistenza di ripiego.

I due vengono costantemente confrontati perché entrambi fanno emergere "programmi su un host Windows". Non sono lo stesso tipo di prova. Trattali come intercambiabili e produci conclusioni sbagliate. Ecco il confronto.

A colpo d'occhio

ShimCachePrefetch
PosizioneHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCacheC:\Windows\Prefetch\*.pf
Cosa dimostraIl file è esistito ed è stato esaminatoIl file è stato eseguito
Conteggio esecuzioniNoSì
Timestamp di esecuzioneNo (solo mtime file)Sì, ultime 8 run time
File riferitiNoSì, DLL e file dati caricati
Quando viene scrittoSolo a shutdown pulitoEntro ~10 s dall'esecuzione
Default su SKU workstationSìSì
Default su SKU serverSìSpesso disabilitato
CapacitàFino a ~1.024 voci1.024 file .pf su Win8+

Dove vince Prefetch

Prefetch è l'artefatto di esecuzione più forte, punto. Ogni file .pf ti dà l'ultima run time (fino a otto su Windows 8+), un conteggio totale di esecuzioni, e la lista di file che il processo ha caricato. Abbastanza per affermare "questo binario è stato eseguito in questi momenti", cosa che lo ShimCache non può mai fare perché il suo unico timestamp è l'ora di ultima modifica del file, non un tempo di esecuzione.

La lista dei moduli caricati è anche oro per il triage: un .pf che mostra un processo Word che ha caricato WINWORD.EXE più MSO.DLL più una DLL sospetta da \AppData\ è una lettura rapida di caricamento di add-in dannoso. PECmd di Eric Zimmerman è il parser standard. Il parser Prefetch copre il formato se vuoi farti il tuo.

Dove vince lo ShimCache

Prefetch ha una debolezza critica: è frequentemente disabilitato sui server, sulle immagini ottimizzate per SSD e dagli attaccanti (EnablePrefetcher = 0). Viene anche cancellato attivamente da strumenti di pulizia. Lo ShimCache, al contrario, è sempre attivo ed è abbastanza sensibile da registrare un binario che è stato rilasciato e cancellato prima ancora di essere eseguito.

Quando Prefetch è vuoto, lo ShimCache spesso risponde ancora a "questo file ha mai toccato questo host?". L'inferenza completa è in lo ShimCache dimostra che un programma è stato eseguito?.

La cache cattura anche file che Prefetch non vede mai:

  • Binari che sono crashati prima di completare l'inizializzazione del processo.
  • File che Windows ha esaminato per compatibilità ma che l'utente non ha effettivamente lanciato.
  • Eseguibili che sono girati da share di rete prima che Prefetch decidesse di scrivere un .pf.

Come usarli insieme

  • Entrambi presenti, percorsi coincidono. Prova di esecuzione forte. Usa i run time di Prefetch come timeline di eventi. Usa la mtime dello ShimCache solo per ancorare l'identità del file.
  • Solo Prefetch. L'esecuzione è provata. Lo ShimCache potrebbe semplicemente non essere stato ancora scaricato (scrive solo allo shutdown, vedi dove è memorizzato lo ShimCache).
  • Solo ShimCache. Il file è esistito ed è stato esaminato. Non rivendicare l'esecuzione senza conferma. Tira AmCache, BAM, e EVTX. La matrice completa è in la referenza degli artefatti.
  • Nessuno dei due, ma sospetti esecuzione. Cerca anti-forense. Cancellazione di Prefetch più ShimCache non flushato è di per sé un finding, trattato in anti-forense dello ShimCache.

Per leggere il lato ShimCache senza installare nulla, trascina un hive SYSTEM nello Shimcache Parser. Interamente nel browser.

Letture aggiuntive

Articoli correlati