← Volver al blog

Parsers de MFT que aguantan de verdad: MFTECmd, omerbenamram/mft y parsing en navegador

· 7 min de lectura

Un parser de MFT es una herramienta que lee $MFT, la Master File Table en la raíz de cada volumen NTFS, y convierte sus registros de 1.024 bytes en algo por lo que puedas navegar. CSV, JSON, una línea temporal, una tabla interactiva. Hay varias implementaciones de juguete en GitHub. Hay tres que pondría delante de un cliente que paga. Así elijo entre ellas.

MFTECmd (Eric Zimmerman)

MFTECmd es el estándar de facto en respuesta a incidentes. CLI .NET solo para Windows, gratis, parsea $MFT, $Boot, $J (el stream de change journal $UsnJrnl), $SDS (descriptores de seguridad de $Secure) y $LogFile. La salida es CSV en el layout cercano a bodyfile que el resto de la cadena de herramientas de Eric Zimmerman (Timeline Explorer, KAPE, RECmd) consume nativamente.

Recurre a él cuando:

  • Estás en una workstation de análisis Windows. Es el camino con menos sorpresas.
  • Quieres abrir la salida parseada en Timeline Explorer y pivotar interactivamente. El mapeo de columnas ya es correcto.
  • Estás ejecutando KAPE; MFTECmd es el parser empaquetado para el target MFT. Te ahorras escribir tu propia pipeline.
  • Necesitas parseo de $LogFile. Nada más iguala a MFTECmd aquí.
  • Necesitas parseo de $J en la misma cadena de herramientas.

Sáltatelo si estás en macOS o Linux sin runtime de .NET (sí, .NET 6+ corre allí, pero la mayoría de analistas no lo tienen configurado), o cuando quieras incrustar el parsing en otro programa.

Una GUI compañera, MFT Explorer, navega $MFT interactivamente en vista de árbol. La mayoría de analistas usan ambos: MFTECmd para parseo por lotes, MFT Explorer cuando necesitan perseguir un registro específico. Los dos comparten el mismo código de parser, así que lo que ves en uno coincide con el otro.

La única queja operativa: los valores por defecto de MFTECmd emiten "todos" los registros incluidos los de extensión como filas separadas. Para la mayoría de flujos quieres los registros base consolidados. Usa --bdl y compañeros para filtrar, y lee el texto de ayuda antes de tu primera ejecución.

omerbenamram/mft (crate de Rust + CLI)

El crate omerbenamram/mft es la biblioteca de parseo que usa este sitio. Se entrega como dependencia de Rust (cargo add mft) y una CLI independiente (mft_dump). La CLI emite CSV o JSON; la biblioteca expone la estructura completa del registro, incluyendo recorridos de atributos, para uso programático.

Recurre a él cuando:

  • Quieres incrustar el parseo MFT en una pipeline mayor. Rust, con WebAssembly, o vía FFI desde Python (subprocess) o Go.
  • Quieres salida JSON Lines para canalizar a jq, OpenSearch, ClickHouse o una base de datos propia. La CLI hace streaming JSONL; puedes canalizar una $MFT de 5 GB a jq sin cargarla entera en memoria.
  • Estás en Linux o macOS y no quieres instalar .NET.
  • Quieres que el parser sea auditable. El código es pequeño, Rust idiomático, y el corpus de pruebas está en el repo.

Sáltatelo cuando quieras una experiencia de analista llave en mano con GUI y herramientas de timeline empaquetadas. Sáltatelo también cuando necesites específicamente parseo de $LogFile; ese es territorio de MFTECmd.

El crate es lo que corre, compilado a WebAssembly, detrás del parser de navegador de este sitio.

analyzeMFT (Python)

analyzeMFT es el clásico parser puro de Python. Originalmente de David Kovar, aún mantenido. Primero CLI, pero importable. Más lento que MFTECmd por un factor de 10 a 50 en entradas grandes porque es Python puro de un solo hilo, pero bien para scripts ad hoc y triage puntual cuando no puedes instalar herramientas nativas.

Lo guardo en el bolsillo trasero para dos casos: una VM Linux air-gapped donde cargo no está disponible, y one-liners rápidos donde quiero extraer un campo concreto a través de todos los registros sin aprenderme el orden de columnas CSV de MFTECmd. Mira parsear $MFT en Python para los detalles y muestras de código.

Parseo basado en navegador (este sitio)

El parser en este sitio toma el crate omerbenamram/mft, lo compila a WebAssembly y lo ejecuta en un Web Worker. Sueltas un archivo $MFT en la página y los registros aparecen en una tabla paginada, buscable y ordenable. Nada se sube; los bytes permanecen en la memoria de tu navegador.

Recurre a él cuando:

  • Quieres una lectura rápida de $MFT sin instalar nada. Onboarding de un analista junior, demostrar estructura NTFS, o una segunda opinión rápida.
  • La política prohíbe enviar evidencia a un servicio en la nube. El parseo WebAssembly ocurre localmente. Puedes verificar desconectando tu red antes de soltar el archivo.
  • Necesitas compartir una vista de triage con un colega que no tiene cadena de herramientas forenses instalada y no la va a instalar.
  • Estás enseñando estructura NTFS y quieres un sandbox interactivo donde los estudiantes puedan tocar registros y ver el layout actualizándose.

Sáltatelo cuando tienes una $MFT de varios gigabytes de un servidor muy usado (el modelo in-memory escala linealmente), o cuando necesitas salidas que se integren con la pipeline más amplia de Eric Zimmerman (mapeo de columnas de Timeline Explorer). Para eso, MFTECmd es lo correcto.

Sleuth Kit, mencionado por completitud

fls -m -r -o <offset> image.dd del Sleuth Kit recorre la MFT y emite un bodyfile que incluye entradas eliminadas. istat -o <offset> image.dd <inode> imprime un solo registro en forma legible. icat -o <offset> image.dd <inode> extrae los datos del archivo.

Sleuth Kit es la respuesta correcta cuando trabajas desde una imagen de disco completa en vez de una $MFT extraída, cuando te importa la evidencia entre sistemas de archivos (FAT/exFAT/HFS+ en la misma imagen), o cuando quieres un parser cuyo linaje en tribunales sea impecable. La salida es menos cómoda que la de MFTECmd, pero las herramientas han sido revisadas por pares durante dos décadas.

Cómo se comparan

| Característica | MFTECmd | omerbenamram/mft | Parser en navegador | analyzeMFT | |---------|---------|------------------|----------------|------------| | Plataforma | Windows (.NET) | Linux / macOS / Windows / Wasm | Cualquier navegador moderno | En cualquier sitio con Python 3 | | Instalación | Un binario | cargo install o binario release | Ninguna | pip install | | Salida | CSV (esquema Timeline Explorer) | CSV / JSONL | Tabla interactiva + exportación CSV | CSV | | $UsnJrnl:$J | Sí | No (crate separado omerbenamram/usn) | El parser en navegador enlaza a una vista $J | No | | $LogFile | Sí | No | No | No | | Scriptable | Solo CLI | Biblioteca + CLI | Dirigido por UI | Biblioteca + CLI | | Velocidad (MFT de 1 GB) | ~30 s | ~20 s | ~60 s (sobrecoste de UI) | 10-20 min | | Privacidad | Local | Local | Local (verificable por aislamiento de red) | Local |

Elegir uno

Para un compromiso IR rutinario en una workstation Windows: MFTECmd. Encaja con KAPE y Timeline Explorer. Es el camino con menos sorpresas.

Para una pipeline que ingesta muchos discos, corre en Linux o quiere JSON: omerbenamram/mft. La CLI es rápida, la biblioteca es limpia.

Para un triage puntual, una situación de red hostil, un aula, o un colega sin máquina forense: el parser en navegador.

Para una investigación de imagen completa donde la MFT es uno de varios sistemas de archivos, o donde el linaje de admisibilidad en tribunal importa más que la comodidad: Sleuth Kit.

Son complementarios. La mayoría de examinadores con experiencia echan mano de lo que encaja con el momento. No hay una sola respuesta correcta.

Lecturas adicionales

  • Índice de herramientas de Eric Zimmerman: ericzimmerman.github.io. MFTECmd es una de muchas; el ecosistema a su alrededor (RECmd, EZViewer, KAPE) es lo que la convierte en el predeterminado de IR.
  • La Wiki del Sleuth Kit. Documentación de fls, istat, icat más las notas conceptuales de NTFS.
  • README y corpus de pruebas de omerbenamram/mft. Vale la pena leerlo si quieres entender exactamente qué maneja y qué no maneja el parser.

Recursos externos