Розділи/Файлові системи/Карвінг

Reading time: 10 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Розділи

Жорсткий диск або SSD диск можуть містити різні розділи з метою фізичного розділення даних.
Мінімальна одиниця диска - це сектор (зазвичай складається з 512B). Отже, розмір кожного розділу повинен бути кратним цьому розміру.

MBR (майстер завантажувальний запис)

Він розміщується в першому секторі диска після 446B завантажувального коду. Цей сектор є важливим для вказівки ПК, що і звідки має бути змонтовано розділ.
Він дозволяє до 4 розділів (максимум лише 1 може бути активним/завантажувальним). Однак, якщо вам потрібно більше розділів, ви можете використовувати розширені розділи. Останній байт цього першого сектора - це підпис завантажувального запису 0x55AA. Лише один розділ може бути позначений як активний.
MBR дозволяє макс 2.2TB.

З байтів 440 до 443 MBR ви можете знайти Windows Disk Signature (якщо використовується Windows). Логічна буква диска жорсткого диска залежить від Windows Disk Signature. Зміна цього підпису може завадити Windows завантажитися (інструмент: Active Disk Editor).

Формат

ЗсувДовжинаЕлемент
0 (0x00)446(0x1BE)Завантажувальний код
446 (0x1BE)16 (0x10)Перший розділ
462 (0x1CE)16 (0x10)Другий розділ
478 (0x1DE)16 (0x10)Третій розділ
494 (0x1EE)16 (0x10)Четвертий розділ
510 (0x1FE)2 (0x2)Підпис 0x55 0xAA

Формат запису розділу

ЗсувДовжинаЕлемент
0 (0x00)1 (0x01)Активний прапор (0x80 = завантажувальний)
1 (0x01)1 (0x01)Початкова голівка
2 (0x02)1 (0x01)Початковий сектор (біти 0-5); верхні біти циліндра (6-7)
3 (0x03)1 (0x01)Початковий циліндр найнижчі 8 біт
4 (0x04)1 (0x01)Код типу розділу (0x83 = Linux)
5 (0x05)1 (0x01)Кінцева голівка
6 (0x06)1 (0x01)Кінцевий сектор (біти 0-5); верхні біти циліндра (6-7)
7 (0x07)1 (0x01)Кінцевий циліндр найнижчі 8 біт
8 (0x08)4 (0x04)Сектори перед розділом (little endian)
12 (0x0C)4 (0x04)Сектори в розділі

Щоб змонтувати MBR в Linux, спочатку потрібно отримати початковий зсув (ви можете використовувати fdisk і команду p)

А потім використовуйте наступний код

bash
#Mount MBR in Linux
mount -o ro,loop,offset=<Bytes>
#63x512 = 32256Bytes
mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/

LBA (Логічне блочне адресування)

Логічне блочне адресування (LBA) є поширеною схемою, що використовується для вказівки місця розташування блоків даних, збережених на комп'ютерних носіях, зазвичай на вторинних системах зберігання, таких як жорсткі диски. LBA є особливо простим лінійним адресним методом; блоки розташовані за цілим індексом, при цьому перший блок має LBA 0, другий LBA 1 і так далі.

GPT (GUID Таблиця Розділів)

GUID Таблиця Розділів, відома як GPT, віддається перевага за її покращені можливості в порівнянні з MBR (Основний Завантажувальний Запис). Вона відрізняється своїм глобально унікальним ідентифікатором для розділів, GPT виділяється кількома способами:

  • Місцезнаходження та Розмір: Як GPT, так і MBR починаються з сектора 0. Однак GPT працює на 64 бітах, на відміну від 32 біт MBR.
  • Обмеження Розділів: GPT підтримує до 128 розділів на системах Windows і може вміщувати до 9.4ZB даних.
  • Назви Розділів: Пропонує можливість називати розділи до 36 символів Unicode.

Стійкість Даних та Відновлення:

  • Резервування: На відміну від MBR, GPT не обмежує дані про розділи та завантаження в одному місці. Вона реплікує ці дані по всьому диску, підвищуючи цілісність даних та стійкість.
  • Циклічна Контрольна Сума (CRC): GPT використовує CRC для забезпечення цілісності даних. Вона активно контролює наявність пошкоджень даних, і при виявленні GPT намагається відновити пошкоджені дані з іншого місця на диску.

