MFTparser
← Volver al blog

Extraer $MFT de un host Windows en vivo sin romperlo

· 7 min de lectura

$MFT es un archivo de metadatos de NTFS y no está en una posición fija: el sector de arranque del volumen registra el clúster donde empieza (el número de clúster de la MFT), y su runlist en el registro 0 indica dónde está el resto. Mientras el volumen esté montado, Windows no lo entrega a través de las API de archivos normales. xcopy fallará. Robocopy fallará. El Copy-Item de PowerShell también fallará: la apertura se rechaza (acceso denegado o archivo no encontrado), así que no obtienes ninguna copia, ni siquiera una parcial. Necesitas una herramienta que lea el volumen crudo, sortee el sistema de archivos y reensamble $MFT a partir de sus cluster runs.

Hay tres opciones en las que confío en la práctica. Cubren los casos de triage de hosts en vivo que veo semana tras semana.

Opción 1: KAPE, el predeterminado para IR

Si haces respuesta a incidentes y estás en un host Windows, la respuesta es KAPE con el target compuesto FileSystem más el target $MFTMirr. FileSystem saca $MFT, $LogFile, $UsnJrnl:$J, $Boot, $Secure:$SDS y el stream $T de $TxfLog de una pasada; $MFTMirr no forma parte de él, de ahí el segundo target. KAPE preserva las marcas de tiempo originales de los archivos recolectados y escribe un árbol de directorios ordenado que puedes llevar al análisis.

kape.exe --tsource C: --target 'FileSystem,$MFTMirr' --tdest C:\triage --vss

Las comillas simples son para PowerShell, donde $MFTMirr sin comillas se expande como una variable (vacía). Desde cmd.exe, quítalas: --target FileSystem,$MFTMirr.

--vss es la flag que la gente olvida. Le dice a KAPE que también tire $MFT (y el resto del target) de cada Volume Shadow Copy de la fuente. Las instantáneas más antiguas son independientemente útiles y deberías recolectarlas por defecto. Mira Volume Shadow Copy y $MFT sobre qué hacer con ellas.

KAPE maneja el problema del archivo bloqueado con su propio lector NTFS crudo, sin recurrir a RawCopy.exe ni a otra herramienta. El archivo recolectado es idéntico bit a bit a lo que una imagen forense produciría. Úsalo a menos que tengas una razón específica para no hacerlo.

Opción 2: FTK Imager, el fallback GUI

FTK Imager sigue siendo la herramienta GUI gratuita estándar para la adquisición. Es a lo que recurres cuando KAPE no está en el host y necesitas agarrar $MFT una vez y marcharte. El flujo:

  1. File → Add Evidence Item → Physical Drive (usa Logical Drive solo si trabajas desde una compartición remota o una imagen montada).
  2. Elige el disco y deja que enumere volúmenes.
  3. Expande la raíz del volumen NTFS en el árbol de la izquierda. $MFT, $MFTMirr, $LogFile, $Volume, $AttrDef, $Bitmap y el resto de los archivos de metadatos están visibles ahí aunque Explorer los oculte.
  4. Clic derecho en $MFT → Export Files. Hashéalo (SHA-256) inmediatamente.

FTK Imager lee el volumen bloqueado mapeando el dispositivo físico y parseando NTFS él mismo. La exportación es el archivo real en disco, con arrays de fixup y todo.

El mismo flujo lee imágenes .dd, .E01 y .AFF4. Si tienes una imagen offline, móntala como evidencia y usa la misma ruta de exportación.

Opción 3: fsutil y una lectura cruda, cuando no puedes instalar nada

En un host endurecido donde no puedes dejar caer KAPE o FTK Imager, el comando integrado fsutil te dirá dónde vive $MFT:

fsutil file queryextents C:\$Mft

La salida es una lista de triplas (Virtual Cluster Number, Logical Cluster Number, longitud). Para convertir eso en un archivo lees el volumen crudo en cada LCN y ensamblas. PowerShell con un P/Invoke a CreateFile(\\.\C:, GENERIC_READ) hace el trabajo; también cualquiera de los pequeños módulos de lectura cruda de PowerShell en GitHub. RawCopy.exe de Joakim Schicht es el standalone más simple.

Es un componente, no una respuesta final. Úsalo cuando la política prohíba cargar otra herramienta.

Lo que la gente se equivoca

Esperar que Copy-Item -Force funcione. -Force no cambia nada aquí: las API de archivos normales siguen negándose a abrir $MFT. Usa una de las opciones de lectura cruda de arriba y luego comprueba el resultado: el tamaño contra fsutil file queryextents y los registros como se describe en la verificación más abajo.

