Главная / Блог / Форензика CTF: как анализировать файлы и находить скрытые данные — пошаговый гайд

14 мин.00

Форензика CTF: как анализировать файлы и находить скрытые данные — пошаговый гайд

Форензика CTF: как анализировать файлы и находить скрытые данные — пошаговый гайд

Форензика CTF: как анализировать файлы и находить скрытые данные — пошаговый гайд

На первом PicoCTF я потратил 40 минут, тупо пялясь на файл без расширения. Открывал в текстовом редакторе — каша символов. Переименовал в .jpg — не открылось. Закинул в Google — бесполезно. Задачу решила одна команда file за три секунды: внутри лежал JPEG, а флаг сидел в поле Comment метаданных. С тех пор прошло два года и больше сотни решённых forensics-тасков. Этот гайд — тот ресурс, который я хотел иметь перед стартом: пошаговый алгоритм от «скачал непонятный файл» до извлечения флага, с конкретными командами и объяснением, зачем каждая из них нужна.

Что ждёт новичка в forensics-задачах на CTF

Forensics на CTF — это не расследование инцидентов в корпоративной сети. Согласно Trail of Bits CTF Field Guide, задачи этой категории включают анализ форматов файлов, стеганографию, разбор дампов памяти и анализ сетевого трафика. Суть одна: вытащить скрытую информацию из статических данных.

В реальном мире цифровая криминалистика — поиск следов атакующего в логах, реестре, памяти и файловых системах. На CTF всё проще и игровее: вам дают файл (или несколько), а вы ищете строку-флаг. Задачи нередко напоминают матрёшку — файл внутри файла внутри файла, и для каждого слоя нужен свой инструмент.

Основные типы задач на соревнованиях:

  • Анализ форматов файлов — определить, что за файл перед вами, найти аномалии в структуре, починить повреждённый заголовок
  • Стеганография CTF — извлечь данные, спрятанные внутри изображений или аудиофайлов (в реальных атаках это техника Steganography, T1027.003 по MITRE ATT&CK — злоумышленники маскируют полезную нагрузку внутри легитимных файлов)
  • File carving — достать вложенные файлы из контейнера, образа диска или другого файла
  • Анализ сетевых дампов (PCAP) — восстановить переданные данные из записи трафика
  • Metadata forensics — найти скрытые данные в метаданных: координаты, комментарии, автора, временные метки

Для начинающих forensics — одна из самых дружелюбных категорий. Как отмечает Trail of Bits, здесь не нужны дорогие коммерческие инструменты вроде IDA Pro, которые дают преимущество в reverse engineering. Для форензики хватает набора бесплатных утилит командной строки. Поле выровнено для всех.

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

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

Перед решением задач подготовьте рабочую среду.

ОС: Linux (Kali Linux 2024+, Parrot OS, Ubuntu 22.04+). MacOS подходит с оговорками — часть open-source инструментов может не скомпилироваться. Windows — через WSL2 с Ubuntu, но Wireshark лучше ставить нативно.

RAM: минимум 4 ГБ для базовых задач (file, strings, binwalk). Рекомендуется 8 ГБ — для крупных PCAP-файлов в Wireshark и дампов памяти через Volatility.

Диск: 20 ГБ свободного пространства — извлечённые файлы из binwalk и foremost иногда занимают неожиданно много.

Минимальный набор инструментов:

Инструмент Назначение Установка (Kali/Ubuntu)
file Определение типа файла по magic bytes Предустановлен
exiftool Анализ метаданных файлов sudo apt install libimage-exiftool-perl
strings Поиск текстовых строк в бинарных данных Предустановлен (пакет binutils)
xxd Создание hex-дампа Предустановлен
binwalk Анализ и извлечение вложенных файлов sudo apt install binwalk
steghide Стеганография в JPEG/WAV/BMP/AU sudo apt install steghide
zsteg LSB-стеганография в PNG/BMP gem install zsteg
foremost Восстановление файлов по сигнатурам sudo apt install foremost
Wireshark Анализ сетевого трафика (PCAP) sudo apt install wireshark

В Kali большинство инструментов предустановлено. На чистом Ubuntu весь набор ставится за пару минут. Дополнительно пригодится hexedit для ручного редактирования байтов — sudo apt install hexedit.

Алгоритм решения forensics-задач

Универсального рецепта нет — каждый таск уникален. Но есть последовательность, которая работает в подавляющем большинстве случаев. Я прогоняю её на каждом CTF:

  1. Определить тип файла — file
  2. Прочитать метаданные — exiftool
  3. Поискать читаемые строки — strings
  4. Заглянуть в hex-представление — xxd или hexdump -C
  5. Проверить на вложенные файлы — binwalk
  6. Если изображение — проверить стеганографию (steghide, zsteg, stegsolve)
  7. Если PCAP — открыть в Wireshark

Алгоритм циклический. Извлекли вложенный файл через binwalk — начинаете сначала: определяете тип, смотрите метаданные, ищете строки. Повторяете, пока не найдёте флаг. Именно эту стратегию описывает «Курс молодого CTF бойца» на cybber.ru: «Что за объект мы имеем? Какие особенности? Какие отличия от эталонного типа? Какие методы решения существуют?» — и цикл до победного конца.

Определяем тип файла: команда file и magic bytes

Первое действие с любым файлом на CTF — выяснить, что это. Расширение часто отсутствует или намеренно изменено — это часть задачи.

Команда file использует библиотеку libmagic для идентификации по «магическим байтам» — уникальным последовательностям в заголовке файла. Каждый формат имеет свою сигнатуру: PNG начинается с 89 50 4E 47 (в ASCII — .PNG), JPEG — с FF D8 FF, ZIP — с 50 4B 03 04, PDF — с 25 50 44 46 (%PDF).

$ file mystery_challenge
mystery_challenge: PNG image data, 1920 x 1080, 8-bit/color RGBA, non-interlaced
$ file another_file
another_file: Zip archive data, at least v2.0 to extract
$ file broken_file
broken_file: data

Первый файл — PNG, второй — ZIP-архив, третий — «data», то есть формат не определён. Результат «data» — сигнал к ручному анализу через hex-дамп.

Ограничение file: утилита работает по эвристике и легко обманывается. Если организаторы CTF подменили первые байты заголовка, file покажет неверный результат. Тогда нужно руками смотреть hex через xxd mystery_file | head -5 и сравнивать первые байты с таблицей известных сигнатур.

Для более точной идентификации есть TrID — утилита с расширенной базой форматов, которая показывает вероятность определения в процентах. Особенно полезна для проприетарных и экзотических форматов.

Реальный пример: на PlaidCTF 2015 участники получили файл, который file определил как «LaTeX document, ASCII text». Открытие в LaTeX-редакторе ничего не дало. Но текстовый редактор показал строку \begindata{raster,1} — поиск по ней привёл к описанию формата ATK raster images (.CMU) из Andrew User Interface System. Переименование в .CMU и открытие в XnView дало изображение с флагом. Вот почему после file всегда стоит заглядывать в содержимое текстовым редактором или hex-дампом — file не всеведущ.

Анализ метаданных с exiftool

Метаданные — первое место, где организаторы CTF прячут подсказки или сам флаг. Утилита exiftool читает метаданные из десятков форматов: JPEG, PNG, PDF, DOCX, MP3, MP4 и многих других.

Запуск: exiftool suspicious_image.jpg. В выводе обращайте внимание на:

  • Comment — самое популярное место для флага в простых задачах. Новички часто пропускают его, копаясь в пикселях
  • Author / Artist — иногда содержит подсказку, часть флага или base64-строку
  • GPS Position — координаты могут указывать на место, связанное с ответом (пересечение с OSINT-задачами)
  • Software — программа создания файла подсказывает, какие манипуляции проводились
  • Thumbnail Image — миниатюра внутри JPEG иногда отличается от основного изображения и содержит оригинальную версию до редактирования

