Перейти до змісту

Завантажувальний сектор ($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, вказує на цей том або на інший том, якому було надано той самий серійний номер або який було скопійовано разом із ним. Серійні номери можна змінити, і вони не є унікальними між хостами.

Розташування та збирання

C:\$Boot          (MFT entry 7; the first 8 KiB of the volume)

Збирайте його криміналістичним інструментом із підтримкою необробленого доступу або прочитайте перший сектор образу тому: це ті самі байти. Juntei зчитує будь-який файл, що починається із завантажувального сектора NTFS, тож образ тому підходить як вхідні дані. Натомість образ диска починається з таблиці розділів; передайте Juntei том розділу.

Застереження для аналітика

  • Серійний номер змінюється під час форматування тому. Файл LNK, серійний номер якого не збігається з жодним поточним томом, може вказувати на знімний носій, сервер мережевої спільної папки або том, відформатований пізніше.
  • Завантажувальний код однаковий на томах, відформатованих тією самою Windows: він ідентичний у файлах $Boot Windows 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 у вигляді списку.

Стратегія розслідування

  1. Розташуйте VolumeSerialNumber кожного хоста поруч із серійними номерами томів його файлів LNK, Jump Lists і файлів Prefetch: ті, що не збігаються з жодним зібраним томом, належать іншим томам (USB-накопичувачам, спільним папкам, томам, відформатованим пізніше).
  2. Шукайте інші серійні номери у виводі для пристроїв USB, який перелічує серійні номери змонтованих знімних томів.
  3. Порівнюйте BootCodeSHA256 і HiddenSectors між хостами. Досліджуйте відмінний завантажувальний код за допомогою дизасемблера й таблиці розділів диска та шукайте пов'язані із завантаженням записи журналів подій.
  4. Використовуйте MFT-Offset і ClusterSize, щоб знайти $MFT в образі тому.

Додаткові відомості