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

15 мин.00

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

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

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

Образ диска на 256 МБ, файловая система FAT — монтируешь, а внутри пусто. Ноль файлов, ноль директорий кроме корневой. Типичный forensics-таск на CTF, который вгоняет в ступор тех, кто видит дисковые образы впервые. А решается за пару минут — если понимаешь, что rm не стирает данные с поверхности диска, а просто убирает запись из файловой таблицы. Сами байты лежат на месте, пока поверх них не запишется что-то новое. В этом разборе пройдём полный цикл forensics CTF задания по восстановлению файлов из образа: от теории удаления до file carving через foremost и глубокого анализа в Autopsy. Каждый шаг — с командой, ожидаемым результатом и объяснением, почему именно этот disk forensics инструмент именно в этой ситуации.

Что происходит при удалении файла и почему данные остаются на диске

Чтобы восстанавливать удалённые файлы из дисковых образов, нужно понимать, как файловые системы устроены на низком уровне. Любая FS — FAT32, ext4, NTFS — делит пространство диска на блоки (кластеры) фиксированного размера. Метаданные о каждом файле (имя, размер, расположение блоков, временные метки) хранятся отдельно: в таблице FAT для FAT32, в inode для ext4, в MFT для NTFS.

Когда файл удаляется, ОС не обнуляет содержимое блоков. Она помечает запись в таблице метаданных как свободную и возвращает занятые блоки в пул доступного пространства. По данным Belkasoft, «deleting files does not physically remove them from the drive: it just means that the space they were using changes its status from occupied to free». Содержимое лежит на диске до тех пор, пока ОС не запишет новые данные поверх этих блоков. На этом принципе и построена вся цифровая криминалистика при работе с дисками.

Две области, где прячутся удалённые данные:

  • Unallocated space — блоки файловой системы, не принадлежащие ни одному активному файлу (включая освободившиеся после удаления). Основной источник при восстановлении удалённых файлов. Не путать с unpartitioned space — областью диска вне таблицы разделов, которая может содержать остатки старых партиций или данные, записанные через Direct Volume Access (T1006, Defense Evasion — техника характерна прежде всего для Windows).
  • Slack space — неиспользованный остаток последнего блока файла. Если файл занимает 1500 байт, а кластер — 4096, оставшиеся 2596 байт могут содержать фрагменты предыдущего файла. Мелочь, но на CTF флаги прятали и туда.

Для восстановления критически важна концепция файловых сигнатур (magic bytes). Большинство форматов начинаются с уникальной последовательности: JPEG — FF D8 FF, PNG — 89 50 4E 47, PDF — 25 50 44 46, ZIP — 50 4B 03 04. Утилиты для data recovery сканируют raw-байты образа в поисках этих сигнатур и «вырезают» (carve) файлы из потока, не обращая внимания на файловую систему. Как отмечает Belkasoft, хорошая сигнатура должна быть достаточно длинной и уникальной — заголовок SQLite «SQLite Format 3» подходит отлично, а двухбайтовый «MZ» слишком короток и даёт ложные срабатывания.

В CTF авторы заданий нередко имитируют техники антифорензики: удаление файлов (File Deletion, T1070.004, Defense Evasion), подмену временных меток (Timestomp, T1070.006), скрытие файлов и директорий (Hidden Files and Directories, T1564.001). Понимание этих техник из MITRE ATT&CK — ключ к решению заданий категории forensics.

Требования к окружению и создание тренировочного образа

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

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

  • ОС: Kali Linux 2023.x+ / Ubuntu 22.04+ / Debian 12+ (любой дистрибутив с доступом к apt-репозиториям)
  • RAM: 4 ГБ — минимум для foremost и CLI-утилит Sleuth Kit; 8 ГБ — рекомендуется при работе с Autopsy (индексирует содержимое образа в памяти, и на 4 ГБ заметно тормозит)
  • Диск: 500 МБ свободного пространства для тренировочных образов и результатов carving
  • Инструменты: foremost (зрелый проект, стабилен, активная разработка завершена — в репозиториях Kali/Debian), Autopsy 4.x / Sleuth Kit (активно поддерживается, регулярные обновления), dd, xxd, file, strings
  • Сеть: не требуется, все инструменты работают полностью offline
  • Права: root или sudo для mount/umount, остальные операции — от обычного пользователя