В реальных расследованиях анализ метаданных помогает установить автора документа, время создания, устройство съёмки. На CTF — это быстрый способ получить флаг без глубокого анализа. Злоумышленники в реальном мире используют технику Timestomp (T1070.006 по MITRE ATT&CK) для подмены временных меток — понимание структуры метаданных помогает обнаруживать такие манипуляции.

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

Strings и hex-анализ: скрытые данные в файлах

Утилита strings вытаскивает все читаемые текстовые последовательности из бинарного файла. Метод грубый, но удивительно результативный — флаг нередко лежит прямо в теле файла в открытом виде.

$ strings -n 8 -o challenge.png
    1234 flag{h1dd3n_1n_pl41n_s1ght}
    5678 Created with GIMP
   12890 iCCPICC Profile
   45230 aHR0cHM6Ly9leGFtcGxlLmNvbQ==

Флаг -n 8 устанавливает минимальную длину строки в 8 символов (по умолчанию 4 — слишком много мусора). Флаг -o показывает смещение каждой строки в файле — пригодится для ручного извлечения.

Что искать в выводе strings:

  • Строки формата flag{...}, CTF{...}, picoCTF{...} — прямой флаг
  • Base64-кодированные строки (характерный набор букв, цифр и = в конце) — декодировать через echo "строка" | base64 -d. В примере выше aHR0cHM6Ly9leGFtcGxlLmNvbQ== — это base64
  • URL-адреса, email-адреса, пути к файлам — подсказки для следующего шага
  • Имена файлов (.txt, .pdf, .zip) — указание на вложенные данные

Для побайтового анализа — xxd (hex-дамп) или hexdump -C. Просмотр первых строк: xxd challenge.png | head -20. Hex-редактор hexedit позволяет не только смотреть, но и редактировать байты — это критично, когда организаторы намеренно испортили заголовок файла.

Типичная задача: файл не открывается ничем, file говорит «data». Смотрите первые байты через xxd и видите, что вместо 89 50 4E 47 (корректная сигнатура PNG) стоит 89 50 4E 00 — испорчен один байт. Исправляете 00 на 47 в hexedit, сохраняете — файл открывается, внутри изображение с флагом. Такие задачи встречаются на каждом втором CTF для новичков, и решаются они за минуту, если знаешь, куда смотреть.

Ограничения strings: находит только ASCII и Unicode (с флагом -e l для UTF-16 little-endian или -e b для big-endian). Если данные закодированы XOR-шифром, сжаты или обфусцированы — strings бесполезен. Тут нужна деобфускация через скрипт на Python. Trail of Bits CTF Field Guide подробно описывает работу с бинарными данными через bytearray — чтение файла в массив байтов, посимвольный XOR с ключом, реверс последовательности.

Binwalk и file carving: извлечение файлов из файлов

File carving — извлечение файла, вложенного внутрь другого. Классический приём в forensics CTF заданиях: внутри PNG прячется ZIP-архив, внутри архива — текстовый файл с флагом. Binwalk — главный инструмент для этого.

Анализ без извлечения: binwalk challenge.png — покажет список найденных сигнатур с их смещениями. Если binwalk нашёл ZIP-архив на смещении 0x145A0, следующий шаг — извлечение.

Извлечение: binwalk --extract challenge.png — создаст директорию _challenge.png.extracted со всеми найденными вложенными файлами. После извлечения запускаете цикл алгоритма заново: file на каждом извлечённом файле, затем exiftool, strings и далее по списку.

Для ручного извлечения по известному смещению — dd: dd if=challenge.png of=hidden.zip bs=1 skip=83360. Здесь skip — смещение в байтах, которое binwalk показал в анализе. Ручной способ полезен, когда автоматическое извлечение binwalk ломает структуру файла (а такое бывает).

Альтернатива — foremost: foremost -i challenge.png -o output_dir. Работает по тому же принципу (поиск по сигнатурам), но иногда находит то, что binwalk пропустил. Если один инструмент не дал результата — попробуйте другой. Это не лень, это метод.

