Charlie Clark

[Un jour, en parcourant YouTube, nous sommes tombés sur une présentation de Tal Be'ery et Michael Cherny dans le cadre de Black Hat 2015. Dans leur exposé et le mémoire qui en découle, Watching the Watchdog : Protecting Kerberos Authentication with Network Monitoring, Be'ery et Cherny ont décrit quelque chose dont nous n'avions jamais entendu parler ... l'attaque Diamond Privilege Attribute Certificate (PAC). Nous nous sommes tous deux intéressés à la falsification de tickets au cours de l'année écoulée. Cette technique a donc immédiatement attiré notre attention et nous a entraînés dans un voyage d'examen et d'armement de PoC. Le résultat ? Le Diamond Ticket.

Lire la suite

Billet d'or ou billet de diamant

Les attaques Golden et Diamond Ticket nécessitent toutes deux l'accès à la clé KRBTGT. Cependant, les attaques Diamond Ticket nécessitent presque certainement aussi l'accès à la clé AES256. Alors que les attaques Golden Ticket tirent parti de la possibilité de forger un ticket d'octroi de ticket (TGT) à partir de zéro, les attaques Diamond Ticket tirent parti de la possibilité de décrypter et de recrypter des TGT authentiques demandés à un contrôleur de domaine (DC).

Diamond PAC vs Diamond Ticket

L'attaque originale du Diamond PAC :

  1. Demande un TGT sans PAC
  2. S'assure que le compte de service pour le service auquel il faut accéder n'a pas le bit NA dans son attribut UserAccountControl (UAC)
  3. Forge un PAC et le signe avec la clé KRBTGT
  4. Injecte le PAC dans le ticket de service résultant en incluant le PAC dans le champ enc_authorization_data du TGS-REQ

Le bit NA de l'attribut UAC a la valeur suivante 33554432 (voir figure 1).

Figure 1 - UAC NA BIT

Après avoir défini le bit NA dans l'attribut UAC d'un compte de service, les demandes de tickets de service adressées à ce compte de service n'ont pas de PAC (voir Figure 2).

Figure 2 - Demande de ticket de service sans PAC

Chaque fois que des données d'autorisation sont incluses dans l'élément enc_authorization_data d'un TGS-REQ (voir figure 3), elles sont copiées dans la section données_autorisation de la partie chiffrée du ticket de service qui en résulte.

Figure 3 - Sortie Wireshark de enc_authorization_data dans un TGS-REQ

Diamond PAC a profité de ce comportement pour injecter un PAC dans le ticket de service résultant lorsque le compte de service cible n'avait pas le bit NA (voir la figure 4).

Figure 4 - Injecter un PAC dans un ticket de service

Notez la différence de taille de la sortie du ticket entre la figure 2 et la figure 4.

Comme le montre la figure 5, le billet appartient à Loki, mais le PAC contient des informations d'utilisateur différentes ( Thor).

Figure 5 - Décharge de ticket de service avec PAC injecté

Grâce auxcorrectifs Kerberos/AD de novembre 2021 , l'utilisation d'un TGT sans PAC n'est plus possible sur les DCs à jour. Nous savions donc immédiatement que cette version de l'attaque ne fonctionnerait plus. Cependant, après avoir lu ce document, nous nous sommes demandés pourquoi l'attaque devait être aussi complexe. En simplifiant l'attaque, nous avons supprimé la plupart de ses exigences, ce qui l'a rendue possible sur des DC entièrement à jour.

La clé KRBTGT était une exigence, et l'attaque a utilisé n'importe quel autre compte valide pour demander un TGT. Pourquoi ne pas simplement décrypter ce TGT, le modifier à notre guise, recalculer les signatures PAC et le recrypter ? Nous avons baptisé cette approche l'attaque Diamond Ticket.

L'armement de Rubeus

Nous avons implémenté notre ticket diamant dans Rubeus avec une nouvelle commande - diamond

-dans le cadre de cette RP. Dans la démonstration suivante, nous utilisons cette nouvelle commande pour créer et utiliser un ticket Diamant.

Nous commençons l'attaque en tentant d'accéder à la base de données C$ (CIFS) sur un DC, en utilisant notre utilisateur à faible privilège(Loki). Comme le montre la figure 6, nous obtenons une réponse " Accès refusé" .

Figure 6 - Utilisateur à faible privilège dont l'accès CIFS est refusé sur le DC

En supposant que nous ayons déjà compromis la clé KRBTGT, nous pouvons utiliser le nouveau diamant de commande

dans Rubeus pour créer un ticket diamant. Cette commande demande d'abord un TGT normal pour l'utilisateur à faible privilège Loki (voir la figure 7). La commande décrypte ensuite le TGT, modifie les parties concernées, recalcule les signatures et recrypte le TGT (voir figure 8).

Figure 7 - Rubeus construit un billet de diamant (1)
Figure 8 - Rubeus construit un billet de diamant (2)

Le ticket résultant peut alors être utilisé comme n'importe quel autre TGT, mais avec des modifications. Comme le montre la figure 9, nous avons ensuite demandé un ticket de service au service CIFS sur notre DC cible(Earth-DC).

Figure 9 - ASKTGS pour le ticket de service CIFS

Enfin, dans le même terminal, nous pouvons maintenant accéder à la base de données C$ sur le DC, en s'authentifiant en tant qu'utilisateur différent du compte qui a demandé le TGT (voir Figure 10).

Figure 10 - Accès réussi à C$ sur le contrôleur de domaine

Avantages OPSEC

Il existe de nombreuses façons de détecter l'utilisation d'un ticket d'or ou les actions nécessaires pour accéder à la clé KRBTGT (comme DCSync). Une technique : Surveiller les demandes de tickets de service (TGS-REQ) qui n'ont pas de demande de TGT correspondante (AS-REQ). Cependant, il faut savoir que la technique du ticket diamant est plus susceptible de contourner ce type de détection en demandant un TGT valide avant d'utiliser le ticket qui en résulte. En outre, comme le ticket est d'abord créé par un DC, certaines valeurs (par exemple, les heures du ticket) sont plus susceptibles d'être correctes par défaut, plutôt que de nécessiter le calcul des heures appropriées pour la création d'un ticket d'or OPSEC.

Conseils en matière de détection

La recherche originale de Diamond PAC a énuméré les éléments suivants en tant que conseils pour la détection basée sur le réseau :

  • Un AS-REQ avec une PA-PAC-REQUEST est réglé sur false (faux)
  • L'ajout de données d'autorisation dans un message TGS ultérieur
  • Le service cible bit NA mis à faux, nécessitant un PAC pour l'autorisation

Compte tenu de l'amélioration de notre technique, ces conseils ne s'appliquent pas. L'attaque Diamond Ticket ne nécessite pas de demander un TGT sans PAC, ni d'envoyer un PAC falsifié dans un message de type enc_authorization_data d'un TGS-REQ, ou de placer le bit NA bit sur les comptes de service.

Cependant, certaines logiques de détection des attaques par ticket d'or (par exemple, les actions requises pour obtenir l'accès à la clé KRBTGT ) peuvent également s'appliquer à la détection d'une attaque par ticket de diamant. De nombreuses autres techniques pouvant être utilisées pour détecter n'importe quel type de faux ticket (Golden, Silver ou Diamond) dépendent en grande partie du niveau de soin apporté à la création du ticket - par exemple, la fixation d'heures de ticket différentes de ce qu'elles devraient être.

Aucune de ces méthodes n'est un remède miracle pour détecter cette attaque, tout comme il n'existe pas de remède miracle pour détecter les billets d'or.

Un nouveau regard sur les billets

Ce billet a cherché à démontrer un PoC minimal d'armement des Diamond Tickets, bien qu'il s'agisse d'une implémentation de type Mimikatz. Cette recherche peut être facilement étendue pour permettre le contrôle et la manipulation de n'importe quel ticket, avec les bonnes clés.

Après avoir terminé nos recherches et créé une arme PoC, Elad Shamir nous a envoyé la conférence DerbyCon 2014 de Tim Medin, Attacking Microsoft Kerberos Kicking the Guard Dog of Hades (Attaquer Microsoft Kerberos en donnant un coup de pied au chien de garde de Hades). Dans cet exposé, Tim aborde la même technique dans le contexte des tickets de service.

Bien que notre technique soit légèrement différente des billets d'or et d'argent, elle peut constituer une alternative utile et préférée dans certains environnements.