Захисний MBR (LBA0):

  • GPT підтримує зворотну сумісність через захисний MBR. Ця функція розташована в спадковому просторі MBR, але призначена для запобігання випадковому перезапису дисків GPT старими утилітами на основі MBR, тим самим захищаючи цілісність даних на дисках формату GPT.

https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID_Partition_Table_Scheme.svg/800px-GUID_Partition_Table_Scheme.svg.png

Гібридний MBR (LBA 0 + GPT)

З Вікіпедії

В операційних системах, які підтримують завантаження на основі GPT через BIOS замість EFI, перший сектор також може використовуватися для зберігання першої стадії коду завантажувача. Але модифікований для розпізнавання GPT розділів. Завантажувач у MBR не повинен припускати розмір сектора 512 байт.

Заголовок таблиці розділів (LBA 1)

З Вікіпедії

Заголовок таблиці розділів визначає використовувані блоки на диску. Він також визначає кількість і розмір записів розділів, які складають таблицю розділів (зсуви 80 і 84 в таблиці).

ЗсувДовжинаЗміст
0 (0x00)8 байтПідпис ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h або 0x5452415020494645ULL на машинах з малим порядком байтів)
8 (0x08)4 байтиВерсія 1.0 (00h 00h 01h 00h) для UEFI 2.8
12 (0x0C)4 байтиРозмір заголовка в малому порядку байтів (в байтах, зазвичай 5Ch 00h 00h 00h або 92 байти)
16 (0x10)4 байтиCRC32 заголовка (зсув +0 до розміру заголовка) в малому порядку байтів, з цим полем, обнуленим під час обчислення
20 (0x14)4 байтиЗарезервовано; має бути нулем
24 (0x18)8 байтПоточний LBA (місцезнаходження цієї копії заголовка)
32 (0x20)8 байтРезервний LBA (місцезнаходження іншої копії заголовка)
40 (0x28)8 байтПерший використовуваний LBA для розділів (остання LBA основної таблиці розділів + 1)
48 (0x30)8 байтОстанній використовуваний LBA (перша LBA вторинної таблиці розділів − 1)
56 (0x38)16 байтGUID диска в змішаному порядку байтів
72 (0x48)8 байтПочатковий LBA масиву записів розділів (завжди 2 в основній копії)
80 (0x50)4 байтиКількість записів розділів у масиві
84 (0x54)4 байтиРозмір одного запису розділу (зазвичай 80h або 128)
88 (0x58)4 байтиCRC32 масиву записів розділів у малому порядку байтів
92 (0x5C)*Зарезервовано; має бути нулями для решти блоку (420 байт для розміру сектора 512 байт; але може бути більше з більшими розмірами секторів)

Записи розділів (LBA 2–33)

Формат запису розділу GUID
ЗсувДовжинаЗміст
0 (0x00)16 байтGUID типу розділу (змішаний порядок байтів)
16 (0x10)16 байтУнікальний GUID розділу (змішаний порядок байтів)
32 (0x20)8 байтПерший LBA (малий порядок байтів)
40 (0x28)8 байтОстанній LBA (включно, зазвичай непарний)
48 (0x30)8 байтАтрибути (наприклад, біт 60 позначає тільки для читання)
56 (0x38)72 байтиНазва розділу (36 UTF-16LE кодових одиниць)

Типи Розділів

Більше типів розділів на https://en.wikipedia.org/wiki/GUID_Partition_Table

Інспекція

Після монтування образу дляensics за допомогою ArsenalImageMounter, ви можете перевірити перший сектор за допомогою інструменту Windows Active Disk Editor. На наступному зображенні було виявлено MBR на секторі 0 та інтерпретовано:

Якщо це була таблиця GPT замість MBR, то підпис EFI PART має з'явитися в секторі 1 (який на попередньому зображенні порожній).

Файлові Системи

Список файлових систем Windows

  • FAT12/16: MSDOS, WIN95/98/NT/200
  • FAT32: 95/2000/XP/2003/VISTA/7/8/10
  • ExFAT: 2008/2012/2016/VISTA/7/8/10
  • NTFS: XP/2003/2008/2012/VISTA/7/8/10
  • ReFS: 2012/2016

