Un parser MFT est un outil qui lit $MFT, la Master File Table à la racine de chaque volume NTFS, et transforme ses enregistrements de 1 024 octets en quelque chose à travers quoi vous pouvez pivoter. CSV, JSON, une timeline, une table interactive. Il y a plusieurs implémentations jouets sur GitHub. Il y en a trois que je mettrais devant un client qui paie. Voici comment je choisis entre elles.
MFTECmd (Eric Zimmerman)
MFTECmd est le standard de fait en réponse à incident. CLI .NET Windows uniquement, gratuite, parse $MFT, $Boot, $J (le flux du change journal $UsnJrnl), $SDS (descripteurs de sécurité depuis $Secure) et $LogFile. La sortie est du CSV dans la disposition proche du bodyfile que le reste de la chaîne d'outils Eric Zimmerman (Timeline Explorer, KAPE, RECmd) consomme nativement.
Prenez-le quand :
- Vous êtes sur une station d'analyse Windows. C'est le chemin avec le moins de surprises.
- Vous voulez ouvrir la sortie parsée dans Timeline Explorer et pivoter interactivement. Le mapping des colonnes est déjà correct.
- Vous exécutez KAPE ; MFTECmd est le parser embarqué pour la cible
MFT. Économisez-vous l'écriture de votre propre pipeline. - Vous avez besoin du parsing de
$LogFile. Rien d'autre n'égale MFTECmd ici. - Vous avez besoin du parsing de
$Jdans la même chaîne d'outils.
Sautez-le quand vous êtes sous macOS ou Linux sans runtime .NET (oui, .NET 6+ y tourne, mais la plupart des analystes ne l'ont pas configuré), ou quand vous voulez intégrer le parsing dans un autre programme.
Une GUI compagne, MFT Explorer, navigue $MFT interactivement en vue arborescente. La plupart des analystes utilisent les deux : MFTECmd pour le parsing par lots, MFT Explorer quand ils doivent traquer un enregistrement précis. Les deux partagent le même code de parser, donc ce que vous voyez dans l'un correspond à l'autre.
Le seul grognement opérationnel : les défauts de MFTECmd émettent « tous » les enregistrements, y compris les enregistrements d'extension comme lignes séparées. Pour la plupart des workflows, vous voulez les enregistrements de base consolidés. Utilisez --bdl et compagnons pour filtrer, et lisez le texte d'aide avant votre première exécution.
omerbenamram/mft (crate Rust + CLI)
Le crate omerbenamram/mft est la bibliothèque de parsing que ce site utilise. Il se livre comme dépendance Rust (cargo add mft) et CLI autonome (mft_dump). La CLI émet du CSV ou du JSON ; la bibliothèque expose la structure complète des enregistrements, y compris les parcours d'attributs, pour un usage programmatique.
Prenez-le quand :
- Vous voulez intégrer le parsing MFT dans un pipeline plus large. Rust, avec WebAssembly, ou via FFI depuis Python (
subprocess) ou Go. - Vous voulez une sortie JSON Lines pour piper dans
jq, OpenSearch, ClickHouse ou une base de données maison. La CLI streame du JSONL ; vous pouvez piper une$MFTde 5 Go à traversjqsans charger le tout en mémoire. - Vous êtes sous Linux ou macOS et vous ne voulez pas installer .NET.
- Vous voulez que le parser soit auditable. Le code est petit, du Rust idiomatique, et le corpus de tests est dans le dépôt.
Sautez-le quand vous voulez une expérience analyste clé en main avec GUI et outils de timeline groupés. Sautez-le aussi quand vous avez spécifiquement besoin du parsing de $LogFile ; c'est le territoire de MFTECmd.
Le crate est ce qui tourne, compilé en WebAssembly, derrière le parser navigateur de ce site.
analyzeMFT (Python)
analyzeMFT est le parser pur Python classique. À l'origine de David Kovar, encore maintenu. CLI d'abord, mais importable. Plus lent que MFTECmd d'un facteur 10 à 50 sur de grosses entrées parce qu'il est en Python pur monothread, mais bien pour des scripts ad hoc et un triage ponctuel quand vous ne pouvez pas installer d'outillage natif.
Je le garde dans la poche arrière pour deux cas : une VM Linux air-gappée où cargo n'est pas disponible, et des one-liners rapides où je veux extraire un champ particulier à travers tous les enregistrements sans apprendre l'ordre des colonnes CSV de MFTECmd. Voir parser $MFT en Python pour les détails et exemples de code.
Parsing dans le navigateur (ce site)
Le parser sur ce site prend le crate omerbenamram/mft, le compile en WebAssembly et l'exécute dans un Web Worker. Vous déposez un fichier $MFT sur la page et les enregistrements apparaissent dans une table paginée, recherchable, triable. Rien n'est téléversé ; les octets restent dans la mémoire de votre navigateur.
Prenez-le quand :
- Vous voulez une lecture rapide de
$MFTsans rien installer. Intégration d'un analyste junior, démonstration de la structure NTFS, ou un deuxième avis rapide. - La politique interdit l'envoi de preuves à un service cloud. Le parsing WebAssembly se fait localement. Vous pouvez vérifier en déconnectant votre réseau avant de déposer le fichier.
- Vous devez partager une vue de triage avec un collègue qui n'a pas de chaîne d'outils forensique installée et ne va pas en installer une.
- Vous enseignez la structure NTFS et voulez un bac à sable interactif où les étudiants peuvent toucher des enregistrements et regarder la disposition se mettre à jour.
Sautez-le quand vous avez une $MFT de plusieurs gigaoctets d'un serveur très utilisé (le modèle in-memory passe à l'échelle linéairement), ou quand vous avez besoin de sorties qui s'intègrent au pipeline Eric Zimmerman plus large (mapping des colonnes Timeline Explorer). Pour cela, MFTECmd est la bonne réponse.
Sleuth Kit, mentionné pour la complétude
fls -m -r -o <offset> image.dd du Sleuth Kit parcourt la MFT et émet un bodyfile qui inclut les entrées supprimées. istat -o <offset> image.dd <inode> imprime un seul enregistrement sous forme lisible. icat -o <offset> image.dd <inode> extrait les données du fichier.
Sleuth Kit est la bonne réponse quand vous travaillez depuis une image disque complète plutôt qu'une $MFT extraite, quand l'évidence cross-filesystem (FAT/exFAT/HFS+ dans la même image) vous importe, ou quand vous voulez un parser dont la lignée devant les tribunaux est impeccable. La sortie est moins pratique que celle de MFTECmd, mais l'outillage a été peer-reviewed pendant deux décennies.
Comparaison
| Fonctionnalité | MFTECmd | omerbenamram/mft | Parser navigateur | analyzeMFT |
|---------|---------|------------------|----------------|------------|
| Plateforme | Windows (.NET) | Linux / macOS / Windows / Wasm | Tout navigateur moderne | Partout avec Python 3 |
| Installation | Un binaire | cargo install ou binaire de release | Aucune | pip install |
| Sortie | CSV (schéma Timeline Explorer) | CSV / JSONL | Table interactive + export CSV | CSV |
| $UsnJrnl:$J | Oui | Non (crate séparé omerbenamram/usn) | Le parser navigateur renvoie vers une vue $J | Non |
| $LogFile | Oui | Non | Non | Non |
| Scriptable | CLI seulement | Bibliothèque + CLI | Piloté par UI | Bibliothèque + CLI |
| Vitesse (1 Go MFT) | ~30 s | ~20 s | ~60 s (overhead UI) | 10-20 min |
| Confidentialité | Local | Local | Local (vérifiable par isolement réseau) | Local |
En choisir un
Pour un engagement IR de routine sur une station Windows : MFTECmd. Il s'insère dans KAPE et Timeline Explorer. C'est le chemin avec le moins de surprises.
Pour un pipeline qui ingère beaucoup de disques, tourne sous Linux ou veut du JSON : omerbenamram/mft. La CLI est rapide, la bibliothèque est propre.
Pour un triage ponctuel, une situation réseau hostile, une salle de classe ou un collègue sans machine forensique : le parser navigateur.
Pour une enquête sur image complète où la MFT est l'un de plusieurs systèmes de fichiers, ou quand la lignée d'admissibilité en cour compte plus que la commodité : Sleuth Kit.
Ils sont complémentaires. La plupart des examinateurs expérimentés prennent ce qui colle au moment. Il n'y a pas une seule bonne réponse.
Lectures complémentaires
- Index des outils d'Eric Zimmerman : ericzimmerman.github.io. MFTECmd est l'un parmi beaucoup ; l'écosystème autour (RECmd, EZViewer, KAPE) est ce qui en fait le défaut IR.
- Le Wiki du Sleuth Kit. Documentation de
fls,istat,icatplus les notes conceptuelles NTFS. - README et corpus de tests de
omerbenamram/mft. À lire si vous voulez comprendre exactement ce que le parser gère et ne gère pas.