voidmap
Очень простой ручной маппер драйверов, использующий CVE-2021-40449 для выполнения произвольной функции по заданному адресу с одним переданным аргументом. Основан на эксплойт-PoC CallbackHell. Протестировано на Windows 10 Pro For Workstations 1809 17763.379 (64-bit), но, скорее всего, будет работать и на системах того же периода.
Что он делает:
- Отключает SMEP (и, возможно, SMAP), перезаписывая значение регистра cr4
- Переходит в код в пользовательском режиме, который вручную маппит нужный драйвер
- Снова включает SMEP (и, возможно, SMAP)
Есть две основные проблемы с этим подходом:
- Вручную замапленный драйвер будет находиться в пуле, выделенном через ExAllocatePool. Если вы хотите использовать это для чего-то более серьёзного, стоит подумать о более надёжном способе выделения памяти, чтобы её нельзя было так легко выгрузить.
- Нет простого способа прочитать исходное значение cr4, поэтому мне пришлось захардкодить значение, которое было в моей системе. Хотя оно должно быть одинаковым для большинства современных CPU, вам всё равно стоит перепроверить, что значение корректно.
Видео:
