Skip to content

Acquérir le $LogFile NTFS (à chaud et à froid)

Copier le $LogFile NTFS verrouillé et son $MFT : commandes KAPE, Velociraptor, FTK Imager, RawCopy, icat et ntfscat, et les contrôles qui valident la copie.

Publié le 7 min de lecture

TL;DR. $LogFile est l'entrée MFT 2 à la racine de chaque volume NTFS, verrouillée tant que le volume est monté. Sur un poste allumé, utilisez KAPE (cibles $LogFile + $MFT), Velociraptor (Windows.Triage.Targets avec ses cibles LogFile + MFT ; Windows.KapeFiles.Targets sur les anciennes versions), FTK Imager ou RawCopy (/FileNamePath:C:2). Depuis une image, icat image.dd 2 ou ntfscat -i 2. Collectez-le en premier — il est circulaire et votre propre activité l'écrase — et collectez le $MFT du même volume au même moment. Vérifiez ensuite que la copie commence par RSTR, qu'elle a la taille annoncée par la zone de redémarrage et qu'elle n'est pas remplie de zéros.

Le $LogFile est l'artefact le plus périssable d'un volume NTFS. Sur un disque système chargé, il peut boucler en bien moins d'une heure. Chaque commande lancée sur la machine écrit des métadonnées, et chaque écriture de métadonnées passe par le journal. L'ordre d'acquisition et la destination comptent ici plus que pour presque tout autre fichier.

Ce que vous collectez

FichierEmplacementEntrée MFTPourquoi
$LogFileRacine de chaque volume NTFS (C:\$LogFile)2Le journal de transactions lui-même
$MFTRacine du même volume0Noms et parents de chaque entrée MFT citée par le journal
$UsnJrnl:$J$Extend\$UsnJrnl, flux $JvariableHistorique daté pour la corrélation (facultatif mais recommandé)

Le journal fait généralement environ 64 Mio sur les volumes Windows actuels (sa taille se règle avec chkdsk /L : vérifiez-la plutôt que de la supposer). Prenez tous les volumes utiles, pas seulement C:. Les volumes amovibles et de données conservent l'historique bien plus longtemps que le disque système.

Avant de commencer : protéger le journal de vous-même

  • Collectez-le en premier, avant tout tri gourmand en mémoire ou en fichiers. dfir.ru a mesuré l'écrasement d'anciens enregistrements au bout de 16 minutes lors d'un test sous Windows 10 (How the $LogFile works?).
  • Écrivez la sortie sur un autre volume (clé USB, partage réseau). Écrire une collecte sur C: génère des enregistrements de journal sur C: pour chaque fichier créé.
  • Ne lancez pas chkdsk sur le volume de preuve. Il peut réinitialiser ou redimensionner le journal. Si une page de redémarrage porte la signature CHKD, chkdsk est passé par là.
  • Prenez $LogFile et $MFT dans la même passe, sur le même volume, et gardez l'arborescence (C/, D/) pour que chaque journal soit associé à son propre $MFT.

Machine Windows allumée

KAPE

Le projet KapeFiles fournit les cibles $LogFile.tkape et $MFT.tkape (ainsi que $J.tkape pour le journal USN) :

kape.exe --tsource C: --target $LogFile,$MFT,$J --tdest E:\case42\kape

KAPE lit les fichiers verrouillés par accès brut et conserve le chemin source dans l'arborescence de sortie. Répétez --tsource pour chaque volume. Si vous utilisez une cible composée, ouvrez-la et vérifiez qu'elle référence bien $LogFile au lieu de vous fier à son nom.

Velociraptor

Windows.Triage.Targets, issu du projet Velociraptor Triage, collecte les mêmes fichiers à grande échelle. Cochez ses cibles LogFile et MFT dans une collecte serveur ou un collecteur hors ligne (Server Artifacts → Build offline collector), et vérifiez MaxFileSize pour qu'un gros $MFT ne soit pas ignoré.

Les anciennes versions de Velociraptor fournissent à la place l'ancien Windows.KapeFiles.Targets, avec les cibles $LogFile et $MFT. L'artefact peut utiliser les accesseurs ntfs, lazy_ntfs et mft ; lazy_ntfs est plus rapide mais s'appuie sur les données d'index $I30, pas toujours complètes pour les métafichiers, d'où l'option DontBeLazy qui repasse par le parseur NTFS complet (collecte de fichiers en masse avec Velociraptor). Pour les métafichiers NTFS, préférez l'accesseur complet.

FTK Imager

File → Add Evidence Item → Logical Drive, choisissez le volume, dépliez [root], clic droit sur $LogFile et $MFT → Export Files. Exportez vers un disque externe. FTK Imager lit directement le volume, le verrou ne s'applique donc pas.

RawCopy

