Sector de arranque ($Boot)¶
Qué es $Boot¶
$Boot es la entrada 7 de la MFT de todo volumen NTFS: los primeros 8 KiB del volumen. Su primer sector, el
registro de arranque del volumen (VBR), contiene el bloque de parámetros del BIOS que describe el sistema de archivos:
- los tamaños de sector y de clúster, el número de sectores del volumen y los sectores ocultos (los sectores del disco anteriores al volumen, es decir, dónde empieza su partición);
- dónde empiezan la
$MFTy la$MFTMirr, y los tamaños de los registros FILE e INDX; - el número de serie del volumen de 64 bits, establecido al formatear el volumen.
El resto del primer sector y los 15 sectores siguientes contienen el código de arranque que carga Windows.
Los 32 bits inferiores del número de serie son lo que Windows muestra como XXXX-XXXX (vol, dir) y lo que
los accesos directos LNK, las Jump Lists y Prefetch registran del
volumen en el que estaba un archivo. $Boot vincula esos registros con un volumen de un host recopilado.
Mejor conclusión: un número de serie de volumen de LNK, Jump List o Prefetch
igual al VolumeSerialNumber de un $Boot apunta a ese volumen, o a otro volumen al que se
asignó el mismo número de serie o que se copió con él. Los números de serie se pueden cambiar y no son
únicos entre hosts.
Ubicación y recopilación¶
Recopílelo con una herramienta forense con acceso sin procesar (raw), o lea el primer sector de una imagen de volumen: ambos son los mismos bytes. Juntei lee cualquier archivo que empiece por un sector de arranque NTFS, por lo que una imagen de volumen sirve como entrada. Una imagen de disco, en cambio, empieza por la tabla de particiones; proporcione a Juntei el volumen de la partición.
Precauciones para el analista¶
- El número de serie cambia al formatear el volumen. Un archivo LNK cuyo número de serie no coincide con ningún volumen actual puede apuntar a un medio extraíble, al servidor de un recurso compartido de red o a un volumen formateado después.
- El código de arranque es el mismo en los volúmenes formateados por la misma versión de Windows: es idéntico en los
archivos
$Bootde Windows 10, 11 y Server 2012 R2 del DFIR Artifact Museum. Un bootkit del registro de arranque del volumen lo modifica, o modifica el campo de sectores ocultos, que el código de arranque utiliza para encontrar el resto de$Boot. CompareBootCodeSHA256,JumpInstructionyHiddenSectorscon otros hosts y con la tabla de particiones antes de concluir nada: un gestor de arranque o un software de cifrado también pueden modificar el código de arranque. - Una imagen de un volumen cifrado con BitLocker empieza por el propio sector de arranque de BitLocker (OEM ID
-FVE-FS-). Si se proporciona con-f, Juntei lo informa, yProblemsindica que no es NTFS; el sector de arranque NTFS está en los datos cifrados. Un$Bootrecopilado del volumen desbloqueado es el de NTFS. Problemsenumera las incoherencias estructurales y los truncamientos reconocidos, en lugar de ofrecer una prueba completa de si Windows podría montar el volumen. Utilícelo para evaluar sectores recuperados (carving) y copias, no como un hallazgo de ataque por sí mismo. El hash del código de arranque excluye el salto inicial, el bloque de parámetros del BIOS y la firma final; inspeccione también esos campos.
Análisis con Juntei¶
Usage: juntei parse-ntfs boot <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find $Boot files (named $Boot, or starting with an NTFS boot sector)
-f, --file <FILE> Parse one $Boot file, or an NTFS volume image (its first sector)
Output:
-o, --output <FILE> Save every boot sector
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-ntfs boot -f '$Boot'
juntei parse-ntfs boot -d evidence/ -o boot.csv
juntei parse-ntfs boot -f volume.dd -t json
El resumen enumera el número de serie del volumen de cada sector de arranque (tal como lo muestra Windows y tal como lo muestran los campos de LNK y
Prefetch), el tamaño, el tamaño de clúster y el clúster de la $MFT. Cuando se analizan varios hosts, los
agrupa por hash del código de arranque, de modo que destaque un volumen cuyo código de arranque difiera del de los demás.
Campos de salida CSV¶
| Campo | Interpretación |
|---|---|
SourcePath |
Archivo de entrada. |
VolumeSerialNumber |
Número de serie de 32 bits, tal como lo muestra la salida de LNK, Jump List y Prefetch (180B1E67). Windows lo muestra como 180B-1E67. |
VolumeSerialNumber64 |
Número de serie completo de 64 bits. |
OEM-ID |
NTFS en un volumen NTFS. |
BytesPerSector, SectorsPerCluster, ClusterSize |
Geometría del volumen. Los valores de sectores por clúster superiores a 128 se registran como potencia de dos y aquí se decodifican. Vacío cuando no es válido. |
TotalSectors, VolumeSize |
Sectores del volumen y su tamaño en bytes, sin la copia del sector de arranque situada al final. |
HiddenSectors |
Sectores del disco anteriores al volumen: dónde empieza su partición. |
MFT-Cluster, MFT-Offset |
Dónde empieza la $MFT, en clústeres y en bytes desde el inicio del volumen. |
MFT-MirrorCluster, MFT-MirrorOffset |
Dónde empieza la $MFTMirr. |
FileRecordSize, IndexRecordSize |
Bytes por registro FILE (normalmente 1024) y por registro INDX (normalmente 4096). |
MediaDescriptor |
F8 para un disco duro. |
JumpInstruction |
Los tres primeros bytes (EB 52 90): un salto por encima del bloque de parámetros del BIOS hasta el código de arranque. |
EndSignature |
55 AA al final de un sector de arranque válido. |
BootCodeSHA256 |
SHA-256 del código de arranque: los bytes 0x54 a 0x1FD del primer sector y el resto de los 8 KiB. |
Problems |
Lo que impediría que Windows montara el volumen: un OEM ID distinto de NTFS, la ausencia de 55 AA, tamaños no válidos, campos FAT que NTFS mantiene a cero con valor, la $MFT más allá del final del volumen; y un archivo de menos de 8 KiB. |
JSON/JSONL contienen los mismos campos con los mismos nombres, con los números como números, null para los valores desconocidos y
Problems como lista.
Estrategia de investigación¶
- Coloque el
VolumeSerialNumberde cada host junto a los números de serie de volumen de sus archivos LNK, Jump Lists y archivos Prefetch: los que no coinciden con ningún volumen recopilado son otros volúmenes (unidades USB, recursos compartidos, volúmenes formateados después). - Busque los demás números de serie en la salida de dispositivos USB, que enumera los números de serie de los volúmenes extraíbles montados.
- Compare
BootCodeSHA256yHiddenSectorsentre hosts. Investigue un código de arranque distinto con un desensamblador y la tabla de particiones del disco, y busque entradas de los registros de eventos relacionadas con el arranque. - Utilice
MFT-OffsetyClusterSizepara encontrar la$MFTen una imagen de volumen.
Más información¶
- Microsoft: información general sobre NTFS
- libfsntfs: documentación del formato NTFS (el encabezado del volumen)
- The Sleuth Kit: fsstat
- ys-ntfs-parser (su crate
boot)