
На недавнем CTF мне достался PNG с котиком весом 12 МБ — при нормальных 400-600 КБ для такого разрешения. Полтора часа я перебирал пароли к steghide, ковырял битовые плоскости через Stegsolve, даже накатал скрипт на Python для извлечения LSB. А потом запустил binwalk — и через три секунды получил вложенный ZIP-архив с флагом. Проблема была не в инструментах, а в порядке действий: я начал со сложного и пропустил элементарное. Ниже — разбор стеганографии для начинающих с конкретными командами и чек-листом, который выстроит правильный workflow раз и навсегда.
Главная ошибка новичков в стего-тасках — хвататься за специализированные инструменты для стеганографии, не сделав базовые проверки. Файл с расширением .png может оказаться переименованным ZIP-архивом, а флаг — лежать открытым текстом прямо внутри бинарных данных.
Команда file определяет реальный формат по magic bytes в заголовке, а не по расширению. Запускаете file suspicious.png и видите Zip archive data вместо PNG image — расширение врёт. Этот шаг занимает секунду, но экономит часы.
Дальше — strings. Утилита вытаскивает все читаемые текстовые последовательности из бинарного файла. В CTF-заданиях по форензике флаги часто спрятаны без какого-либо шифрования: strings image.png | grep -i "flag". Фильтрация через grep по ключевым словам (flag, ctf, key, password, hint) — обязательный приём. По данным hacklido.com, strings решает заметную часть стего-тасков начального уровня вообще без дополнительных инструментов. Серьёзно — просто strings и grep.
Если strings ничего не дал, заглядываем в hex-дамп: xxd image.png | head -50. Аномалии в заголовке, лишние данные после маркера конца файла (EOF), нестандартные последовательности байт — всё это видно именно здесь. Для работы с hex на Linux подойдёт xxd или hexdump, на Windows — HxD или 010 Editor.
Анализ метаданных файлов — второй этап после базовой разведки. Авторы CTF-заданий регулярно прячут флаги и подсказки в EXIF-полях: Comment, Artist, Copyright, GPS-координаты, XMP и IPTC.
Exiftool — стандарт для извлечения метаданных. Работает с JPEG, PNG, TIFF, PDF, аудио, видео и десятками других форматов. Базовый вызов: exiftool file.jpg — выводит все доступные метаданные. На соревнованиях полезен прицельный поиск: exiftool file.jpg | grep -i "comment\|author\|flag".
На что смотреть в выводе:
Главное преимущество exiftool — он показывает нестандартные и кастомные поля, которые обычные просмотрщики полностью игнорируют. Если автор задания вручную добавил произвольный тег, стандартные программы его пропустят, а exiftool — нет.
Любопытная деталь: exiftool присутствует в GTFOBins — списке Linux-утилит, применимых для post-exploitation. В CTF-контексте это скорее забавный факт, но в реальной цифровой форензике стоит помнить: обработка вредоносных файлов через exiftool может сама по себе стать вектором атаки.
Binwalk сканирует бинарный файл на известные сигнатуры (заголовки ZIP, RAR, gzip, ELF, файловых систем) и показывает их смещение. Это главный инструмент для обнаружения метода overlay — конкатенации файлов, когда к изображению просто приклеен архив или другой файл.
Метод overlay, подробно описанный в исследовании Securelist, — одна из самых распространённых техник стеганографии в CTF. Принцип прост: к JPEG приклеивается RAR-архив. Просмотрщик картинок читает данные до маркера конца JPEG, а архиватор пропускает всё до сигнатуры RAR!. Для человека файл выглядит как обычная картинка, но binwalk видит обе сигнатуры.
Базовый анализ: binwalk image.png. Типичный вывод:
DECIMAL HEXADECIMAL DESCRIPTION
0 0x0 PNG image, 800 x 600
1024567 0xFA037 Zip archive data, name: flag.txt
1048576 0x100000 End of Zip archive
Извлечение: binwalk -e image.png создаёт директорию _image.png.extracted/ с распакованными данными. Для рекурсивного извлечения (архив в архиве в картинке — бывает и такое, да) есть флаг -Me: binwalk -Me image.png.
Распространённая ловушка: binwalk иногда находит ложные сигнатуры — случайные последовательности байт, совпадающие с заголовками известных форматов. Если утилита показывает десятки находок в файле на 500 КБ — большинство из них шум. Проверяйте каждый извлечённый файл через file, прежде чем тратить время на анализ.
Steghide — классика стеганографии в CTF. Работает только с четырьмя форматами: JPEG, BMP, WAV, AU. Это критически важно: если вам дали PNG — steghide бесполезен, переходите к zsteg.
Проверка наличия вложения: steghide info cover.jpg. Программа сообщит, есть ли встроенные данные, и запросит пароль.
Первое действие — всегда пробовать пустой пароль: steghide extract -sf cover.jpg (программа запросит пароль интерактивно — жмёте Enter для пустого; вариант с -p "" работает, но в некоторых шеллах кавычки могут интерпретироваться некорректно). На удивление часто авторы тасков либо не ставят пароль, либо пустой пароль и есть часть задачи. Если пароль непустой — проверяйте метаданные (exiftool мог показать подсказку), название файла и описание таска.
Извлечение с известным паролем: steghide extract -sf cover.jpg -p "s3cret". Результат — файл, имя которого steghide сообщит при извлечении.
Когда пустой пароль не подходит и подсказок нет, пригодится stegseek. Это самый быстрый инструмент для перебора паролей steghide — прогоняет словарь rockyou.txt за секунды, тогда как устаревший StegCracker тратит на то же самое минуты или часы. Разница на порядки.
Вызов: stegseek cover.jpg /usr/share/wordlists/rockyou.txt. При успехе stegseek покажет найденный пароль и автоматически извлечёт спрятанный файл. Установка на Kali/Debian: apt install stegseek.
Если stegseek не находит пароль по rockyou — скорее всего, пароль нестандартный и его нужно получить из другого этапа задания, а не перебирать. Не упирайтесь в брутфорс — вернитесь к описанию таска.
LSB-стеганография — метод, при котором скрытые данные записываются в младшие биты пикселей. Изменение последнего бита каждого цветового канала (R, G, B) практически незаметно визуально. При использовании 1 младшего бита на канал RGB для сокрытия 1 байта требуется примерно 8 байт данных контейнера — то есть для 1 МБ информации нужен графический файл объёмом около 8 МБ. (Помните мой котик на 12 МБ из начала? Вот вам и арифметика.)
Zsteg — специализированный инструмент для поиска LSB-стеганографии в PNG и BMP файлах. Установка: gem install zsteg (при ошибке прав доступа — gem install --user-install zsteg или используйте rbenv/rvm).
Полный анализ: zsteg -a file.png запускает все методы проверки по всем каналам и комбинациям бит. Вывод бывает объёмным — ищите строки, похожие на текст, base64 или файловые сигнатуры.
Извлечение конкретного payload: если zsteg показал данные в определённом канале (например, b1,rgb,lsb,xy), достать их можно командой zsteg -E b1,rgb,lsb,xy file.png > output.bin.
Для визуального анализа битовых плоскостей существует Stegsolve — Java-приложение с GUI. Оно позволяет переключаться между плоскостями стрелками и обнаруживать скрытые паттерны глазами. Когда автоматика zsteg ничего не находит, ручной просмотр плоскостей через Stegsolve иногда выручает — особенно если данные закодированы нестандартным способом или распределены по нескольким каналам.
Аудио-стеганография — отдельный пласт CTF-форензики, который многие новички полностью пропускают. А зря. Подходы здесь другие, и если не знаешь куда смотреть — потеряешь кучу времени.
Самый частый тип аудио-стего на соревнованиях — скрытое изображение или текст в спектрограмме. Откройте WAV или MP3 в Sonic Visualizer (бесплатный, кроссплатформенный), добавьте слой спектрограммы через Layer → Add Spectrogram. Флаги часто «нарисованы» буквами в высокочастотном диапазоне (выше 15 кГц) — на слух ничего не заметите, но визуально текст виден отчётливо. Когда впервые видишь буквы на спектрограмме — ощущение магии.
WavSteg — Python-инструмент для извлечения данных из младших бит WAV-файлов. Вызов: python3 WavSteg.py -r -s audio.wav -o output.txt. Принцип аналогичен LSB в изображениях: контейнер — аудиосэмплы вместо пикселей.
Не забывайте проверять аудиофайлы (WAV, AU) через steghide — он поддерживает эти форматы наравне с JPEG и BMP. Команда steghide info audio.wav с пустым паролем — обязательный шаг.
Порядок действий от простого к сложному. Каждый шаг выполняется до перехода к следующему — это принципиально:
file task_file — реальный тип по magic bytesstrings task_file | grep -i "flag\|ctf\|key\|pass" — текст в бинарных данныхexiftool task_file — метаданные (Comment, Author, GPS)binwalk task_file — вложенные файлы; при находках: binwalk -e task_filesteghide extract -sf task_file -p "" — пустой парольzsteg -a task_file — LSB-анализstegseek task_file rockyou.txtПо опыту, подавляющее большинство стего-тасков начального и среднего уровня решаются на шагах 1-6. Не прыгайте к LSB-анализу, пока не проверили метаданные и overlay. Я сам на том CTF с котиком нарушил этот порядок — и потерял полтора часа.
Инструменты для стеганографии, которые мы разобрали, — не только CTF-развлечение. В реальных атаках стеганография работает как способ обхода детектирования. Согласно классификации MITRE ATT&CK, она зафиксирована минимум в двух тактиках:
По данным исследования Securelist, стеганографию использовали такие семейства вредоносов как Microcin, NetTraveler, ZeusVM и Shamoon. Загрузчик Zero.T скачивал BMP-изображения, в младших битах которых были закодированы вредоносные модули. Визуально — обычные картинки. Binwalk и анализ битовых плоскостей раскрывали payload за секунды.
Три причины популярности стеганографии у авторов малвари (по Securelist): сокрытие факта загрузки данных (не только содержимого), обход DPI-систем в корпоративных сетях, уклонение от AntiAPT-продуктов, которые не успевают анализировать все графические файлы из-за дороговизны алгоритмов.
Навыки, отработанные на CTF-тасках — разбор файлов через binwalk, анализ метаданных через exiftool, поиск LSB-аномалий — переносятся в incident response напрямую. Тот же чек-лист применим, когда SOC-аналитик получает подозрительное вложение из почтового трафика.
Я не раз видел, как специалисты впервые сталкивались с настоящим стегоконтейнером на живом инциденте — и тратили часы на то, что решается за минуты, если есть CTF-бэкграунд. Но у соревновательной практики есть обратная сторона: на CTF ты знаешь, что флаг точно спрятан, а в реальной форензике 90% файлов окажутся чистыми. Переключение мышления с «ищи, оно здесь» на «скорее всего ничего нет, но проверь методично» — главный барьер при переходе от тасков к продакшн-задачам. Инструменты одни и те же, workflow тот же, а вот подход к принятию решений — принципиально другой. Если хочешь не просто writeup прочитать, а пройти атаку самому от разведки до эксфильтрации — на WAPT эта цепочка разложена по модулям с лабами и ментором на каждом этапе.
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...