
Driver in modalità kernel per l'elevazione dei privilegi dei processi
EPROCESS con un token di sistema, elevando efficacemente i privilegi del processo. Il driver è progettato per essere utilizzato con un'applicazione in modalità utente che invia un ID di processo al driver tramite un IOCTL.Quando un processo viene creato, eredita il token dell'utente che lo ha creato. Il token viene utilizzato dal sistema per determinare quali azioni il processo può eseguire. Il token contiene informazioni sull'identificatore di sicurezza (SID) dell'utente, le appartenenze ai gruppi e i privilegi.

Il membro Token si trova all'offset 0x4b8 nella struttura _EPROCESS, che è una struttura dati che rappresenta un oggetto processo. Il membro Token è definito nella struttura _EX_FAST_REF, che è un tipo unione in grado di memorizzare un puntatore a un oggetto kernel o un conteggio di riferimenti, a seconda della dimensione del puntatore. L'offset della struttura _EX_FAST_REF all'interno di _EPROCESS dipende dalla versione specifica di Windows in uso, ma si trova tipicamente a un offset di 0x4b8 nelle versioni recenti di Windows.
Offset del token per numeri di build di Windows per architetture x64 e x86
La struttura _EX_FAST_REF in Windows contiene tre membri: Object, RefCount e Value

Per visualizzare il token del processo in _EX_FAST_REF, passiamo l'indirizzo della struttura _EX_FAST_REF che contiene il token, che si trova tipicamente a un offset di 0x4b8 nella struttura _EPROCESS.

Puoi generare un processo privilegiato o elevare un ID di processo già esistente.

Ai fini di questa spiegazione, ci concentreremo sulla seconda opzione e useremo CMD come esempio

Token ereditato

Invia l'ID del processo al driver tramite un IOCTL

Dopo aver ricevuto il PID dall'applicazione in modalità utente, il driver lo utilizza per ottenere un puntatore alla struttura _EPROCESS per il processo di destinazione. Il driver accede quindi al membro Token della struttura _EPROCESS per ottenere un puntatore al token del processo, che sostituisce con il token di sistema, cambiando di fatto il contesto di sicurezza del processo in quello del sistema. Tuttavia, se il driver non individua correttamente il membro Token all'interno della struttura _EPROCESS o se l'offset del Token è diverso da 0x4b8, il driver potrebbe causare un crash del sistema o del processo di destinazione. Questo problema verrà risolto nei prossimi aggiornamenti.

Token di cmd dopo
| 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 |


I privilegi, i gruppi e i diritti del processo
