Главная / Блог / Forensics CTF: восстанавливаем удалённые файлы из образа диска с помощью Autopsy и foremost

14 мин.00

Forensics CTF: восстанавливаем удалённые файлы из образа диска с помощью Autopsy и foremost

Forensics CTF: восстанавливаем удалённые файлы из образа диска с помощью Autopsy и foremost

Forensics CTF: восстанавливаем удалённые файлы из образа диска с помощью Autopsy и foremost

На одном из недавних CTF двести команд получили образ ext4-раздела флешки — в проводнике пусто, ни единого файла. Флаг нашли двенадцать команд. Все двенадцать использовали одну и ту же связку: fls для обнаружения удалённых inode, foremost для карвинга по сигнатурам, Autopsy для финальной верификации. Остальные 188 команд гоняли strings | grep flag по сырому образу и уходили ни с чем.

Разница — не в количестве инструментов, а в понимании того, как файловая система помечает удалённые данные и почему биты остаются на месте после rm. Разберём полный цикл восстановления удалённых файлов в CTF forensics задачах: от разведки образа до извлечения флага тремя инструментами, которые закрывают подавляющее большинство тасков с файловыми системами.

Почему удалённый файл — не значит уничтоженный

Когда файл удаляется через rm в Linux или через корзину в Windows, с диском происходит минимум действий. ОС не затирает нулями каждый байт — это заняло бы слишком много времени. Вместо этого обновляются метаданные файловой системы: блоки данных помечаются свободными, запись о файле — неактивной. Сами данные продолжают лежать на диске, пока их не перезапишет что-то новое. Подробнее — в нашем статье о расследование кибератаки.

По MITRE ATT&CK этот механизм напрямую связан с техникой File Deletion (T1070.004, Defense Evasion) — атакующие удаляют файлы, чтобы скрыть следы. Именно этот сценарий чаще всего моделируют forensics-задачи на CTF: злоумышленник удалил улику, ваша работа — достать её обратно.

Механика удаления в ext4 и NTFS

В ext4 каждый файл описывается структурой inode — она хранит указатели на блоки данных, временные метки, права доступа и размер. При удалении файла:

  1. Счётчик ссылок inode падает до нуля
  2. Inode помечается свободным в inode bitmap
  3. Блоки данных помечаются свободными в block bitmap
  4. Содержимое блоков данных не изменяется

В NTFS картина аналогичная: запись в MFT (Master File Table) помечается неактивной, кластеры данных отмечаются свободными в $BITMAP. Данные остаются на диске, пока файловая система не использует эти кластеры для записи нового файла.

На этом свойстве строится file carving — техника восстановления файлов по magic bytes. JPEG начинается с FF D8 FF, заканчивается FF D9. PNG — заголовок 89 50 4E 47 0D 0A 1A 0A. PDF — 25 50 44 46 (ASCII-строка %PDF). Карверы сканируют всю поверхность диска побайтово, ищут эти последовательности и вырезают данные от заголовка до футера или заданного лимита размера.

Ещё один источник данных для forensics CTF — slack space. Файловая система выделяет место кластерами фиксированного размера (обычно 4096 байт). Если файл занимает 3000 байт, оставшиеся 1096 байт кластера могут содержать остатки ранее записанного туда файла. По данным Belkasoft, slack space — ценный источник артефактов, а иногда и место для целенаправленного сокрытия данных.

Требования к окружению

Перед началом работы убедитесь, что окружение готово:

  • ОС: Kali Linux 2024.x+ или любой Debian-based дистрибутив (Ubuntu 22.04+). Под Fedora/Arch тоже работает, но пути пакетов отличаются
  • RAM: минимум 4 ГБ для образов до 1 ГБ; 8 ГБ при запуске Autopsy — Java-приложение с GUI, оно прожорливое
  • Инструменты: foremost, sleuthkit (включает fls, icat, istat, mmls, fsstat), autopsy. В Kali foremost и sleuthkit предустановлены. Через sudo apt install autopsy ставится legacy Autopsy 2.x (веб-интерфейс). Для Autopsy 4.x с расширенными модулями — дистрибутив с sleuthkit.org/autopsy/
  • Дисковое пространство: в 3-5 раз больше размера образа — foremost создаёт отдельный файл для каждого восстановленного объекта
  • Режим работы: полностью offline, сетевых зависимостей нет