Ограничения binwalk:

  • Ложные срабатывания — случайные совпадения байтов с известными сигнатурами. Binwalk может «найти» десяток файлов там, где реально есть один
  • Не извлекает данные, спрятанные стеганографически в пикселях — для этого нужны стего-инструменты
  • На сильно обфусцированных файлах с нестандартными форматами может не найти ничего
  • Автоматическое извлечение иногда ломает структуру вложенного файла — тогда dd надёжнее

Стеганография CTF: скрытые данные в изображениях и аудио

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

Инструменты для анализа изображений

steghide работает с JPEG, BMP, WAV и AU. Извлечение: steghide extract -sf image.jpg. Если данные защищены паролем, steghide запросит его. Пустой пароль (просто Enter) срабатывает удивительно часто на начальных задачах — всегда пробуйте первым. Для брутфорса паролей есть stegseek — быстрый перебор по словарю.

zsteg специализируется на PNG и BMP, ищет данные в младших битах пикселей (LSB — Least Significant Bit). Запуск: zsteg image.png. Выводит все потенциальные скрытые данные по разным битовым каналам и кодировкам. Работает быстро, результат сразу.

stegsolve — Java-приложение для визуального анализа. Позволяет переключать цветовые каналы, применять фильтры, просматривать отдельные битовые плоскости. Нужен, когда данные спрятаны визуально — текст, написанный цветом, отличающимся от фона на один бит. Глазами не видно, но при фильтрации проступает.

Критично: steghide не работает с PNG, zsteg не работает с JPEG. Это самая частая ошибка новичков — запускают не тот инструмент под формат. Таблица совместимости:

Инструмент JPEG PNG BMP WAV Метод
steghide Да Нет Да Да Встраивание с паролем
zsteg Нет Да Да Нет LSB-анализ
stegsolve Да Да Да Нет Визуальный анализ битовых плоскостей

Запомните эту таблицу — она сэкономит кучу времени на соревнованиях.

Аудиостеганография

Данные в аудиофайлах часто прячут в спектрограмме. Откройте файл в Audacity (или Sonic Visualiser) и переключитесь в режим спектрограммы. Нередко на ней виден текст или QR-код, нарисованный частотами — классический приём для начальных CTF-задач. Выглядит как магия, когда видишь в первый раз.

Онлайн-инструменты

Отдельного упоминания заслуживает Aperi'Solve — онлайн-сервис, который автоматически прогоняет загруженный файл через strings, file, zsteg, binwalk, foremost и другие утилиты одновременно. Один сервис заменяет первые пять шагов алгоритма. StegOnline позволяет анализировать битовые плоскости изображений в браузере без установки Java для stegsolve. Стеганография по-настоящему ощущается только когда сам разбираешь реальные файлы с вложениями. Готовый стенд для практики есть на HackerLab.pro — российская CTF-платформа с категориями forensics, stego, crypto и другими. Нужна регистрация, после неё доступны задачи разных уровней сложности.

Анализ сетевых дампов в Wireshark

PCAP-файлы — запись сетевого трафика. В CTF-заданиях по форензике внутри обычно скрыты переданные файлы, учётные данные или текстовые сообщения.

Базовый алгоритм работы с PCAP:

  1. Открыть файл: wireshark capture.pcap
  2. Посмотреть Protocol Hierarchy через Statistics → Protocol Hierarchy — какие протоколы есть в дампе
  3. Для HTTP-трафика: File → Export Objects → HTTP — извлечёт все переданные файлы одной кнопкой
  4. Для TCP-потоков: правый клик на пакете → Follow → TCP Stream — покажет содержимое сессии в читаемом виде
  5. Фильтры для сужения поиска: http (только HTTP), dns (DNS-запросы), ftp-data (FTP-передачи), tcp.port == 4444 (конкретный порт)

Что искать: HTTP-ответы с подозрительными файлами или base64-данными, DNS-запросы к нестандартным доменам (DNS-туннелирование — данные закодированы в поддоменах), FTP-сессии с передачей файлов, нешифрованные credentials в HTTP Basic Auth.

Ограничение: если трафик зашифрован TLS, Wireshark покажет только факт соединения, но не содержимое. На CTF обычно дают либо нешифрованный трафик, либо TLS-ключи отдельным файлом для дешифровки.

Какой инструмент выбрать: таблица решений

Вместо того чтобы запускать всё подряд, используйте таблицу:

Ситуация Первый инструмент Следующий шаг
Файл без расширения file По результату — соответствующий инструмент
JPEG-изображение exiftoolstringssteghide Если пусто — binwalk
PNG-изображение exiftoolstringszsteg Если пусто — binwalk, stegsolve
Архив или бинарный файл stringsbinwalk --extract Анализ извлечённых файлов
Аудиофайл (WAV/MP3) strings → спектрограмма в Audacity steghide (для WAV)
PCAP-файл Wireshark → Export Objects Follow TCP Stream
file говорит «data» xxd — проверить magic bytes Починить заголовок в hexedit
Ничего не находится Aperi'Solve (онлайн) Пересмотр подхода, проверка подсказок

Инструменты форензики: что выбрать и когда отказаться

Сводная таблица для быстрого выбора с учётом ограничений:

Инструмент Преимущества Ограничения Когда НЕ использовать
file Мгновенный результат, предустановлен Обманывается подменой magic bytes Заголовок намеренно повреждён
exiftool Поддержка сотен форматов Не находит стего-данные Файл сильно повреждён
strings Быстрый поиск текста в любом файле Не находит закодированные данные XOR/шифрованные данные
binwalk Автоматическое извлечение вложений Ложные срабатывания, ломает структуру LSB-стеганография
steghide Извлечение с паролем Только JPEG, BMP, WAV, AU PNG-файлы
zsteg Быстрый LSB-анализ Только PNG и BMP JPEG, аудио
foremost Восстановление по сигнатурам Медленнее binwalk на больших файлах Задачи без вложенных файлов

Типичные ошибки новичков в форензике для начинающих

Самая частая ошибка — запустить один инструмент, не получить результата и сдаться. Forensics CTF задания часто требуют цепочки из 3-5 инструментов последовательно: сначала binwalk извлекает ZIP, потом strings находит base64 внутри текстового файла, потом base64 -d раскодирует его в ещё один файл. Вторая ошибка — игнорировать «скучный» вывод strings: флаг может быть среди сотен мусорных строк, и без grep его легко пропустить.

Ещё грабли, на которые наступают регулярно:

  • steghide с пустым паролем — всегда пробуйте пустой пароль первым, перед брутфорсом через stegseek
  • binwalk без --extract — сначала запускайте без флага (анализ), потом с флагом (извлечение). Автоматическое извлечение создаёт десятки мусорных файлов, если запустить сразу
  • Неправильная кодировка strings — по умолчанию ищет ASCII. Для UTF-16 используйте strings -e l (little-endian) или strings -e b (big-endian)
  • Фильтрация выводаstrings challenge.png | grep -i "flag" или strings challenge.png | grep -i "ctf" часто решает задачу за секунду

Форензика на CTF — это прежде всего методичность. Не интуиция, не везение, а последовательное прохождение алгоритма с каждым файлом, который встретился на пути. Я видел, как новички решают сложные стего-задачи быстрее опытных игроков — просто потому, что проходят чеклист шаг за шагом, не пропуская «очевидные» пункты. Опытные участники иногда перепрыгивают через базовые проверки и упускают флаг, лежащий в поле Comment метаданных. CTF writeup-разборы на CTFtime подтверждают это раз за разом: победители чаще всего использовали не какой-то хитрый инструмент, а стандартный набор fileexiftoolstringsbinwalk — просто делали это дисциплинированно.

Проверьте себя: скачайте любой forensics-таск с picoCTF или HackerLab и прогоните через весь алгоритм от начала до конца. Если хочется разобраться глубже и с наставником — на codeby.school в курсе IB Basics эту цепочку проходят на реальных файлах без «вы должны знать Linux на уровне X» в качестве входного барьера.

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

Поделиться

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

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

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