1 of 34

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 of 34

Введення в файлову систему

  • Extended File System (ext)
  • Стандартна файлова система для Linux з 1992 року
  • також використовується на Android
  • Чотири основних версій
    • ext (1992 – 1993): Оригінальна файлова система EXT
    • ext2 (1993 – present): Більш вдосконалена файлова система
    • ext3 (2001 – present): Введено ведення журналу
    • ext4 (2008 – present): Удосконалено ext3

2

3 of 34

Розмір блоку може бути різним (кратним розміру сектора (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 of 34

  • П'ять структур:
  • Блоки: базова одиниця зберігання в EXT
  • Блокові групи: блокова організаційна структура
  • Inodes: містить інформацію про файл
  • Суперблок: містить інформацію про розташування файлової системи
  • Дескриптор групи блоків: покажчик на структури в групах блоків

4

Структура файлової системи

5 of 34

Зарезервована частина(1024 B)

Група 0

Група 1

Група 2

Група 3

Група 4

Група 5

Група n

Група n-1

Група n-2

Усі блоки розділу Ext об'єднані в групи блоків.

Це позитивно впливає на операції читання/запису, оскільки зменшує час читання/запису для великих обсягів даних.

Усі групи блоків мають однаковий розмір. Винятком може бути остання група блоків.

Ці групи розташовані рядами, одна за одною.

Блоки всередині групи нумеруються послідовно, починаючи з 0. Нумерація блоків у файловій системі від початку до кінця

Структура файлової системи

6 of 34

команда mke2fs

Для цього прикладу:

Розмір блоку 4096 байт.

800 груп блоків 32768 блоків у групі (8 * 4096).

Також видно блоки, в яких зберігаються резервні копії суперблоку.

У системі UFS, на основі якої розроблено ExtX, блоки розбиті на фрагменти. Код ExtX для Linux не підтримує цей поділ, хоча в суперблоку є поле, в якому можна зберігати розмір фрагмента.

7 of 34

Структура групи блоків

Суперблок

(backup суперблока)

Дескриптор групи блоків

Карта блоків

Карта

Inode

Блоки даних

. . .

Таблиця inode

. . .

Кожна група блоків містить блоки з такими структурами:

Суперблок (необов'язково): копія суперблоку

Дескриптор групи блоків: розташування структур групи блоків

Карта використання блоків: статус розподілу блоку

Карта використання Inode: статус розподілу Inode

Таблиця Inode: Інформація про Inode – метадані файлу

Блоки даних: дані файлу.

Структура файлової системи

8 of 34

  • Описує структуру файлової системи
  • Суперблок є основним елементом файлової системи ext.
  • Він містить загальну інформацію про файлову систему:

• загальну кількість блоків та inode у файловій системі,

• кількість вільних блоків та inode у файловій системі,

• розмір блоку файлової системи,

• кількість блоків та inode у файловій системі, груп блоків,

• розмір inode,

• ідентифікатор файлової системи (магічне число 0xEF53 для сімейства файлових систем ext),

• дата останньої перевірки файлової системи,

• кількість зроблених монтувань

8

Суперблок

9 of 34

9

команда dumpe2fs

Суперблок

10 of 34

10

Суперблок

команда dumpe2fs

11 of 34

команда dumpe2fs

Суперблок

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

12 of 34

  • Кожна група блоків містить копію дескриптора групи блоків.
  • Кожна група блоків описана в кожному дескрипторі групи блоків.
  • Опис кожної групи блоків становить 32 байти
  • Розмір дескриптора групи блоків (у блоках) обчислюється за:CEILING((Num Blocks * 32) / Block Size)

12

Дескриптор групи блоків

13 of 34

Таблиця дескрипторів груп — це список структур даних, які називаються дескрипторами груп; Цей список зберігається в блоці файлової системи, що йде відразу за суперблоком. У таблиці є запис для кожної групи блоків у системі, і кожен запис містить інформацію про певну групу. Таблиця складається з 32-байтових записів, представлених у табл. 1.

Таблиця 1. Структура даних записів у таблиці дескриптора групи

Байти

Опис

Потреба для криміналістики

0-3

Початкова адреса бітової карти блоків

Так

4-7

Початкова адреса бітової карти Inodes

Так

8-11

Стартова адреса таблиці Inode

Так

12-13

Кількість вільних блоків у групі

Ні

14-15

Кількість вільних Inodes в групі

Ні

16-17

Кількість каталогів у групі

Ні

18-31

Не використовується

Ні

Дескриптор групи блоків

14 of 34

Щоб отримати вміст таблиці, скористайтеся командою 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

Дескриптор групи блоків

15 of 34

Вміст файлів і каталогів зберігається в блоках; Інформація про статус розподілу кожного блоку зберігається в бітовій карті. У кожній групі блоків зберігається бітова карта, яка містить інформацію про блоки, що містяться в ній. Початкова адреса бітової карти знаходиться в дескрипторе групи. Для зберігання бітової карти виділяється хоча б один блок.

Щоб отримати вміст цього блоку, скористайтеся програмою dcat (або dd):

Рядок, що складається лише з «f», вказує на те, що група блоків 0 починається з довгого ряду вибраних блоків. У байті 169 ми бачимо значення 0x01. Байт 169 відповідає блокам 9352-9359. Значення 0x01 вказує, що блок 9352 виділено, а блоки 9353-9359 вільні

Бітова карта inode виконує аналогічну функцію щодо таблиці inode: вона вказує, які конкретні дескриптори є невільними.

Бітова карта блоків, бітова карта Inode

16 of 34

  • Скорочення від «індексний вузол»
  • Кожен файл і каталог у файловій системі описується рівно одним inode
  • Inode для кожної групи блоків зберігаються в таблиці inode разом із бітовою картою

16

Inodes

Кожен файл на диску відповідає одному і тільки одному Inode файлу, який ідентифікується його порядковим номером — індексом файлу. Це означає, що кількість файлів, які можна створити у файловій системі, обмежена кількістю Inode.

17 of 34

  • містить інформацію про кожен Inode у групі блоків
  • Вони містять метадані файлу, а також розташування блоку даних файлу
  • Інтерпретуючи Inode, можна знайти вміст файлу
  • direct та indirect (single, double та triple) (прямий та непрямий (одинарний, подвійний та потрійний)) покажчики блоків даних

17

Таблиця Inode

18 of 34

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 of 34

19

Inodes

Режим

Інформація про власника

Розмір

Часові мітки

Прямий покажчик

Непрямий покажчик

Подвійний непрямий покажчик

Потрійний непрямий покажчик

Дані

Дані

Дані

Дані

Дані

Дані

Дані

20 of 34

20

ЕxtX, як і UFS, був розроблений для ефективності невеликих файлів.

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

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

Якщо файл містить більше блоків, ніж може вмістити 12 прямих покажчиків і непрямий блок, використовується подвійний непрямий блок. Подвійний непрямий блок — це коли inode вказує на блок, який містить список одиничних непрямих покажчиків на блоки, кожен з яких вказує на блоки, що містять список прямих покажчиків.

Нарешті, якщо файлу потрібно ще більше місця, він може використовувати потрійний непрямий блокпокажчик. Потрійний непрямий блок містить адреси подвійних непрямих блоків, які містять адреси одиничних непрямих блоків.

Адресація

21 of 34

  • Кожен inode містить чотири типи структури:

  • 12 прямих вказівників на блоки
  • 1 Непрямий покажчик блоку
  • 1 подвійний непрямий покажчик блоку
  • 1 потрійний непрямий покажчик блоку

21

Inodes

Адресація

22 of 34

Inodes

Подвійний непрямий покажчик блоків

Потрійний непрямий покажчик блоків

Дані

Дані

Дані

Дані

Прямий покажчик

(12)

до 12

Дані

Дані

Дані

Дані

Дані

Дані

Дані

Прямий покажчик

Одинарний непрямий покажчик блоків

Непрямий покажчик

Непрямий покажчик

Адресація

Прямий покажчик

Прямий покажчик

Прямий покажчик

Прямий покажчик

Прямий покажчик

Непрямий покажчик

Непрямий покажчик

адреса блоку становить 4 байти. Кількість адрес у блоці залежить від розміру блоку

23 of 34

23

Inodes

24 of 34

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 of 34

25

Вмістом обох цих блоків буде список 4-байтових адрес.

Один непрямий покажчик блоку містить список адрес, де знаходиться вміст файлу:

Статус розміщення inode зберігається в бітовій карті inode, яка розташована в тій самій групі, що й inode. Дескриптор групи містить адресу блоку растрової карти inode, а наше приклад зображення має свою растрову карту в блоці 3, вміст якого показано тут:

26 of 34

  • Кореневим каталогом завжди є Inode 2
  • Записи каталогу – це блок(и), які містять пари Ім’я / Inode
  • це вміст каталогу.

26

Кореневий каталог

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

27 of 34

Lecture № 1

Lab 3

Записи каталогу

Inodes

Метадані

Метадані

Блоки зі змістом файлів

Таблиця Inodes

• номер inode файлу,�• розмір запису,�• довжина імені файлу,�• ім’я файлу.

Ім’я файлів

Кореневий каталог

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

Дані

Дані

Дані

28 of 34

28

Існує два формати структури запису каталогу, але обидві версії мають однаковий розмір.

Каталог

Байти

Опис

Потреба для криміналістики

0 - 3

номер inode файлу (каталогу)

Так

4 - 5

Розмір запису

Так

6 - 7

Довжина імені

Так

8 -

ASCII ім’я файлу або каталогу

Так

Для кожного імені в каталозі існує одна структура, яка посилається на вузол індексу з метаданими.

29 of 34

29

Байти

Опис

Потреба для криміналістики

0-3

номер inode файлу (каталогу)

Так

4-5

Розмір запису

Так

6-6

Довжина імені

Так

7-7

Тип файлу

Ні

8+

ASCII ім’я файлу або каталогу

Так

Прапор дозволу

Призначення

0

Невизначений тип

1

Звичайний файл

2

Каталог

3

Символьний пристрій

4

Block пристрій

5

FIFO

6

UNIX сокет

7

символічне посилання

Дійсні значення для поля типу файлу в записах каталогу

Структура даних другої версії запису каталога

30 of 34

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

31 of 34

Інші Linux файлові системи

  • Інші файлові системи, що стосуються Linux:
  • btrfs
  • xfs

31

32 of 34

The Sleuth kit (TSK)

  • Набір інструментів Sleuth для доступу до файлової системи
  • Дозволяє працювати над зображеннями (raw, EWF та іншими), щоб надати інформацію про розділи, inode та файли

32

33 of 34

Висновки

  • Ext — стандартна файлова система для Linux і Android
  • Використовуються три основні версії (2, 3 і 4)
  • Криміналістичні інструменти аналізують суперблок, дескриптори груп блоків і inode для відновлення інформації з файлової системи

33

34 of 34

Література

  • The Linux Kernel (Chapter 9), The Linux Documentation Project, http://www.tldp.org/LDP/tlk/fs/filesystem.html

34