Первичная разведка: что внутри образа диска

Получили файл образа на CTF — первым делом определяем, с чем имеем дело. Кидаться сразу в карвинг — ошибка: можно потратить десять минут на foremost, а файл окажется вложенным архивом или образом с нестандартной таблицей разделов.

Определяем структуру разделов и файловую систему

file покажет базовую информацию: тип файловой системы, наличие загрузочного сектора. mmls из Sleuth Kit отобразит таблицу разделов со смещениями, fsstat — детали конкретного раздела.

file challenge.img
# DOS/MBR boot sector; partition 1: type=0x83 (Linux)

mmls challenge.img
# Units are in 512-byte sectors
#   Slot  Start     End       Length    Description
#   00:   0000      0000      0001      Primary Table (#0)
#   01:   0002048   0204799   0202752   Linux (0x83)

fsstat -o 2048 challenge.img
# FILE SYSTEM INFORMATION
# File System Type: Ext4
# Block Size: 4096
# Block Count: 25344

Параметр -o 2048 — смещение раздела в секторах, взятое из вывода mmls. Если образ содержит голую файловую систему без таблицы разделов (частый случай в CTF), mmls вернёт ошибку — тогда работайте напрямую, без смещения.

Результат fsstat показывает тип файловой системы, размер блока и общий объём. Зная размер блока, вы понимаете минимальную гранулярность данных и можете оценить, фрагментирован ли восстановленный файл.

File carving с foremost: быстрое восстановление по сигнатурам

Foremost — утилита карвинга файлов, изначально разработанная Управлением специальных расследований ВВС США (AFOSI) и развивавшаяся Ником Микусом в центре CISR при Naval Postgraduate School. Принцип работы прямолинеен: foremost сканирует входной файл побайтово, ищет известные заголовки и футеры, вырезает всё найденное в отдельные папки. В Kali предустановлен и готов к работе.

В CTF forensics задачах foremost — первый инструмент в арсенале. Ему не нужно понимание файловой системы образа, не нужны целые метаданные, и он работает даже на полностью затёртых разделах — везде, где сохранились хотя бы заголовки файлов.

Основные команды foremost для восстановления файлов

Запуск карвинга всех поддерживаемых типов:

foremost -i challenge.img -o carved_output
# -i — входной образ
# -o — директория для результатов (не должна существовать)

# Поиск только конкретных типов (экономит время):
foremost -i challenge.img -o carved_output -t jpg,png,pdf

После завершения foremost создаёт структуру директорий: jpg/, png/, pdf/ — по папке на каждый обнаруженный тип. В корне лежит файл audit.txt — протокол карвинга с количеством найденных файлов, их смещениями и размерами. На CTF обязательно просматривайте его через cat carved_output/audit.txt: иногда флаг прячется в неожиданном формате — WAV-файл со спектрограммой, BMP с данными в младших битах, OLE-контейнер.

Foremost использует конфигурационный файл /etc/foremost.conf, где описаны заголовки и футеры для десятков типов. Если в CTF-задаче нестандартный формат — создайте копию конфига, добавьте строку с заголовком/футером/максимальным размером и запустите foremost с -c myconfig.conf.

Один нюанс: foremost запускается с sudo, и все восстановленные файлы принадлежат root. Чтобы нормально с ними работать: sudo chown -R $(whoami) carved_output/.

Ограничения foremost в CTF-задачах

Foremost быстрый, но ограниченный. Знать его слабые стороны так же полезно, как и сильные:

  • Нет восстановления имён файлов и путей. Все результаты получают числовые имена вроде 00000123.jpg. Если задача требует найти файл по конкретному имени — foremost тут бессилен
  • Фрагментированные файлы — мимо. Когда данные разбросаны по нескольким несмежным областям диска, foremost соберёт только первый непрерывный фрагмент и обрежет результат. По данным Belkasoft, для работы с фрагментацией нужны инструменты, которые анализируют метаданные конкретной файловой системы
  • Ложные срабатывания. Сигнатура FF D8 FF может встретиться внутри совершенно другого файла (архив, база данных) — foremost вытащит этот кусок как «восстановленный JPEG»
  • SSD с TRIM — всё, приехали. Если образ снят с SSD, где работал TRIM, удалённые данные физически обнулены контроллером — карвинг невозможен. По данным Belkasoft, на SSD и eMMC восстановление через карвинг не работает, хотя скрытые и встроенные файлы по-прежнему находятся

Autopsy использует метаданные файловой системы в дополнение к сигнатурному карвингу, что даёт ему серьёзное преимущество при восстановлении удалённых файлов. Но об этом — ниже.

Анализ файловой системы в Autopsy: глубокое исследование образа

Autopsy — графическая платформа цифровой криминалистики, построенная поверх The Sleuth Kit. В отличие от foremost, Autopsy работает с файловой системой на структурном уровне: парсит таблицы размещения, восстанавливает дерево каталогов, считывает метаданные удалённых файлов, запускает поиск по ключевым словам и строит временные шкалы.

Для быстрых CTF-задач Autopsy избыточен — foremost справится быстрее. Но в сложных случаях, когда нужно найти файл по имени, проанализировать порядок событий или покопаться в метаданных, без Autopsy не обойтись.

Создание кейса и запуск анализа

Пошаговый процесс в Autopsy для анализа образа диска:

  1. Autopsy 2.x (Kali/Debian, apt install autopsy): запуск autopsy из терминала откроет веб-интерфейс. New CaseAdd HostAdd ImageDisk Image → путь к challenge.img. Выбираете Symlink (быстрее копирования). Autopsy обнаружит разделы и тип ФС. Возможности ограничены базовым просмотром и поиском.

