ntdll!LdrHotPatchRoutine & DEP/ASLR bypass (MS13-063)

от автора

Вчера компания Microsoft выпустила набор security-обновлений для своих продуктов, среди которых было обновление MS13-063, которое исправляет возможность обхода таких «смягчающих» механизмов эксплуатирования как DEP & ASLR. Техника обхода этих механизмов в эксплойтах была продемонстрирована ресерчерами NSFocus Security Labs на конференции CanSecWest и VUPEN на Pwn2Own 2013.

Мы уже писали про механизмы EMET v4, в котором появилась возможность противодействия к использованию метода ntdll!LdrHotPatchRoutine для загрузки кода нужной библиотеки в памяти, обходя т. о. ограничения накладываемые DEP&ASLR. LdrHotPatchRoutine используется ОС как часть «хот патчинга» (исправления компонентов без применения перезагрузки) и позволяет загружать динамические библиотеки из различных мест, включая сеть (через UNC адреса). MS13-063 вводит для ОС исправление, аналогичное по возможностям тому, что было продемонстрировано в EMET.

Эксплуатирование LdrHotPatchRoutine тесно связано с обходом ASLR при использовании всем известной структуры UserSharedData (KUSER_SHARED_DATA), которая проецируется по жестко заданным адресам в режиме пользователя (0x7ffe0000) и в режиме ядра (0xffdf0000). Структура используется для быстрого доступа компонентов ОС, работающих в режиме пользователя и ядра к некоторым разделяемым служебным данным (информация отладки, таймера, версия ОС и др.). При использовании некоторых указателей на функции в UserSharedData атакующий может быстро выяснить адрес необходимой функции. В частности, 64-битные версии Windows до Windows 8 хранили в этой структуре указатели на функции 32-битной версии ntdll, которую ОС использует для WoW64.

Таким образом описываемый метод эксплуатации UserSharedData&LdrHotPatchRoutine заключается в возможности атакующего инициировать вызов недокументированной функции LdrHotPatchRoutine с необходимым аргументом через один из указателей в UserSharedData, что делает DEP&ASLR бесполезными. MS13-063 направлено на устранение нужного указателя в UserSharedData таким образом, что атакующий не сможет предсказать адрес LdrHotPatchRoutine. Скриншот ниже демонстрирует часть UserSharedData, где видно, что обновление ликвидировало и другие указатели на функции в структуре (для предотвращения их возможного эксплуатирования в будущем).

Указатели на функции были перемещены в структуру ntdll!LdrSystemDllInitBlock, т. о. делая ее в поле видимости ASLR, что исключает возможное раскрытие адреса в будущем.

http://blogs.technet.com/b/srd/archive/2013/08/12/mitigating-the-ldrhotpatchroutine-dep-aslr-bypass-with-ms13-063.aspx

ссылка на оригинал статьи http://habrahabr.ru/company/eset/blog/190016/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *