Лекція 2 Основи аналізу логічних томів 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лекція 2 Основи аналізу логічних томів



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

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

 

Методи аналізу логічних томів

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

Щоб проаналізувати компоненти системи томів, необхідно знайти і обробити структури даних з інформацією про об'єднувані томи і про те, як саме це робиться. Існує багато способів об'єднання томів. Спробуємо пошукати дані, що не використовуються в процесі об'єднання і містять інформацію від попередньої установки або приховану.

Перевірка цілісності логічних томів

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

Перевірки першого типу знаходять останній розділ і порівнюють його кінцеву межу з кінцем батьківського тому. В ідеальному випадку останній розділ завершується в останньому секторі тому. На рис. 2.1 (А) змальована ситуація, при якій останній розділ закінчується перед кінцем тому, і на томі можуть залишатися сектори з прихованими або видаленими даними.

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

Третій варіант (рис. 2.1 (D)), при якому другий розділ починається раніше завершення першого, в загальному випадку недопустимий. Сектори двох розділів перекриваються, що, як правило, свідчить про ушкодження таблиці розділів. Щоб визначити, які розділи допустимі (і чи є вони взагалі), необхідно проаналізувати дані в кожному розділі. Четвертий варіант показаний на рис. 2.1 (Е); як правило, він теж недопустимий. Другий розділ знаходиться всередині першого, і для визначення помилки необхідно проаналізувати вміст обох розділів.

 

Отримання вмісту розділів

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

Програма dd працює в режимі командного рядка, а при виклику їй передається ряд аргументів. Для отримання даних з розділів знадобляться наступні параметри:

- if - образ, з якого читаються дані;

- of - вихідний файл для збереження даних;

- bs - розмір читаного блоку (512 байт по замовчуванню);

- skip - кількість блоків (розміру bs), що пропускаються перед читанням;

- count - кількість блоків (розміру bs), що копіюються з вводу у вивід.

Найчастіше вибирається розмір блоку 512 байт, який співпадає з розміром сектора. По замовчуванню розмір блоку в dd теж дорівнює 512 байтам, але завжди надійніше вказати його явно. Ми скористаємося параметром skip для вказівки початкового сектора, в якій починається розділ, і параметром count для вказівки кількості секторів в розділі.

Розглянемо приклад системи розділів на базі DOS. Утиліта mmls з пакету The Sleuth Kit виводить вміст таблиці розділів. Її вихідні дані детальніше опишемо далі, але навіть зараз неважко зрозуміти, що на диску існують три розділи файлових систем:

# mmls - t dos diskl.dd

Units are in 512 - byte sectors

Slot Start End Length Description

0000: 0000000000 0000000000 0000000001 Table #0

001: 0000000001 0000000062 0000000062 Unallocated

002: 00:00 0000000063 0001028159 0001028097 Win95 FAT32 (0x0В)

003: 0001028160 0002570399 0001542240 Unallocated

004: 00:03 0002570400 0004209029 0001638630 OpenBSD (0xA6)

005: 00:01 0004209030 0006265349 0002056320 NTFS (0x07)

Утиліта mmls впорядковує вміст таблиці розділів по початковому сектору і виділяє сектори, що не належать жодному розділу. Перші два рядки (00 і 01) описують основну таблицю розділів і невживаний простір між таблицею розділів і першим розділом. З лістингу видно, що рядок 02 визначає розділ з файловою системою FAT32, рядок 04 відноситься до розділу OpenBSD, а рядок 05 - до розділу з файловою системою NTFS. Рядок 03 позначає нерозподілений дисковий простір. Графічне представлення цих даних показано на рис. 2.2.

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

# dd if - diskl.dd of - partl.dd bs=512 skip=63 count=1028097

# dd if - diskl.dd of=part2.dd bs=512 skip=2570400 count=1638630

# dd if - diskl.dd of=part3.dd bs=512 skip=4209030 count=2056320

Ці команди беруть вхідні дані з файлу diskl.dd і зберігають вивід у файлах з іменами part1.dd, part2.dd і part3.dd. У всіх випадках розміри копійованих блоків складають 512 байт. Перед витяганням першого розділу dd пропускає 64 блоки, а потім копіює наступні 1028097 блоків. У вихідних даних mmls видно, що розділ починається з сектора 63, тому начебто пропускати треба тільки 62 блоки. Проте слід згадати, що адресація секторів починається з 0, тому ми пропускаємо 63. Розширення.dd вказує на те, що файли містять фізичні образи, створені програмою dd або її аналогом.

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

1028159 - 63 + 1 - 1028097

Щоб зрозуміти, для чого треба додавати 1, розглянемо простий приклад: розділ починається з сектора 2 і закінчується в секторі 4. Його розмір дорівнює 3 секторам:

4-2+1 = 3

Програма dd також може використовуватися для вибірки даних, які знаходяться між розділами. Наприклад, з вихідних даних mmls відомо, що сектори із 1028160 по 2570399 не використовуються. Їх вміст витягається командою

# dd if - diskl.dd of=unalloci.dd bs=512 skip=1028160 count=1542240.

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



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 225; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.184.90 (0.007 с.)