Um parser de MFT é uma ferramenta que lê o $MFT, a Master File Table na raiz de cada volume NTFS, e transforma os seus registos de 1.024 bytes em algo por onde se possa navegar. CSV, JSON, uma timeline, uma tabela interactiva. Há várias implementações de brincar no GitHub. Há três que poria à frente de um cliente pagante. É assim que escolho entre elas.
MFTECmd (Eric Zimmerman)
O MFTECmd é o padrão de facto em resposta a incidentes. CLI .NET só para Windows, gratuito, analisa $MFT, $Boot, $J (o fluxo de change journal $UsnJrnl), $SDS (descritores de segurança do $Secure) e $LogFile. A saída é CSV na disposição vizinha do bodyfile que o resto da toolchain Eric Zimmerman (Timeline Explorer, KAPE, RECmd) consome nativamente.
Recorra a ele quando:
- Estiver numa estação de trabalho de análise Windows. Este é o caminho com menos surpresas.
- Quiser abrir a saída analisada no Timeline Explorer e navegar interactivamente. O mapeamento de colunas já está correcto.
- Estiver a correr o KAPE; o MFTECmd é o parser incluído para o target
MFT. Pule escrever o seu próprio pipeline. - Precisar de analisar
$LogFile. Nada mais se compara com o MFTECmd aqui. - Precisar de analisar
$Jna mesma toolchain.
Pule-o quando estiver em macOS ou Linux sem um runtime .NET (sim, o .NET 6+ corre lá, mas a maioria dos analistas não o tem instalado), ou quando quiser embeber parsing noutro programa.
Um GUI complementar, MFT Explorer, navega $MFT interactivamente numa vista em árvore. A maioria dos analistas usa ambos: MFTECmd para parsing em lote, MFT Explorer quando precisam de perseguir um registo específico. Os dois partilham o código do parser, por isso o que vê num corresponde ao outro.
A única queixa operacional: por omissão, o MFTECmd emite "todos" os registos, incluindo os de extensão como linhas separadas. Para a maioria dos fluxos quer os registos base consolidados. Use --bdl e companhia para filtrar, e leia o texto de ajuda antes da primeira execução.
omerbenamram/mft (crate Rust + CLI)
A crate omerbenamram/mft é a biblioteca de parser que este site usa. É distribuída como dependência Rust (cargo add mft) e como CLI standalone (mft_dump). O CLI emite CSV ou JSON; a biblioteca expõe a estrutura completa do registo, incluindo percursos por atributos, para uso programático.
Recorra a ela quando:
- Quiser embeber parsing de MFT num pipeline maior. Rust, com WebAssembly, ou via FFI a partir de Python (
subprocess) ou Go. - Quiser saída em JSON Lines para canalizar para
jq, OpenSearch, ClickHouse, ou uma base de dados personalizada. O CLI faz stream de JSONL; pode passar um$MFTde 5 GB porjqsem carregar tudo para memória. - Estiver em Linux ou macOS e não quiser instalar .NET.
- Quiser que o parser seja auditável. O código é pequeno, Rust idiomático, e o corpus de testes está no repo.
Pule-a quando quiser uma experiência turnkey de analista com GUI e ferramentas de timeline incluídas. Pule-a também quando precisar especificamente de parsing de $LogFile; isso é território do MFTECmd.
A crate é o que corre, compilada para WebAssembly, por trás do parser de browser deste site.
analyzeMFT (Python)
O analyzeMFT é o clássico parser em Python puro. Originalmente de David Kovar, ainda mantido. CLI first, mas importável. Mais lento que o MFTECmd por um factor de 10 a 50 em entradas grandes porque é Python puro single-thread, mas serve para scripts ad-hoc e triagem pontual em sítios onde não consegue instalar ferramentas nativas.
Tenho-o à mão para dois casos: uma VM Linux air-gapped de análise onde cargo não está disponível, e one-liners rápidos onde quero extrair um campo específico em todos os registos sem ter de aprender a ordem das colunas do CSV do MFTECmd. Veja analisar $MFT em Python para os detalhes e exemplos de código.
Parsing no browser (este site)
O parser deste site pega na crate omerbenamram/mft, compila-a para WebAssembly, e corre-a num Web Worker. Larga um ficheiro $MFT na página e os registos aparecem numa tabela paginada, pesquisável e ordenável. Nada é enviado; os bytes ficam na memória do seu browser.
Recorra a ele quando:
- Quiser uma leitura rápida do
$MFTsem instalar nada. Onboarding de um analista júnior, demonstrar a estrutura NTFS, ou uma segunda opinião rápida. - A política proibir enviar evidência para um serviço cloud. O parsing WebAssembly acontece localmente. Pode verificar desligando a rede antes de largar o ficheiro.
- Precisar de partilhar uma vista de triagem com um colega que não tem uma toolchain forense instalada e não vai instalar.
- Estiver a ensinar estrutura NTFS e quiser uma sandbox interactiva onde os alunos picam registos e vêem a disposição actualizar.
Pule-o quando tiver um $MFT de vários gigabytes de um servidor muito usado (o modelo em memória escala linearmente), ou quando precisar de saídas que se integrem com o pipeline Eric Zimmerman mais amplo (o mapeamento de colunas do Timeline Explorer). Para esses, o MFTECmd é o certo.
Sleuth Kit, mencionado por completude
O fls -m -r -o <offset> image.dd do Sleuth Kit percorre o MFT e emite um bodyfile que inclui entradas eliminadas. O istat -o <offset> image.dd <inode> imprime um único registo em forma legível. O icat -o <offset> image.dd <inode> extrai os dados do ficheiro.
O Sleuth Kit é a resposta certa quando está a trabalhar a partir de uma imagem de disco completa em vez de um $MFT extraído, quando se importa com evidência multi-filesystem (FAT/exFAT/HFS+ na mesma imagem), ou quando quer um parser cuja linhagem em tribunal é impecável. A saída é menos conveniente que a do MFTECmd, mas a ferramenta tem sido peer-reviewed durante duas décadas.
Como comparam
| Característica | MFTECmd | omerbenamram/mft | Parser de browser | analyzeMFT |
|---------|---------|------------------|----------------|------------|
| Plataforma | Windows (.NET) | Linux / macOS / Windows / Wasm | Qualquer browser moderno | Onde houver Python 3 |
| Instalação | Um binário | cargo install ou binário de release | Nenhuma | pip install |
| Saída | CSV (esquema do Timeline Explorer) | CSV / JSONL | Tabela interactiva + export CSV | CSV |
| $UsnJrnl:$J | Sim | Não (crate separada omerbenamram/usn) | O parser de browser liga a uma vista de $J | Não |
| $LogFile | Sim | Não | Não | Não |
| Scriptável | Apenas CLI | Biblioteca + CLI | Conduzido pela UI | Biblioteca + CLI |
| Velocidade (1 GB MFT) | ~30 s | ~20 s | ~60 s (overhead de UI) | 10-20 min |
| Privacidade | Local | Local | Local (verificável por isolamento de rede) | Local |
Escolher um
Para um engagement de IR rotineiro numa estação Windows: MFTECmd. Encaixa-se no KAPE e no Timeline Explorer. É o caminho com menos surpresas.
Para um pipeline que ingere muitos discos, corre em Linux, ou quer JSON: omerbenamram/mft. O CLI é rápido, a biblioteca é limpa.
Para uma triagem pontual, uma situação de rede hostil, uma sala de aula, ou um colega sem máquina forense: o parser de browser.
Para uma investigação completa de imagem onde o MFT é um sistema de ficheiros entre vários, ou onde a linhagem para admissibilidade em tribunal pesa mais do que a conveniência: Sleuth Kit.
São complementares. A maioria dos examinadores experientes recorre ao que serve para o momento. Não há uma resposta única certa.
Leituras adicionais
- Índice de ferramentas de Eric Zimmerman: ericzimmerman.github.io. O MFTECmd é uma de muitas; o ecossistema à volta dele (RECmd, EZViewer, KAPE) é o que faz dele o padrão IR.
- A Sleuth Kit Wiki. Documentação de
fls,istat,icatmais as notas conceptuais sobre NTFS. - README e corpus de testes do
omerbenamram/mft. Vale a pena ler se quiser perceber exactamente o que o parser trata e o que não trata.