← Torna al blog

$UsnJrnl e $MFT: journal e tabella dei file

· 2 min di lettura

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_DELETE e 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 MFT di 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 ransomwareOPEN, DATA_OVERWRITE, RENAME_OLD_NAME, RENAME_NEW_NAME, CLOSE.
  • Se un file «modificato» è stato davvero riscritto o solo toccato — le ragioni del $UsnJrnl distinguono 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.

Risorse esterne