Установка CLI-инструментов: sudo apt install foremost sleuthkit binwalk vim-common (пакет vim-common включает xxd). Autopsy 4.x — desktop-приложение на Java, устанавливается отдельно: скачайте .deb с https://www.sleuthkit.org/autopsy/ или используйте Windows-версию.

Создаём тренировочный образ

Для отработки навыков анализа дисков в CTF нужен образ с «удалёнными» файлами. Создадим его за пять минут. Подготовьте два-три тестовых файла: PNG-изображение, текстовый файл, небольшой PDF. Текстовый файл с имитацией флага: echo "CTF{d1sk_f0r3ns1cs_101}" > flag.txt.

# Создаём пустой образ 64 МБ и форматируем в FAT
dd if=/dev/zero of=ctf_disk.img bs=1M count=64
mkfs.vfat ctf_disk.img
# Монтируем, копируем тестовые файлы, удаляем их
sudo mkdir -p /mnt/ctf_test
sudo mount -o loop ctf_disk.img /mnt/ctf_test
sudo cp flag.txt screenshot.png notes.pdf /mnt/ctf_test/
sync
sudo rm /mnt/ctf_test/*
sudo umount /mnt/ctf_test

После размонтирования у нас dd образ диска, в котором файловая система считает все блоки свободными, но данные физически на месте. Стартовая точка типичного CTF-задания по forensics.

Если примонтировать образ заново, ls покажет пустую директорию. Но strings ctf_disk.img | grep CTF уже найдёт наш флаг в «пустом» образе — строки-то существуют на уровне байтов, а не файловой системы. Этот приём — strings + grep — вообще первое, что стоит делать с любым forensics-заданием. Дешёвая проверка, которая иногда решает таск за десять секунд. Я видел людей, которые запускали Autopsy на образе, где флаг лежал plain text'ом. Полчаса ждали индексацию.

File carving с foremost — восстановление файлов по сигнатурам

foremost — консольная утилита для восстановления файлов методом carving. Она ничего не знает о файловой системе: последовательно читает raw-байты образа, ищет известные сигнатуры заголовков (header) и, если возможно, окончания (footer) файлов. Нашла начало JPEG по сигнатуре FF D8 FF? Читает до footer-маркера FF D9 или до лимита размера — и записывает результат в отдельный файл. По классификации Belkasoft, это метод header signature carving — самый распространённый подход к file carving.

Запускается одной командой: foremost -i ctf_disk.img -o recovered/. Флаг -t ограничивает типы файлов: -t png,jpg,pdf. Результат — директория recovered/ с поддиректориями по типам и файл audit.txt с подробным отчётом:

Foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus
Audit File

Num      Name (bs=512)         Size       File Offset     Comment
0:      00000034.png          42 KB       17408
1:      00000098.pdf          156 KB      50176
Finish: Mon Jun  2 14:23:01 2025

2 FILES EXTRACTED

foremost присвоил файлам номера на основе смещения (offset) в блоках по 512 байт. Оригинальные имена утрачены — foremost их не восстанавливает, потому что работает ниже уровня файловой системы. Это ключевое ограничение: вы получите содержимое файла, но не контекст — где он лежал, когда был создан, кто к нему обращался.

Что foremost делает хорошо

Быстрый carving из любого образа, даже с повреждённой или неизвестной FS. Работает с raw-дампами, снятыми через dd, включая образы без таблицы разделов. Минимальные зависимости, запускается в любом Linux-окружении. Результат появляется за секунды даже на образах в несколько гигабайт — утилита делает линейное чтение без индексации. Для CTF это идеально: запустил, получил файлы, пошёл дальше.

Ограничения foremost

Нет метаданных. Имена файлов, пути, временные метки (MAC timestamps) — всё теряется. Вы получаете восстановленный файл, но не знаете, где он лежал и когда был создан.

Фрагментированные файлы — боль. Если файл записан в несмежные блоки (типичная ситуация для ext4 и NTFS), foremost часто восстановит только первый фрагмент или склеит «мусор» из соседних блоков. По данным Belkasoft, footer-сигнатура «may easily be overwritten or located at the end of the disk space due to the fragmentation, which makes this method less reliable».

Текстовые файлы — мимо. У .txt нет стандартного заголовка, foremost не умеет надёжно карвить plain text. Для поиска текстовых флагов — strings + grep, без вариантов.

Ложные срабатывания. Короткие или неуникальные сигнатуры дают false positives. Последовательность MZ (заголовок PE/EXE) — всего два байта, и foremost может «найти» исполняемые файлы там, где их нет.

Autopsy — анализ образа диска с полным контекстом

Если foremost — это лом, которым вскрывают дверь, то Autopsy — набор отмычек с рентгеном. Autopsy — GUI-интерфейс над Sleuth Kit (TSK), набором CLI-утилит для анализа файловых систем. В отличие от foremost, Autopsy понимает структуру FS: видит удалённые записи в inode-таблице или FAT, знает имена и пути файлов, читает MAC-метки. Как отмечает InfoSec Writeups, Autopsy — «a powerful open-source toolkit for filesystem analysis» с возможностями keyword search и анализа unallocated space.

Рабочий процесс Autopsy для анализа образа диска

Autopsy 4.x — desktop-приложение на Java. Запустите через ярлык или /opt/autopsy/bin/autopsy. В GUI — File → New Case, укажите имя задания. Добавьте источник данных — загрузите ctf_disk.img. Autopsy автоматически распознает файловую систему и проиндексирует содержимое. (Legacy Autopsy 2.x использовал веб-интерфейс на localhost:9999, но эта версия deprecated и удалена из большинства репозиториев — забудьте про неё.)

После индексации откройте раздел File Analysis. Удалённые файлы отображаются с соответствующей пометкой — в нашем тренировочном образе вы увидите flag.txt, screenshot.png и notes.pdf с оригинальными именами. Autopsy покажет MAC-временные метки каждого файла: когда создан (crtime), модифицирован (mtime), когда к нему обращались (atime). Для поиска флага по всему образу — Keyword Search: введите паттерн CTF{ или flag{, и Autopsy просканирует allocated и unallocated пространство, включая slack space.

Sleuth Kit — CLI-альтернатива для быстрого анализа

Тот же Sleuth Kit, который стоит под капотом Autopsy, доступен через командную строку. Две ключевые утилиты для CTF заданий по forensics: fls (file list, включая удалённые) и icat (извлечение файла по номеру inode).

# Показать все файлы, включая удалённые (* = deleted)
# На FAT Sleuth Kit использует условные адреса directory entry,
# а не Unix-inode; конкретные номера зависят от образа.
fls ctf_disk.img
# r/r * 3:       flag.txt
# r/r * 5:       screenshot.png
# r/r * 7:       notes.pdf

# Извлечь удалённый файл по адресу записи
icat ctf_disk.img 3 > recovered_flag.txt
cat recovered_flag.txt
# CTF{d1sk_f0r3ns1cs_101}

Звёздочка * перед именем — deleted. Команда icat читает блоки данных, на которые указывает запись метаданных (inode на ext, directory entry на FAT), и пишет результат в файл. Имя, путь, временные метки — всё сохраняется в метаданных, которые можно посмотреть через istat ctf_disk.img 3. Для навигации по партициям — mmls ctf_disk.img, утилита покажет таблицу разделов со смещениями. Если в образе несколько партиций, добавляйте флаг -o offset к fls и icat. Для рекурсивного просмотра поддиректорий — fls -r.

Когда Autopsy не поможет

Повреждённая файловая система. Если суперблок (ext4) или загрузочная запись (FAT) разрушены — Autopsy не сможет распарсить FS. Возвращайтесь к foremost для сигнатурного carving.

Raw-дамп без партиций. Образ может быть дампом отдельного раздела, а не целого диска. mmls ничего не покажет, но fls с явным указанием типа FS (-f fat или -f ext4) может сработать напрямую.

Большие образы на слабом железе. Autopsy индексирует всё содержимое, и на образе в 10+ ГБ с 4 ГБ RAM работа затягивается на часы. Для быстрого прохода по крупным образам начинайте с foremost или strings | grep — сэкономите нервы.

foremost vs Autopsy — когда какой disk forensics инструмент выбирать

Критерий foremost Autopsy / Sleuth Kit
Принцип работы Сигнатурный carving (header/footer) Анализ файловой системы + carving
Восстановление имён файлов Нет Да (если запись метаданных не перезаписана)
Временные метки (MAC) Нет Да
Фрагментированные файлы Часто повреждены Справляется лучше (если FS цела)
Скорость на больших образах Быстро (линейное чтение) Медленно (индексация, парсинг)
Keyword Search Нет (используйте strings + grep) Встроенный
Повреждённая FS Работает (FS не нужна) Не работает или частично
Интерфейс CLI GUI + CLI (fls, icat, istat)
Когда использовать Быстрый триаж, повреждённая FS, carving из raw-дампа Полный анализ с контекстом и таймлайном
Когда НЕ использовать Нужны метаданные или имена файлов Нужен мгновенный результат, FS разрушена

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

Альтернативы в том же классе: scalpel — форк foremost с более гибкой конфигурацией сигнатур, PhotoRec — интерактивный инструмент с поддержкой сотен форматов (и неплохим автоопределением), extundelete — заточен под ext3/ext4. Выбор зависит от файловой системы, типа задания и того, нужны ли вам метаданные.

Ловушки forensics CTF заданий и чеклист решения

Forensics-таски на CTF редко сводятся к простому file carving. Авторы заданий используют приёмы антифорензики и добавляют слои усложнения. Вот что встречается чаще всего — и на чём горят даже опытные участники.

Подмена расширений и сигнатур

Файл назван document.txt, а внутри — PNG-изображение. Команда file document.txt определит реальный тип по magic bytes, а не по расширению. В Autopsy несовпадение расширения и содержимого подсвечивается автоматически — раздел Extension Mismatch Detected. Это одна из техник обнаружения файлов (File and Directory Discovery, T1083).

Обратный вариант: авторы задания повреждают первые байты файла, чтобы file не смог определить тип. Тогда помогает hex-анализ через xxd suspicious_file | head -5 — смотрите на первые байты вручную и сверяйте с таблицами сигнатур. Репозиторий сигнатур Гэри Кесслера — стандартный справочник для этого.

Вложенные образы и архивы

Образ диска внутри образа диска — не редкость в forensics CTF. Такая матрёшка. foremost и Autopsy работают только с первым уровнем. Для обнаружения вложений — binwalk ctf_disk.img, утилита покажет все встроенные файлы со смещениями. binwalk -e ctf_disk.img автоматически извлечёт вложения. Особенно полезно, когда внутри одного .img спрятан ZIP-архив или второй дисковый образ.

Timestomp и манипуляции с метаданными

Авторы задания могут подделать временные метки файлов (Timestomp, T1070.006, Defense Evasion). Если в задании важна хронология событий — не доверяйте mtime/atime безоговорочно. Проверяйте: совпадает ли время создания файла в inode с внутренними метаданными (EXIF в изображениях через exiftool, метаданные PDF). Несоответствия часто и есть подсказка — авторы рассчитывают, что участники заметят аномалию. На одном CTF я потерял час, потому что верил таймстампам, а флаг был зашит именно в расхождении между mtime и EXIF-датой.

Стеганография — это не carving

Частая ошибка: файл восстановлен, но флага в нём «нет». Это может означать, что данные скрыты внутри валидного файла методами стеганографии (Steganography, T1027.003, Defense Evasion). foremost и Autopsy тут бессильны — нужны специализированные инструменты: steghide для JPEG, zsteg для PNG, stegsolve для визуального анализа LSB. Если carving дал валидный файл, но флаг не обнаружен — проверяйте стего перед тем, как тратить время на поиск «ещё одного скрытого файла».

Скрытые файлы и альтернативные потоки данных

В Linux файлы, начинающиеся с точки (.secret), не отображаются при стандартном ls (Hidden Files and Directories, T1564.001). В NTFS существуют Alternate Data Streams — дополнительные потоки, невидимые для обычного проводника (NTFS File Attributes, T1564.004 — техника специфична для Windows/NTFS). Autopsy обрабатывает оба случая корректно, но при ручном монтировании не забывайте ls -la и find /mnt/ctf -name ".*". Казалось бы, очевидно — но на соревнованиях про ls -la забывают удивительно часто.

Чеклист для решения forensics CTF задания

  1. file challenge.img — определить тип файла и формат образа
  2. strings challenge.img | grep -iE "flag\{|ctf\{" — быстрый поиск флага в открытом виде
  3. mmls challenge.img — посмотреть таблицу разделов и смещения
  4. mount -o loop,ro challenge.img /mnt/ctf — примонтировать в read-only, проверить содержимое
  5. ls -la /mnt/ctf && find /mnt/ctf -name ".*" — проверить скрытые файлы
  6. foremost -i challenge.img -o out/ — file carving удалённых файлов
  7. fls -r challenge.img — список всех файлов, включая удалённые
  8. binwalk challenge.img — проверить вложенные файлы и архивы
  9. Открыть Autopsy — keyword search, timeline, extension mismatch
  10. Проверить каждый найденный файл на стеганографию и hex-аномалии

Порядок не случаен: начинаем с дешёвых проверок (strings, file), переходим к среднему уровню (mount, foremost), заканчиваем тяжёлой артиллерией (Autopsy, стего-анализ). На CTF время ограничено, и этот порядок экономит минуты, которые иначе уйдут на ожидание индексации Autopsy по образу, где флаг лежал в plain text.


Forensics в CTF часто воспринимается как категория второго сорта — мол, настоящие хакеры решают pwn и web, а восстановление удалённых файлов для тех, кому не хватило навыков. Из моего опыта — ровно наоборот. Навыки дисковой аналитики, file carving и работы с образами — одни из немногих CTF-дисциплин, которые переносятся в работу DFIR-аналитика практически без изменений. Та же Autopsy, тот же Sleuth Kit, те же принципы — разница только в масштабе образа и количестве артефактов.

Что меня реально беспокоит — forensics-задания на большинстве CTF до сих пор сводятся к одному из двух паттернов: «найди PNG в образе FAT32» или «раскодируй base64 из EXIF». Это создаёт ложное впечатление, что анализ дисков в CTF — тривиально. В реальности аналитик работает с терабайтными образами, фрагментированными файлами на ext4, намеренно затёртыми метаданными и файловыми системами, для которых foremost даже не имеет сигнатур. Задания уровня «восстанови фрагментированный DOCX из ext4 с journal replay» я встречал на CTF ровно один раз — и его не решила ни одна команда.

Если хотите вырасти в disk forensics дальше базового carving — разбирайтесь с внутренним устройством файловых систем. Не на уровне «FAT хранит файлы в кластерах», а на уровне «как ext4 journal позволяет восстановить файл, который rm удалил пять минут назад». Sleuth Kit даёт все инструменты для такого погружения: jls и jcat для работы с журналом, blkstat и blkls для анализа отдельных блоков. Это следующий уровень, и именно он отличает того, кто решает CTF-задания по разбору forensics, от того, кто расследует реальные инциденты.

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

Поделиться

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

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

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