← Torna al blog

Parser MFT che reggono davvero: MFTECmd, omerbenamram/mft e parsing nel browser

· 6 min di lettura

Un parser MFT è uno strumento che legge $MFT, la Master File Table alla radice di ogni volume NTFS, e trasforma i suoi record da 1.024 byte in qualcosa attraverso cui puoi muoverti. CSV, JSON, una timeline, una tabella interattiva. Ci sono parecchie implementazioni giocattolo su GitHub. Ce ne sono tre che metterei davanti a un cliente pagante. Ecco come scelgo tra di loro.

MFTECmd (Eric Zimmerman)

MFTECmd è lo standard di fatto nell'incident response. CLI .NET solo Windows, gratuita, parsa $MFT, $Boot, $J (lo stream del change journal $UsnJrnl), $SDS (descrittori di sicurezza da $Secure) e $LogFile. L'output è CSV nel layout vicino al bodyfile che il resto della toolchain di Eric Zimmerman (Timeline Explorer, KAPE, RECmd) consuma nativamente.

Ricorri ad esso quando:

  • Sei su una workstation di analisi Windows. È la via con meno sorprese.
  • Vuoi aprire l'output parsato in Timeline Explorer e pivottare interattivamente. La mappatura delle colonne è già corretta.
  • Stai eseguendo KAPE; MFTECmd è il parser incluso per il target MFT. Risparmiati di scrivere la tua pipeline.
  • Ti serve il parsing di $LogFile. Nient'altro eguaglia MFTECmd qui.
  • Ti serve il parsing di $J nella stessa toolchain.

Salta se sei su macOS o Linux senza runtime .NET (sì, .NET 6+ ci gira, ma la maggior parte degli analisti non l'ha configurato), o quando vuoi incorporare il parsing in un altro programma.

Una GUI complementare, MFT Explorer, naviga $MFT interattivamente in vista ad albero. La maggior parte degli analisti usa entrambe: MFTECmd per il parsing in batch, MFT Explorer quando devono inseguire un record specifico. I due condividono lo stesso codice di parser, quindi ciò che vedi in uno corrisponde all'altro.

L'unico fastidio operativo: i default di MFTECmd emettono "tutti" i record inclusi i record di estensione come righe separate. Per la maggior parte dei workflow vuoi i record base consolidati. Usa --bdl e simili per filtrare, e leggi il testo di aiuto prima della prima esecuzione.

omerbenamram/mft (crate Rust + CLI)

La crate omerbenamram/mft è la libreria di parsing che usa questo sito. Si distribuisce come dipendenza Rust (cargo add mft) e CLI standalone (mft_dump). La CLI emette CSV o JSON; la libreria espone la struttura completa del record, inclusi i percorsi degli attributi, per uso programmatico.

Ricorri ad essa quando:

  • Vuoi incorporare il parsing MFT in una pipeline più grande. Rust, con WebAssembly, o via FFI da Python (subprocess) o Go.
  • Vuoi output JSON Lines per pipare in jq, OpenSearch, ClickHouse o un database custom. La CLI streamma JSONL; puoi pipare una $MFT da 5 GB attraverso jq senza caricare l'intero file in memoria.
  • Sei su Linux o macOS e non vuoi installare .NET.
  • Vuoi che il parser sia verificabile. Il codice è piccolo, Rust idiomatico, e il corpus di test è nel repo.

Salta se vuoi un'esperienza chiavi in mano da analista con GUI e timeline tooling incluso. Salta anche se ti serve specificamente il parsing di $LogFile; quello è territorio di MFTECmd.

La crate è ciò che gira, compilato in WebAssembly, dietro il parser nel browser di questo sito.

analyzeMFT (Python)

analyzeMFT è il classico parser puro Python. Originariamente di David Kovar, ancora mantenuto. CLI prima, ma importabile. Più lento di MFTECmd di un fattore 10-50 su input grandi perché è puro Python single-thread, ma va bene per script ad hoc e triage occasionali quando non puoi installare strumenti nativi.

Lo tengo nel taschino per due casi: una VM Linux air-gapped dove cargo non è disponibile, e one-liner veloci dove voglio estrarre un campo specifico in tutti i record senza imparare l'ordine delle colonne CSV di MFTECmd. Vedi parsing di $MFT in Python per i dettagli e gli esempi di codice.

Parsing nel browser (questo sito)

Il parser su questo sito prende la crate omerbenamram/mft, la compila in WebAssembly e la esegue in un Web Worker. Trascini un file $MFT sulla pagina e i record appaiono in una tabella paginata, ricercabile, ordinabile. Niente viene caricato; i byte restano nella memoria del tuo browser.

Ricorri ad esso quando:

  • Vuoi una lettura veloce di $MFT senza installare nulla. Onboarding di un analista junior, dimostrazione della struttura NTFS, o un veloce secondo parere.
  • La policy proibisce di inviare prove a un servizio cloud. Il parsing WebAssembly avviene localmente. Puoi verificarlo disconnettendo la rete prima di trascinare il file.
  • Devi condividere una vista di triage con un collega che non ha una toolchain forense installata e non la installerà.
  • Stai insegnando la struttura NTFS e vuoi un sandbox interattivo dove gli studenti possano toccare record e vedere il layout aggiornarsi.

Salta se hai una $MFT da più gigabyte da un server molto usato (il modello in-memory scala linearmente), o quando ti servono output che si integrano con la più ampia pipeline di Eric Zimmerman (mappatura colonne di Timeline Explorer). Per quello, MFTECmd è giusto.

Sleuth Kit, menzionato per completezza

fls -m -r -o <offset> image.dd di Sleuth Kit percorre la MFT ed emette un bodyfile che include voci eliminate. istat -o <offset> image.dd <inode> stampa un singolo record in forma leggibile. icat -o <offset> image.dd <inode> estrae i dati del file.

Sleuth Kit è la risposta giusta quando lavori da un'immagine disco completa anziché da una $MFT estratta, quando ti interessa l'evidenza cross-filesystem (FAT/exFAT/HFS+ nella stessa immagine), o quando vuoi un parser il cui lignaggio in tribunale è impeccabile. L'output è meno comodo di quello di MFTECmd, ma il tooling è stato peer-reviewed per due decenni.

Come si confrontano

| Caratteristica | MFTECmd | omerbenamram/mft | Parser browser | analyzeMFT | |---------|---------|------------------|----------------|------------| | Piattaforma | Windows (.NET) | Linux / macOS / Windows / Wasm | Qualsiasi browser moderno | Ovunque con Python 3 | | Installazione | Un binario | cargo install o binario release | Nessuna | pip install | | Output | CSV (schema Timeline Explorer) | CSV / JSONL | Tabella interattiva + export CSV | CSV | | $UsnJrnl:$J | Sì | No (crate separata omerbenamram/usn) | Il parser browser collega a una vista $J | No | | $LogFile | Sì | No | No | No | | Scriptabile | Solo CLI | Libreria + CLI | Guidato da UI | Libreria + CLI | | Velocità (1 GB MFT) | ~30 s | ~20 s | ~60 s (overhead UI) | 10-20 min | | Privacy | Locale | Locale | Locale (verificabile per isolamento di rete) | Locale |

Scegliere uno

Per un ingaggio IR di routine su workstation Windows: MFTECmd. Si inserisce in KAPE e Timeline Explorer. È la via con meno sorprese.

Per una pipeline che ingerisce molti dischi, gira su Linux o vuole JSON: omerbenamram/mft. La CLI è veloce, la libreria è pulita.

Per un triage occasionale, una situazione di rete ostile, un'aula, o un collega senza macchina forense: il parser browser.

Per un'indagine su immagine completa dove la MFT è uno di più filesystem, o dove il lignaggio di ammissibilità in tribunale conta più della comodità: Sleuth Kit.

Sono complementari. La maggior parte degli esaminatori esperti prende ciò che si adatta al momento. Non c'è una sola risposta giusta.

Letture aggiuntive

  • Indice degli strumenti di Eric Zimmerman: ericzimmerman.github.io. MFTECmd è uno di tanti; l'ecosistema attorno (RECmd, EZViewer, KAPE) è ciò che lo rende il default IR.
  • Il Wiki di Sleuth Kit. Documentazione di fls, istat, icat più le note concettuali NTFS.
  • README e corpus di test di omerbenamram/mft. Vale la lettura se vuoi capire esattamente cosa il parser gestisce e cosa no.

Risorse esterne