Autopsy 4.x (скачивается с sleuthkit.org/autopsy/): нативный GUI, New Case → Add Data Source → Disk Image or VM File → Configure Ingest Modules. Модули Autopsy 4.x, которые реально нужны на CTF:

  • File Type Identification — определит типы файлов по сигнатурам, даже если расширение подменено
  • Keyword Search — настройте поиск строк flag{, CTF, secret, key= и паттернов Base64
  • Extension Mismatch Detector — находит файлы, где расширение не соответствует содержимому (переименованный flag.txt в photo.jpg)

Поиск удалённых файлов и ключевых слов

После завершения анализа в Autopsy перейдите в раздел удалённых файлов через дерево навигации. Удалённые файлы отмечены характерным маркером и доступны для просмотра и экспорта. Для каждого файла Autopsy показывает:

  • Оригинальное имя и полный путь — то, чего foremost восстановить не способен
  • Временные метки: создание (crtime), модификация (mtime), доступ (atime), изменение метаданных (ctime)
  • Размер и MIME-тип содержимого
  • Hex-представление первых байтов в нижней панели — быстрая проверка, не нужно лезть в отдельный hex-редактор

Для поиска флага CTF forensics используйте модуль Keyword Search: задайте паттерн flag\{.*\} (регулярное выражение) или прямую строку flag{. Autopsy проиндексирует содержимое всех файлов, включая удалённые, и покажет совпадения с указанием файла-источника.

Отдельно стоит упомянуть Timeline — хронологическая шкала всех файловых операций. Если CTF-задача подразумевает расследование инцидента, timeline покажет, в каком порядке создавались и удалялись файлы, что поможет восстановить последовательность действий злоумышленника.

Sleuth Kit: ручная работа на уровне inode

The Sleuth Kit (TSK) — набор консольных утилит для низкоуровневого анализа файловых систем. Autopsy использует TSK под капотом, но прямая работа через командную строку даёт больше контроля и занимает секунды вместо минут на запуск GUI.

Три ключевые команды для восстановления файлов Linux в CTF:

# Список всех файлов, включая удалённые (помечены *)
fls -r -o 2048 challenge.img
# d/d 11:  lost+found
# r/r * 15:  secret_flag.txt
# r/r * 16:  evidence.jpg

# Детали inode удалённого файла
istat -o 2048 challenge.img 15
# Inode: 15  Allocated: No  Size: 42
# Direct Blocks: 8200

# Извлечение содержимого по номеру inode
icat -o 2048 challenge.img 15 > recovered_flag.txt
cat recovered_flag.txt
# flag{in0d3_n3v3r_f0rg3ts}

Флаг -r в fls включает рекурсивный обход подкаталогов. Удалённые файлы помечены звёздочкой * перед номером inode. istat показывает, что inode 15 не аллоцирован (Allocated: No), но размер и адреса блоков данных сохранились — содержимое доступно для извлечения. icat считывает блоки, на которые указывает inode, и записывает результат в файл.

Преимущество TSK перед foremost тут очевидно: при сохранном inode вы получаете оригинальное имя файла, точный размер и все временные метки. TSK поддерживает ext2/3/4, NTFS, FAT12/16/32, HFS+, exFAT и другие файловые системы.

Ограничение: если блоки данных уже перезаписаны новыми файлами, icat вернёт мусор или пустой файл. В практическом эксперименте, описанном на Medium, при попытке восстановить файл через icat содержимое оказалось пустым — данные были затёрты. В таком случае спасает только карвинг, и то если фрагменты уцелели где-то на диске.

Foremost vs Autopsy vs Sleuth Kit: когда что применять

Выбор инструмента зависит от конкретного таска. Trade-off таблица для CTF-контекста:

Критерий foremost Autopsy Sleuth Kit (CLI)
Скорость запуска Секунды Минуты (GUI + индексация) Секунды
Восстановление имён файлов Нет Да Да
Работа без метаданных ФС Да (карвинг) Частично Нет
Фрагментированные файлы Нет Частично Нет
Временная шкала событий Нет Да (Timeline) Через mactime
Поиск по ключевым словам Нет Да (Keyword Search) Нет
Графический интерфейс Нет Да Нет
Для быстрых CTF-задач Да Нет Да
Для сложного расследования Нет Да Частично
Восстановление на SSD (NTFS) Ниже Выше Зависит от целостности inode

Практический алгоритм выбора для поиска флага в CTF forensics:

  1. Начните с fls — за пять секунд увидите, есть ли удалённые файлы с сохранёнными inode
  2. Если inode целы — icat для точечного извлечения. Самый быстрый путь
  3. Если fls ничего не показывает, образ не содержит узнаваемой файловой системы или inode повреждены — запускайте foremost для массового карвинга
  4. Если задача сложная (большой образ, десятки файлов, нужна хронология или keyword search) — открывайте Autopsy

Типичные ловушки в forensics-задачах CTF

Восстановление удалённых файлов — базовый навык. Авторы задач это знают и накручивают слои усложнения, которые сбивают с толку неподготовленных участников.

Скрытые данные за пределами файловой системы

Флаг может находиться не в удалённом файле, а в областях, которые файловая система не отслеживает:

  • Slack space — остатки данных в хвосте последнего кластера активного файла. blkcat из TSK позволяет читать отдельные блоки напрямую
  • Unallocated space — пространство между разделами, не принадлежащее ни одному из них. По данным Belkasoft, unallocated space иногда используется для намеренного сокрытия данных. mmls поможет обнаружить промежутки
  • Alternate Data Streams — NTFS позволяет прикрепить к файлу дополнительные потоки данных, невидимые при стандартном просмотре. Эта техника соответствует NTFS File Attributes (T1564.004, Defense Evasion) по MITRE ATT&CK

Файлы с подменённым расширением

Техника Hidden Files and Directories (T1564.001, Defense Evasion) — частый гость на CTF: файл notes.txt содержит PNG-изображение, photo.jpg — ZIP-архив. Проверяйте реальный тип через file recovered_file или hex-редактор (первые 4-8 байт). Autopsy ловит такие несоответствия автоматически через Extension Mismatch Detector.

Вложенные контейнеры и стеганография

Образ внутри образа — классика жанра. Файл, восстановленный через foremost, может оказаться ещё одним disk image, ZIP-архивом или файловой системой второго уровня. binwalk обнаруживает вложенные объекты: ищет сигнатуры не только в начале, но и внутри данных.

Восстановленное изображение может содержать данные, спрятанные через стеганографию — техника Steganography (T1027.003, Defense Evasion). Если strings по JPEG ничего не показывает, проверьте LSB-стеганографию утилитами zsteg (для PNG/BMP) или steghide (для JPEG). Спектрограмма WAV-файла в Audacity — ещё один частый способ спрятать флаг в forensics-задачах.

Практический чеклист: от образа до флага

Нумерованный алгоритм для решения задачи с файловой системой и восстановлением удалённых файлов:

  1. file challenge.img — определить тип образа и файловой системы
  2. mmls challenge.img — найти разделы и их смещения в секторах
  3. fsstat -o <offset> challenge.img — уточнить тип ФС и размер блока
  4. fls -r -o <offset> challenge.img — получить список файлов, включая удалённые
  5. Для каждого удалённого файла: icat -o <offset> challenge.img <inode> > recovered_file
  6. Если удалённых записей нет или inode повреждены → foremost -i challenge.img -o output
  7. Проверить output/audit.txt — типы и количество карвированных файлов
  8. Для каждого восстановленного файла: file, strings, xxd | head — оценить содержимое
  9. Несоответствие расширения → переименовать и открыть корректной программой
  10. Подозрение на стеганографию → steghide info, zsteg, спектрограмма в Audacity
  11. Ничего не нашли → Autopsy с полным набором модулей, Keyword Search по flag{

Девять из десяти forensics CTF задач с файловыми системами решаются за 15-20 минут по этому алгоритму. Проблема большинства участников не в отсутствии инструментов — foremost и Sleuth Kit стоят в каждом Kali из коробки. Проблема в том, что люди не понимают, что происходит на уровне inode и блоков при удалении, и не могут интерпретировать результаты.

На практике я вижу одну и ту же ошибку: команда получает образ, сразу запускает strings challenge.img | grep -i flag и ждёт чуда. Это работает в пяти процентах случаев — когда авторы задачи оставили флаг в открытом виде. В остальных 95% флаг зашит внутри файла (изображение, PDF, архив), и strings бесполезен. fls занимает ровно столько же времени, но выдаёт структурированную картину: имена файлов, номера inode, метки удаления.

И вот ещё наблюдение, которое вызовет споры: Autopsy переоценивают в CTF-контексте. GUI удобный, модули мощные, но на соревновании с общим таймером три-четыре часа — минута на запуск Java-приложения, две на создание кейса, пять на индексацию — это время, которое вы не тратите на решение других задач. Командная строка TSK + foremost закрывают большинство тасков быстрее. Autopsy оправдывает себя, когда задача действительно комплексная: большой образ, десятки удалённых файлов, нужен timeline или полнотекстовый поиск. Таких задач — от силы одна на турнир. Вся остальная disk image forensics решается в терминале за считанные минуты, если вы понимаете, что ищете и на каком уровне файловой системы это лежит.

🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».

Поделиться

0 комментариев

Пожалуйста, войдите, чтобы оставить комментарий.

Загрузка комментариев...