Costruire una timeline di esecuzione programmi da un hive SYSTEM

4 min di lettura

TL;DR. Costruisci una timeline fusa di ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon. Usa lo ShimCache per definire il cast (percorsi), poi arricchisci ogni riga con timestamp da sorgenti che registrano davvero eventi. Tagga ogni timestamp con la sua semantica di sorgente. Non mescolare mai "mtime file" e "avvio processo" in un'unica colonna.

Una timeline di esecuzione programmi è l'artefatto più utile che un investigatore IR Windows produce. Fatta bene, racconta una storia cronologica attraverso più sorgenti di dati. Fatta male, sovrastima le prove e viene messa in discussione da chiunque sappia cosa sia una mtime. Ecco il workflow che faccio girare, con lo ShimCache come spina dorsale.

Perché lo ShimCache è una buona spina dorsale

La cache è raramente la sorgente più accurata per un singolo campo, ma ha vantaggi unici come ancora di timeline:

  • Porta il percorso del file in modo esplicito. Alcuni artefatti hanno solo hash o percorsi parziali.
  • Cattura eseguibili che Windows ha semplicemente esaminato, quindi include binari che hanno girato brevemente e sono stati cancellati (che Prefetch e BAM possono perdere).
  • Sopravvive a molti tentativi anti-forensi che ripuliscono altri artefatti, con importanti caveat.

Usa lo ShimCache per definire il cast di personaggi della timeline. Poi arricchisci ogni riga con artefatti di conferma per assegnare tempi affidabili.

Le sorgenti di dati da fondere

Una timeline completa di esecuzione programmi attinge da almeno queste cinque:

SorgenteCosa aggiunge alla riga
ShimCachePercorso + mtime file
AmCacheSHA-1, dimensione file, editore, timestamp installazione, timestamp prima esecuzione
PrefetchTempi di avvio processo (fino agli ultimi 8), moduli caricati
BAM/DAMTimestamp "ultima esecuzione" per utente su Win10/11
Security / SysmonEventi di creazione processo con riga di comando, parent, utente

Per contesto, vedi la referenza degli artefatti di esecuzione programmi. Su casi più grandi, integra SRUM per uso rete e risorse, il journal USN per l'attività su file, e i file LNK più le jump list per la cronologia shell.

Un workflow riproducibile

  1. Raccogli gli artefatti. Hive SYSTEM con log di transazione, Amcache.hve con i suoi .LOG1 e .LOG2, C:\Windows\Prefetch\*.pf, log eventi Security esportato, log Sysmon se disponibile, NTUSER.DAT per utente. La guida all'acquisizione copre nello specifico l'hive SYSTEM.
  2. Parsa ciascuno in una tabella normalizzata. Usa la suite Eric Zimmerman (AppCompatCacheParser, AmcacheParser, PECmd) per lavoro offline, o lo Shimcache Parser per la parte ShimCache nel browser.
  3. Fondi su (percorso, SHA-1 opzionale). La chiave di join è il percorso del file, con SHA-1 di AmCache come segnale secondario. Attento alle differenze di case e alla normalizzazione dei percorsi (\??\C:\ vs C:\).
  4. Tagga ogni timestamp con la sua semantica di sorgente. Non unire "AmCache install_date" e "Prefetch run_time" in una singola colonna. Rispondono a domande diverse. Tienili adiacenti ma distinti.
  5. Rendi a uno strumento che gestisca l'attribuzione di sorgente per riga. Il Timeline Explorer (TLE) di Eric Zimmerman e Plaso / log2timeline lo fanno entrambi bene. Il CSV in un foglio di calcolo va bene per casi più piccoli.

Come si presenta una buona riga

Una riga difendibile in una timeline finale:

2026-04-12 09:14:33 UTC  C:\Users\alice\AppData\Local\Temp\setup.exe
  ShimCache mtime: 2026-04-12 09:14:30 UTC
  AmCache       : SHA-1 a3b8c9..., signer "Acme Updates", install 2026-04-12 09:14:33
  Prefetch      : ultima esecuzione 2026-04-12 09:15:01 UTC (1 esecuzione)
  Security 4688 : 2026-04-12 09:15:01 UTC, PID 4521, parent PID 1234 (svchost.exe)

Ogni timestamp è attribuito a una sorgente e la riga regge alla contestazione. L'opposto ("ShimCache mostra setup.exe eseguito alle 09:14:33") confonde la mtime del file con il tempo di esecuzione ed è il tipo di rivendicazione che fa rigettare i report. Vedi prova di esecuzione.

Quando le sorgenti non concordano

I conflitti sono dati.

  • mtime ShimCache ≠ prima esecuzione Prefetch. Normale. Misurano cose diverse. Nota entrambi. Non scegliere uno.
  • AmCache dice eseguito, ShimCache è vuoto per quel file. Possibili ragioni: cancellazione anti-forense (pattern di rilevamento), la voce è stata evicta dal cap di 1.024, il binario è stato eseguito dopo l'ultimo shutdown pulito (ancora solo in memoria, tira un dump RAM).
  • Prefetch assente. Le SKU server e gli host ottimizzati SSD spesso hanno Prefetch disabilitato. Ripiega su AmCache più BAM.
  • EVTX Security 4688 ha il nome del programma ma non la riga di comando. Il command-line auditing era spento. Utile ma limitato. Il parser EVTX copre i prerequisiti di audit policy.

Fermarsi al punto giusto

Una timeline non deve essere completa per avere valore. Una finestra focalizzata ("cosa ha girato sull'host X tra le 14:00 e le 18:00 del 2026-04-11?") costruita con rigore batte una sterminata con attribuzione debole. Il workflow di caccia al malware ti aiuta a scegliere quella finestra.

Letture aggiuntive

Articoli correlati