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

WMF: баг года

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

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


что такое wmf

Метафайлы (WMF - Windows Meta File) представляют собой последовательность команд GDI и с точки зрения графической подсистемы Windows являются таким же «устройством», как монитор или принтер, но если информация, выводимая на монитор/принтер как бы «выпадает из обращения», то wmf-файл можно «проигрывать» многократно, передавать по Сети и так далее.

Функция HDC CreateMetaFile(LPCTSTR lpszFile) создает метафайл, возвращая контекст устройства, на котором можно рисовать стандартными GDI-функциями, такими как LineTo или Rectange, а функция PlayMetaFile(HDC hdc, HMETAFILE hmf) «проигрывает» метафайл, открытый функцией GetMetaFile(LPCTSTR lpszMetaFile), выводя его содержимое на заданное устройство, например, так:

листинг 1: вывод метафайла на экран

HDC DC; HMETAFILE h_meta; // объявляем переменные

DC = GetDC(0); // получаем контекст для вывода

h_meta = GetMetaFile("demo.wmf"); // открываем метафайл...

PlayMetaFile(DC, h_meta); // ...и «проигрываем» его

Функции CreateMetaFile/PlayMetaFile/GetMetaFile формально считаются устаревшими, однако поддерживаются всеми Windows-подобными системами для совместимости. Начиная с 9x, возможности метафайлов были значительно расширены, и появился новый формат - emf (Enhanced Metafile), окруженный новыми функциями: CreateEnhMetaFile/PlayEnhMetaFile/GetEngMetaFile. Они также поддерживают выполнение машинного кода, поэтому с точки зрения безопасности оба формата тождественны друг другу.

Функции, обрабатывающие метафайлы, реализованы внутри GDI32.DLL. Именно здесь и сидит уязвимость. Библиотека shimgvw.dll - это всего лишь высокоуровневая «обертка», используемая некоторыми приложениями для обработки изображений, в то время как другие напрямую работают с GDI.

К статье прилагается программа, демонстрирующая основные приемы работы с метафайлами, ты найдешь ее на нашем диске.

уязвимые системы

В своем бюллетене (support.microsoft.com/kb/912840) Microsoft официально подтверждает уязвимость следующих систем: Windows Server 2003 SP0/SP1 (Standard, Datacenter, Enterprise и Web Edition), XP SP0/SP1/SP2 (Home и Professional), Windows 2000 SP0/SP1/SP2/SP3/SP4 (Professional, Advanced и Datacenter Server) и Windows 98/Millennium. Уязвимости подвержены практически все платформы: x86, x64 и Itanium.

Довольно внушительный список, к тому же в нем не упомянута Windows 3.x и некоторые UNIX-системы, добросовестно поддерживающие вражеский wmf-формат. В частности, сообщается об уязвимости популярного эмулятора wine и Mac OS.

Кошмар! Или… еще одна раздутая сенсация? Эксперименты мыщъх'а показывают, что дела обстоят не так уж и плохо. Могло быть и хуже. Начнем с того, что, в отличие от печально известных дыр в SQL и DCOM RPC, wmf-файлы не поддерживают автоматическое размножение червей. Жертва должна загрузить метафайл из сети и попытаться его отобразить. Имеется множество сообщений, что Internet Explorer и Outlook Express автоматически «воспроизводят» wmf-файлы, указанные в тэге IMG, и это действительно так, однако лично мне ни один из эксплойтов заставить работать так и не удалось (W2K SP4 IE 6.0), причем IE отображает только расширенные (emf) метафайлы и только те из них, что имеют расширение wmf/emf, но не gif или jmp.

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