The project has been funded by the European Commission. The Education, Audiovisual and Culture Executive program (EACEA), TEMPUS IV. The content of this presentation reflects the opinion of the author.
Аналіз файлової системи Ext Основи цифрової криміналістики
Введення в файлову систему
2
Розмір блоку може бути різним (кратним розміру сектора (512 байт). Це залежить від типу файлової системи.
Ext2 — 1Кb, 2Кb, 4Кb, 8Кb
Ext3 — 1Кb, 2Кb, 4Кb, 8Кb
Ext4 — від 1Кb до 64Кb
Блок (Ext) = кластер (FAT, NTFS)
Структура файлової системи
4
Структура файлової системи
…
Зарезервована частина(1024 B)
Група 0
Група 1
Група 2
Група 3
Група 4
Група 5
Група n
Група n-1
Група n-2
Усі блоки розділу Ext об'єднані в групи блоків.
Це позитивно впливає на операції читання/запису, оскільки зменшує час читання/запису для великих обсягів даних.
Усі групи блоків мають однаковий розмір. Винятком може бути остання група блоків.
Ці групи розташовані рядами, одна за одною.
Блоки всередині групи нумеруються послідовно, починаючи з 0. Нумерація блоків у файловій системі від початку до кінця
Структура файлової системи
команда mke2fs
Для цього прикладу:
Розмір блоку 4096 байт.
800 груп блоків 32768 блоків у групі (8 * 4096).
Також видно блоки, в яких зберігаються резервні копії суперблоку.
У системі UFS, на основі якої розроблено ExtX, блоки розбиті на фрагменти. Код ExtX для Linux не підтримує цей поділ, хоча в суперблоку є поле, в якому можна зберігати розмір фрагмента.
Структура групи блоків
Суперблок
(backup суперблока)
Дескриптор групи блоків
Карта блоків
Карта
Inode
Блоки даних
. . .
Таблиця inode
. . .
Кожна група блоків містить блоки з такими структурами:
Суперблок (необов'язково): копія суперблоку
Дескриптор групи блоків: розташування структур групи блоків
Карта використання блоків: статус розподілу блоку
Карта використання Inode: статус розподілу Inode
Таблиця Inode: Інформація про Inode – метадані файлу
Блоки даних: дані файлу.
Структура файлової системи
• загальну кількість блоків та inode у файловій системі,
• кількість вільних блоків та inode у файловій системі,
• розмір блоку файлової системи,
• кількість блоків та inode у файловій системі, груп блоків,
• розмір inode,
• ідентифікатор файлової системи (магічне число 0xEF53 для сімейства файлових систем ext),
• дата останньої перевірки файлової системи,
• кількість зроблених монтувань
8
Суперблок
9
команда dumpe2fs
Суперблок
10
Суперблок
команда dumpe2fs
команда dumpe2fs
Суперблок
Від цілісності суперблока безпосередньо залежить цілісність файлової системи. Операційна система створює кілька резервних копій суперблоку на випадок пошкодження розділу. Ця копія суперблоку містить інформацію про те, в яких блоках міститься резервна копія суперблоку.
12
Дескриптор групи блоків
Таблиця дескрипторів груп — це список структур даних, які називаються дескрипторами груп; Цей список зберігається в блоці файлової системи, що йде відразу за суперблоком. У таблиці є запис для кожної групи блоків у системі, і кожен запис містить інформацію про певну групу. Таблиця складається з 32-байтових записів, представлених у табл. 1.
Таблиця 1. Структура даних записів у таблиці дескриптора групи
Байти | Опис | Потреба для криміналістики |
0-3 | Початкова адреса бітової карти блоків | Так |
4-7 | Початкова адреса бітової карти Inodes | Так |
8-11 | Стартова адреса таблиці Inode | Так |
12-13 | Кількість вільних блоків у групі | Ні |
14-15 | Кількість вільних Inodes в групі | Ні |
16-17 | Кількість каталогів у групі | Ні |
18-31 | Не використовується | Ні |
Дескриптор групи блоків
Щоб отримати вміст таблиці, скористайтеся командою dcat:
Байти 0-3 вказують на те, що бітова карта inode знаходиться в блоці 2
Байти 4-7 вказують на те, що бітова карта inode знаходиться в блоці 3
Байти 8-11 вказують на те, що бітова карта inode знаходиться в блоці 4
Група на цьому зображенні складається з 32 768 блоків; це означає, що 4096 байт (32768/8), тобто один блок, необхідний для зберігання растрового зображення блоку. Група містить 16 288 Inode; отже, бітова карта Inodes потребуватиме 2036 байт (16288/8). Таблиця Inodes містить 16 288 записів по 128 байт кожна, що становить 2 084 864 байт. З розміром блоку 4096 байт таблиця Inode займатиме 509 блоків від блоку 4 до блоку 512.
Запис для групи блоків 0
Запис для групи блоків 1
Дескриптор групи блоків
Вміст файлів і каталогів зберігається в блоках; Інформація про статус розподілу кожного блоку зберігається в бітовій карті. У кожній групі блоків зберігається бітова карта, яка містить інформацію про блоки, що містяться в ній. Початкова адреса бітової карти знаходиться в дескрипторе групи. Для зберігання бітової карти виділяється хоча б один блок.
Щоб отримати вміст цього блоку, скористайтеся програмою dcat (або dd):
Рядок, що складається лише з «f», вказує на те, що група блоків 0 починається з довгого ряду вибраних блоків. У байті 169 ми бачимо значення 0x01. Байт 169 відповідає блокам 9352-9359. Значення 0x01 вказує, що блок 9352 виділено, а блоки 9353-9359 вільні
Бітова карта inode виконує аналогічну функцію щодо таблиці inode: вона вказує, які конкретні дескриптори є невільними.
Бітова карта блоків, бітова карта Inode
16
Inodes
Кожен файл на диску відповідає одному і тільки одному Inode файлу, який ідентифікується його порядковим номером — індексом файлу. Це означає, що кількість файлів, які можна створити у файловій системі, обмежена кількістю Inode.
17
Таблиця Inode
18
Inodes
Кожен inode має адресу, починаючи з 1.
Кожній групі блоків призначається набір інодів, розмір яких задано в суперблоці.
Inodes в кожній групі зберігаються в таблиці, розташування якої вказано в дескрипторі групи.
За адресою inode її групу можна визначити за допомогою наступного розрахунку :
group = (inode – 1) / INODES_PER_GROUP
Inodes від 1 до 10 зазвичай зарезервовані та мають бути у виділеному стані. Суперблок має значення першого незарезервованого inode.
Із зарезервованих inodes тільки номер 2 має певну функцію, і він використовується для кореневого каталогу.
Inode 1 відстежує пошкоджені блоки.
Журнал зазвичай використовує inode 8, але його можна перевизначити в суперблоці.
Перший файл користувача зазвичай розміщується в inode 11.
19
Inodes
Режим
Інформація про власника
Розмір
Часові мітки
Прямий покажчик
Непрямий покажчик
Подвійний непрямий покажчик
Потрійний непрямий покажчик
Дані
Дані
Дані
Дані
Дані
Дані
Дані
20
ЕxtX, як і UFS, був розроблений для ефективності невеликих файлів.
Тому кожен inode може зберігати адреси перших 12 блоків, виділених файлом. Вони називаються прямими покажчиками.
Якщо для файлу потрібно більше 12 блоків, блок виділяється для зберігання решти адрес. Покажчик на блок називається непрямим покажчиком на блок. Усі адреси в блоці складаються з чотирьох байтів, а загальна кількість у кожному блоці залежить від розміру блоку. Непрямий покажчик блоку зберігається в inode.
Якщо файл містить більше блоків, ніж може вмістити 12 прямих покажчиків і непрямий блок, використовується подвійний непрямий блок. Подвійний непрямий блок — це коли inode вказує на блок, який містить список одиничних непрямих покажчиків на блоки, кожен з яких вказує на блоки, що містять список прямих покажчиків.
Нарешті, якщо файлу потрібно ще більше місця, він може використовувати потрійний непрямий блокпокажчик. Потрійний непрямий блок містить адреси подвійних непрямих блоків, які містять адреси одиничних непрямих блоків.
Адресація
21
Inodes
Адресація
Inodes
Подвійний непрямий покажчик блоків
Потрійний непрямий покажчик блоків
Дані
Дані
Дані
Дані
Прямий покажчик
(12)
…
до 12
…
Дані
Дані
…
Дані
Дані
…
Дані
Дані
Дані
Прямий покажчик
Одинарний непрямий покажчик блоків
Непрямий покажчик
Непрямий покажчик
Адресація
Прямий покажчик
Прямий покажчик
Прямий покажчик
Прямий покажчик
Прямий покажчик
Непрямий покажчик
Непрямий покажчик
адреса блоку становить 4 байти. Кількість адрес у блоці залежить від розміру блоку
23
Inodes
24
Inode (приклад)
Байти від 0 до 1 показують режим, яким є 0x81a4. Ці фрагменти показують нам, що кожен може прочитати файл (0x004), група може читати (0x020), користувач може писати (0x080), а користувач може читати (0x100). Чотири верхні біти показують, що це звичайний файл (0x8000). Байти з 4 по 7 показують, що розмір файлу становить 10 240 000 байт (0x009c4000). Байти з 8 по 11 показують час A як 0x3f2a096d, що означає 1 серпня 2003 року о 06:32:13 UTC. Байти з 26 по 27 показують, що кількість посилань дорівнює 1, що означає, що на нього вказує ім’я файлу. Байти з 32 по 35 показують, що не встановлено спеціальних прапорів або атрибутів.
Байти з 40 по 43 призначені для першого прямого покажчика блоків, і вони для блоку 14380 (0x0000382c). Байти з 44 по 47 призначені для другого прямого покажчика, а також для блоку 14381(0x0000382d). Байти з 88 по 91 містять адресу одного непрямого покажчика блоку, який є у блоці 14392 (0x00003838). Байти з 92 по 95 також показують подвійний непрямий покажчик на блок 15417 (0x00003c39).
Режим файлу
Розмір файлу
Часові мітки
Прямі покажчики блоків
Непрямі покажчики блоків
25
Вмістом обох цих блоків буде список 4-байтових адрес.
Один непрямий покажчик блоку містить список адрес, де знаходиться вміст файлу:
…
Статус розміщення inode зберігається в бітовій карті inode, яка розташована в тій самій групі, що й inode. Дескриптор групи містить адресу блоку растрової карти inode, а наше приклад зображення має свою растрову карту в блоці 3, вміст якого показано тут:
26
Кореневий каталог
Записи каталогу використовуються для зберігання імен файлів і каталогів. Вони розташовані в блоках, призначених для каталогу, і містять адреси вузлів індексів, що представляють файли та каталоги.
Lecture № 1
Lab 3
Записи каталогу
Inodes
Метадані
Метадані
Блоки зі змістом файлів
Таблиця Inodes
• номер inode файлу,�• розмір запису,�• довжина імені файлу,�• ім’я файлу.
Ім’я файлів
Кореневий каталог
Коли операційна система намагається знайти розташування файлу (або каталогу) на диску, вона завантажує вміст кожного каталогу, зазначеного в шляху до файлу (або каталогу), у пам’ять, щоб знайти inode наступного каталогу. вказаний у шляху. Обхід каталогу триває, доки не буде знайдено потрібний файл або каталог.
Дані
Дані
Дані
28
Існує два формати структури запису каталогу, але обидві версії мають однаковий розмір.
Каталог
Байти | Опис | Потреба для криміналістики |
0 - 3 | номер inode файлу (каталогу) | Так |
4 - 5 | Розмір запису | Так |
6 - 7 | Довжина імені | Так |
8 - | ASCII ім’я файлу або каталогу | Так |
Для кожного імені в каталозі існує одна структура, яка посилається на вузол індексу з метаданими.
29
Байти | Опис | Потреба для криміналістики |
0-3 | номер inode файлу (каталогу) | Так |
4-5 | Розмір запису | Так |
6-6 | Довжина імені | Так |
7-7 | Тип файлу | Ні |
8+ | ASCII ім’я файлу або каталогу | Так |
Прапор дозволу | Призначення |
0 | Невизначений тип |
1 | Звичайний файл |
2 | Каталог |
3 | Символьний пристрій |
4 | Block пристрій |
5 | FIFO |
6 | UNIX сокет |
7 | символічне посилання |
Дійсні значення для поля типу файлу в записах каталогу
Структура даних другої версії запису каталога
30
icat команда.
Тестовий образ використовує записи каталогу нової версії, а вузол індексу 69 457 відповідає каталогу
Каталог
Ми бачимо в байтах від 0 до 3, що inode, що відповідає першому запису, становить 69 457 (0x010f51),і байти з 4 по 5 показують, що запис каталогу має 12 байтів (0x0c). Байт 6 показує, що ім`z має довжину 1 байт, а байт 7 показує, що запис призначено для каталогу (0x02). Назва вказана вбайт 8, і ми бачимо, що це '.' Це відповідає запису каталогу для поточного каталогу.Ми можемо виконати перевірку працездатності, порівнявши inode у записі зі значенням inode, яке ми використовували з icat для відображення вмісту, і ми побачимо, що вони обидва мають 69 457.
Щоб знайти другий запис, ми додаємо довжину першого запису до його початку, що означає, що другий запис починатиметься з байту 12. Ми бачимо в байтах 16–17, що довжина цього запису також становить 12 байт, і це для каталогу "..".Щоб знайти третій запис, ми додаємо довжину другого запису до його початку й отримуємо байт 24. У байтах 28–29 ми бачимо, що довжина запису становить 40 байт (0x28). Байт 30 показує, що довжина імені дорівнює 11 (0x0b). Ім'я починається з байта 32 і продовжується до байта 42, і воно містить рядокabcdefg.txt.
1st entry
Інші Linux файлові системи
31
The Sleuth kit (TSK)
32
Висновки
33
Література
34