Token de securité en Win32

Développement système natif en c/c++ avec win32 ...

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 19
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

Token de securité en Win32

Post by Hydraxx »

# Les tokens de sécurité sous Windows

Aujourd’hui on va voir **un des mécanismes les plus importants de Windows** 8-) :
**les tokens de sécurité**.

Beaucoup de développeurs utilisent OpenProcess ou CreateProcess sans comprendre
**pourquoi ça marche parfois et parfois non**.
La réponse est presque toujours : **le token**.

Ici on va voir **ce qu’est un token**, comment Windows l’utilise, et comment le manipuler correctement en Win32.

---

# 1) C’est quoi un token

Un **token de sécurité** représente **l’identité de sécurité** d’un thread ou d’un processus.

Il contient :

* l’utilisateur
* les groupes
* les privilèges
* le niveau d’intégrité
* le type de token

Un token répond à une seule question :

> Est-ce que ce code a le droit de faire cette action ?

---

# 2) À quoi sert un token

Windows ne se base jamais sur :

* le nom du programme
* le chemin
* l’icône

Windows se base sur :

* le token

Chaque accès à :

* un fichier
* un processus
* un service
* une clé registre

est validé **via le token**.

---

# 3) Processus, thread et token

Un processus possède :

* un **token primaire**

Un thread peut posséder :

* un **token d’impersonation**

Priorité :

* si un thread a un token → il est utilisé
* sinon → token du processus

---

# 4) Ouvrir le token d’un processus

Pour ouvrir le token du processus courant :

Code: Select all

HANDLE hToken = NULL;

OpenProcessToken(
GetCurrentProcess(),
TOKEN_QUERY,
&hToken
);
Important :

* le token est un handle noyau
* il doit être fermé avec CloseHandle

---

# 5) Droits d’accès au token

Quelques droits importants :

* TOKEN_QUERY
* TOKEN_ADJUST_PRIVILEGES
* TOKEN_DUPLICATE
* TOKEN_IMPERSONATE
* TOKEN_ASSIGN_PRIMARY

Demander trop de droits peut échouer.

---

# 6) Informations d’un token

Pour récupérer des informations :

Code: Select all

GetTokenInformation(
hToken,
TokenUser,
buffer,
size,
&retSize
);
Informations utiles :

* TokenUser
* TokenGroups
* TokenPrivileges
* TokenIntegrityLevel
* TokenType

---

# 7) Les privilèges

Un privilège permet d’effectuer des actions sensibles.

Exemples :

* SeDebugPrivilege
* SeShutdownPrivilege
* SeBackupPrivilege

Un privilège peut être :

* présent
* absent
* désactivé

---

# 8) Activer un privilège

Pour activer un privilège :

Code: Select all

TOKEN_PRIVILEGES tp = {0};

LookupPrivilegeValueW(
NULL,
L"SeDebugPrivilege",
&tp.Privileges[0].Luid
);

tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(tp),
NULL,
NULL
);
Important :

* AdjustTokenPrivileges peut réussir même si le privilège n’existe pas
* toujours vérifier GetLastError

---

# 9) Niveau d’intégrité

Le niveau d’intégrité limite ce que le token peut faire.

Niveaux courants :

* Low
* Medium
* High
* System

Un processus admin a :

* Medium (par défaut)
* High (après élévation)

---

# 10) Token primaire vs impersonation

Token primaire :

* associé à un processus
* utilisé pour CreateProcess

Token d’impersonation :

* associé à un thread
* utilisé pour accéder aux ressources

---

# 11) Dupliquer un token

Pour créer un nouveau token :

Code: Select all

DuplicateTokenEx(
hToken,
TOKEN_ALL_ACCESS,
NULL,
SecurityImpersonation,
TokenPrimary,
&hNewToken
);
Très utilisé pour :

* lancer un process sous une autre identité
* services
* sandbox

---

# 12) Lancer un processus avec un token

Code: Select all

CreateProcessAsUserW(
hNewToken,
NULL,
L"cmd.exe",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
Nécessite :

* SeAssignPrimaryTokenPrivilege
* SeIncreaseQuotaPrivilege

---

# 13) Erreurs classiques

* confondre admin et privilèges
* oublier CloseHandle
* demander trop de droits
* ne pas vérifier GetLastError
* penser qu’un privilège est actif par défaut

---

# À retenir

Le token définit les droits réels.
Windows vérifie toujours le token.
Un thread peut impersoner.
Les privilèges doivent être activés.
Sans token, rien de sensible n’est possible.

Comprendre les tokens, c’est comprendre **la sécurité Windows**.

Who is online

Users browsing this forum: No registered users and 1 guest