Windows Mercoledì: Prefetch Files

Per il post di oggi, mi prenderò qualche momento per discutere di Windows Prefetch. Ma prima, un rapido suggerimento per alcuni prossimi corsi di formazione:

Mi sto preparando per una prossima lezione FOR508 con Chad Tillbury al SANS Security East 2017. Mentre si sta avvicinando molto, non vediamo l’ora di una classe fantastica e di trovare la prossima squadra di forensi letali! Se partecipi, per favore mandami una riga prima del tempo. Se volete partecipare, credo che la registrazione sia ancora aperta! Inoltre durante l’evento, mercoledì 11 gennaio, terrò un discorso SANS@Night chiamato Zero In on the Artifacts That Matter. La preparazione di quel discorso è stata l’ispirazione per il post di oggi, dato che il prefetch sarà certamente menzionato.

L’ho detto prima e lo dirò ancora – molti artefatti che amiamo nel mondo DFIR sono in realtà sottoprodotti del sistema operativo che cerca di rendere la vita più facile e/o più efficiente per l’utente o gli sviluppatori. A mio parere, anche il prefetch rientra in questa categoria.

Prefetch è stato in giro fin da Windows XP. È stato originariamente progettato per aiutare a velocizzare l’avvio del sistema e il lancio delle applicazioni. L’obiettivo del prefetch è quello di analizzare e registrare il comportamento di avvio delle applicazioni al momento dell’esecuzione per rendere più efficienti gli avvii futuri. Questi dati sono registrati per un massimo di 10 secondi dopo l’avvio dell’applicazione. Il comportamento registrato dell’applicazione viene salvato in un file di traccia – quello che noi chiamiamo file di prefetch – nel percorso C:\Windows\Prefetch.

File di prefetch

Come detto sopra, i file di prefetch si trovano nella directory statica C:\Windows\Prefetch. I file di prefetch hanno un’estensione .pf e seguono una convenzione di denominazione standard:

<APPLICATION NAME IN ALL CAPS>-<EIGHT CHARACTER HASH OF APPLICATION LOCATION>.pf

I file di prefetch contengono i seguenti metadati:

  • Il nome dell’eseguibile corrispondente
  • Il numero di volte che l’eseguibile è stato eseguito
  • La dimensione del file di prefetch
  • I file e le directory a cui si è fatto riferimento durante l’avvio dell’applicazione (questo è ciò che Windows vuole tracciare)
  • Informazioni relative al volume su cui si trova l’eseguibile, incluso il percorso del volume e il numero di serie.

Ecco un esempio di alcuni file prefetch dal mio host di prova:

Screenshot Prefetch folder from a Windows 10 Test Host

Nota che ho diverse applicazioni con lo stesso nome, ma una posizione diversa. Questo è dimostrato dagli hash un po’ simili, e in molti casi delle applicazioni, è probabilmente indicativo di un aggiornamento del software o di un cambiamento della struttura delle cartelle.

EDIT: Grazie a Eric Zimmerman per avermi ricordato che i nomi dei file prefetch dipendono anche dagli argomenti della riga di comando e sono sensibili alle maiuscole e alle minuscole, nonostante la mancanza di sensibilità alle maiuscole nel file di traccia. Hexacorn copre l’algoritmo di hashing in dettaglio qui, e ti consiglio di controllarlo se hai bisogno di fare questo livello di analisi del prefetch.

Parliamo del file di prefetch

La struttura dei file di prefetch è in realtà abbastanza nota e ci sono più opzioni di parsing disponibili. Ecco alcune opzioni:

  • Nel peggiore dei casi, possiamo usare strings per ottenere alcune informazioni sulla traccia del prefetch. Ecco un esempio di enumerazione di stringhe Unicode da un eseguibile sospetto:

Screenshot di stringhe da un file prefetch per A.EXE
  • Eric Zimmerman mantiene il suo strumento PECmd, attualmente alla versione 0.7.2.0. Può essere scaricato qui.
  • log2timeline/Plaso contiene un parser di prefetch, e può mettere i dati chiave dai file di prefetch in un formato temporale.
  • TZWorks pubblica anche un parser di prefetch molto utile e pratico pf. Puoi vedere maggiori informazioni su di esso qui. Ecco un esempio dell’output dello strumento pf di TZWorks:

Screenshot dell’output pf di TZWorks per un file prefetch

Mi occuperò di alcuni artefatti forensi in questo output nella prossima sezione, ma notate come ora otteniamo informazioni contestuali, tempi eseguiti e importanti timestamp.

Un’altra nota importante sull’analisi dei file di prefetch è che le nuove versioni di prefetch, cioè Windows 10, usano un nuovo formato di compressione che non funziona bene con i parser delle versioni precedenti. Assicurati che il tuo strumento possa gestire gli artefatti di Windows 10 – o vai a cercare un nuovo script – prima di assumere che i file possano essere corrotti.

Come usare in DFIR

Gli analisti DFIR devono essere consapevoli del prefetch perché contiene molto valore forense. Ecco alcuni modi in cui ho usato il prefetch in passato:

  • Il conteggio delle esecuzioni può essere un importante indicatore di quanto tempo il malware può essere stato su un sistema o quanto frequentemente è stato usato. Se hai visto solo la prova di due esecuzioni di malware, ma il prefetch ne mostra dozzine, allora c’è qualche altra ricerca da fare.
  • Anche i timestamp del file prefetch ci dicono dei volumi. Pensate a quanto segue: Cosa crea un file di prefetch, e cosa modifica un file di prefetch? Trasforma queste azioni in timestamp, e possiamo determinare quanto segue: Il timestamp di creazione di un file di prefetch è la prima volta che l’applicazione è stata eseguita, e l’ultimo tempo di modifica di un file di prefetch è l’ultima volta che è stato eseguito. Guardiamo di nuovo lo screenshot di sopra:

Screenshot dell’output pf di TZWorks per un file prefetch

Nota il nostro ultimo tempo di esecuzione (2012-04-04 00:43:06.137) e il tempo modificato: (2012-04-04 00:43:07). Ora, possiamo sperare molto rapidamente attraverso i file Prefetch, senza bisogno di analizzare, e trovare i nostri ultimi tempi di esecuzione.

È possibile utilizzare i timestamp anche in altri modi. Per esempio, consideriamo la visualizzazione dei timestamp di creazione di tutti i file della cartella prefetch. Se abbiamo qualche timestamp di interesse, o file di prefetch per malware noti, cercare altri file con timestamp in una stretta vicinanza temporale.

  • Quando si analizzano i file di prefetch, specialmente quelli relativi a malware noti, dare un’occhiata ai file mappati o caricati. Potresti trovare ulteriori indicatori.
  • Inoltre, esamina le directory mappate dal file prefetch. Potresti trovare prove di un’unità esterna o di una partizione precedente.
  • Vedi più file di prefetch con diversi hash alla fine del file? Ricorda, quell’hash è derivato dalla posizione – potresti avere malware in più posti.
  • Infine, non dimenticare che Windows controlla l’avvio delle applicazioni fino a 10 secondi. Quindi, mentre possiamo fare affidamento sui timestamp dei nostri file di prefetch come indicatori abbastanza forti, dobbiamo tenere conto del ritardo massimo di dieci secondi.

Andare oltre il prefetch

In Windows Vista e oltre, Microsoft ha continuato ad espandere il prefetch con caratteristiche aggiuntive come SuperFetch, ReadyBoost, ReadyBoot e ReadyDrive. Approfondirò queste caratteristiche in un post successivo.

Fino a domani, Felice Forensicating!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.