Elouan

Kerberos de bout en bout

Le protocole d'authentification d'Active Directory expliqué étape par étape : TGT, tickets de service, PAC, et pourquoi chaque étape ouvre la porte à une attaque connue.

Elouan

Série Active Directory · article 2 sur 4
  1. Active Directory : les briques d'un domaine
  2. Kerberos de bout en bout
  3. NTLM et ses faiblesses
  4. Protéger et surveiller un domaine Active Directory

Chaque fois qu’un utilisateur ouvre sa session dans un domaine, accède à un partage ou se connecte à une application d’entreprise, Kerberos travaille en coulisses. C’est un protocole élégant : le mot de passe ne circule jamais sur le réseau. Mais chacune de ses étapes a donné naissance à une attaque connue. Comprendre Kerberos, c’est comprendre la moitié des attaques sur Active Directory.

Le principe : des tickets plutôt que des mots de passe

Le nom vient de Cerbère, le chien à trois têtes qui garde les Enfers dans la mythologie grecque.

Kerberos repose sur un tiers de confiance, le KDC (Key Distribution Center), qui tourne sur chaque contrôleur de domaine. Le KDC connaît la clé secrète de tout le monde (dérivée du mot de passe de chaque compte). Au lieu d’envoyer son mot de passe à chaque service, l’utilisateur obtient des tickets chiffrés qu’il présente.

Trois acteurs :

  • le client (l’utilisateur sur son poste) ;
  • le KDC, qui regroupe l’AS (Authentication Service) et le TGS (Ticket Granting Service) ;
  • le service que l’utilisateur veut utiliser (un partage, une base SQL, un site intranet).

L’analogie classique est celle du parc d’attractions : on passe une fois au guichet d’entrée avec sa pièce d’identité pour obtenir un bracelet (le TGT), puis on échange ce bracelet contre des tickets pour chaque attraction (les tickets de service), sans remontrer sa pièce d’identité.

Les trois échanges

  Client                         KDC (contrôleur de domaine)                 Service
    │                                                                           │
 1  │ ── AS-REQ (horodatage chiffré avec ma clé) ──►  AS                         │
    │ ◄── AS-REP : TGT (chiffré clé krbtgt) + clé de session                    │
    │                                                                           │
 2  │ ── TGS-REQ (TGT + SPN demandé) ──────────────►  TGS                        │
    │ ◄── TGS-REP : ticket de service (chiffré clé du service) + clé de session │
    │                                                                           │
 3  │ ── AP-REQ (ticket de service + authentificateur) ─────────────────────────►│
    │ ◄── (optionnel) AP-REP : authentification mutuelle ───────────────────────│

1. AS-REQ / AS-REP : obtenir le TGT

Le client envoie une demande à l’AS. Pour prouver qu’il connaît son mot de passe, il y joint un horodatage chiffré avec sa clé : c’est la pré-authentification. Le KDC, qui connaît cette clé, vérifie qu’il arrive à le déchiffrer.

Si c’est bon, il renvoie :

  • un TGT (Ticket Granting Ticket), chiffré avec la clé du compte krbtgt. Le client ne peut ni le lire ni le modifier ;
  • une clé de session, chiffrée avec la clé du client, qui servira pour la suite.

Le TGT contient l’identité de l’utilisateur, la clé de session et le PAC (Privilege Attribute Certificate), avec le SID de l’utilisateur et de tous ses groupes.

Ce qu’on voit : l’événement 4768 sur le contrôleur de domaine (ou 4771 en cas d’échec de pré-authentification).

2. TGS-REQ / TGS-REP : obtenir un ticket de service

Quand l’utilisateur veut accéder à un service, son poste envoie au TGS le TGT et le SPN du service voulu, par exemple cifs/fichiers.corp.local pour un partage.

Le TGS renvoie un ticket de service, chiffré avec la clé du compte qui fait tourner ce service, et une nouvelle clé de session pour dialoguer avec lui.

Ce qu’on voit : l’événement 4769 sur le contrôleur de domaine, avec le service demandé et le type de chiffrement.

Le KDC ne vérifie pas les droits

Le TGS délivre un ticket de service à tout utilisateur authentifié, pour n’importe quel SPN. Il ne se demande pas si l’utilisateur a le droit d’utiliser ce service : c’est le service qui décidera. C’est cette propriété qui rend le Kerberoasting possible.

3. AP-REQ : se présenter au service

Le client envoie le ticket de service au service, accompagné d’un authentificateur (son identité et un horodatage, chiffrés avec la clé de session). Le service déchiffre le ticket avec sa propre clé, vérifie l’authentificateur, et lit le PAC pour connaître les groupes de l’utilisateur et décider de ses droits.

Si le client le demande, le service répond pour prouver à son tour son identité : c’est l’authentification mutuelle, l’un des avantages de Kerberos sur NTLM.

Les SPN

Un SPN (Service Principal Name) relie un service à un compte du domaine.

SPNService
cifs/fichiers.corp.localPartage de fichiers SMB
HTTP/intranet.corp.localSite web avec authentification Windows
MSSQLSvc/db01.corp.local:1433SQL Server
ldap/dc01.corp.localLDAP sur un DC

Les services qui tournent avec le compte de la machine utilisent la clé de ce compte, dont le mot de passe est long, aléatoire et renouvelé automatiquement. Les services qui tournent avec un compte de service utilisateur utilisent un mot de passe choisi par un humain… souvent faible et jamais changé.

Le temps et la durée des tickets

  • Décalage d’horloge : 5 minutes maximum par défaut. Au-delà, les authentificateurs sont refusés, pour empêcher le rejeu.
  • Durée d’un TGT : 10 heures par défaut, renouvelable pendant 7 jours.
  • Types de chiffrement : AES256 et AES128 aujourd’hui ; RC4-HMAC encore présent dans beaucoup de domaines, et apprécié des attaquants parce que sa clé est directement l’empreinte NT du mot de passe.

Pourquoi chaque étape a son attaque

C’est le tableau qui fait le lien avec l’article sur les attaques :

ÉtapeFaiblesseAttaque
AS-REQ sans pré-authentificationLe KDC renvoie des données chiffrées avec la clé du compte, sans preuve préalableAS-REP roasting
TGS-REPTicket chiffré avec la clé du compte de service, délivré à tout le mondeKerberoasting
TGT chiffré par krbtgtAvec la clé de krbtgt, on forge n’importe quel TGTGolden ticket
Ticket de service chiffré par la clé du serviceAvec la clé d’un service, on forge un ticket pour ce serviceSilver ticket
Tickets présents en mémoireUn ticket volé peut être réutiliséPass-the-ticket
Clé dérivée du mot de passe (RC4 = hash NT)Avec le hash, on demande un TGT sans connaître le mot de passeOverpass-the-hash

Kerberos ou NTLM ?

Dans un domaine, Kerberos est le protocole par défaut. Windows retombe sur NTLM quand Kerberos est impossible : accès par adresse IP au lieu du nom, machine hors domaine, SPN manquant ou en double, DC injoignable. Le prochain article explique pourquoi ces retours à NTLM sont un problème de sécurité.

L'essentiel

  • Trois acteurs : le client, le KDC (sur chaque contrôleur de domaine : AS + TGS) et le service. Le mot de passe ne circule jamais sur le réseau.
  • AS-REQ / AS-REP : le client prouve qu'il connaît son mot de passe (pré-authentification) et reçoit un TGT, chiffré avec la clé du compte krbtgt.
  • TGS-REQ / TGS-REP : avec son TGT, le client demande un ticket pour un service (identifié par un SPN). Ce ticket est chiffré avec la clé du compte qui fait tourner le service.
  • AP-REQ : le client présente le ticket au service, qui le déchiffre avec sa propre clé. Le PAC dans le ticket contient les groupes de l'utilisateur.
  • Le KDC ne vérifie pas si l'utilisateur a le droit d'utiliser le service : il délivre un ticket à tout utilisateur authentifié. C'est le service qui décide.
  • Kerberos tolère 5 minutes de décalage d'horloge par défaut. Un TGT dure 10 heures, renouvelable 7 jours par défaut.
  • Événements sur les DC : 4768 (TGT), 4769 (ticket de service), 4770 (renouvellement), 4771 (échec de pré-authentification).

Idées reçues

Le KDC vérifie-t-il qu'un utilisateur a le droit d'accéder au service pour lequel il demande un ticket ?

L'erreur courante. Répondre oui.

En réalité. Non. N'importe quel utilisateur authentifié peut obtenir un ticket de service pour n'importe quel SPN du domaine. C'est le service qui décide ensuite, en lisant les groupes dans le PAC. C'est précisément ce qui rend le Kerberoasting possible : on demande des tickets pour des comptes de service, puis on cherche leur mot de passe hors ligne.

Pourquoi un décalage d'horloge casse-t-il l'authentification Kerberos ?

L'erreur courante. Dire que c'est une question de durée de validité des tickets.

En réalité. Chaque requête contient un authentificateur horodaté, chiffré avec la clé de session. Pour empêcher qu'on rejoue une ancienne requête, le serveur refuse les horodatages trop éloignés de son heure (5 minutes par défaut). C'est pour ça que la synchronisation de l'heure (NTP, émulateur PDC) est indispensable dans un domaine.

Un utilisateur accède à un partage par son adresse IP (\\10.0.0.5\partage) au lieu de son nom. Quel protocole est utilisé ?

L'erreur courante. Répondre Kerberos, comme d'habitude.

En réalité. En général NTLM. Les tickets Kerberos sont demandés pour un SPN, qui est basé sur un nom (cifs/serveur.corp.local). Sans nom, Windows retombe par défaut sur NTLM. C'est une source fréquente d'authentifications NTLM résiduelles dans un domaine.

Kerberos chiffre-t-il les données échangées entre le client et le service ?

L'erreur courante. Répondre oui.

En réalité. Kerberos s'occupe de l'authentification et fournit une clé de session. Le chiffrement ou la signature des échanges dépend ensuite du protocole applicatif (signature et chiffrement SMB, LDAP signé, etc.). Une authentification Kerberos ne garantit pas, à elle seule, que le reste de la communication est chiffré.

Que contient le TGT, et qui peut le lire ?

L'erreur courante. Dire que le client peut le lire puisqu'il le possède.

En réalité. Le TGT contient l'identité de l'utilisateur, sa clé de session et son PAC (groupes, SID). Il est chiffré avec la clé du compte krbtgt : le client ne peut pas le lire ni le modifier, seul le KDC le peut. C'est pour ça qu'avec la clé de krbtgt, un attaquant peut forger n'importe quel TGT (golden ticket).

Tester ses connaissances

Références

  • Kerberos : The Definitive GuideJason Garman · O'Reilly
  • Active Directory (5e éd.)Brian Desmond, Joe Richards, Robbie Allen, Alistair G. Lowe-Norris · O'Reilly
  • Pentesting Active Directory and Windows-based InfrastructureDenis Isakov · Packt

Textes de référence en ligne