
Концепт-демонстрации, иллюстрирующие некоторые аспекты механизма защиты Shadow Stack в ядре Windows.
Этот проект направлен на демонстрацию некоторых аспектов механизма защиты теневого стека, реализованного Microsoft в Windows 11. Код ориентирован конкретно на Windows 11 24H2. Он может не работать на других версиях Windows 11 из-за управления смещениями ядра.
Проект разделён на две части: клиент и драйвер. Связь между ними осуществляется через механизм IOCTL. Клиент запрашивает у драйвера выполнение действий на уровне ядра.
CR4, что приводит к BSOD.try/except и теневого стека при делении на ноль.Используйте build.bat.
В качестве предварительного условия следующие комплекты должны быть для одной и той же сборки Windows:
Примечание:
POC был протестирован с версией комплектов 10.0.26100.0.
Для активации защиты теневого стека ядра необходимо добавить или задать следующие значения в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\:
| Имя | Тип | Данные |
|---|---|---|
| EnableVirtualizationBasedSecurity | REG_DWORD | 1 |
| Scenarios\HypervisorEnforcedCodeIntegrity\Enabled | REG_DWORD | 1 |
| Scenarios\KernelShadowStacks\Enabled | REG_DWORD | 1 |
Кроме того, чтобы загрузить драйвер, подписанный для тестирования, необходимо выполнить следующую команду в консоли с правами администратора:
bcdedit /set testsigning on
Затем потребуется перезагрузка.
Чтобы загрузить драйвер, необходимо ввести следующие команды в консоли с правами администратора:
sc create shadow type= kernel binPath= ABSOLUTE_PATH_TO_THE_DRIVER
sc start shadow
Клиент имеет следующие параметры:
SergiusTheBest за его FindWDK.
| Параметр | Описание |
|---|
| inc | Увеличить адрес возврата к вызывающему коду на 1 |
| skip | Модифицировать RSP, чтобы он указывал на предыдущий кадр стека |
| cdisable | Отключить CET в CR4 |
| cenable | Включить CET в CR4 |
| wrmsr REGISTER VALUE | Записать в REGISTER указанное значение VALUE |
| wrshsk | Запись в теневой стек |
| wrshskpte | Перезаписать PTE теневого стека |
| div DIVIDEND DIVISOR | Выполнить целочисленное деление в пространстве ядра |