← Zurück zum Blog

MFT-Parser, die wirklich halten: MFTECmd, omerbenamram/mft und Browser-Parsing

· 6 Min. Lesezeit

Ein MFT-Parser ist ein Tool, das $MFT liest, die Master File Table an der Wurzel jedes NTFS-Volumes, und ihre 1.024-Byte-Datensätze in etwas verwandelt, durch das du dich bewegen kannst. CSV, JSON, eine Timeline, eine interaktive Tabelle. Es gibt mehrere Spielzeug-Implementierungen auf GitHub. Es gibt drei, die ich vor einen zahlenden Kunden setzen würde. So entscheide ich zwischen ihnen.

MFTECmd (Eric Zimmerman)

MFTECmd ist der De-facto-Standard in der Incident Response. Windows-only .NET-CLI, kostenlos, parst $MFT, $Boot, $J (den Change-Journal-Stream $UsnJrnl), $SDS (Sicherheitsdeskriptoren aus $Secure) und $LogFile. Die Ausgabe ist CSV im Bodyfile-nahen Layout, das der Rest der Eric-Zimmerman-Toolchain (Timeline Explorer, KAPE, RECmd) nativ konsumiert.

Greife danach, wenn:

  • Du auf einer Windows-Analyseworkstation bist. Dies ist der Weg mit den wenigsten Überraschungen.
  • Du die geparste Ausgabe in Timeline Explorer öffnen und interaktiv pivotieren willst. Das Column Mapping passt bereits.
  • Du KAPE ausführst; MFTECmd ist der gebündelte Parser für das MFT-Target. Erspar dir das Schreiben deiner eigenen Pipeline.
  • Du $LogFile-Parsing brauchst. Hier kann nichts anderes mit MFTECmd mithalten.
  • Du $J-Parsing in derselben Toolchain brauchst.

Lass es weg, wenn du auf macOS oder Linux ohne .NET-Runtime bist (ja, .NET 6+ läuft dort, aber die meisten Analysten haben es nicht eingerichtet), oder wenn du Parsing in ein anderes Programm einbetten willst.

Eine begleitende GUI, MFT Explorer, durchsucht $MFT interaktiv in einer Baumansicht. Die meisten Analysten nutzen beide: MFTECmd für das Batch-Parsing, MFT Explorer, wenn sie einem bestimmten Datensatz nachjagen müssen. Die beiden teilen denselben Parser-Code, sodass das, was du in einem siehst, mit dem anderen übereinstimmt.

Der eine Betriebsärger: MFTECmds Standardeinstellungen geben "alle" Datensätze aus, einschließlich Erweiterungsdatensätzen als separate Zeilen. Für die meisten Workflows willst du die Basisdatensätze konsolidiert. Verwende --bdl und Kollegen zum Filtern und lies den Hilfetext vor deinem ersten Lauf.

omerbenamram/mft (Rust-Crate + CLI)

Die omerbenamram/mft-Crate ist die Parser-Bibliothek, die diese Seite verwendet. Sie wird als Rust-Abhängigkeit (cargo add mft) und als eigenständige CLI (mft_dump) ausgeliefert. Die CLI gibt CSV oder JSON aus; die Bibliothek exponiert die vollständige Datensatzstruktur, einschließlich Attribut-Walks, für die programmatische Nutzung.

Greife danach, wenn:

  • Du MFT-Parsing in eine größere Pipeline einbetten willst. Rust, mit WebAssembly oder per FFI aus Python (subprocess) oder Go.
  • Du JSON-Lines-Ausgabe willst, um in jq, OpenSearch, ClickHouse oder eine eigene Datenbank zu pipen. Die CLI streamt JSONL; du kannst eine 5 GB große $MFT durch jq pipen, ohne das Ganze in den Speicher zu laden.
  • Du auf Linux oder macOS bist und kein .NET installieren willst.
  • Du willst, dass der Parser auditierbar ist. Der Code ist klein, idiomatisches Rust, und das Test-Korpus liegt im Repo.

Lass es weg, wenn du eine schlüsselfertige Analystenerfahrung mit GUI und gebündeltem Timeline-Tooling willst. Lass es auch weg, wenn du speziell $LogFile-Parsing brauchst; das ist MFTECmds Territorium.

Die Crate ist das, was kompiliert zu WebAssembly hinter dem Browser-Parser auf dieser Seite läuft.

analyzeMFT (Python)

analyzeMFT ist der klassische reine Python-Parser. Ursprünglich von David Kovar, immer noch gepflegt. CLI-zuerst, aber importierbar. Langsamer als MFTECmd um den Faktor 10 bis 50 bei großen Eingaben, weil es reines Python-Single-Threaded ist, aber okay für Ad-hoc-Skripte und einmalige Triage, wenn du kein natives Tooling installieren kannst.

Ich behalte es in der Hinterhand für zwei Fälle: eine luftgespaltene Linux-Analyse-VM, in der cargo nicht verfügbar ist, und schnelle Einzeiler, bei denen ich ein bestimmtes Feld über alle Datensätze extrahieren möchte, ohne die Reihenfolge der MFTECmd-CSV-Spalten zu lernen. Siehe $MFT in Python parsen für die Details und Codebeispiele.

Browser-basiertes Parsing (diese Seite)

Der Parser auf dieser Seite nimmt die omerbenamram/mft-Crate, kompiliert sie zu WebAssembly und führt sie in einem Web Worker aus. Du legst eine $MFT-Datei auf die Seite ab und die Datensätze erscheinen in einer paginierten, durchsuchbaren, sortierbaren Tabelle. Nichts wird hochgeladen; die Bytes bleiben im Speicher deines Browsers.

Greife danach, wenn:

  • Du ein schnelles Lesen von $MFT willst, ohne etwas zu installieren. Onboarding eines Junior-Analysten, Demonstration der NTFS-Struktur oder eine schnelle Zweitmeinung.
  • Die Richtlinie verbietet das Senden von Beweisen an einen Cloud-Dienst. WebAssembly-Parsing geschieht lokal. Du kannst es verifizieren, indem du dein Netzwerk trennst, bevor du die Datei ablegst.
  • Du eine Triage-Ansicht mit einem Kollegen teilen musst, der keine Forensik-Toolchain installiert hat und auch keine installieren wird.
  • Du NTFS-Struktur lehrst und einen interaktiven Sandbox willst, in dem Studenten Datensätze anstoßen und das Layout aktualisieren sehen können.

Lass es weg, wenn du eine mehrere Gigabyte große $MFT von einem stark genutzten Server hast (das In-Memory-Modell skaliert linear), oder wenn du Ausgaben brauchst, die mit der breiteren Eric-Zimmerman-Pipeline integrieren (Timeline-Explorer-Spaltenzuordnung). Dafür ist MFTECmd richtig.

Sleuth Kit, der Vollständigkeit halber erwähnt

Sleuth Kits fls -m -r -o <offset> image.dd durchläuft die MFT und gibt ein Bodyfile aus, das gelöschte Einträge enthält. istat -o <offset> image.dd <inode> druckt einen einzelnen Datensatz in menschenlesbarer Form. icat -o <offset> image.dd <inode> extrahiert die Daten der Datei.

Sleuth Kit ist die richtige Antwort, wenn du von einem vollständigen Disk-Image statt einer extrahierten $MFT arbeitest, wenn dir filesystemübergreifende Beweise wichtig sind (FAT/exFAT/HFS+ im selben Image), oder wenn du einen Parser willst, dessen Stammbaum vor Gericht makellos ist. Die Ausgabe ist weniger praktisch als die von MFTECmd, aber das Tooling wurde zwei Jahrzehnte lang peer-reviewed.

Wie sie sich vergleichen

| Funktion | MFTECmd | omerbenamram/mft | Browser-Parser | analyzeMFT | |---------|---------|------------------|----------------|------------| | Plattform | Windows (.NET) | Linux / macOS / Windows / Wasm | Jeder moderne Browser | Überall mit Python 3 | | Installation | Eine Binärdatei | cargo install oder Release-Binärdatei | Keine | pip install | | Ausgabe | CSV (Timeline-Explorer-Schema) | CSV / JSONL | Interaktive Tabelle + CSV-Export | CSV | | $UsnJrnl:$J | Ja | Nein (separate omerbenamram/usn-Crate) | Browser-Parser verlinkt auf eine $J-Ansicht | Nein | | $LogFile | Ja | Nein | Nein | Nein | | Scriptbar | Nur CLI | Bibliothek + CLI | UI-gesteuert | Bibliothek + CLI | | Geschwindigkeit (1 GB MFT) | ~30 s | ~20 s | ~60 s (UI-Overhead) | 10-20 Min | | Datenschutz | Lokal | Lokal | Lokal (durch Netzwerktrennung verifizierbar) | Lokal |

Eines auswählen

Für ein routinemäßiges IR-Engagement auf einer Windows-Workstation: MFTECmd. Es fügt sich in KAPE und Timeline Explorer ein. Es ist der Weg mit den wenigsten Überraschungen.

Für eine Pipeline, die viele Platten verarbeitet, auf Linux läuft oder JSON möchte: omerbenamram/mft. Die CLI ist schnell, die Bibliothek ist sauber.

Für eine einmalige Triage, eine feindliche Netzwerksituation, ein Klassenzimmer oder einen Kollegen ohne Forensik-Maschine: der Browser-Parser.

Für eine vollständige Image-Untersuchung, bei der MFT eines von mehreren Dateisystemen ist, oder wenn die Gerichtsverwertbarkeit wichtiger ist als die Bequemlichkeit: Sleuth Kit.

Diese sind komplementär. Die meisten erfahrenen Untersucher greifen zu dem, was zum Moment passt. Es gibt keine einzige richtige Antwort.

Weiterführende Literatur

  • Eric Zimmermans Tool-Index: ericzimmerman.github.io. MFTECmd ist eines von vielen; das Ökosystem drumherum (RECmd, EZViewer, KAPE) ist das, was es zum IR-Standard macht.
  • Das Sleuth Kit Wiki. fls-, istat-, icat-Dokumentation plus die konzeptionellen NTFS-Notizen.
  • omerbenamram/mft README und Test-Korpus. Lesenswert, wenn du genau verstehen willst, was der Parser leistet und was nicht.

Externe Ressourcen