Автор статьи: Рустем Галиев

IBM Senior DevOps Engineer & Integration Architect. Официальный DevOps ментор и коуч в IBM

Привет, Хабр!

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

Kali Linux, известный множеством инструментов для тестирования безопасности, предоставляет возможности для анализа содержимого дисков с целью извлечения ценной информации, восстановления данных и выявления потенциальных уязвимостей. От поиска цифровых следов до анализа структуры файловой системы, инструменты Kali Linux предоставляют широкий спектр функциональности для глубокого исследования дисков и хранилищ.

В данной статье мы рассмотрим основные инструменты и методы, предоставляемые Kali Linux, для анализа содержимого дисков, включая методы извлечения данных, анализ файловой системы, поиск удаленных следов и многое другое. Погрузимся в мир цифровой форензики и обнаружения информации, спрятанной в глубинах хранилищ данных с помощью инструментов, предоставляемых этой мощной операционной системой.

Определение разделов в образе диска

Определение разделов в образе диска является ключевым этапом при анализе содержимого носителя информации. Kali Linux предоставляет ряд инструментов, способных помочь разобраться в структуре и организации данных на диске, что позволяет извлекать важную информацию и проводить детальный анализ образа.

Таблица разделов — это место, где хранится информация о разделах. В старых системах, а иногда и для поддержки устаревших инструментов, главная загрузочная запись (MBR) содержала таблицу разделов. MBR — это первые 512 байт любого диска. Она содержит загрузочный код — небольшую программу, указывающую на фактическую загрузку операционной системы. Также содержит информацию об основных разделах.

В этой настройке может быть до четырех основных разделов. Вторичные разделы хранятся в отдельной таблице разделов вне MBR. Современные системы используют таблицу разделов (GPT) с глобальным уникальным идентификатором (GUID), чтобы преодолеть ограничения меньшего размера MBR и его ограничения по размеру. Если MBR хранится в первом логическом блоке диска, таблица разделов на диске GPT обычно начинается в третьем блоке диска. Первый блок — это устаревшая MBR, а второй блок — это заголовок GPT, который содержит указатель на таблицу разделов.

Хотя мы могли бы использовать шестнадцатеричный редактор для чтения необходимой информации, нам нужно было бы знать, как читать таблицу разделов на уровне байтов. К счастью, нам не обязательно опускаться до этого уровня. Вместо этого начнем с использования классического редактора разделов fdisk. Можно создавать разделы с помощью fdisk, но для наших целей мы просто хотим их просмотреть. Мы просто используем его для вывода списка разделов на устройстве. Хотя можно использовать fdisk для физического диска, например /dev/sda в системе Linux, вы также можете использовать его для вывода списка разделов в образе диска. Образ диска мог быть создан путем получения побайтовой копии диска, которая будет храниться в файле. Конечно, вы также можете начать с большого пустого файла, как это было сделано здесь, и разбить его на разделы, а затем обращаться с разделами файла так, как если бы они были настоящими разделами диска. Давайте посмотрим, сколько разделов в образе диска mydisk.img:

Еще один способ достичь того же самого с использованием fdisk, хотя это занимает немного больше времени, — запустить fdisk mydisk.img, а затем использовать символ p для вывода таблицы разделов.

Есть еще один инструмент для просмотра таблицы разделов. Это parted, который также можно использовать для редактирования таблицы разделов, внося изменения интерактивно. Однако команды, которые вы используете в parted, отличаются от тех, что используются в fdisk.

Давайте посмотрим на parted. Как только он будет запущен на образе диска, вы сможете использовать команду print для просмотра таблицы разделов. Когда закончите, просто введите quit. Обратите внимание: если сравнить два списка, размеры разделов будут разными. Это потому, что parted основан на гигабайтах, тогда как fdisk использует гибибайты, поэтому fdisk основан на степенях 10, в то время как parted использует степени 2. Запустите parted с помощью следующей команды:

Получение информации о файловой системе

