
Controlador en Modo Kernel para Elevar Privilegios de Procesos
EPROCESS con un token de sistema, elevando efectivamente los privilegios del proceso, El controlador está diseñado para usarse con una aplicación en modo usuario que envía un ID de proceso al controlador a través de un IOCTL.Cuando se crea un proceso, hereda el token del usuario que lo creó, El token es utilizado por el sistema para determinar qué acciones puede realizar el proceso. El token contiene información sobre el identificador de seguridad (SID) del usuario, pertenencias a grupos y privilegios.

El miembro Token reside en el desplazamiento 0x4b8 dentro de la estructura _EPROCESS, que es una estructura de datos que representa un objeto de proceso. El miembro Token está definido en la estructura _EX_FAST_REF, que es un tipo unión que puede almacenar ya sea un puntero a un objeto del kernel o un contador de referencias, dependiendo del tamaño del puntero, El desplazamiento de la estructura _EX_FAST_REF dentro de _EPROCESS depende de la versión específica de Windows que se esté utilizando, pero típicamente se encuentra en un desplazamiento de 0x4b8 en versiones recientes de Windows..
Desplazamientos del token según el número de compilación de Windows para arquitecturas x64 y x86
La estructura _EX_FAST_REF en Windows contiene tres miembros: Object, RefCount y Value

Para mostrar el token del proceso en _EX_FAST_REF, pasamos la dirección de la estructura _EX_FAST_REF que contiene el token, la cual se encuentra típicamente en un desplazamiento de 0x4b8 dentro de la estructura _EPROCESS."

Puede iniciar un proceso privilegiado o elevar un ID de proceso ya existente.

Para efectos de esta explicación, nos centraremos en la segunda opción y usaremos CMD como ejemplo

Token heredado

enviar el ID del proceso al controlador a través de un IOCTL

Después de recibir el PID de la aplicación en modo usuario, el controlador lo utiliza para obtener un puntero a la estructura _EPROCESS del proceso objetivo. Luego, el controlador accede al miembro Token de la estructura _EPROCESS para obtener un puntero al token del proceso, el cual reemplaza con el token del sistema, cambiando efectivamente el contexto de seguridad del proceso al del sistema. Sin embargo, si el controlador no localiza correctamente el miembro Token dentro de la estructura _EPROCESS o si el desplazamiento del Token es diferente a 0x4b8 , el controlador puede bloquear el sistema o el proceso objetivo ,este problema se solucionará en las próximas actualizaciones .

token de cmd después
| desplazamientos x64 | desplazamientos x86 |
|---|
| 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 |


los privilegios, grupos y derechos del proceso
