Bootsektor ($Boot)¶
Was $Boot ist¶
$Boot ist MFT-Eintrag 7 jedes NTFS-Volumes: die ersten 8 KiB des Volumes. Sein erster Sektor, der
Volume Boot Record, enthält den BIOS-Parameterblock, der das Dateisystem beschreibt:
- die Sektor- und Clustergrößen, die Anzahl der Sektoren im Volume und die verborgenen Sektoren (die Sektoren auf dem Datenträger vor dem Volume, also die Stelle, an der seine Partition beginnt);
- wo
$MFTund$MFTMirrbeginnen, sowie die Größen der FILE- und INDX-Datensätze; - die 64-Bit-Volume-Seriennummer, die beim Formatieren des Volumes festgelegt wird.
Der Rest des ersten Sektors und die 15 darauf folgenden Sektoren enthalten den Bootcode, der Windows lädt.
Die unteren 32 Bit der Seriennummer sind das, was Windows als XXXX-XXXX anzeigt (vol, dir), und das, was
LNK-Verknüpfungen, Jump Lists und Prefetch über das
Volume aufzeichnen, auf dem sich eine Datei befand. $Boot verknüpft diese Datensätze mit einem Volume eines gesicherten Hosts.
Bestmögliche Schlussfolgerung: Eine Volume-Seriennummer aus LNK, Jump List oder Prefetch,
die dem VolumeSerialNumber eines $Boot entspricht, verweist auf dieses Volume oder auf ein anderes Volume, das
dieselbe Seriennummer erhalten hat oder mit ihr kopiert wurde. Seriennummern lassen sich ändern und sind über Hosts hinweg nicht
eindeutig.
Speicherort und Sicherung¶
Sichern Sie die Datei mit einem forensischen Tool mit Rohzugriff oder lesen Sie den ersten Sektor eines Volume-Images: Beides sind dieselben Bytes. Juntei liest jede Datei, die mit einem NTFS-Bootsektor beginnt; ein Volume-Image funktioniert daher als Eingabe. Ein Datenträger-Image beginnt stattdessen mit der Partitionstabelle; übergeben Sie Juntei das Volume der Partition.
Hinweise für die Analyse¶
- Die Seriennummer ändert sich, wenn das Volume formatiert wird. Eine LNK-Datei, deren Seriennummer zu keinem aktuellen Volume passt, kann auf Wechselmedien, den Server einer Netzwerkfreigabe oder ein inzwischen formatiertes Volume verweisen.
- Der Bootcode ist auf Volumes, die von derselben Windows-Version formatiert wurden, gleich: Er ist identisch in den
$Boot-Dateien von Windows 10, 11 und Server 2012 R2 im DFIR Artifact Museum. Ein Volume-Boot-Record-Bootkit verändert ihn oder das Feld der verborgenen Sektoren, mit dem der Bootcode den Rest von$Bootfindet. Vergleichen SieBootCodeSHA256,JumpInstructionundHiddenSectorsmit anderen Hosts und mit der Partitionstabelle, bevor Sie Schlüsse ziehen: Auch ein Bootmanager oder Verschlüsselungssoftware kann den Bootcode verändern. - Ein Image eines mit BitLocker verschlüsselten Volumes beginnt mit dem eigenen Bootsektor von BitLocker (OEM-ID
-FVE-FS-). Mit-fübergeben, meldet Juntei ihn, undProblemsgibt an, dass es kein NTFS ist; der NTFS-Bootsektor befindet sich in den verschlüsselten Daten. Ein vom entsperrten Volume gesicherter$Bootist der NTFS-Bootsektor. Problemslistet erkannte strukturelle Inkonsistenzen und Kürzungen auf, statt einen vollständigen Test zu liefern, ob Windows das Volume einbinden könnte. Verwenden Sie es, um durch Carving gewonnene Sektoren und Kopien zu beurteilen, nicht als eigenständigen Angriffsbefund. Der Hash des Bootcodes schließt den anfänglichen Sprung, den BIOS-Parameterblock und die Endsignatur aus; prüfen Sie auch diese Felder.
Mit Juntei parsen¶
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
Die Zusammenfassung listet für jeden Bootsektor die Volume-Seriennummer (wie Windows sie anzeigt und wie LNK- und
Prefetch-Felder sie anzeigen), die Größe, die Clustergröße und den $MFT-Cluster auf. Werden mehrere Hosts geparst,
gruppiert sie diese nach dem Hash des Bootcodes, sodass ein Volume, dessen Bootcode von den anderen abweicht, auffällt.
CSV-Ausgabefelder¶
| Feld | Interpretation |
|---|---|
SourcePath |
Eingabedatei. |
VolumeSerialNumber |
Die 32-Bit-Seriennummer, wie die Ausgabe von LNK, Jump List und Prefetch sie zeigt (180B1E67). Windows zeigt sie als 180B-1E67. |
VolumeSerialNumber64 |
Die vollständige 64-Bit-Seriennummer. |
OEM-ID |
NTFS auf einem NTFS-Volume. |
BytesPerSector, SectorsPerCluster, ClusterSize |
Die Geometrie des Volumes. Mehr als 128 Sektoren pro Cluster werden als Zweierpotenz gespeichert und hier dekodiert. Leer, wenn ungültig. |
TotalSectors, VolumeSize |
Sektoren im Volume und ihre Größe in Bytes, ohne die Kopie des Bootsektors an seinem Ende. |
HiddenSectors |
Sektoren auf dem Datenträger vor dem Volume: wo seine Partition beginnt. |
MFT-Cluster, MFT-Offset |
Wo $MFT beginnt, in Clustern und in Bytes ab dem Anfang des Volumes. |
MFT-MirrorCluster, MFT-MirrorOffset |
Wo $MFTMirr beginnt. |
FileRecordSize, IndexRecordSize |
Bytes pro FILE-Datensatz (meist 1.024) und pro INDX-Datensatz (meist 4.096). |
MediaDescriptor |
F8 für eine Festplatte. |
JumpInstruction |
Die ersten drei Bytes (EB 52 90): ein Sprung über den BIOS-Parameterblock zum Bootcode. |
EndSignature |
55 AA am Ende eines gültigen Bootsektors. |
BootCodeSHA256 |
SHA-256 des Bootcodes: die Bytes 0x54 bis 0x1FD des ersten Sektors und der Rest der 8 KiB. |
Problems |
Was Windows nicht einbinden würde: eine andere OEM-ID als NTFS, kein 55 AA, ungültige Größen, gesetzte FAT-Felder, die NTFS auf null hält, $MFT hinter dem Ende des Volumes; sowie eine Datei, die kürzer als 8 KiB ist. |
JSON/JSONL haben dieselben Felder und Namen, mit Zahlen als Zahlen, null für unbekannte Werte und
Problems als Liste.
Untersuchungsstrategie¶
- Stellen Sie das
VolumeSerialNumberjedes Hosts den Volume-Seriennummern seiner LNK-Dateien, Jump Lists und Prefetch-Dateien gegenüber: Diejenigen, die zu keinem gesicherten Volume passen, gehören zu anderen Volumes (USB- Laufwerke, Freigaben, inzwischen formatierte Volumes). - Suchen Sie die übrigen Seriennummern in der Ausgabe zu USB-Geräten, die die Volume- Seriennummern eingebundener Wechselvolumes auflistet.
- Vergleichen Sie
BootCodeSHA256undHiddenSectorsüber Hosts hinweg. Untersuchen Sie abweichenden Bootcode mit einem Disassembler und der Partitionstabelle des Datenträgers, und suchen Sie nach bootbezogenen Einträgen in Ereignisprotokollen. - Verwenden Sie
MFT-OffsetundClusterSize, um$MFTin einem Volume-Image zu finden.
Weitere Informationen¶
- Microsoft: NTFS-Übersicht
- libfsntfs: NTFS-Formatdokumentation (der Volume-Header)
- The Sleuth Kit: fsstat
- ys-ntfs-parser (dessen
boot-Crate)