RawCopy, de Joakim Schicht, accepte un volume suivi d'un numéro d'enregistrement MFT au lieu d'un chemin. Son readme montre C:0 pour le $MFT ; $LogFile est l'enregistrement 2 :

RawCopy.exe /FileNamePath:C:2 /OutputPath:E:\case42 /OutputName:LogFile_C.bin
RawCopy.exe /FileNamePath:C:0 /OutputPath:E:\case42 /OutputName:MFT_C.bin

Lancez-le en administrateur. Renommez les sorties en $LogFile / $MFT ou adoptez une convention de nommage claire ; les parseurs qui associent les fichiers par leur nom (dont le parseur de $LogFile dans le navigateur) cherchent le $LogFile et le $MFT dans le même dossier.

Machine éteinte ou image disque

The Sleuth Kit

icat extrait un fichier par son adresse de métadonnées ; sur NTFS, l'adresse est l'entrée MFT. -o est l'offset, en secteurs, de la partition dans l'image (page de manuel d'icat) :

mmls image.dd                         # trouver le secteur de début de la partition NTFS
icat -o 2048 image.dd 2 > '$LogFile'
icat -o 2048 image.dd 0 > '$MFT'

ntfs-3g sous Linux

ntfscat, fourni avec ntfs-3g, accepte un numéro d'inode avec -i (page de manuel de ntfscat). Attachez l'image en lecture seule (par exemple via un périphérique loop avec --read-only), puis :

ntfscat -i 2 /dev/loop0p2 > '$LogFile'
ntfscat -i 0 /dev/loop0p2 > '$MFT'

Ne montez jamais le volume de preuve en lecture-écriture « juste pour copier un fichier ». Le montage écrit dans le journal.

Clichés instantanés (VSS)

Les clichés instantanés contiennent des copies plus anciennes des métafichiers NTFS, donc des fenêtres plus anciennes du $LogFile. Extrayez-les de chaque cliché avec les mêmes outils bruts (ou collectez les clichés dans votre processus d'imagerie) et parsez chaque copie séparément. Étiquetez chaque copie avec l'heure de création du cliché.

Vérifier la copie avant de partir

Une copie brute ratée ressemble souvent à une réussite : le fichier existe et a la bonne taille. Quatre contrôles rapides :

ContrôleCommentMauvais signe
Signature4 premiers octetsAutre chose que RSTR (ou CHKD)
Pas rempli de zérosRegarder les 4 premiers KioQue des zéros : échec du verrou ou lecture creuse
TailleComparer avec la taille du journal dans la zone de redémarragePlus court : copie tronquée
Appariement$MFT du même volume et du même momentHeures de collecte différentes
xxd -l 16 '$LogFile'      # attendu : 52 53 54 52  -> "RSTR"
sha256sum '$LogFile' '$MFT' > hashes.txt

Le parseur de $LogFile effectue les mêmes contrôles à l'import : un fichier qui commence par des zéros est signalé comme « sans doute verrouillé ou en cours d'écriture lors de la copie », une copie plus courte que sa taille déclarée est signalée comme tronquée, une page de redémarrage CHKD est mentionnée, et un $MFT sans $LogFile dans le même dossier est expliqué au lieu d'être ignoré en silence.

Chaîne de possession

  • Notez pour chaque copie le nom et la version de l'outil, la ligne de commande, le volume source, la destination et l'heure.
  • Calculez les empreintes sur la machine de collecte, puis à nouveau sur le poste d'analyse.
  • Si la collecte a été faite à chaud, dites-le dans le rapport : un $LogFile pris à chaud est une cible mouvante, et la page la plus récente peut n'exister que dans la zone de queue ou de pages rapides (voir Format du $LogFile 1.1 et 2.0).

Étape suivante

Ouvrez les fichiers dans le parseur de $LogFile dans le navigateur — rien n'est envoyé — et suivez Analyser un $LogFile NTFS pas à pas. Pour les autres artefacts de la même collecte, le parseur de journal USN, le parseur Prefetch et les outils pour images disque de la même famille couvrent la suite.

Questions fréquentes

Peut-on copier le $LogFile avec l'Explorateur ou la commande copy ?

Non. $LogFile est un métafichier NTFS que le système de fichiers garde ouvert tant que le volume est monté, et il est invisible pour les API de fichiers classiques. Lisez-le par un accès NTFS brut (KAPE, Velociraptor, FTK Imager, RawCopy) ou depuis une image avec icat ou ntfscat.

Pourquoi collecter le $MFT avec le $LogFile ?

Les enregistrements du journal désignent les fichiers par leur numéro d'entrée MFT. Les noms n'apparaissent dans le journal que lorsqu'un fichier est créé, renommé ou supprimé : sans le $MFT du même volume, beaucoup de chemins restent incomplets.

Articles liés

Articles liés