
Драйвер режима ядра для повышения привилегий процессов
EPROCESS на системный токен, эффективно повышая привилегии процесса. Драйвер предназначен для использования с пользовательским приложением, которое отправляет идентификатор процесса драйверу через IOCTL.Когда процесс создается, он наследует токен пользователя, создавшего его. Токен используется системой для определения того, какие действия может выполнять процесс. Токен содержит информацию об идентификаторе безопасности пользователя (SID), членстве в группах и привилегиях.

Член Token находится по смещению 0x4b8 в структуре _EPROCESS, которая является структурой данных, представляющей объект процесса. Член Token определяется в структуре _EX_FAST_REF, которая является типом объединения, который может хранить либо указатель на объект ядра, либо счетчик ссылок, в зависимости от размера указателя. Смещение структуры _EX_FAST_REF внутри _EPROCESS зависит от конкретной версии Windows, но обычно в последних версиях Windows находится по смещению 0x4b8.
Смещения токена для сборок Windows x64 и x86
Структура _EX_FAST_REF в Windows содержит три члена: Object, RefCount и Value.

Чтобы отобразить токен процесса в _EX_FAST_REF, мы передаем адрес структуры _EX_FAST_REF, содержащей токен, который обычно находится по смещению 0x4b8 в структуре _EPROCESS.

Вы можете либо породить привилегированный процесс, либо повысить привилегии уже существующего идентификатора процесса.

Для целей этого объяснения мы сосредоточимся на втором варианте и используем CMD в качестве примера.

унаследованный токен

отправьте идентификатор процесса драйверу через IOCTL

После получения PID от пользовательского приложения драйвер использует его для получения указателя на структуру _EPROCESS для целевого процесса. Затем драйвер обращается к члену Token структуры _EPROCESS, чтобы получить указатель на токен процесса, который он заменяет на системный токен, эффективно изменяя контекст безопасности процесса на системный. Однако, если драйвер неверно находит член Token внутри структуры _EPROCESS или если смещение Token отличается от 0x4b8, драйвер может вызвать сбой системы или целевого процесса. Эта проблема будет исправлена в следующих обновлениях.

токен cmd после

| x64 offsets | x86 offsets |
|---|
| 0x0160 (late 5.2) | 0x0150 (3.10) |
| 0x0168 (6.0) | 0x0108 (3.50 to 4.0) |
| 0x0208 (6.1) | 0x012C (5.0) |
| 0x0348 (6.2 to 6.3) | 0xC8 (5.1 to early 5.2) |
| 0x0358 (10.0 to 1809) | 0xD8 (late 5.2) |
| 0x0360 (1903) | 0xE0 (6.0) |
| 0x04B8 | 0xF8 (6.1) |
| 0xEC (6.2 to 6.3) | |
| 0xF4 (10.0 to 1607) | |
| 0xFC (1703 to 1903) | |
| 0x012C |

привилегии, группы, права процесса
