Как стать автором
Обновить

Может ли быть GIF «троянским» конем?

Немного введения


При написании программы для просмотра GIF файлов обнаружил довольно таки любопытный момент.

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

Именно поэтому возможна такая вещь как бесконечный GIF или онлайновый GIF.

(Более подробно о них можно почитать здесь: «GIF-сокеты. Коммуникации в реальном времени через анимированный GIF»).
Сам GIF устроен внутри блочно, т.е. заканчивается один блок, начинается другой, и т.д. Некоторые блоки жестко зафиксированы, некоторые нет.

Теперь же мы подошли к основной части


Интересным на мой взгляд стало то, что некоторые блоки не регламентированы по объему данных, в них содержащихся.
В качестве примера могу привести блок «комментария», изначально в него планировалось записывать авторов GIF, которые создали ту или иную картинку. Однако теперь, при чтении изображения, обычно он пропускается.

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

Дополнительный блок комментария содержит текстовую информацию, которая реально не является частью какого-либо графического изображения в формате GIF, помещенного в текущий поток данных. Назначение этого блока — запись комментариев к графическим изображениям, официальных сведений, описаний или информации любого другого типа, не связанной с управлением или передачей графических данных. Декодировщик может игнорировать дополнительный блок с комментариями, либо заносить его в буфер для последующей обработки. Однако блок комментариев ни в коем случае не должен ни прерывать процесс обработки потока данных, ни влиять на него каким-либо образом.
Данный блок относится к разряду НЕОБЯЗАТЕЛЬНЫХ. В потоке данных может встречаться любое количество блоков с комментариями.
Спецификация GIF


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

На этот вопрос тоже есть ответ, есть такой блок, как «Дополнительный блок приложений».

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

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

А теперь главное


image
Не один из блоков не может самостоятельно выполнить код заложенный в нем. А это означает, что только лишь с помощью какой либо внешней программы может быть выполнен код (если он есть) лежащий внутри GIF.

Однако такие картинки могут выступать в качестве переносчиков частей программного тела вредоносного ПО.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.