Cómo adquirir el $LogFile de NTFS (en vivo y en frío)
Copiar el $LogFile bloqueado de NTFS y su $MFT: comandos de KAPE, Velociraptor, FTK Imager, RawCopy, icat y ntfscat, y comprobaciones de que la copia sirve.
TL;DR. $LogFile es la entrada 2 de la MFT, en la raíz de cada volumen NTFS, y está bloqueado mientras el volumen está montado. En un equipo en vivo, usa KAPE (targets $LogFile + $MFT), Velociraptor (Windows.Triage.Targets con sus targets LogFile + MFT; Windows.KapeFiles.Targets en versiones antiguas), FTK Imager o RawCopy (/FileNamePath:C:2). Desde una imagen, usa icat image.dd 2 o ntfscat -i 2. Adquiérelo lo primero —es circular y tu propia actividad lo sobrescribe— y adquiere el $MFT del mismo volumen a la vez. Después comprueba que la copia empieza por RSTR, que tiene el tamaño que declara el área de reinicio y que no está llena de ceros.
El $LogFile es el artefacto más perecedero de un volumen NTFS. En una unidad de sistema con mucha actividad puede dar la vuelta en bastante menos de una hora. Cada comando que ejecutas en el equipo escribe metadatos, y cada escritura de metadatos pasa por el diario. El orden de adquisición y el destino importan aquí más que para casi cualquier otro archivo.
Qué hay que adquirir
| Archivo | Dónde | Entrada de la MFT | Por qué |
|---|---|---|---|
$LogFile | Raíz de cada volumen NTFS (C:\$LogFile) | 2 | El propio diario de transacciones |
$MFT | Raíz del mismo volumen | 0 | Nombres y carpetas padre de cada entrada de la MFT a la que hace referencia el diario |
$UsnJrnl:$J | $Extend\$UsnJrnl, flujo $J | variable | Historial de cambios fechado para la correlación (opcional pero recomendado) |
El diario suele rondar los 64 MiB en los volúmenes Windows actuales (el tamaño se puede configurar con chkdsk /L, así que compruébalo en lugar de suponerlo). Adquiere todos los volúmenes que importen, no solo C:. Los volúmenes extraíbles y de datos conservan el historial mucho más tiempo que la unidad de sistema.
Antes de empezar: protege el diario de ti mismo
- Adquiérelo lo primero, antes del triaje que consume mucha memoria o escribe muchos archivos. dfir.ru midió que los registros antiguos se sobrescribían a los 16 minutos en una prueba con Windows 10 (How the $LogFile works?).
- Escribe la salida en otro volumen (unidad USB, recurso de red). Escribir una colección en
C:genera registros en el diario deC:por cada archivo que creas. - No ejecutes
chkdsken el volumen de la evidencia. Puede reiniciar o redimensionar el diario. Si una página de reinicio lleva la firmaCHKD, chkdsk ha tocado el diario. - Adquiere
$LogFiley$MFTen la misma pasada, del mismo volumen, y conserva la estructura de carpetas (C/,D/) para poder emparejar cada diario con su propio$MFT.
Equipo Windows en vivo
KAPE
El proyecto KapeFiles incluye los targets $LogFile.tkape y $MFT.tkape (además de $J.tkape para el diario USN):
kape.exe --tsource C: --target $LogFile,$MFT,$J --tdest E:\case42\kape
KAPE lee los archivos bloqueados mediante acceso en bruto y conserva la ruta de origen en el árbol de salida. Repite --tsource para cada volumen. Si usas un target compuesto, ábrelo y confirma que incluye $LogFile en lugar de fiarte del nombre.
Velociraptor
Windows.Triage.Targets, del proyecto Velociraptor Triage, adquiere los mismos archivos a escala. Marca sus targets LogFile y MFT en una recolección del servidor o en un recolector offline (Server Artifacts → Build offline collector), y revisa MaxFileSize para que no se omita un $MFT grande.
Las versiones antiguas de Velociraptor incluyen en su lugar el antiguo Windows.KapeFiles.Targets, con los targets $LogFile y $MFT. Puede usar los accessors ntfs, lazy_ntfs y mft; lazy_ntfs es más rápido pero depende de los datos del índice $I30, que no siempre están completos para los archivos de metadatos, así que el artefacto ofrece la opción DontBeLazy para volver al analizador NTFS completo (adquisición masiva de archivos en Velociraptor). Para los archivos de metadatos de NTFS, usa preferiblemente el accessor completo.
FTK Imager
File → Add Evidence Item → Logical Drive, selecciona el volumen, despliega [root], clic derecho sobre $LogFile y $MFT → Export Files. Exporta a una unidad externa. FTK Imager lee el volumen directamente, así que el bloqueo no le afecta.
RawCopy
RawCopy, de Joakim Schicht, acepta un volumen más un número de registro de la MFT en lugar de una ruta. Su readme muestra C:0 para el $MFT; $LogFile es el registro 2:
RawCopy.exe /FileNamePath:C:2 /OutputPath:E:\case42 /OutputName:LogFile_C.bin
RawCopy.exe /FileNamePath:C:0 /OutputPath:E:\case42 /OutputName:MFT_C.bin
Ejecútalo como administrador. Vuelve a llamar a los archivos de salida $LogFile / $MFT o mantén un esquema de nombres claro; los analizadores que emparejan archivos por nombre (incluido el analizador de $LogFile en el navegador) buscan el $LogFile y el $MFT en la misma carpeta.
Equipo apagado o imagen de disco
The Sleuth Kit
icat extrae un archivo por su dirección de metadatos; en NTFS, la dirección es la entrada de la MFT. -o es el desplazamiento en sectores de la partición dentro de la imagen (página de manual de icat):
mmls image.dd # find the NTFS partition start sector
icat -o 2048 image.dd 2 > '$LogFile'
icat -o 2048 image.dd 0 > '$MFT'
ntfs-3g en Linux
ntfscat, de ntfs-3g, acepta un número de inodo con -i (página de manual de ntfscat). Conecta la imagen en solo lectura (por ejemplo con un dispositivo loop y --read-only) y después:
ntfscat -i 2 /dev/loop0p2 > '$LogFile'
ntfscat -i 0 /dev/loop0p2 > '$MFT'
No montes nunca el volumen de la evidencia en lectura-escritura «solo para copiar un archivo». Montarlo escribe en el diario.
Instantáneas de volumen (VSS)
Las instantáneas contienen copias más antiguas de los archivos de metadatos de NTFS, es decir, ventanas más antiguas del $LogFile. Extráelas de cada instantánea con las mismas herramientas de acceso en bruto (o adquiere las instantáneas con tu flujo de creación de imágenes) y analiza cada copia por separado. Etiqueta cada copia con la hora de creación de la instantánea.
Comprueba la copia antes de irte
Una copia en bruto fallida a menudo parece correcta: el archivo existe y tiene el tamaño esperado. Cuatro comprobaciones rápidas:
| Comprobación | Cómo | Mala señal |
|---|---|---|
| Firma | Los 4 primeros bytes | No es RSTR (ni CHKD) |
| Sin relleno de ceros | Mira los primeros 4 KiB | Todo ceros: falló el bloqueo o la lectura dispersa |
| Tamaño | Compáralo con el tamaño del diario en el área de reinicio | Más corto: copia truncada |
| Emparejamiento | $MFT del mismo volumen y del mismo momento | Horas de adquisición distintas |
xxd -l 16 '$LogFile' # expect 52 53 54 52 -> "RSTR"
sha256sum '$LogFile' '$MFT' > hashes.txt
El analizador de $LogFile hace las mismas comprobaciones al cargar los archivos: un archivo que empieza con ceros se indica con «probablemente el archivo estaba bloqueado o escribiéndose al copiarlo», una copia más corta que su tamaño declarado se marca como truncada, se avisa de una página de reinicio CHKD, y un $MFT sin $LogFile en la misma carpeta se explica en lugar de ignorarse en silencio.
Notas sobre la cadena de custodia
- Anota el nombre y la versión de la herramienta, la línea de comandos, el volumen de origen, el destino y la hora de cada copia.
- Calcula el hash en el equipo de adquisición y otra vez en el equipo de análisis.
- Si adquiriste en un sistema en vivo, dilo en el informe: un
$LogFileen vivo es un blanco móvil, y la página más reciente puede existir solo en el área de páginas de cola o rápidas (ver $LogFile 1.1 frente a 2.0: qué cambió en Windows 8).
Siguiente paso
Abre los archivos en el analizador de $LogFile en el navegador —no se sube nada— y sigue cómo analizar un $LogFile de NTFS paso a paso. Para los demás artefactos de la misma colección, el analizador del diario USN, el analizador de Prefetch y las herramientas para imágenes de disco hermanos cubren los siguientes pasos.
Preguntas frecuentes
¿Puedo copiar el $LogFile con el Explorador o con el comando copy?
No. $LogFile es un archivo de metadatos de NTFS que el sistema de archivos mantiene abierto mientras el volumen está montado, y está oculto para las API de archivos normales. Léelo mediante acceso NTFS en bruto (KAPE, Velociraptor, FTK Imager, RawCopy) o desde una imagen con icat o ntfscat.
¿Por qué adquirir el $MFT junto con el $LogFile?
Los registros del diario se refieren a los archivos por su número de entrada de la MFT. Los nombres solo aparecen en el diario cuando un archivo se crea, se renombra o se borra, así que sin el $MFT del mismo volumen muchas rutas quedan incompletas.