Сначала нужно узнать некоторую информацию. Когда вы создаете раздел, который можно превратить в устройство, используемое операционной системой, его необходимо отформатировать. Форматирование (то есть запись структур данных на устройство) определяет начальную и конечную точки раздела. Для проверки файловой системы нам нужно знать, с какого места начинается раздел. Мы собираемся использовать инструмент из The Sleuth Kit (TSK), чтобы получить информацию о нужных разделах. Команда mmls покажет вам блоки, на которых начинается каждый сектор:

Число, которое вам нужно, находится в третьем столбце. Эта информация важна, потому что это смещение в образе, с которого начинается раздел. Первый раздел начинается с 2048, а второй смещен на 131072. Это места, с которых начинаются данные файловых систем, и мы можем проверить каждое из них, чтобы убедиться, какой тип файловой системы используется.

Поскольку в этом образе два раздела, нам следует рассмотреть оба, чтобы узнать больше о файловой системе. Мы воспользуемся инструментом fsstat из TSK, чтобы получить статистику о файловой системе, передавая смещение для местоположения файловой системы. Первый результат содержит много данных, поэтому вывод fsstat направляется в команду less, чтобы получить контроль над всеми данными и отобразить их постранично. Когда закончите просмотр, убедитесь, что ввели 'q', чтобы выйти из less, иначе следующая команда не сработает. Вы увидите, что файловая система первого раздела - ext4.

fsstat -o 2048 mydisk.img | less

Можно взглянуть на второй раздел, но вам понадобится значение начала этого раздела. Его можно получить, запустив mmls mydisk.img еще раз, если нужно. Как только у вас будет начальное смещение второго раздела, вы сможете снова запустить fsstat, используя смещение второго раздела. Это должно показать вам, что файловая система - FAT12.

Инструмент fsstat позволяет получить много дополнительной информации о файловой системе, помимо формата. Предоставляемая информация будет зависеть от типа файловой системы. Поскольку один из форматов, который вы рассматриваете, принадлежит операционной системе на основе Linux, вы увидите много данных об организации файловой системы. Другая файловая система является одним из вариантов FAT и имеет ограниченное количество информации, поскольку она представляет собой простую файловую систему.

Получение списка файлов с образа диска

The Sleuth Kit (TSK) включает инструмент, который можно использовать для получения списка всех файлов - fls. Чтобы использовать этот инструмент, мы предоставляем смещение сектора (которое, для наших целей, эквивалентно смещению блока, так как один сектор имеет тот же размер, что и блок). Этот инструмент предоставит список всех объектов на изображении. Первый столбец вывода показывает, что это за объект. В большинстве случаев вы увидите r/r, что указывает на обычный файл. В случае, если вы видите d/d - это каталог. Вы также увидите запись для $OrphanFiles, который является виртуальным каталогом, отображаемым TSK. Он фактически не существует в образе; он показывает, где находятся метаданные для файла в случае, если данные для файла могли быть утеряны, например, перезаписаны чем-то другим. Давайте посмотрим на fls:

Этот вывод очень прост, но можно получить более подробную информацию, если это предпочтительнее. Если вы используете параметр -l, то помимо типа объекта и его имени, вы также получите адрес метаданных. В данном случае, для файловой системы на основе ext, он покажет вам индексный узел (inode). Inode - это структура данных, предоставляющая информацию о каждой записи в файловой системе, такой как файл или каталог. Метаданные также включают время последнего изменения, времени последнего доступа и времени последнего изменения. Эти даты часто называют MAC (modified, accessed, changed):

Файловая система FAT содержит другую информацию по сравнению с файловой системой ext4. Вы сможете увидеть виртуальные файлы при получении списка файлов на разделе FAT в образе диска. Там вы увидите некоторые виртуальные файлы. $MBR, $FAT1 и $FAT2 - это не реальные файлы. Это копии загрузочной записи и две копии таблицы размещения файлов, хранящиеся в конце раздела. Давайте посмотрим на раздел FAT:

Поиск файловых данных на диске

