hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving
2024-07-18 22:16:42 +00:00
..
file-data-carving-recovery-tools.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:16:42 +00:00
file-data-carving-tools.md Translated ['1911-pentesting-fox.md', '6881-udp-pentesting-bittorrent.md 2024-07-18 19:01:49 +00:00
README.md Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo 2024-07-18 22:16:42 +00:00

Partitions/File Systems/Carving

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Partitions

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

MBR (master Boot Record)

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

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

Format

Offset Length Item
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

Partition Record Format

Offset Length Item
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)

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

#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 233)

Формат запису розділу 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) і знайти видалені файли.

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

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

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

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

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

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

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

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

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

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

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

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

Посилання

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}