Завантажувальний сектор ($Boot)¶
Що таке $Boot¶
$Boot — це запис MFT 7 кожного тому NTFS: перші 8 КіБ тому. Його перший сектор,
завантажувальний запис тому (volume boot record), містить блок параметрів BIOS, який описує файлову систему:
- розміри сектора та кластера, кількість секторів у томі та приховані сектори (сектори на диску перед томом, тобто місце, де починається його розділ);
- місце початку
$MFTі$MFTMirr, а також розміри записів FILE та INDX; - 64-бітний серійний номер тому, який встановлюється під час форматування тому.
Решта першого сектора та 15 секторів після нього містять завантажувальний код, який завантажує Windows.
Молодші 32 біти серійного номера — це те, що Windows показує як XXXX-XXXX (vol, dir), і те, що
ярлики LNK, Jump Lists і Prefetch записують про
том, на якому був файл. $Boot пов'язує ці записи з томом зібраного хоста.
Найобґрунтованіший висновок: серійний номер тому в LNK, Jump List або Prefetch,
що дорівнює VolumeSerialNumber у $Boot, вказує на цей том або на інший том, якому
було надано той самий серійний номер або який було скопійовано разом із ним. Серійні номери можна змінити, і вони не є
унікальними між хостами.
Розташування та збирання¶
Збирайте його криміналістичним інструментом із підтримкою необробленого доступу або прочитайте перший сектор образу тому: це ті самі байти. Juntei зчитує будь-який файл, що починається із завантажувального сектора NTFS, тож образ тому підходить як вхідні дані. Натомість образ диска починається з таблиці розділів; передайте Juntei том розділу.
Застереження для аналітика¶
- Серійний номер змінюється під час форматування тому. Файл LNK, серійний номер якого не збігається з жодним поточним томом, може вказувати на знімний носій, сервер мережевої спільної папки або том, відформатований пізніше.
- Завантажувальний код однаковий на томах, відформатованих тією самою Windows: він ідентичний у файлах
$BootWindows 10, 11 і Server 2012 R2 з DFIR Artifact Museum. Буткіт завантажувального запису тому змінює його або поле прихованих секторів, яке завантажувальний код використовує, щоб знайти решту$Boot. ПорівнюйтеBootCodeSHA256,JumpInstructionіHiddenSectorsз іншими хостами та з таблицею розділів, перш ніж робити будь-які висновки: менеджер завантаження або програмне забезпечення для шифрування також можуть змінювати завантажувальний код. - Образ тому, зашифрованого BitLocker, починається з власного завантажувального сектора BitLocker (OEM ID
-FVE-FS-). Якщо його передано з-f, Juntei повідомляє про нього, аProblemsвказує, що це не NTFS; завантажувальний сектор NTFS міститься в зашифрованих даних.$Boot, зібраний з розблокованого тому, є сектором NTFS. Problemsперелічує розпізнані структурні невідповідності та усічення, а не виконує повну перевірку можливості монтування в Windows. Використовуйте це поле для оцінки вирізаних секторів і копій, а не як самостійну ознаку атаки. Хеш завантажувального коду не охоплює початковий перехід, блок параметрів BIOS і кінцеву сигнатуру; перевіряйте також ці поля.
Аналіз за допомогою 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
Підсумок перелічує для кожного завантажувального сектора серійний номер тому (так, як його показує Windows, і так, як його показують поля LNK і
Prefetch), розмір, розмір кластера та кластер $MFT. Якщо розібрано кілька хостів, він
групує їх за хешем завантажувального коду, щоб том, завантажувальний код якого відрізняється від інших, було помітно.
Поля виводу CSV¶
| Поле | Інтерпретація |
|---|---|
SourcePath |
Вхідний файл. |
VolumeSerialNumber |
32-бітний серійний номер у тому вигляді, як його показує вивід LNK, Jump List і Prefetch (180B1E67). Windows показує його як 180B-1E67. |
VolumeSerialNumber64 |
Повний 64-бітний серійний номер. |
OEM-ID |
NTFS на томі NTFS. |
BytesPerSector, SectorsPerCluster, ClusterSize |
Геометрія тому. Кількість секторів на кластер понад 128 записується як степінь двійки, тут вона декодована. Порожнє, якщо значення неприпустиме. |
TotalSectors, VolumeSize |
Кількість секторів у томі та їхній розмір у байтах без копії завантажувального сектора в його кінці. |
HiddenSectors |
Сектори на диску перед томом: місце, де починається його розділ. |
MFT-Cluster, MFT-Offset |
Місце початку $MFT у кластерах і в байтах від початку тому. |
MFT-MirrorCluster, MFT-MirrorOffset |
Місце початку $MFTMirr. |
FileRecordSize, IndexRecordSize |
Кількість байтів на запис FILE (зазвичай 1 024) і на запис INDX (зазвичай 4 096). |
MediaDescriptor |
F8 для жорсткого диска. |
JumpInstruction |
Перші три байти (EB 52 90): перехід через блок параметрів BIOS до завантажувального коду. |
EndSignature |
55 AA у кінці дійсного завантажувального сектора. |
BootCodeSHA256 |
SHA-256 завантажувального коду: байти першого сектора з 0x54 по 0x1FD і решта 8 КіБ. |
Problems |
Те, що завадило б Windows змонтувати том: OEM ID, відмінний від NTFS, відсутність 55 AA, неприпустимі розміри, заповнені поля FAT, які NTFS тримає нульовими, $MFT за межами кінця тому; а також файл, коротший за 8 КіБ. |
JSON/JSONL мають ті самі поля та назви, з числами як числами, null для невідомих значень і
Problems у вигляді списку.
Стратегія розслідування¶
- Розташуйте
VolumeSerialNumberкожного хоста поруч із серійними номерами томів його файлів LNK, Jump Lists і файлів Prefetch: ті, що не збігаються з жодним зібраним томом, належать іншим томам (USB-накопичувачам, спільним папкам, томам, відформатованим пізніше). - Шукайте інші серійні номери у виводі для пристроїв USB, який перелічує серійні номери змонтованих знімних томів.
- Порівнюйте
BootCodeSHA256іHiddenSectorsміж хостами. Досліджуйте відмінний завантажувальний код за допомогою дизасемблера й таблиці розділів диска та шукайте пов'язані із завантаженням записи журналів подій. - Використовуйте
MFT-OffsetіClusterSize, щоб знайти$MFTв образі тому.
Додаткові відомості¶
- Microsoft: огляд NTFS
- libfsntfs: документація формату NTFS (заголовок тому)
- The Sleuth Kit: fsstat
- ys-ntfs-parser (його крейт
boot)