
Pilote en mode noyau pour élever les privilèges des processus
EPROCESS par un jeton système, ce qui élève effectivement les privilèges du processus. Le pilote est conçu pour être utilisé avec une application en mode utilisateur qui envoie un ID de processus au pilote via un IOCTL.Lorsqu'un processus est créé, il hérite du jeton de l'utilisateur qui l'a créé. Le jeton est utilisé par le système pour déterminer les actions que le processus peut effectuer. Le jeton contient des informations sur l'identifiant de sécurité (SID) de l'utilisateur, ses appartenances aux groupes et ses privilèges.

Le membre Token se trouve à l'offset 0x4b8 dans la structure _EPROCESS, qui est une structure de données représentant un objet processus. Le membre Token est défini dans la structure _EX_FAST_REF, qui est un type union pouvant stocker soit un pointeur vers un objet noyau, soit un compteur de références, selon la taille du pointeur. L'offset de la structure _EX_FAST_REF dans _EPROCESS dépend de la version spécifique de Windows utilisée, mais il se trouve généralement à un offset de 0x4b8 dans les versions récentes de Windows.
Numéros de build Windows et offsets du jeton pour les architectures x64 et x86
La structure _EX_FAST_REF dans Windows contient trois membres : Object, RefCount et Value

Pour afficher le jeton du processus dans _EX_FAST_REF, nous passons l'adresse de la structure _EX_FAST_REF qui contient le jeton, qui se trouve généralement à un offset de 0x4b8 dans la structure _EPROCESS.

Vous pouvez soit lancer un processus privilégié, soit élever un ID de processus déjà existant.

Pour les besoins de cette explication, nous nous concentrerons sur la deuxième option et utiliserons CMD comme exemple

Jeton hérité

Envoyer l'ID du processus au pilote via un IOCTL

Après avoir reçu le PID de l'application en mode utilisateur, le pilote l'utilise pour obtenir un pointeur vers la structure _EPROCESS du processus cible. Le pilote accède ensuite au membre Token de la structure _EPROCESS pour obtenir un pointeur vers le jeton du processus, qu'il remplace par le jeton système, changeant ainsi efficacement le contexte de sécurité du processus en celui du système. Cependant, si le pilote ne localise pas correctement le membre Token dans la structure _EPROCESS ou si l'offset du Token est différent de 0x4b8, le pilote peut faire planter le système ou le processus cible. Ce problème sera corrigé dans les prochaines mises à jour.

Jeton de cmd après
| Décalages x64 | Décalages x86 |
|---|
| 0x0160 (late 5.2) | 0x0150 (3.10) |
| 0x0168 (6.0) | 0x0108 (3.50 à 4.0) |
| 0x0208 (6.1) | 0x012C (5.0) |
| 0x0348 (6.2 à 6.3) | 0xC8 (5.1 à early 5.2) |
| 0x0358 (10.0 à 1809) | 0xD8 (late 5.2) |
| 0x0360 (1903) | 0xE0 (6.0) |
| 0x04B8 | 0xF8 (6.1) |
| 0xEC (6.2 à 6.3) | |
| 0xF4 (10.0 à 1607) | |
| 0xFC (1703 à 1903) | |
| 0x012C |


les privilèges, groupes, droits du processus
