Некоторое время назад я выступил на конференции 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. Схема эксплуатации уязвимости для запуска кода руткита выглядит следующим образом: Более подробную информацию можно почерпнуть из слайдов с выступления: http://dl.dropbox.com/u/22903093/Applied-anti-forensics.pdf Исходный код руткита доступен на GitHub: https://github.com/Cr4sh/WindowsRegistryRootkit 5 января 2013 Автор: Сr4sh http://blog.cr4.sh/2013/01/zeronights-2012.html
Спасибо, очень познавательно получилось. Радует, что на ачате есть такие люди. Жду еще подобных статей!