(TAOMF) Les process tokens

L'ensemble des articles tagués TAOMF ont été écrit à partir d'un ensemble de notes prises suite à la lecture du livre "The Art Of Memory Forensic" écrit par Michael Hale Ligh, Andrew Case, Jamie Levy et Aaron Walters.

Tout les crédits de ces articles leur reviennent donc de droits. Par ailleurs je vous invite vraiment à lire ce livre qui est une mine colossale d'informations.


J'ai déjà bien parlé des tokens Windows dans cet article où je présente les techniques d’exploitation liées aux impersonate tokens donc dans cet article je ne reviendrai que sur l'aspect théorique des tokens. Pour rappel, un token sous Windows décrit le contexte d'exécution d'un processus ou d'un thread.

En gros un token va définir quels sont les privilèges associés à un utilisateur ou un groupe et donc comment les threads/processus lancés par cet utilisateur agiront sur le système. Sous Windows on peut lister les privilèges associés à un utilisateur via la commande:

whoami /priv

Comme pour tous les concepts sous Windows, un token est représenté par une structure qui contient un nombre incroyable d'informations mais dont les plus intéressantes sont:

  • Un entier UserAndGroupCount qui contient la taille du tableau UserAndGroups.
  • La liste des UserAndGroups: contient un tableau de structures _SID_AND_ATTRIBUTES associés au token. Chaque élément de ce tableau décrit un utilisateur ou un groupe différent dont le processus est un membre.
  • Un entier PrivilegeCount qui contient la taille du tableau Privileges.
  • La liste Privileges qui contient l'ensemble des privilèges ainsi que leurs état, activé, désactivé, activé par défaut.

Il est très courant pour un attaquant d'élever ses privilèges or cela laisse de grosses traces pour un analyste forensic. Vie la module getsids de volatility on pourra, par exemple, lister les SID's d'un processus et ainsi détecter un mouvement latéral.

Concernant les privilèges Windows. Chaque privilège octroie à son détenteur la possibilité d'exécuter une ou des actions sur le système. Si certains privilèges ne sont que très peu intéressants dans le cadre d'une tentative d'élévation de privilèges, d'autres peuvent s'avérer bien plus juteux. Voici une liste - non exhaustive - des privilèges intéressants:

  • SeBackUpPrivilege: octroie les droits de lecture sur n'importe quel fichier.
  • SeDebugPrivilege: octroie la capacité à un utilisateur de dumper la mémoire de n'importe quel processus (coucou mimikatz).
  • SeLoadDriverPrivilege: autorise un utilisateur à charger ou décharger des modules drivers kernels
  • SeAssignPrimaryTokenPrivilege ou SeImpersonatePrivileg: permet d'impersonifier les tokens présents sur la machine (exploit rottenpotato).

Si vous disposez d'un de ces privilèges vous aurez de très fortes chances de privesc to NT System!