Secteur de démarrage ($Boot)¶
Qu'est-ce que $Boot¶
$Boot est l'entrée MFT 7 de chaque volume NTFS : les 8 premiers Kio du volume. Son premier secteur, le
secteur de démarrage du volume (volume boot record), contient le bloc de paramètres du BIOS (BIOS parameter block) qui décrit le système de fichiers :
- la taille des secteurs et des clusters, le nombre de secteurs du volume, et les secteurs cachés (les secteurs du disque situés avant le volume, c'est-à-dire l'endroit où commence sa partition) ;
- l'emplacement de début du
$MFTet du$MFTMirr, ainsi que la taille des enregistrements FILE et INDX ; - le numéro de série du volume sur 64 bits, défini lors du formatage du volume.
Le reste du premier secteur et les 15 secteurs qui le suivent contiennent le code de démarrage qui charge Windows.
Les 32 bits de poids faible du numéro de série correspondent à ce que Windows affiche sous la forme XXXX-XXXX (vol, dir) et à ce que
les raccourcis LNK, les Jump Lists et Prefetch enregistrent du
volume sur lequel se trouvait un fichier. $Boot relie ces enregistrements à un volume d'un hôte collecté.
Meilleure conclusion : un numéro de série de volume LNK, Jump List ou Prefetch
égal au VolumeSerialNumber d'un $Boot désigne ce volume, ou un autre volume auquel on a
attribué le même numéro de série ou qui a été copié avec celui-ci. Les numéros de série peuvent être modifiés et ne sont pas
uniques d'un hôte à l'autre.
Emplacement et collecte¶
Collectez-le avec un outil forensique capable d'un accès brut, ou lisez le premier secteur d'une image de volume : il s'agit des mêmes octets. Juntei lit tout fichier commençant par un secteur de démarrage NTFS ; une image de volume peut donc servir d'entrée. Une image de disque commence en revanche par la table de partitions ; fournissez à Juntei le volume de la partition.
Précautions d'analyse¶
- Le numéro de série change lors du formatage du volume. Un fichier LNK dont le numéro de série ne correspond à aucun volume actuel peut désigner un support amovible, le serveur d'un partage réseau ou un volume formaté depuis.
- Le code de démarrage est identique sur les volumes formatés par la même version de Windows : il est identique dans les fichiers
$Bootde Windows 10, 11 et Server 2012 R2 du DFIR Artifact Museum. Un bootkit de secteur de démarrage de volume le modifie, ou modifie le champ des secteurs cachés, que le code de démarrage utilise pour trouver le reste de$Boot. ComparezBootCodeSHA256,JumpInstructionetHiddenSectorsavec d'autres hôtes et avec la table de partitions avant de conclure quoi que ce soit : un gestionnaire de démarrage ou un logiciel de chiffrement peut aussi modifier le code de démarrage. - Une image d'un volume chiffré par BitLocker commence par le secteur de démarrage propre à BitLocker (identifiant OEM
-FVE-FS-). Lorsqu'elle est fournie avec-f, Juntei la signale, etProblemsindique qu'il ne s'agit pas de NTFS ; le secteur de démarrage NTFS se trouve dans les données chiffrées. Un$Bootcollecté depuis le volume déverrouillé est celui de NTFS. Problemsliste les incohérences structurelles et les troncatures reconnues, sans constituer un test complet de montabilité par Windows. Utilisez-le pour évaluer les secteurs récupérés par carving et les copies, et non comme une constatation d'attaque en soi. L'empreinte du code de démarrage exclut le saut initial, le bloc de paramètres du BIOS et la signature de fin ; examinez également ces champs.
Analyser avec 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
Le résumé liste, pour chaque secteur de démarrage, le numéro de série du volume (tel que Windows l'affiche, et tel que les champs LNK et
Prefetch l'affichent), la taille, la taille de cluster et le cluster du $MFT. Lorsque plusieurs hôtes sont analysés, il
les regroupe par empreinte du code de démarrage, de sorte qu'un volume dont le code de démarrage diffère des autres ressorte.
Champs de sortie CSV¶
| Champ | Interprétation |
|---|---|
SourcePath |
Fichier d'entrée. |
VolumeSerialNumber |
Le numéro de série sur 32 bits, tel que l'affichent les sorties LNK, Jump List et Prefetch (180B1E67). Windows l'affiche sous la forme 180B-1E67. |
VolumeSerialNumber64 |
Le numéro de série complet sur 64 bits. |
OEM-ID |
NTFS sur un volume NTFS. |
BytesPerSector, SectorsPerCluster, ClusterSize |
La géométrie du volume. Un nombre de secteurs par cluster supérieur à 128 est enregistré sous forme de puissance de deux, décodée ici. Vide lorsqu'il n'est pas valide. |
TotalSectors, VolumeSize |
Nombre de secteurs du volume et leur taille en octets, sans la copie du secteur de démarrage située à sa fin. |
HiddenSectors |
Secteurs du disque situés avant le volume : l'endroit où commence sa partition. |
MFT-Cluster, MFT-Offset |
L'emplacement de début du $MFT, en clusters et en octets depuis le début du volume. |
MFT-MirrorCluster, MFT-MirrorOffset |
L'emplacement de début du $MFTMirr. |
FileRecordSize, IndexRecordSize |
Octets par enregistrement FILE (généralement 1 024) et par enregistrement INDX (généralement 4 096). |
MediaDescriptor |
F8 pour un disque dur. |
JumpInstruction |
Les trois premiers octets (EB 52 90) : un saut par-dessus le bloc de paramètres du BIOS vers le code de démarrage. |
EndSignature |
55 AA à la fin d'un secteur de démarrage valide. |
BootCodeSHA256 |
SHA-256 du code de démarrage : les octets 0x54 à 0x1FD du premier secteur et le reste des 8 Kio. |
Problems |
Ce que Windows ne monterait pas : un identifiant OEM autre que NTFS, absence de 55 AA, tailles non valides, champs FAT que NTFS maintient à zéro mais qui sont renseignés, $MFT au-delà de la fin du volume ; ainsi qu'un fichier de moins de 8 Kio. |
Les sorties JSON/JSONL comportent les mêmes champs et noms, avec les nombres sous forme numérique, null pour les valeurs inconnues et
Problems sous forme de liste.
Stratégie d'investigation¶
- Placez le
VolumeSerialNumberde chaque hôte à côté des numéros de série de volume de ses fichiers LNK, Jump Lists et fichiers Prefetch : ceux qui ne correspondent à aucun volume collecté sont d'autres volumes (clés USB, partages, volumes formatés depuis). - Recherchez les autres numéros de série dans la sortie des périphériques USB, qui liste les numéros de série de volume des volumes amovibles montés.
- Comparez
BootCodeSHA256etHiddenSectorsd'un hôte à l'autre. Examinez un code de démarrage divergent avec un désassembleur et la table de partitions du disque, et recherchez les entrées des journaux d'événements liées au démarrage. - Utilisez
MFT-OffsetetClusterSizepour trouver le$MFTdans une image de volume.
Plus de détails¶
- Microsoft : vue d'ensemble de NTFS
- libfsntfs : documentation du format NTFS (l'en-tête de volume)
- The Sleuth Kit : fsstat
- ys-ntfs-parser (sa crate
boot)