
Extension WinDbg en mode noyau et PoCs pour l'investigation des privilèges de jeton.
Extension WinDbg en mode noyau et PoCs pour tester le fonctionnement des privilèges de jeton.
Il existe des dépôts et articles notables sur l'abus de privilèges de jeton, comme le Priv2Admin de Grzegorz Tworek. Les codes de ce dépôt sont destinés à aider à étudier le fonctionnement des privilèges de jeton.
Ce projet couvre la manière d'obtenir des privilèges système à partir d'un shell de niveau d'intégrité élevé. Voir README.md pour plus de détails.
Le but de ce projet est d'étudier comment les attaquants abusent des vulnérabilités d'écriture noyau arbitraire. Tous les PoCs sont écrits pour HackSys Extreme Vulnerable Driver. La plupart de ces PoCs effectuent une élévation au niveau d'intégrité SYSTEM en abusant d'une vulnérabilité d'écriture noyau arbitraire et des privilèges de jeton. Testé sur Windows 10 versions 1809/1903, mais ils devraient fonctionner sur la plupart des versions de Windows 10 théoriquement :
| Nom du PoC | Description |
|---|---|
| CreateAssignTokenVariant | Ce PoC effectue une EoP avec SeCreateTokenPrivilege et SeAssignPrimaryTokenPrivilege. |
| CreateImpersonateTokenVariant | Ce PoC effectue une EoP avec SeCreateTokenPrivilege et SeImpersonatePrivilege. |
| CreateTokenVariant | Ce PoC effectue une EoP avec SeCreateTokenPrivilege. |
| DebugInjectionVariant | Ce PoC effectue une EoP avec SeDebugPrivilege. Utilise une injection de code dans winlogon.exe à l'étape finale. |
| DebugUpdateProcVariant | Ce PoC effectue une EoP avec SeDebugPrivilege. Crée un processus SYSTEM à partir de winlogon.exe avec l'API UpdateProcThreadAttribute à l'étape finale. |
| RestoreServiceModificationVariant | Ce PoC effectue une EoP avec SeRestorePrivilege. Utilise HijackShellLib avec ce PoC. |
| SecondaryLogonVariant | Ce PoC effectue une EoP avec SeCreateTokenPrivilege et SeImpersonatePrivilege. Utilise le service d'ouverture de session secondaire à l'étape finale. |
| TakeOwnershipServiceModificationVariant | Ce PoC effectue une EoP avec SeTakeOwnershipPrivilege. Utilise HijackShellLib avec ce PoC. |
| TcbS4uAssignTokenVariant | Ce PoC effectue une EoP avec SeTcbPrivilege. Obtient un shell de niveau d'intégrité System à partir d'un niveau d'intégrité Medium. |
| TcbS4uImpersonationVariant | Ce PoC effectue une EoP avec SeTcbPrivilege. Effectue une usurpation de thread avec une ouverture de session S4U. N'obtient pas le niveau d'intégrité élevé ou système. |
Avertissement
Dans certains environnements, la version Debug ne fonctionne pas. La version Release est préférée.
PrivEditor est une extension WinDbg en mode noyau pour manipuler les privilèges de jeton d'un processus spécifique. Cette extension permet de configurer facilement le privilège de jeton que vous souhaitez étudier :``` 0: kd> .load C:\dev\PrivEditor\x64\Release\PrivEditor.dll
PrivEditor - Kernel Mode WinDbg extension for token privilege edit.
Commands : + !getps : List processes in target system. + !getpriv : List privileges of a process. + !addpriv : Add privilege(s) to a process. + !rmpriv : Remove privilege(s) from a process. + !enablepriv : Enable privilege(s) of a process. + !disablepriv : Disable privilege(s) of a process. + !enableall : Enable all privileges available to a process. + !disableall : Disable all privileges available to a process.
[*] To see command help, execute "! help" or "! /?".
### getps Commande
Cette commande sert à lister les processus dans votre système cible :```
0: kd> !getps /?
!getps - List processes in target system.
Usage : !getps [Process Name]
Process Name : (OPTIONAL) Specifies filter string for process name.
Si vous exécutez cette commande sans aucun argument, cette commande liste tous les processus dans votre système cible comme suit :``` 0: kd> !getps
PID nt!_EPROCESS nt!_SEP_TOKEN_PRIVILEGES Process Name
======== =================== ======================== ============
0 0xfffff80581233630 0x0000000000000000 Idle
4 0xffffd60fec068380 0xffffaf00cec07a40 System
68 0xffffd60ff1780480 0xffffaf00d3b290a0 svchost.exe
88 0xffffd60fec0db080 0xffffaf00cec0d080 Registry
324 0xffffd60fef342040 0xffffaf00d0416080 smss.exe
348 0xffffd60ff052f100 0xffffaf00d25d30a0 dwm.exe
408 0xffffd60feca8e140 0xffffaf00d21bd930 csrss.exe
480 0xffffd60ff05a8340 0xffffaf00d2568670 svchost.exe
484 0xffffd60fefcd60c0 0xffffaf00d06430e0 wininit.exe
500 0xffffd60fefd130c0 0xffffaf00d23100a0 csrss.exe
580 0xffffd60fefdc0080 0xffffaf00d2266630 winlogon.exe
--snip--
Si vous souhaitez connaître des processus spécifiques, définissez le filtre de chaîne comme suit. Le filtre fonctionne avec une correspondance par préfixe et insensible à la casse :```
0: kd> !getps micro