Il $MFT è un'istantanea. Descrive come si presenta ogni file adesso — i suoi metadati, dove vivono i suoi dati, il suo stato di allocazione. Quello che non registra è la sequenza dei cambiamenti che hanno portato a questo stato. Per questo NTFS tiene un secondo artefatto: l'Update Sequence Number Journal, $UsnJrnl.
Cosa registra il $UsnJrnl
Ogni volta che un file viene creato, modificato, rinominato o eliminato, NTFS appende al $UsnJrnl un record di dimensione fissa che descrive l'evento. I campi includono:
- l'USN (un intero a 64 bit strettamente crescente);
- il numero di record MFT del file cambiato;
- il numero di record della cartella padre;
- una maschera di motivo:
FILE_CREATE,DATA_OVERWRITE,RENAME_OLD_NAME,CLOSE,FILE_DELETEe molti altri; - un timestamp.
Il risultato è un log cronologico di ogni evento significativo del file system dalla creazione o dall'ultima rotazione del journal. Su un sistema tipico copre giorni o settimane.
Dove vive
$UsnJrnl è un normale file NTFS i cui dati vivono nel flusso nominato $J. Si trova nella speciale cartella $Extend, insieme ad altri file di sistema come $LogFile e $Quota.
Si estrae con gli stessi strumenti del $MFT:
- il target
MFTdi KAPE include$UsnJrnl; - FTK Imager lo esporta da
[volume NTFS]/$Extend/$UsnJrnl:$J; - gli strumenti di immagine disco lo leggono direttamente dai cluster grezzi.
Come completa il $MFT
Accoppiali e emergono pattern che nessuno dei due mostrerebbe da solo:
- Un file che non trovi su disco ma compare in
$UsnJrnl— creato ed eliminato tra due istantanee, ma il journal lo ha conservato. - L'ordine esatto delle ridenominazioni durante un ransomware —
OPEN,DATA_OVERWRITE,RENAME_OLD_NAME,RENAME_NEW_NAME,CLOSE. - Se un file «modificato» è stato davvero riscritto o solo toccato — le ragioni del
$UsnJrnldistinguono la sovrascrittura dei dati dalla modifica dei metadati.
Per la ricostruzione di una timeline, il flusso tipico è: percorrere il $MFT per lo stato attuale, poi il $UsnJrnl per la storia dei cambiamenti che vi hanno portato.
Limiti
Il $UsnJrnl ruota. Per default il journal è di 32 MB, sufficienti per qualche giorno di attività su un sistema vivace. Gli eventi vecchi cadono dalla fine. Se arrivi a un'indagine più di una settimana dopo i fatti, aspettati buchi — e appoggiati di più sullo slack del $MFT e su $LogFile.