Cosa significa davvero il timestamp dello ShimCache (e cosa no)

4 min di lettura

TL;DR. Il timestamp dello ShimCache è l'ora di ultima modifica $STANDARD_INFORMATION dell'eseguibile copiata dal file system. Non l'ora in cui è stato eseguito. Non l'ora in cui è stato messo in cache. Trattalo come una proprietà del file, mai come un evento su una timeline.

L'errore più comune nell'analisi ShimCache è leggere la colonna timestamp come "quando questo è girato". Non lo è. Ho visto analisti mettere quell'interpretazione davanti a clienti e regolatori, e ho visto il report farsi a pezzi in revisione da chiunque abbia una conoscenza pratica di NTFS. Non essere quell'analista.

Cosa è davvero il timestamp

Ogni voce memorizza l'ora di ultima modifica $STANDARD_INFORMATION del file (SI mtime), così come era sul volume NTFS nel momento in cui Windows ha registrato la voce. Copia diretta di un attributo del file system. Non dice nulla sulla creazione di processo, sul caricamento di moduli o sullo shutdown.

Tre conseguenze immediate:

  • Un binario compilato l'anno scorso ed eseguito oggi mostra la data dell'anno scorso.
  • Un file copiato con uno strumento che preserva i timestamp mantiene la sua mtime originale, non il tempo di copia.
  • Due host che eseguono lo stesso binario firmato mostreranno lo stesso timestamp, perché è una proprietà del file, non di nessuna delle macchine.

Perché non è il tempo di esecuzione

Windows aggiunge una voce alla cache quando esamina un file per motivi di compatibilità applicativa. Spesso, ma non sempre, in coincidenza con l'esecuzione. Anche quando coincide, la cache memorizza la mtime del file, non il momento dell'esame. Quindi il timestamp risponde a "quando è stato modificato per l'ultima volta questo file?" e mai a "quando è stato eseguito?". La distinzione esecuzione vs esistenza è trattata in profondità in lo ShimCache dimostra l'esecuzione?.

Se ti serve un vero tempo di esecuzione, ti servono i tempi di esecuzione di Prefetch, la prima esecuzione di AmCache, Security 4688, o Sysmon Event ID 1. La cache non può dartelo.

Quando il timestamp è comunque prezioso

È debole come tempo di evento ma forte come ancora di identità:

  • Rilevamento manomissioni. Se un binario di sistema come svchost.exe mostra una mtime che non corrisponde al patch level dell'host, quel file è stato sostituito. Incrocia con l'attributo $FILE_NAME della MFT, più difficile da stompare.
  • Correlazione build. Il malware compilato in una campagna spesso condivide un cluster di mtime tra le vittime. Utile per raggruppare incidenti allo stesso attore.
  • Ordinamento, con cautela. All'interno di un singolo host, le voci sono memorizzate in ordine approssimativo di inserimento. L'ordine è più affidabile dei timestamp assoluti per sequenziare l'attività. Ma ordine non è tempo, e la sequenza di inserimento si resetta al boot.

Come gli attaccanti ne abusano

Poiché è solo un attributo del file system, è banalmente falsificabile. Il timestomping (impostare una mtime a 2009-07-14, la data classica di kernel32.dll) fa sì che un dropper si confonda tra i file di sistema Windows. La cache registra fedelmente il valore stompato, quindi un timestamp pulito del 2009 su un percorso in C:\Users\Public\ è di per sé un campanello d'allarme. I pattern anti-forense sono catalogati in gli attaccanti possono ripulire lo ShimCache?.

L'attributo $FILE_NAME della MFT di solito conserva il vero tempo di creazione anche dopo che $STANDARD_INFORMATION è stato stompato. Il parser MFT percorre il confronto. Il journal USN cattura anche l'evento di creazione originale nella maggior parte dei casi.

Usarlo correttamente in una timeline

Metti la mtime ShimCache in una colonna separata dai tempi di evento. Non fonderla mai nella timeline principale come se fosse un'azione. Conferma il sequenziamento con artefatti che portano davvero tempi di evento: tempi di esecuzione Prefetch, install / prima esecuzione AmCache, Security 4688, Sysmon Event ID 1. La referenza incrociata completa è in Prefetch, AmCache, ShimCache: una rapida referenza.

Per ispezionare tu stesso i valori grezzi, trascina un hive SYSTEM nello Shimcache Parser. Mostra la mtime esatta memorizzata per voce, nel tuo browser, senza nulla caricato.

Letture aggiuntive

  • Caching Out the Val di Mandiant. il write-up originale che ha definito l'uso forense dell'artefatto.
  • AppCompatCacheParser di Eric Zimmerman. parser di riferimento il cui output usa la stessa semantica di mtime.

Articoli correlati