
На одном из недавних 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 каждый файл описывается структурой inode — она хранит указатели на блоки данных, временные метки, права доступа и размер. При удалении файла:
В 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 — ценный источник артефактов, а иногда и место для целенаправленного сокрытия данных.
Перед началом работы убедитесь, что окружение готово:
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/Получили файл образа на 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 показывает тип файловой системы, размер блока и общий объём. Зная размер блока, вы понимаете минимальную гранулярность данных и можете оценить, фрагментирован ли восстановленный файл.
Foremost — утилита карвинга файлов, изначально разработанная Управлением специальных расследований ВВС США (AFOSI) и развивавшаяся Ником Микусом в центре CISR при Naval Postgraduate School. Принцип работы прямолинеен: foremost сканирует входной файл побайтово, ищет известные заголовки и футеры, вырезает всё найденное в отдельные папки. В Kali предустановлен и готов к работе.
В CTF forensics задачах 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 быстрый, но ограниченный. Знать его слабые стороны так же полезно, как и сильные:
00000123.jpg. Если задача требует найти файл по конкретному имени — foremost тут бессиленFF D8 FF может встретиться внутри совершенно другого файла (архив, база данных) — foremost вытащит этот кусок как «восстановленный JPEG»Autopsy использует метаданные файловой системы в дополнение к сигнатурному карвингу, что даёт ему серьёзное преимущество при восстановлении удалённых файлов. Но об этом — ниже.
Autopsy — графическая платформа цифровой криминалистики, построенная поверх The Sleuth Kit. В отличие от foremost, Autopsy работает с файловой системой на структурном уровне: парсит таблицы размещения, восстанавливает дерево каталогов, считывает метаданные удалённых файлов, запускает поиск по ключевым словам и строит временные шкалы.
Для быстрых CTF-задач Autopsy избыточен — foremost справится быстрее. Но в сложных случаях, когда нужно найти файл по имени, проанализировать порядок событий или покопаться в метаданных, без Autopsy не обойтись.
Пошаговый процесс в Autopsy для анализа образа диска:
apt install autopsy): запуск autopsy из терминала откроет веб-интерфейс. New Case → Add Host → Add Image → Disk 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:
flag{, CTF, secret, key= и паттернов Base64flag.txt в photo.jpg)После завершения анализа в Autopsy перейдите в раздел удалённых файлов через дерево навигации. Удалённые файлы отмечены характерным маркером и доступны для просмотра и экспорта. Для каждого файла Autopsy показывает:
Для поиска флага CTF forensics используйте модуль Keyword Search: задайте паттерн flag\{.*\} (регулярное выражение) или прямую строку flag{. Autopsy проиндексирует содержимое всех файлов, включая удалённые, и покажет совпадения с указанием файла-источника.
Отдельно стоит упомянуть Timeline — хронологическая шкала всех файловых операций. Если CTF-задача подразумевает расследование инцидента, timeline покажет, в каком порядке создавались и удалялись файлы, что поможет восстановить последовательность действий злоумышленника.
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 содержимое оказалось пустым — данные были затёрты. В таком случае спасает только карвинг, и то если фрагменты уцелели где-то на диске.
Выбор инструмента зависит от конкретного таска. Trade-off таблица для CTF-контекста:
| Критерий | foremost | Autopsy | Sleuth Kit (CLI) |
|---|---|---|---|
| Скорость запуска | Секунды | Минуты (GUI + индексация) | Секунды |
| Восстановление имён файлов | Нет | Да | Да |
| Работа без метаданных ФС | Да (карвинг) | Частично | Нет |
| Фрагментированные файлы | Нет | Частично | Нет |
| Временная шкала событий | Нет | Да (Timeline) | Через mactime |
| Поиск по ключевым словам | Нет | Да (Keyword Search) | Нет |
| Графический интерфейс | Нет | Да | Нет |
| Для быстрых CTF-задач | Да | Нет | Да |
| Для сложного расследования | Нет | Да | Частично |
| Восстановление на SSD (NTFS) | Ниже | Выше | Зависит от целостности inode |
Практический алгоритм выбора для поиска флага в CTF forensics:
fls — за пять секунд увидите, есть ли удалённые файлы с сохранёнными inodeicat для точечного извлечения. Самый быстрый путьfls ничего не показывает, образ не содержит узнаваемой файловой системы или inode повреждены — запускайте foremost для массового карвингаВосстановление удалённых файлов — базовый навык. Авторы задач это знают и накручивают слои усложнения, которые сбивают с толку неподготовленных участников.
Флаг может находиться не в удалённом файле, а в областях, которые файловая система не отслеживает:
blkcat из TSK позволяет читать отдельные блоки напрямуюmmls поможет обнаружить промежуткиТехника 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-задачах.
Нумерованный алгоритм для решения задачи с файловой системой и восстановлением удалённых файлов:
file challenge.img — определить тип образа и файловой системыmmls challenge.img — найти разделы и их смещения в секторахfsstat -o <offset> challenge.img — уточнить тип ФС и размер блокаfls -r -o <offset> challenge.img — получить список файлов, включая удалённыеicat -o <offset> challenge.img <inode> > recovered_fileforemost -i challenge.img -o outputoutput/audit.txt — типы и количество карвированных файловfile, strings, xxd | head — оценить содержимоеsteghide info, zsteg, спектрограмма в Audacityflag{Девять из десяти 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 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...