Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #86, ФЕВРАЛЬ 2006 г.

WMF: баг года

крис касперски ака мыщъх

Хакер, номер #086, стр. 086-066-5


Берем с диска уже готовый файл PlayMetaFile.exe и загружаем его в отладчик, нажимая <F9> для запуска программы, которая тут же грохается, поскольку натыкается на забор из CCh, каждый из которых соответствует машинной инструкции INT 03h, вызываемой отладчиком. Смотрим на EIP. Он указывает на 8B001Dh (естественно, на других системах это значение может быть иным). Карта памяти показывает, что эта область памяти имеет атрибуты «Только на чтение» (см. рис 13) и при активном аппаратном DEP никакой код здесь исполняться не может (программный DEP от этого не защищает). Однако по умолчанию DEP задействован только для некоторых системных служб, а пользовательские программы могут вытворять что угодно… Такая вот, значит, ситуация.

А как ведет себя Irfan Viewer? Посмотрим-посмотрим. Регистр EIP указывает на 13D31Ch, и, судя по карте памяти, находится глубоко в стеке, доступном как на чтение, так и на запись, но только не на исполнение. Значит, если задействовать DEP для всех приложений, wmf-эксплойты окажутся неработоспособны, однако далеко не все процессоры поддерживают DEP, так что угроза атаки вполне актуальна, но все-таки не настолько велика, как это пытаются представить некоторые антивирусные компании.

[как работают известные сплоиты]

Известные мне эксплойты внедряют в wmf-файл ecsape-последовательность META_ESCAPE, вызывающую функцию SETABORTPROC, которая, в свою очередь, регистрирует пользовательскую callback-функцию, изначально предназначенную для отмены заданий, уже находящихся в очереди на печать. Это не единственная GDI-функция, принимающая callback'и, есть и другие (как документированные, так и не совсем, например, LineDDA, SetICMMode), но, по-видимому, только META_ESCAPE/SETABORTPROC может быть внедрена в метафайл. Или все-таки нет? Дизассемблирование GDI32.DLL показывает огромное количество функций типа call reg, где reg - указатель, полученный из wmf-файла, каждая из которых может оказаться новым «священным граалем» и новой дырой, но не будем на них останавливаться, чтобы не облегчать работу «специалистам по безопасности», питающихся чужими идеями. Впрочем, хакеры поступают точно так же, и прежде, чем разрабатывать собственного червя, препарируют уже существующие. Мы последуем этой тенденции и расковыряем сейчас какой-нибудь сплоит.

[препорируем сплоит]

Для анализа хорошо подходит WMF Exploit Checker от Ильфака Гуильфанова, исходный код которого можно найти на нашем диске; там же лежит откомпилированный бинарник. На самом деле это никакой не checker, а самый настоящий эксплойт, внедряющий в wmf-файл машинный код, пытающийся вывести на экран Your system is vulnerable to WMF exploits!.

Распаковав zip-архив с исходными текстами, мы найдем семь файлов следующего содержания:

* tell.asm: shell-код, подготовленный к внедрению;

Назад на стр. 086-066-4  Содержание  Вперед на стр. 086-066-6