Saturday, January 5, 2013

Выступление на ZeroNights 2012

Некоторое время назад я выступил на конференции ZeroNights 2012 c докладом про то, как может быть устроен Windows руткит режима ядра для целевых атак.

Для хранения вредоносного кода я решил использовать параметры системного реестра, и реализовать руткиты таким образом, что бы на стадии установки в систему, кроме нескольких параметров реестра, они ничего не модифицировали. В результате такого решения предо мной стала задача о том, как исполнить нечто (находящееся в системном реестре) как машинный код на этапе загрузки операционной системы.

В качестве решений для этой задачи было найдено и опробовано несколько возможных вариантов:
  • Передача управления на код руткита путём модификации DSDT таблицы ACPI, которая записывается ACPI-драйвером Windows для долгосрочного хранения именно в системный реестр.
  • Передача управления на вредоносный код путём эксплуатации уязвимости нулевого дня в компонентах режима ядра Windows, связанной с некорректной обработкой данных которые были получены из системного реестра.
Первый вариант в последствии был отклонен в связи с его принципиальной неработоспособностью на NT 6.x, а второй - получил развитие в виде вполне функционального руткита, умеющего следующее:
  • Использует уязвимость нулевого дня в win32k.sys (переполнение буфера на стеке в функции  win32k!bInitializeEUDC() из-за небезопасного использования nt!RtlQueryregistryValues()) для того что бы получить управление на этапе загрузки ОС.
  • Устанавливает сетевой бекдор, основанный на NDIS перехватах. Код руткита ищет во входящем трафике магическую последовательность и при её нахождении запускает на исполнение meterpreter/bind_tcp (из состава Metasploit Frameowrk) в контексте процесса пользовательского режима.
  • Для обхода детектирования неизвестного исполняемого кода в памяти со стороны анти-руткит утилит используется перемещение кода руткита в discardable-секции стандартных драйверов Windows.
  • Не детектируется доступными публично анти-руткит утилитами (правда, после того как я связался с автором wincheck - в него было добавлено детектирование NDIS перехватов моего руткита).
  • Работает на Windows 7 (SP0, SP1) x86.
Схема эксплуатации уязвимости для запуска кода руткита выглядит следующим образом:


Более подробную информацию можно почерпнуть из слайдов с выступления:
https://dl.dropbox.com/u/22903093/Applied-anti-forensics.pdf

Исходный код руткита доступен на GitHub:
https://github.com/Cr4sh/WindowsRegistryRootkit