CTF Основы стеганографии в "capture the flag"

sinner67

Green Team
24.03.2017
279
358
BIT
0
Всем хорошего времяпрепровождения!

Недавно образовалась команда новичков по ctf нашего любимого форума, в связи с этим своей статьей хотел бы начать обмен опытом, так сказать, по решению тасков той или иной направленности. Ведь всегда есть некий алгоритм, которому вы следуете при решении тасков, который приводит, на легком и среднем уровне, к найденному флагу. Это тот уровень, который находится между «пфф, изипизи» и тем, когда вы начинаете видеть заговоры иллюминатов во всех хинтах и файлах.

И так, я попробую рассказать вам основы стеганографии. Точнее сказать, основы в моем представлении. Приятного чтения :)

1. Область применения

Что такое стеганография рассказывать не буду, дабы не захламлять статью. Просто поясню, что это метод сокрытия информации в объектах(картинка, музыка, видео, кожа головыJ(это не шутка) и т.д.) в которых непосвященный человек не сможет разглядеть ничего подозрительного.

В ctf чаще всего встречается стего в следующих типах файлов:
----> Картинки – bmp, png, jpg, tiff, gif
----> Звуковые файлы – wav, mp3, midi
----> Видео файлы – mp4, avi
И для каждой области файлов свои инструменты обнаружения стего.

2. Инструменты
Ниже будут приведены тулзы для определения стеганографии разделенные по операционным системам. Я их выделил две: Linux и Windows.

Картинки:
Linux:
----> File – консольная утилита для определения типа файла
----> Strings – консольная утилита для вывода строк файла
----> Exiftool – консольная утилита для чтения мета-данных
----> Binwalk - инструмент для поиска файлов и исполняемого кода в данном двоичном образе
----> Stegsolve - open source решение для анализа структуры файлов
----> Steghide - консольная C++ утилита позволяющая скрывать информацию методом стеганографии в графических или аудио файлах
Windows:
----> PentestBox - портативная сборка популярных security утилит
----> Stegsolve - open source решение для анализа структуры файлов
Web ресурсы:
----> - аналог exiftool
----> - определения геоданных в картинке
----> - дешифровка стего зашифрованных с помощью метода lsb(если скрытая часть является то же картинкой)
----> - декодирование стего картинки если в ней зашифрован текст
----> - аналог предыдущего
Python библиотеки:
----> from PIL import Image
img = Image.open('steg.png', 'r')
for i in range(128): #цикл по высоте (допустим ширина 128 пикселей)
for j in range(128): #цикл по ширине(допустим ширина 128 пикселей)
r,g,b = img.getpixel((j,i)) #чтение каждого цвета одного пикселя

Думаю этого пока будет достаточно что бы решить практически любой таск по стего легкого и среднего уровня.

Звуковые файлы:
Со звуковыми файлами нет необходимости разделения по операционным система т.к. софт и там и там одинаков. За исключения основных утилит: file, strings exiftool и их аналогов в Windows, которые я описал выше.

----> Sonic Visualiser – это приложение для просмотра и анализа содержимого музыкальных аудио-файлов
----> Audacity - свободный многоплатформенный аудиоредактор звуковых файлов, ориентированный на работу с несколькими дорожками
----> Python:
----> from scipy.io.wavfile import read
rate, samples = read('steg.wav') #чтение рейтов и массива семплов для их анализа
----> - декодер стего файлов

Видео файлы:
----> ffmpeg - набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах
Я извинтиляюсь за такой скудный набор тулз для стего видео файлов, но это связано с моим скудным опытов в ctf. И все задачи которые я решал по стего, которые были связаны с видео файлами, сходились к тому, что бы разбить видео ряд на кадры и уже с ними продолжать работу.

Что же, инструменты даны. Теперь я бы хотел показать вам как я с этими инструментами работа при решении тасков.

3. Использование

Картинки:
Windows:
----> PentestBox
Первым делом качаем . Он нам необходим для возможности использовать утилиты Linux (file, strings, grep).
После установки и запуская вы должны будете увидеть консольку, в которой можно использовать некоторые unix команды.
----> Утилита file
Вот смотрите, допустим у нас есть файл steg.txt
1.png

Давай те посмотрим на него через утилиту file
2.png

и вы только посмотрите какой хитрец подлец. Оказывается это bmp файл. Картинка.
----> Утилита strings
Далее, снова имеем в наличии файл steg.bmp. Давайте попробуем использовать утилиту strings. Мы там увидим много чего(неполезного), а вот что бы увидеть полезное давайте немного подружим strings с grep и вот что мы получим:
3.png

«Изипизи» как говорится. Ессесно слово flag замените на любое другое по которому вы его будете искать.

Этот метод, кстати, будет бесполезен если вы получите данные картинки, в виде одной строки. Например после манипуляций с python. Т.к. утилита strings, как следует из названия, читает файл по строкам. Ну вы понимаете конечно, что если искать вхождение какой нибудь подстроки в большой строке, то тут можно получить только один тип информации. А именно есть эта подстрока в этой строке или нет.
----> Stegsolve
ООооочень полезная утилите для стего. Качаем прогу . Это исполняем jar файл, по этому для запуска необходим предустановленный jdk или jre.
И так программа имеет следующий интерфейс
4.png

----> #1 File format – выдает информацию вида
5.png

Очень полезен для определения спрятанных сообщений и даже картинок и файлов внутри исследуемой картинки.
----> #2 Data extract – то же очень полезная возможность программы позволяющая выявить lsb стего. Виде интерфейса меню такой
6.png

Выбрав некоторые биты цветов(как показано на картинке) stegsolve прочтет только те биты которые вы отметили и выдаст результат в форме.
Главная проблема заключается в том, что бы понять, в какие биты были использованы для стего.
----> #3 Stereogram Solver – накладывает друг на друга одно и то же изображение, после чего есть возможность двигать один из слоев. Выглядит все это примерно так
7.png

Далее покажу на нормальном пример и вы увидите его полезность.
----> #4 Frame browser –позволяет нам просматривать гиф по кадрам. По моему опыту еще ни разу не использовал эту часть.
----> #5 Image combainer – позволяет нам накладывать два изображения друг на друг(как в режиме stereogram solver, но картинки разные) благодаря чему можно увидеть различия (видимые) в картинках. Это применяется тогда, когда нам дана картинка со стего и ее оригинал. Ну об этом расскажу чуть позже.

Ну и самое главное, это начальный экран программы, который позволяет просматривать картинку по слоям, оставляя только сини пикси или зеленые, или только первые биты красного цвета и многое другое.

Вывод прост – очень полезная программа, которая достойна быть в арсенале любого, кто решать стего таски.

Linux:
За исключением exiftool, binwalk и steghide все что мы перечислили выше справедливо и для Linux. По этому далее мы рассмотрим только три этих утилите.

----> Утилита exiftool – читает мета-данные файлом. Применяется первым делом. Может дать много разной информации от автора статьи до кол-во фреймов на секунду в видео файле.
----> Steghide оооочень хорошо описан данный инструмент . Так же эта утилита фигурирует в курсе ParaNoID, так что советую к ней приглядеться ;)
----> Binwalk
То же очень полезная тулза. Распознает сигнатуры внутри файла. Но я не советую свято верить ему. Были моменты когда он давал неправильную информацию. Как я понял это из за того, что он просматривает только сигнатуры начала.
Binwalk имеет очень много функций, но нам достаточно 2х. Просто передавая ему файл на вход мы получаем инфу о хранящихся в нем файлах.
А добавив ключ -e распакуем эти файлы в ту же директорию, что и оригинальный файл в отдельную директорию _[имя файла].
Выглядит это примерно так: Есть файл steg.jpg, вот что выдает утилита file
8.png

Он думает что это картинка :) Давайте спросим у binwalkа
9.png

