MuggerMan
Опытный user
- Регистрация
- 4 Май 2022
- Сообщения
- 650
- Реакции
- 11
Конечно, угроза безопасности звучит очень пафосно, тем более для милого котика, смотрящего на вас с JPEG изображения, но среди его байт легко мог затеряться вредоносный скрипт. Давайте разберёмся, что к чему.
Некоторые примеры сигнатурных байтов:
Прочитать больше про полиглоты можно например здесь или здесь.
Первичная структура файла:
Пример изначального содержания
После изменения значения в файле появляется дополнительное место, в которое можно поместить эксплоит:
Пример измененного содержания
Структура до изменения
Необходимо добавить чанк tEXt, позволяющий записать в него скрываемую информацию, в нашем случае JS + HTML эксплоит:
Структура после изменения
Также, в PDF можно «прятать» JS эксплоиты с помощью /JavaScript /JS объектов, которые сами могут содержать исполняемый код, так и могут отсылать на другой JS объект.
В дополнение к выше перечисленным способам для скрытия эксплойтов можно запутать код с помощью hex последовательностей, в которых, например, /JavaScript может превратиться в /J#61#76#61Script. (При конвертации из hex в текст получим a = 61, v = 76, a = 61)
Что такое полиглоты и как они работают
Файл-полиглот - это файл, который меняет свой тип в зависимости от контекста использования. Чтобы лучше понять суть можно привести следующий пример — файл JPEG изображения, который также содержит в себе эксплоит для сканирования информации о компьютере на Линуксе. И в зависимости от способа использования данного полиглота изменится и его тип, это достигается за счет сохранение сигнатурных байтов, с помощью которых различные системы способны определить расширение файла.Некоторые примеры сигнатурных байтов:
- JPEG файлы — начинаются с FF D8 и кончаются FF D9
- PDF файлы — начинаются с “%PDF” (в hex формате — 25 50 44 46)
Прочитать больше про полиглоты можно например здесь или здесь.
Принципы создания полиглотов различных форматов
Так как каждое расширение файлов имеет уникальную структуру и ключевые, важные элементы, которые должны обязательно присутствовать, значит для каждого типа существует свой способ инъекции эксплоитов.Формат JPEG
При сокрытии эксплоитов в JPEG используется метод изменения структуры, который заключается в изменении значение длины (length) на необходимое количество байтов.Первичная структура файла:
![Пример изначального содержания Пример изначального содержания](https://habrastorage.org/r/w1560/getpro/habr/upload_files/4c7/7e7/d1b/4c77e7d1b8c03524fc4fd09bddbd5fce.png)
Пример изначального содержания
После изменения значения в файле появляется дополнительное место, в которое можно поместить эксплоит:
![Пример измененного содержания Пример измененного содержания](https://habrastorage.org/r/w1560/getpro/habr/upload_files/439/626/0a5/4396260a5081de14eb88cd41a805bd4e.png)
Пример измененного содержания
Формат PNG
Из-за того, что структура PNG файла представляет из себя последовательность чанков, то в основном, для сокрытия нужной информации, используется метод добавления нового чанка после IHDR. Первичная структура файла:![Структура до изменения Структура до изменения](https://habrastorage.org/r/w1560/getpro/habr/upload_files/e56/bc0/8a3/e56bc08a30a8e1cee62b55c34658512d.png)
Структура до изменения
Необходимо добавить чанк tEXt, позволяющий записать в него скрываемую информацию, в нашем случае JS + HTML эксплоит:
![Структура после изменения Структура после изменения](https://habrastorage.org/r/w1560/getpro/habr/upload_files/825/c4e/1e4/825c4e1e45757d3e6d038f240884b0b8.png)
Структура после изменения
Формат PDF
Часто используются различные методы редактирования строк. Обычно, каждая строка заключена в круглые скобки, но злоумышленнику ничего не мешает записать ее в виде “столбика” или заменить каждый символ строки его восьмеричным или шестнадцатеричным представлением, причем числа можно разделять пробелами неограниченное количество раз.Также, в PDF можно «прятать» JS эксплоиты с помощью /JavaScript /JS объектов, которые сами могут содержать исполняемый код, так и могут отсылать на другой JS объект.
![9e09a16d09820bfd2fe7e0fd7bbfde8e.png](https://habrastorage.org/r/w1560/getpro/habr/upload_files/9e0/9a1/6d0/9e09a16d09820bfd2fe7e0fd7bbfde8e.png)