Мы можем проделать то же самое с файловой системой FAT. FAT-система файлов известна благодаря таблице, расположенной в начале файловой системы. Эта таблица содержит запись для каждого кластера в файловой системе, где кластер имеет размер от 2 до 32 килобайт. Первоначальная версия FAT использовала 12 бит для каждой записи в таблице. Поскольку эта запись могла содержать адрес, 12 бит ограничивали размер файловой системы. То же самое было и с последующей версией, в которой использовались 16 бит. Наконец, появилась FAT32, у которой была запись в таблице на 32 бита. Каждая запись в таблице могла иметь несколько значений. Во-первых, это мог быть адрес следующего кластера в цепочке. Это означает, что если файл больше, чем может вместить один кластер, то следует начать с начального кластера в FAT и проследить цепочку до записи, указывающей конец цепочки или последний кластер файла. Запись в FAT, начинающаяся с 0xFFF, 0xFFFF или 0x0FFFFFFF, в зависимости от версии FAT, указывает на последний кластер в цепочке.

Вы заметите, что в FAT нет информации о файлах, только о кластерах и их выделении. FAT используется для выделения пространства в файловой системе. Корневой каталог содержит все метаданные о файлах и каталогах в начале диска. Каждая запись включает имя файла, время, связанное с файлом, размер файла и начальный кластер. Инструмент наподобие fls читает этот корневой каталог и представляет записи. Как и ранее с разделом ext4, мы собираемся получить список файлов в разделе FAT, чтобы идентифицировать один файл и адрес, необходимый для получения связанных с файлом метаданных:

Когда мы получили список файлов вместе с адресом, который нам нужен для получения метаданных, можно обратиться к инструменту istat, чтобы получить информацию о связанных с файлом кластерах:

Чтобы удостовериться в результатах и понимании, вы должны увидеть, что первый кластер, связанный с файлом, имеет номер 4556.

Этот процесс будет работать с любыми файловыми системами, поддерживаемыми TKS. Вы определяете местоположение метаданных, привязанных к файлу, а затем получаете метаданные, чтобы идентифицировать все кластеры. Как только у вас есть кластеры, вы можете извлечь данные. Это не всегда легкая задача. В файле, который мы только что рассматривали, было всего несколько кластеров. Если вы хотите увидеть, насколько сложным может быть извлечение данных с диска, можно проверить некоторые другие файлы, включенные в разделы, чтобы увидеть, сколько кластеров участвует в больших файлах.

Извлечение данных из удаленных файлов

До этого мы в основном работали с текстовыми файлами, которые достаточно легко проверить. Мы также только что просматривали содержимое файла на экране. Мы можем легко извлечь содержимое файла из образа диска в файл в нашем локальном каталоге. Давайте теперь возьмем бинарный файл и извлечем его на наш локальный диск. Для разнообразия вернемся к blkcat, хотя можно сделать то же самое, используя icat.

На подобии систем Unix, таких как Linux, существует утилита под названием file, которая определяет формат файла на основе его сигнатуры, иногда называемой "магическим числом". Это последовательность байтов, которую можно идентифицировать из содержимого файла. Мы можем использовать утилиту file, чтобы проверить фактический тип файла извлеченных данных:

В отличие от операционных систем DOS/Windows, которые определяют тип файла по расширению файла, Linux использует "магическое число". Утилита file не обращает внимания на расширение файла, только на его содержимое. Нужно с помощью команды file определить, что это файл PNG.

Полезно понимать, как устроены файловые системы, включая структуры данных, существующие для каждой из них. Хотя можно использовать эту информацию для поиска данных на файловой системе и их извлечения, в The Sleuth Kit также есть инструменты, которые могут значительно облегчить этот процесс. Это включает blkcat и icat для извлечения информации непосредственно из блоков данных на диске. Если вы можете идентифицировать удаленные файлы из записей каталога (что возможно в некоторых файловых системах), то можно использовать blkcat или icat для извлечения содержимого из образа диска.


22 января в OTUS пройдет открытый урок, посвященный настройке VPN WireGuard. На занятии познакомимся с основами сетевых технологий и VPN и разберем, как можно запустить WireGuard-сервер на чистой Linux-системе максимально быстро и просто. В результате запустим полноценный собственный VPN-сервер. Записаться на урок можно по ссылке.

Комментарии (0)