У него есть другое мнение. Давайте дадим ему попробовать распаковать их binwalk -e steg.jpg
10.png
11.png

вот мы и нашли спрятанные картинки :)

Звуковые файлы:
----> Sonic Visualizer
Функционал:
Открывать звуковые файлы различных форматов (WAV/AIFF, Ogg, mp3 и т.д.) и просматривать их графическое представление;
Просматривать такие визуализации, как волновое представление и спектрограмма с возможностью интерактивного управления параметрами отображения;
В одном окне программы строить несколько волновых представлений и спектрограмм, причем каждая визуализация может иметь собственные параметры отображения;
Синхронно прокручивать все интересующие построенные визуализации и изменять их масштаб;
Снабжать звуковые данные примечаниями с помощью добавления различных меток и выделения отрезков сигнала

По моему опыту вся работа в этом редакторе сводится только к тому, что бы просмотреть звуковой ряд под разными слоями спектрограмм и игры с их настройками.

Давай те покажу на примере. Пусть имеется некий wav файл. Если просто открыть его в SV то вот что мы увидим
12.png
Пока что ничего не понятно. Но если наложить слой спектрограммы
13.png

и вот мы уже видим более осмысленную картину, с которой уже можно работать
14.png
Что касается Audacity, то это аналогичный аудио редактор с практически теми же возможностями. Тут уж кто чем привык пользоваться.

Видео файлы:
Как я уже писал выше весь мой опыт работы с видео файлами, в стего, сводился к тому, что бы разрезать видео ряд на кадры и уже с ними работать как с картинками. По этому приведу лишь одну строчку кода, которая позволяет это сделать с помощью ffmpeg.

ffmpeg -i input.mp4 -r 25 -f image2 images%05d.png

где:
----> i – видео файл, который необходимо разбить на фреймы
----> -r – кол-во фреймов в секунду. Можно узнать в мета данных файла
----> -f – тип файла в который необходимо перевести фрейм

Так же может быть полезен ключ –t: ffmpeg -i input.mp4 -r 25 –t 00:00:01 -f image2 images%05d.png
Этот ключ позволяет обработать заданное кол-во времени видео файла. В данном примере 1 секунду.


Теперь я бы хотел расписать некие алгоритмы для различных ситуаций:

- Первым делом, не важно, какой это файл, проверяйте утилитами file, exiftool, binwalk.
- Далее проверьте утилитой strings [имя файла] | grep –I [искомая подстрока(например flag)]
- Если ничего из этого не дало результата, то далее уже все зависит от вида объекта.
Картинка:
- Если картинка монотонная, то первым делом попробуйте открыть его в каком нибудь реакторе и примините заливку или используйте утилиту Steglove и прогоните по слоям.
было:
15.png

стало:
16.png

Есть с чем работать, как говорится.
- Если на картинке вы видите два цвета, то первая ваша мысль должна быть – бинарный код
Например:
17.png

Для облегчения это задачи есть наш верный друг python и его библиотека PIL.
Код:
Используем следующим образом:
Подключаем библиотеку: import PIL from Image
Читаем картинку: img = Img.open(‘[File name]’, ‘r’)
С помощью цикла пробегаем по каждому пикселю и читаем его:
    For I in range([Height]):
        For j in range([Weight]):
            r,g,b = img.getpixel((j,i))
- Если же у нас дана обычная картинка и в ней зашифровано стего, то стоит поискать оригинал картинки с помощью сервисов google pictures или аналогов.
- Так же было бы не лишним прогнать картинку по всем веб ресурсам которые я указывал выше.

Звуковые файлы:
- Если звуковой файл при прослушивании похож на зов пришельцев в брачный период, то сразу же посмотрите спектрограмму этого файла как я описывал выше. С большой вероятностью вы увидите, что то с чем можно будет работать.
- Если звуковая дорожка монотонно. Я имею ввиду, что на протяжении всей дорожки частоты не превышают определенной границы, то скорее всего это в файле зашифрована бинарная последовательность. На разных слоях спектрограммы будет лучше видно. Так же в этом может помочь наш друг python и его библиотека scipy.io.wavfile.
Код:
Подключаем библиотеку: from scipy.io.wavfile import read
Читаем частоту и семплы: rate, samples = read('steg.wav')
Пробегаем по массиву семплов и проверяем наши догадки:
    for I in range(len(samples)):
        print(samples[i])
- Если же звуковой файл у нас будет в стерео, то код немного поменяется:
Код:
Подключаем библиотеку: from scipy.io.wavfile import read
Читаем частоту и семплы: rate, samples = read('steg.wav')
Пробегаем по массиву семплов и проверяем наши догадки:
    for I in range(len(samples)):
        print(str(samples[i][0]) + ‘-’ + str(samples[i][1]))
Т.е. каждый элемент массива samples будет иметь массив из двух значений. Первой и второй дорожки соответственно.
Кстати из за этого можно попробовать найти разность звуковых дороже.
Код:
Подключаем библиотеку: from scipy.io.wavfile import read
Читаем частоту и семплы: rate, samples = read('steg.wav')
Пробегаем по массиву семплов и проверяем наши догадки:
    for I in range(len(samples)):
        print(samples[i][0]-samples[i][1])
Вполне может оказаться, что результатом станет последовательность цифр каждый элемент которой, переведя в нужную кодировку, может составлять флаг.

На этом я хочу, пока что, закончить. Статья будет дополняться, украшаться и улучшаться, что бы стать достойным пособием для новичков в стего. Так же хотелось бы прочитать о ваших способах работы со стего.
Надеюсь эта статья пригодится новичкам и поспособствует приливу новой крови в бурную реку ctf соревнований. Всем удачи!

Ссылки на тулзы:

Stegsolve -

PentestBox -

Sonic Visualiser -

(есть в репозитории Kali)

Audacity -

(есть в репозитории Kali)

Ffmpeg -

(есть в репозитории Kali)
 
Последнее редактирование:

Dallas system

Gold Team
03.06.2019
68
152
BIT
100
Отличная статья и обзор инструментов. Премного благодарен. Жаль что алгоритмы "под капотом" остались не удел)) но это обычно отдельная дисертационная работа и пост не об этом.
Я бы добавил еще пару онлайн тулз для вычисления stego. Сам использовал в CTF. Больше добавить нечего.
 
  • Нравится
Реакции: Nubusers

Nubusers

Green Team
23.07.2019
55
21
BIT
0
Отличная статья и обзор инструментов. Премного благодарен. Жаль что алгоритмы "под капотом" остались не удел)) но это обычно отдельная дисертационная работа и пост не об этом.
Я бы добавил еще пару онлайн тулз для вычисления stego. Сам использовал в CTF. Больше добавить нечего.
Да, согласен по поводу статейки. Тем более мне сейчас актуально Кстати, не подскажете по CTF ещё больше инфы где достать можно? По мимо ЦТФ зоны) ещё где то есть?)
 
Последнее редактирование:

Dallas system

Gold Team
03.06.2019
68
152
BIT
100
Да, согласен по поводу статейки. Тем более мне сейчас актуально Кстати, не подскажете по CTF ещё больше инфы где достать можно? По мимо ЦТФ зоны) ещё где то есть?)
Весь мир в твоем распоряжении и гугл пророк его. А если серьезно, то о какой информации для CTF ты конкретно спрашиваешь? Применительно к crypto, или по всем остальным направлениям тоже? Загляни в местную библиотеку, там есть замечательные книги по многим направлениям для ознакомления.
 
  • Нравится
Реакции: Nubusers

Dallas system

Gold Team
03.06.2019
68
152
BIT
100
для каких целей приминается

стеганография?​

скрытая передача данных внутри потоков данных, цифровая защита авторских работ и прочего, контроль целостности объекта, например защита от изменения изображения или звука, дополнительная маркировка продукта.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!