
Утилита для драйверов ядра Windows, которая эксплуатирует уязвимые подписанные драйверы (BYOVD) для обхода DSE, загрузки неподписанных драйверов, перехвата защищённых процессов и дампа памяти процессов.
Назначение этого инструмента — предоставить простой способ исследования ядра Windows и его компонентов без необходимости сложной настройки или локального отладчика. Возможности:
Пример:
Запуск на Windows 11 24H2*
Запуск на Windows 10 20H2*
Скомпилировано и запущено на Windows 8.1*
Запуск на Windows 7 SP1 с полностью установленными обновлениями (предкомпилированная версия)*
Запуск на Windows 10 19H2 (предкомпилированная версия, SecureBoot включён)*
Из-за необычного способа загрузки, который не задействует стандартный загрузчик ядра, а использует перезапись уже загруженных модулей шелл-кодом, существуют некоторые ограничения:
Это означает, что вы не можете использовать параметры, указанные в вашем DriverEntry, так как они не будут действительны. Это также означает, что вы не можете загрузить любой драйвер, а только специально спроектированный, либо вам нужно изменить процедуры шелл-кода.
В x64 нет кода SEH. Вместо этого имеется таблица областей try/except/finally, описываемая указателем в заголовке PE. При возникновении исключения это может привести к BSOD.
Отображённый код не может выгрузить себя; однако вы можете освободить все ресурсы, выделенные вашим отображённым кодом. DRIVER_OBJECT->DriverUnload должен быть установлен в NULL.
Если вашему проекту требуется зависимость от другого модуля, вы должны переписать эту часть загрузчика.
Из-за необычного способа загрузки отображённый драйвер не будет присутствовать в PsLoadedModulesList. Это означает, что любой обработчик обратного вызова, зарегистрированный таким кодом, будет расположен в памяти вне этого списка. PatchGuard может обнаружить это и вызвать крах системы.
В целом, если вы хотите узнать, что вам не следует делать в ядре, посмотрите https://github.com/hfiref0x/KDU/tree/master/Source/Examples/BadRkDemo, где приведено несколько примеров запрещённых действий.
Этот инструмент не изменяет (и не будет изменять в будущем) внутренние структуры Windows MmUnloadedDrivers и/или PiDDBCacheTable. Причина в том, что:
Вы используете его на свой страх и риск. Некоторые ленивые антивирусы могут пометить этот инструмент как hacktool/malware.
Полный список со всеми метаданными доступен здесь:
В будущем могут быть добавлены другие провайдеры.
Он использует известные уязвимые (или намеренно содержащие «червоточины») драйверы из легитимного программного обеспечения для доступа к произвольной памяти ядра с примитивами чтения/записи.
В зависимости от команды KDU будет работать либо как TDL/DSEFix, либо модифицировать объекты процессов режима ядра (EPROCESS).
В режиме -map KDU для большинства доступных провайдеров по умолчанию использует сторонний подписанный драйвер из SysInternals Process Explorer и перехватывает его, размещая небольшой загрузочный шелл-код внутри его процедуры IRP_MJ_DEVICE_CONTROL.
KDU использует шелл-код для отображения входных драйверов и выполнения их DriverEntry. В KDU встроено несколько вариантов шелл-кода. Шелл-коды V1, V2 и V3 используются вместе со сторонним драйвером-жертвой (Process Explorer и т. д.).