← Retour au blog

$UsnJrnl et $MFT : journal et table de fichiers

· Lecture 2 min

Le $MFT est un instantané. Il décrit ce à quoi chaque fichier ressemble maintenant — ses métadonnées, l'emplacement de ses données, son état d'allocation. Ce qu'il n'enregistre pas, c'est la séquence des changements qui ont produit cet état. Pour cela, NTFS tient un second artefact : le Update Sequence Number Journal, $UsnJrnl.

Ce que $UsnJrnl enregistre

À chaque création, modification, renommage ou suppression de fichier, NTFS ajoute au $UsnJrnl un enregistrement de taille fixe décrivant l'événement. Les champs incluent :

  • le USN (un entier 64 bits strictement croissant) ;
  • le numéro d'enregistrement MFT du fichier modifié ;
  • le numéro d'enregistrement du dossier parent ;
  • un masque de raison : FILE_CREATE, DATA_OVERWRITE, RENAME_OLD_NAME, CLOSE, FILE_DELETE, et bien d'autres ;
  • un horodatage.

Le résultat est un journal chronologique de tout événement significatif du système de fichiers depuis la création ou la dernière rotation du journal. Sur un système typique, cela couvre quelques jours à quelques semaines.

Où il se trouve

$UsnJrnl est un fichier NTFS ordinaire dont les données vivent dans le flux nommé $J. Il est placé dans le répertoire spécial $Extend, aux côtés d'autres fichiers système comme $LogFile et $Quota.

On l'extrait avec les mêmes outils que $MFT :

  • la cible MFT de KAPE inclut $UsnJrnl ;
  • FTK Imager l'exporte depuis [volume NTFS]/$Extend/$UsnJrnl:$J ;
  • les outils d'image disque le lisent directement à partir des clusters bruts.

Comment il complète le $MFT

Croisez les deux et des motifs apparaissent qu'aucun ne montrerait seul :

  • Un fichier introuvable sur disque mais présent dans $UsnJrnl — créé et supprimé entre deux instantanés, mais conservé par le journal.
  • L'ordre exact des renommages pendant une attaque par ransomwareOPEN, DATA_OVERWRITE, RENAME_OLD_NAME, RENAME_NEW_NAME, CLOSE.
  • Savoir si un fichier « modifié » a été réécrit ou seulement touché — les raisons $UsnJrnl distinguent l'écrasement de données du changement de métadonnées.

Pour la reconstruction de chronologie, le flux typique est : parcourir le $MFT pour l'état présent, puis parcourir le $UsnJrnl pour l'historique des changements qui y mènent.

Les limites

Le $UsnJrnl tourne en circulaire. Par défaut, il fait 32 Mo, ce qui contient quelques jours d'activité sur un système chargé. Les vieux événements tombent. Si vous arrivez sur une enquête plus d'une semaine après les faits, attendez-vous à des trous — et appuyez-vous davantage sur le slack du $MFT et sur $LogFile.

Ressources externes