• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Стеганография: Прячем данные в JPEG-изображениях

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Вы когда-нибудь задумывались, как такие инструменты, как ExifTool или Stegano, работают изнутри? Быть может, хотели создать свою собственную программу для встраивания секретных данных в изображения?

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

Основы
Чтобы понять, как встраивать секретные данные в файлы изображений, сначала необходимо понять, как выглядит файловая структура JPEG.

В качестве примера, давайте возьмем любое изображение в данном формате и бросим его в шестнадцатеричный редактор (например, HxD):

19890f8cab6883f5018e8.png

Этот hexdump выглядет впечатляюще (если вы ранее не работали с чем-то схожим), однако, волноваться не стоит. Я сейчас объясню каждый фрагмент, необходимый нам для работы, не более. Существует несколько важных байтов, которые будут полезны при стеганографии.

FF xx байты обозначают маркеры в структуре JPEG-файлов, маркеры используются для различных вещей, таких как метаданные, миниатюры изображений, обозначения начала и конца файлов JPEG, и многое другое.

Для нашей цели важны следующие маркеры:
FF D8 => Это маркер, обозначающий начало потока данных JPEG
FF D9 => Это маркер, обозначающий окончание потока данных JPEG
FF DA => Это маркер, показывающий фактическое начало JPEG-картинки.

В результате каждый из этих 4 байтов будет присутствовать буквально в любом существующем файле JPEG, и это полезная информация, если вы хотите проанализировать изображения JPEG и вам необходимо выяснить, где они начинаются и заканчиваются.

Маркеры всегда следуют одному и тому же соглашению (за исключением маркера FF D8):
FF => Начало маркера
xx => буквально любое шестнадцатеричное значение (1 байт), чтобы «идентифицировать» маркер.
xx xx => 2 байта пространства данных, обозначающих размер маркера.

ВАЖНО: этот общий размер ДОЛЖЕН включать в себя и эти 2 байта! (пример: если вам нужен размер 32 байта, вам действительно нужно выделить 34 байта!)

DATA => все ваши байты данных

Примечание. Некоторые значения уже зарезервированы. С полным списком можно ознакомиться тут: https://www.disktuna.com/list-of-jpeg-markers/


Выбор правильного маркера и перезапись данных

Лучшим решением для скрытия своих данных в изображении будет использование следующих маркеров:

FF E2 - FF EF => маркеры приложения, которые не используются для декодирования изображения JPEG, они обычно используются для метаданных.

FF FE => это маркер «комментария», который также игнорируется декодерами JPEG.

Эти маркеры - именно то, что мы будем использовать, чтобы скрывать данные в любом JPEG-изображении.

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

Я бы вообще не советовал переписывать что-либо, чего вы не знаете - работайте лишь с тем, что знаете наверняка.

Основным преимуществом данного подхода является его использование для вставки полезной нагрузки в изображении.

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


Пример: скрытие ключа расшифровки AES-256
Скрытие ключа для расшифровки (публичный ключ) AES-256 в изображении было бы довольно хорошим вариантом использования в нашем случае, AES-256 - это надежный алгоритм шифрования, и скрытие ключа в картинке не будет раздувать изображение так же сильно, как скрытие всей полезной нагрузки.

Ключ AES-256 требует 32-буквенного предложения / слова (1 символ - 1 байт => 32 байта = 256 бит, если вы не знакомы с байтами и битами). Я выбрал следующий ключ: ThisIsAsuperSecretDecryptionKey!

Не верите, что здесь 32 байта? Может быть, вы поверите консоли PowerShell:

41ad95b923e868b918d47.png

Теперь, представим данный ключ в hex:

277a5feb8403ff4d42146.png

Когда у нас есть ключ правильной длины и шестнадцатеричное значение этого ключа, мы можем начать процесс скрытия данных:

FF => Начало маркера

FE => означает, что мы делаем «комментарий».

00 22 => 2 байта пространства данных, обозначающих размер маркера (34 - 00 22 в шестнадцатеричном формате)

54686973497341537570657253656372657444656372797074696f6e4b657921 => (шестнадцатеричное значение ThisIsAsuperSecretDecryptionKey!)

Мы можем ВСТАВИТЬ (не перезаписывая) этот маркер непосредственно перед началом любого другого маркера (FF), находящегося перед маркером FF DA (фактическим началом изображения).

Заметите разницу?

175936a7ee66fe6b659f4.jpg

d2bac9b7640c9a4455938.jpg

Они выглядят одинаковыми на первый взгляд... но давайте заглянем внутрь:

c890229547801135b8b5c.png


4313f1f3c9a0a90aac8df.png


Альтернативный подход + Обнаружение
Другой безопасный подход - добавить полезную нагрузку после маркера конца изображения (FF D9). Так работают большинство программ для стеганографии. Вы даже можете замаскировать свою полезную нагрузку, добавляя ненужные данные впоследствии, чтобы полезная нагрузка находилась не только в конце hexdump. Все, что осталось сделать, это написать программу, которая будет искать ваш ключ дешифрования в образе hexdump ?

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

оригинал https://blog.nviso.eu/2020/07/13/how-to-embed-secret-data-in-jpeg-files/
Перевод Moody канал Cybred
 
Обнаружить это довольно сложно, так как владельцу организации придется проверять все изображения, которые загружаются работниками.

Современные DLP могут обрабатывать на лету довольно большой поток трафика. Но тестирование плагина к одной из DLP показало отличные результаты.
А еще есть способ перенаправить весь трафик на SPAN-порт, который в свою очередь будет проверяться еще одним средством.

Но есть человеческий фактор. Пример на почтовой системе. Есть фильтры, которые блокирует какое-то письмо, и все последующие становятся в очередь и не уходят. А тут и пользователи подходят с жалобами. Фильтр выключают и все письма начинают уходить. Если искусственно создать подобную ситуацию и подгадать момент, то и ваша инфа уйдет.

Конечно, все очень индивидуально. Но если есть время, то такое возможно.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх