logo

Mouvement latéral vers le cloud à l’aide de la technique Pass-the-PRT

Pour se déplacer latéralement sur plusieurs ordinateurs Windows locaux, les attaquants ont recours à de nombreuses stratégies : parmi elles figurent les attaques Pass-the-Ticket, Pass-the-Hash, Overpass-the-Hash et Golden Tickets. Des techniques semblables se révèlent également efficaces pour les déplacements latéraux d’un poste de travail compromis vers des ressources cloud connectées. Elles permettent de contourner certaines mesures de sécurité fortes, par exemple l’authentification multifacteur (MFA).

Sélection de contenu connexe :

 

Dans cet article, nous expliquerons comment les attaquants peuvent lancer des attaques par mouvement latéral vers le cloud, notamment en utilisant la technique appelée Pass-the-PRT.

Qu’est-ce qu’une attaque PRT ?

Un jeton d’actualisation principal (PRT) ressemble à un ticket d’octroi de ticket Kerberos (TGT) : les deux sont utilisés pour assurer l’authentification unique (SSO). La différence ? Un TGT ouvre une session sécurisée dans un système Windows, alors qu’un PRT vous permet de vous connecter à un appareil Windows 10, ce qui vous donne accès aux ressources Azure et Microsoft 365 sans avoir à vous authentifier une nouvelle fois. En revanche, le périphérique Windows 10 doit être un appareil joint Azure AD ou un appareil joint Azure AD hybride.

Voici un aperçu du fonctionnement de ce processus : Lorsque vous vous connectez, votre appareil communique avec le fournisseur d’authentification cloud de Windows 10. Son plug-in Azure AD valide vos identifiants et vous octroie un PRT ainsi qu’une clé de session. Votre appareil chiffre à nouveau la clé de session à l’aide du module de plateforme sécurisée (TPM) et, à ce moment-là, stocke à la fois la clé et le PRT dans le processus LSASS. Lorsque vous essayez ensuite de vous connecter à un site web depuis un navigateur qui prend en charge l’authentification unique à Azure AD (soit Edge soit Chrome avec l’extension Windows 10), le fournisseur d’authentification cloud crée un cookie PRT pour le navigateur et l’utilise pour obtenir des jetons Azure AD. Azure AD authentifie le cookie PRT et vous permet de vous connecter.

(Si vous voulez en savoir plus, consultez la documentation Microsoft, l’analyse du fonctionnement des PRT et du SSO de Jairo Cadena, cet article sur les PRT de Dirk-jan Mollema, ou encore les projets ROADtoken et RequestAADRefreshToken disponibles sur GitHub.)

Pour savoir si vous disposez d’un PRT, exécutez la commande suivante :

Dsregcmd.exe /status

Dans la section État de l’authentification unique (SSO), consultez la valeur du champ AzureAdPrt : si la valeur est définie sur OUI, vous disposez d’un jeton PRT.

Si elle est définie sur NON, exécutez la commande ci-dessous pour vérifier si votre appareil est joint à Azure AD, condition préalable à l’obtention de jetons PRT.

Effectuer une attaque Pass-the-PRT

Si un adversaire réussit à obtenir le PRT et la clé de session d’un utilisateur, il peut alors créer des cookies PRT qui lui permettent d’accéder aux ressources web sous l’identité de cet utilisateur, et contourner ainsi les politiques d’accès conditionnel en place. Un PRT est valable 14 jours, ce qui signifie que tout intrus dispose d’un accès d’un maximum de deux semaines, à moins que le compte ne soit désactivé.

Analysons avec précision comment lancer une telle attaque.

Prérequis : nous avons compromis un appareil Windows 10 qui dispose d’un PRT, et nous avons obtenu les privilèges Administrateur en local sur cette machine.

Aperçu des étapes :

  1. Extraction et enregistrement du PRT à partir du processus LSASS.
  2. Extraction de la clé de session.
  3. Déchiffrement de la clé de session et utilisation de cette dernière à l’aide d’une clé de sauvegarde DPAPI. Nous utiliserons la même méthode que celle détaillée dans l’attaque Pass-the-Cookie.
  4. Utilisation de la clé de session déchiffrée pour obtenir la clé dérivée et le contexte. Nous en avons besoin pour créer le cookie PRT. La clé dérivée sert à signer le jeton web JSON (JWT) du cookie.
  5. Création du nouveau cookie PRT à l’aide du PRT, de la clé dérivée et du contexte (à partir de n’importe quel système).
  6. Importation du cookie dans la session du navigateur Chrome, ce qui permet d’être authentifié sur les sites web sous l’identité de l’utilisateur sans jamais avoir à connaître son mot de passe ou à répondre aux multiples invites d’authentification multifacteur.

 

Analysons plus en détail chaque étape.

Étape 1. Extraction du PRT à partir du processus LSASS.

Pour obtenir les données PRT correspondantes à l’ordinateur compromis, nous utilisons la commande suivante dans Mimikatz version 2.2.0 20200807 ou supérieure :

Privilege::debug
Sekurlsa::cloudap

Voici le résultat. Ce qui nous intéresse, ce sont les données dans la partie PRT. Nous les copions et les sauvegardons.

Si aucune donnée n’apparaît sur la ligne PRT, vérifiez que l’appareil est joint à Azure AD en exécutant la commande dsregcmd /status, comme vu précédemment. Si la valeur du champ AzureAdPrt est définie sur OUI, contrôlez la version de Windows 10 de l’ordinateur : pour notre test, nous avons dû mettre à niveau notre système à la version 1909 pour que l’attaque fonctionne.

Étape 2. Extraction d’une preuve de possession de clé.

Nous allons maintenant extraire la clé de session ou « ProofOfPosessionKey » (« clé preuve-de-possession »), mise en évidence ci-dessous. Cette dernière est chiffrée : nous devrons utiliser une clé de sauvegarde DPAPI pour la déchiffrer.

Étape 3. Déchiffrement de la clé de session.

Il nous faut maintenant élever nos privilèges à SYSTEM et exécuter la commande suivante dans le contexte d’exécution de la machine pour être en mesure d’utiliser la clé de sauvegarde DPAPI et déchiffrer la clé de session :

Token::elevate
Dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect

Copions maintenant deux valeurs. La première, la valeur de contexte :

Et la seconde, la valeur de la clé dérivée :

Étape 4. Création des cookies PRT.

Nous pouvons continuer cette attaque depuis n’importe quelle station de travail. Pour créer des cookies PRT, il suffit d’exécuter cette commande :

Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]

Le résultat montre un cookie PRT signé sur la ligne Signature with key. Copiez ce texte.

Étape 5. Injectez le cookie PRT dans une session de navigateur.

Lancez Google Chrome en mode incognito et allez sur la page https://login.microsoftonline.com. Lorsque le site vous invite à entrer vos identifiants de connexion, effectuez un clic droit n’importe où sur la page et sélectionnez Inspecter pour ouvrir la fenêtre DevTools de Chrome.

Naviguez jusqu’à l’onglet Appli, cliquez sur Cookies, et ensuite sur login.microsoftonline.com. Dans le panneau de droite, dans la barre d’action, cliquez sur l’icône de suppression des cookies pour les supprimer.

Double-cliquez ensuite sur une ligne vide dans le tableau pour ajouter le nouveau cookie suivant :

Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
HttpOnly: Set to True (checked)

Ne modifiez pas les autres champs (valeurs par défaut).

Rafraîchissez la page et assurez-vous que le cookie n’a pas été supprimé. S’il n’est plus visible, vous avez peut-être commis une erreur. Dans ce cas-là, recommencez le processus.

Retournez sur la page https://login.microsoftonline.com : vous devriez automatiquement être connecté sous l’identité de l’utilisateur compromis.

Se protéger contre les attaques Pass-the-PRT

Les attaques Pass-the-PRT sont difficiles à détecter, car elles exploitent des processus SSO authentiques. L’une des stratégies les plus efficaces consiste à recourir à un logiciel de protection des points de terminaison qui détecte l’utilisation de Mimikatz, nécessaire dans la phase initiale de l’attaque.

La prévention reste néanmoins une approche plus pertinente que la simple détection. Gardez en mémoire que l’attaque Pass-the-PRT est une technique de mouvement latéral : pour pouvoir l’effectuer, l’intrus doit d’abord avoir obtenu un accès à l’un de vos appareils. Notre solution de Sécurité Active Directory de Netwrix vous permet d’éviter que n’importe quel pirate informatique s’infiltre préalablement dans votre environnement.

En outre, pour effectuer cette attaque, des droits d’administrateur local sont nécessaires. L’utilisation d’un outil de gestion des terminaux comme Netwrix PolicyPak vous permet de supprimer ces droits élevés sans nuire à la productivité des utilisateurs. Vous pouvez également empêcher les ordinateurs d’exécuter des logiciels malveillants et même sécuriser les paramètres de leurs navigateurs.