Olvidar $MFTMirr y los logs de transacciones. $MFTMirr son dieciséis registros de seguro. Los logs de transacciones ($LogFile, más los archivos $TxfLog por recurso bajo $Extend\$RmMetadata) llevan las operaciones que pueden no haber llegado a $MFT todavía en el momento de la adquisición. Adquiérelos juntos. KAPE lo hace gratis.

No tirar el diario USN. $UsnJrnl:$J es esencial para la reconstrucción de la línea temporal (mira emparejar el diario con la tabla de archivos). Rota, lo que significa que esperar dos días para volver pierde evidencia. Cógelo a la primera. Si trabajas desde una imagen de disco, los pasos para extraer $UsnJrnl:$J de la misma imagen son los mismos que para exportar $MFT.

Recolectar de un sistema vivo sin VSS. La MFT viva es consistente a nivel de volumen (NTFS es journaled), pero si el host está ocupado puedes recolectar una $MFT y un $UsnJrnl que difieran decenas de segundos porque la MFT se leyó primero. Toma una instantánea VSS y luego lee ambos desde la instantánea. La instantánea los congela.

Confiar en la marca de tiempo equivocada del archivo recolectado. La hora "modified" de la $MFT exportada es lo que tu herramienta de recolección configuró. Hashea los bytes, escribe el hash y la hora de adquisición en un log separado, y referencia ese log en todas partes.

Una adquisición basada en VSS que uso de verdad

Cuando estoy en un host en vivo y quiero una $MFT limpia en un instante específico más el diario más el log, este es el snippet:

vssadmin create shadow /for=C:

Lee el Shadow Copy Volume Name de la salida (\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN). No apuntes robocopy ni copy a esa ruta: $MFT, $LogFile y $UsnJrnl:$J son archivos de metadatos de NTFS, y las API de archivos normales no los entregan desde una instantánea igual que no lo hacen desde el volumen vivo. La instantánea congela los bytes; para sacarlos sigues necesitando un lector NTFS en crudo:

  • KAPE con --vss (Opción 1) lee cada instantánea con su propio parser NTFS y recoge todo el conjunto de targets.
  • La lectura cruda de la Opción 3 también funciona contra la instantánea: abre la ruta de dispositivo de la instantánea en lugar de \\.\C: y ensambla $MFT a partir del runlist del registro 0.
  • Sin conexión, haz una imagen del disco y exporta con FTK Imager o icat, como en la siguiente sección.

Hashea todo cuando aterrice, borra la instantánea si es tuya (vssadmin delete shadows /shadow={GUID}) y márchate.

La vía de la lectura cruda no requiere nada más allá de lo que viene en Windows.

Leer desde una imagen de disco

Si ya tienes una imagen .dd o .E01, te saltas el bloqueo por completo. Monta la imagen en solo lectura (xmount, ewfmount, vshadowmount para imágenes con VSS) o usa un parser que consuma imágenes directamente. $MFT siempre se sitúa en LCN MftStartLcn del sector de arranque en el offset 0 de la partición. icat -o <partition_offset> image.dd 0 del Sleuth Kit extrae el archivo. El inodo 0 es siempre $MFT.

Verificación antes del análisis

Hashea el archivo (SHA-256) inmediatamente tras la adquisición. Hashéalo de nuevo antes del parseo. Las discrepancias pasan más a menudo de lo que la gente admite, normalmente por presión de disco a mitad de adquisición o herramientas de copia que reintentan lecturas parciales en silencio.

Luego ejecuta una comprobación estructural. Parsea los primeros diez registros, confirma la firma FILE en cada uno, confirma que el registro 0 sea $MFT con una runlist $DATA autoreferencial, confirma que el registro 1 sea $MFTMirr, confirma que el registro 5 sea el directorio raíz con un atributo $INDEX_ROOT. Si algo de eso falla, la adquisición es mala y necesitas repetirla. MFTECmd y mft_dump lanzarán advertencias sobre un archivo corrupto; no las suprimas.

Lecturas adicionales

  • Eric Zimmerman, MFTECmd y KAPE. El repo KapeFiles define el target compuesto FileSystem y los targets por archivo ($MFT, $MFTMirr, $LogFile, $J...) y vale la pena leerlo para entender qué se recolecta.
  • Joakim Schicht, RawCopy. Un lector de volumen crudo independiente para copiar archivos NTFS bloqueados.
  • Microsoft, Volume Shadow Copy Service. Referencia de la semántica de instantáneas en la que te apoyas para adquisiciones limpias.

Recursos externos