Некоторое время назад я выступил на конференции ZeroNights 2012 c докладом про то, как может быть устроен Windows руткит режима ядра для целевых атак.
Для хранения вредоносного кода я решил использовать параметры системного реестра, и реализовать руткиты таким образом, что бы на стадии установки в систему, кроме нескольких параметров реестра, они ничего не модифицировали. В результате такого решения предо мной стала задача о том, как исполнить нечто (находящееся в системном реестре) как машинный код на этапе загрузки операционной системы.
В качестве решений для этой задачи было найдено и опробовано несколько возможных вариантов:
Более подробную информацию можно почерпнуть из слайдов с выступления:
https://raw.githubusercontent.com/Cr4sh/blog/master/windows-registry-rootkit/Applied-anti-forensics.pdf
Исходный код руткита доступен на GitHub:
https://github.com/Cr4sh/WindowsRegistryRootkit
Для хранения вредоносного кода я решил использовать параметры системного реестра, и реализовать руткиты таким образом, что бы на стадии установки в систему, кроме нескольких параметров реестра, они ничего не модифицировали. В результате такого решения предо мной стала задача о том, как исполнить нечто (находящееся в системном реестре) как машинный код на этапе загрузки операционной системы.
В качестве решений для этой задачи было найдено и опробовано несколько возможных вариантов:
- Передача управления на код руткита путём модификации DSDT таблицы ACPI, которая записывается ACPI-драйвером Windows для долгосрочного хранения именно в системный реестр.
- Передача управления на вредоносный код путём эксплуатации уязвимости нулевого дня в компонентах режима ядра Windows, связанной с некорректной обработкой данных которые были получены из системного реестра.
- Использует уязвимость нулевого дня в win32k.sys (переполнение буфера на стеке в функции win32k!bInitializeEUDC() из-за небезопасного использования nt!RtlQueryregistryValues()) для того что бы получить управление на этапе загрузки ОС.
- Устанавливает сетевой бекдор, основанный на NDIS перехватах. Код руткита ищет во входящем трафике магическую последовательность и при её нахождении запускает на исполнение meterpreter/bind_tcp (из состава Metasploit Frameowrk) в контексте процесса пользовательского режима.
- Для обхода детектирования неизвестного исполняемого кода в памяти со стороны анти-руткит утилит используется перемещение кода руткита в discardable-секции стандартных драйверов Windows.
- Не детектируется доступными публично анти-руткит утилитами (правда, после того как я связался с автором wincheck - в него было добавлено детектирование NDIS перехватов моего руткита).
- Работает на Windows 7 (SP0, SP1) x86.
Более подробную информацию можно почерпнуть из слайдов с выступления:
https://raw.githubusercontent.com/Cr4sh/blog/master/windows-registry-rootkit/Applied-anti-forensics.pdf
Исходный код руткита доступен на GitHub:
https://github.com/Cr4sh/WindowsRegistryRootkit