• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Прячем информацию внутри PNG файла

В одной из статей была рассмотрена структура PNG файлов. Стоит напомнить о том, что первые 8 байт файла – это сигнатура PNG 89 50 4E 47 0D 0A 1A 0A. То, что идет дальше является фрагментами (chunk).

Структурно чанк включает в себя: 4 байта длина фрагмента (Length), 4 байта типа чанка (Chunk type), данные (Chunk data) и 4 байта контрольной суммы (CRC). В случае отсутствия какой-либо информации чанке, длина равняется нулю, а блок чанк данных отсутствуют. CRC всегда присутствует, даже для фрагментов, не содержащих данных.

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

Существует четыре обязательных (критически важных) фрагмента: IHDR, IDAT, PLTE, IEND.

Однако здесь возникает неоднозначность - палитра критически важна только для изображений, у которых ColorType = COLOR_PALETTE, для остальных она допустима (правильный декодер должен попытаться ей воспользоваться, если монитор может отображать одновременно лишь ограниченное число цветов), но как правило отсутствует. Помимо обязательных чанков, существуют и дополнительные фрагменты, содержащие текстовую информацию: iTXt, tEXt, zTXt. Следует отметить, что первая строчная буква указывает на необязательность вышеназванных чанков.

Вторая буква названия фрагмента заглавная, если он «публичный», то есть входит в спецификацию. Если буква строчная, то чанк «частный». Adobe Fireworks использовала формат PNG в качестве базового, но добавила туда свои собственные фрагменты mkBS, mkTS, mkBF, prVW и другие, чтобы хранить информацию о слоях и векторах, чтобы можно было сохранить проект в PNG, а позже открыть его и продолжить работать как ни в чем ни бывало.

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

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

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

Если бит безопасного фрагмента блока равен 1, блок может быть скопирован в измененный файл PNG независимо от того, распознает ли программа тип блока и независимо от степени изменения файла.

Если бит равен 0, то нераспознанные небезопасные чанки не должны копироваться в конечный файл PNG.

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

Файл в который внедряем (исходный файл): input.png
Файл, который внедряем (скрываемый файл): codeby.jpg
  • Создаем файл punk.chunk;
  • Открываем его HEX редактором;
  • Вставляем в начало следующие байты «70 75 4e 6b» либо добавляем «puNk» – это будет приватный чанк, защищенный от копирования;
  • Затем после «puNk» вставляем шестнадцатиричный код внедряемого изображения;
  • Открываем утилиту TweakPNG;
  • Перетаскиваем исходное изображение в программу;
  • Нажимаем Edit->Import Chunk и указываем наш файл punk.chunk
  • Мы внедрили в структуру нашего PNG еще одно изображение. Конечно же здесь не обойтись без криптографии, потому что, открыв изображение в HEX редакторе, можно увидеть еще одну сигнатуру JFIF.
28879


К сожалению, сжимать и изменять формат файла нельзя, так как скрытая информация теряется вместе с остальными метаданными.
Данную операцию можно провести посредством Python. Сам класс для импорта приложен к данной статье.

С условием, что мы осуществили импорт необходимого класса Punk, делаем следующее:
Python:
punk = Punk() #Объявляем класс
punk.encode('input.png', file('codeby.jpg').read()) # Внедряем;
punk.decode('input.png', 'out.jpg') # Декодируем;

Таким образом, мы рассмотрели возможность реализации сокрытия информации в частном чанке PNG файла. Применение данного способа необходимо дополнить криптографическим шифром. В таком случае анонимность передачи сообщений будет близка к 100%.

Полезные ресурсы:
  • PNG — not GIF!
 

Вложения

  • punk.zip
    1 КБ · Просмотры: 468

8bit

The Codeby Youtube
Green Team
09.04.2018
19
122
BIT
0
Да, делайте видео, только со всеми пояснениями и практикой. Если озвучиваете сами, то не должно быть шума. Дикция и качество речи тоже оценивайте. Если нет - то тайминг необходим. Качество видео должно быть минимум 1080
 

datestandroid

One Level
04.06.2019
2
1
BIT
0
Кстати, если 4 буква чанка заглавная, то содержимое не будет потеряно, даже если картинка будет изменена/обрезана/увеличена и пр. И в чанк можно залить любое содержимое (на пример zip/rar архив) Его можно будет открыть изменив расширение картинки на соответствующее. Плюс определить наличие в фале "левой" информации уже значительно сложнее, чем при "склеивании"
 
  • Нравится
Реакции: GlowFisch
Мы в соцсетях:

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