FAT

Файлова система FAT (Таблиця Розподілу Файлів) спроектована навколо свого основного компонента, таблиці розподілу файлів, розташованої на початку тому. Ця система захищає дані, зберігаючи дві копії таблиці, забезпечуючи цілісність даних, навіть якщо одна з них пошкоджена. Таблиця, разом з кореневою папкою, повинна бути в фіксованому місці, що є критично важливим для процесу запуску системи.

Основною одиницею зберігання файлової системи є кластер, зазвичай 512B, що складається з кількох секторів. FAT еволюціонувала через версії:

  • FAT12, що підтримує 12-бітні адреси кластерів і обробляє до 4078 кластерів (4084 з UNIX).
  • FAT16, що покращує до 16-бітних адрес, тим самим вміщуючи до 65,517 кластерів.
  • FAT32, що далі розвивається з 32-бітними адресами, дозволяючи вражаючі 268,435,456 кластерів на том.

Значним обмеженням для всіх версій FAT є максимальний розмір файлу 4 ГБ, накладений 32-бітним полем, що використовується для зберігання розміру файлу.

Ключові компоненти кореневої директорії, особливо для FAT12 і FAT16, включають:

  • Ім'я Файлу/Папки (до 8 символів)
  • Атрибути
  • Дати створення, модифікації та останнього доступу
  • Адреса FAT таблиці (що вказує на початковий кластер файлу)
  • Розмір Файлу

EXT

Ext2 є найпоширенішою файловою системою для не журналюючих розділів (розділів, які не змінюються часто) таких як розділ завантаження. Ext3/4 є журналюючими і зазвичай використовуються для інших розділів.

Метадані

Деякі файли містять метадані. Ця інформація стосується вмісту файлу, що іноді може бути цікаво аналітику, оскільки в залежності від типу файлу, вона може містити інформацію, таку як:

  • Заголовок
  • Версія MS Office, що використовується
  • Автор
  • Дати створення та останньої модифікації
  • Модель камери
  • GPS координати
  • Інформація про зображення

Ви можете використовувати інструменти, такі як exiftool та Metadiver для отримання метаданих файлу.

Відновлення Видалених Файлів

Логічно Видалені Файли

Як було зазначено раніше, є кілька місць, де файл все ще зберігається після того, як він був "видалений". Це тому, що зазвичай видалення файлу з файлової системи просто позначає його як видалений, але дані не торкаються. Тоді можливо перевірити реєстри файлів (такі як MFT) і знайти видалені файли.

Крім того, ОС зазвичай зберігає багато інформації про зміни файлової системи та резервні копії, тому можливо спробувати використовувати їх для відновлення файлу або якомога більшої кількості інформації.

File/Data Carving & Recovery Tools

Файлове Вирізання

Файлове вирізання є технікою, яка намагається знайти файли в масиві даних. Є 3 основні способи, якими працюють такі інструменти: На основі заголовків і футерів типів файлів, на основі структур типів файлів і на основі вмісту самого файлу.

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

Є кілька інструментів, які ви можете використовувати для файлового вирізання, вказуючи типи файлів, які ви хочете шукати.

File/Data Carving & Recovery Tools

Вирізання Потоку Даних C

Вирізання потоку даних подібне до файлового вирізання, але замість того, щоб шукати цілі файли, воно шукає цікаві фрагменти інформації.
Наприклад, замість того, щоб шукати повний файл, що містить зафіксовані URL-адреси, ця техніка шукатиме URL-адреси.

File/Data Carving & Recovery Tools

Безпечне Видалення

Очевидно, що існують способи "надійно" видалити файли та частину журналів про них. Наприклад, можливо перезаписати вміст файлу сміттєвими даними кілька разів, а потім видалити журнали з $MFT та $LOGFILE про файл, і видалити Копії Тіней Томів.
Ви можете помітити, що навіть виконуючи цю дію, можуть бути інші частини, де існування файлу все ще зафіксовано, і це правда, і частина роботи фахівця з судової експертизи полягає в тому, щоб їх знайти.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks