Series · 4 partsInternal Network TriagePart 1 · You are here
- 1Kerberoasting Triyajı: Çoğu Servis Bileti Zaman KaybıdırYou are here
- 2SMB Signing Açık. Bu Grafikte Sadece Bir Kenarı Kapattı
- 3Kerberos Delegasyon Triyajı: Unconstrained, Constrained ve RBCD
- 4BloodHound Edge Analizi: Çizge Var, Peki Saldırı Yolu Kanıtı Nerede?
60 saniyede Kerberoasting
Kerberoasting, bir iç ağ penetrasyon testinde neredeyse herkesin ilk çalıştırdığı saldırılardan biridir ve neredeyse her zaman aynı şekilde öğretilir: İsteyebildiğin kadar servis bileti iste, hash’leri dışarı aktar, parola kırıcıyı (cracker) üzerlerine sal ve bekle. Bu yaklaşım çalışır. Ancak aynı zamanda elinizde dört yüz biletle, bir haftalık boşa harcanmış GPU süresiyle ve sıfır sonuçla kalmanızın da yegane yoludur.
Kerberoasting’in asıl ilginç kısmı bilet istemek değildir. Asıl maharet triyaj yapmaktır.
Saldırı gerçekte neye dayanır?
Bir servis bileti (service ticket), SPN’in kayıtlı olduğu hesabın parola hash’i ile şifrelenir. Kimliği doğrulanmış herhangi bir domain kullanıcısı, herhangi bir SPN için bilet talep edebilir. Bu bir yapılandırma hatası (misconfiguration) değildir; Kerberos protokolünün çalışma biçimi tam olarak böyledir. Zafiyet tamamen hesabın arkasındaki parolanın kendisindedir.
Bu da demek oluyor ki soru hiçbir zaman “bunu roast edebilir miyim?” değildir. Asıl soru her zaman şudur: “Bu SPN’in arkasındaki hesabın, bir parola kırıcının erişebileceği zayıflıkta bir parolaya sahip olma ihtimali nedir?”
Buna üç nitelik karar verir ve hiçbir şeyi kırmaya çalışmadan önce bu üç niteliği doğrudan okuyabilirsiniz.
Önem taşıyan üç sinyal
Hesap türü. Bir makine hesabına (machine account) ait SPN’i talep etmeye değmez. Makine hesabı parolaları 120 karakterlik rastgele UTF-16 dizileridir ve varsayılan olarak her otuz günde bir otomatik yenilenir (rotate edilir). Bunları kıramazsınız. Pratikte, filtrelemeyi yalnızca kullanıcı hesaplarıyla (user accounts) sınırlamak, olgun bir domain’deki SPN’lerin ezici çoğunluğunu doğrudan eler.
Parola yaşı. pwdLastSet özniteliği herhangi bir domain kullanıcısı tarafından okunabilir ve en yüksek tahmin gücüne sahip tek alandır. Parolası yıllar önce belirlenmiş bir hesap, neredeyse kesinlikle ilk kurulum sırasında bir insan tarafından bir defalığına ayarlanmış ve bir daha asla dokunulmamıştır. Geçen ay yenilenmiş bir hesap ise bir tür yönetim/otomasyon altındadır. Zayıf parolaların yaşadığı yer o eski hesaplardır.
Şifreleme türü. Dönen bilet RC4 (etype 23) ise bir NTLM hash’i kırıyorsunuzdur ve kırma hızı (throughput) muazzamdır. Bilet AES (etype 17/18) ise 4096 iterasyonlu PBKDF2 üzerinden kırma yaparsınız ve efektif hızınız katlarca mertebe düşer. Aynı parola, tamamen farklı kırma maliyeti. Güncel nesil bir domain ortamında hâlâ RC4 döndüren bir hesap, orada ne kadar süredir dokunulmadan yattığına dair size çok net bir şey fısıldar.
Kırmadan önce okumak
Asıl mesele, her üç bilginin de daha en baştan sorgulanabilir olmasıdır. Tek bir LDAP sorgusu, parola kırıcı çalışmaya başlamadan önce her adayı sıralamanız için gereken her şeyi verir:
Get-ADUser -Filter { ServicePrincipalName -like "*" } `
-Properties ServicePrincipalName, pwdLastSet, msDS-SupportedEncryptionTypes, adminCount |
Select-Object SamAccountName,
@{ n = "PwdAge"; e = { (Get-Date) - [datetime]::FromFileTime($_.pwdLastSet) } },
@{ n = "EncTypes"; e = { $_.'msDS-SupportedEncryptionTypes' } },
adminCount |
Sort-Object PwdAge -Descending
adminCount = 1 izlenmeye değer dördüncü sütundur. Hesabın korunan bir grupta yer aldığını — ya da geçmişte bir kez yer aldığını — gösterir. Beş yıllık parolaya sahip ve RC4 etkinleştirilmiş ayrıcalıklı bir hesap, dört yüz bilet arasında sıradan bir aday değildir. O hesap, sızma testinin kendisidir.
Laboratuvarda nasıl görünür?
Şifreleme türünün etkisini gerçek ortamlara dokunmadan göstermek için laboratuvar domain’inde aynı parolaya sahip iki hesap oluşturalım; biri RC4, diğeri AES-256 kullanmaya zorlanmış olsun:
$ hashcat -m 13100 rc4.ticket wordlist.txt --show
Speed.#1.........: 1214.7 MH/s
$ hashcat -m 19700 aes.ticket wordlist.txt --show
Speed.#1.........: 412.1 kH/s
Aynı donanımda, aynı parola için yaklaşık 3000 kat hız farkı. Şifreleme türünü göz ardı eden bir aday listesi önceliklendirilmiş bir liste değildir; tamamen rastgele seçilmiş bir listedir.
Kanıt matrisi
| Sinyal | Neyi kanıtlar | Negatif kontrol | Savunucu doğrulaması |
|---|---|---|---|
Belirgin şekilde eski pwdLastSet değerine sahip kullanıcı SPN’i | İnsan tarafından yönetilen bir servis sırrının, hedeflenen rotasyon döngüsünü muhtemelen aştığını | Yakın zamanda parolası yenilenmiş bir servis kimliği ve bir makine hesabı ile karşılaştırın | Kullanıcı SPN’lerini, parola yaşını, sahibini ve belgelenmiş rotasyon bağımlılığını envanterleyin |
Dönen biletin RC4 (etype 23) kullanması | Hesabın hâlâ en ucuz çevrimdışı (offline) kırma yoluna izin verdiğini | Yalnızca AES kullanan bir lab hesabı için bilet isteyin ve etype 17 veya 18 olduğunu doğrulayın | RC4 kullanımı için msDS-SupportedEncryptionTypes alanını ve KDC bilet olaylarını inceleyin |
Ayrıcalıklı grup geçmişi veya adminCount = 1 | Hesabın ele geçirilmesinin dizin genelinde orantısız bir etki yaratacağını | Ayrıcalık bağlamını kaldırdıktan sonra önceliklendirmeyi tekrarlayın; aday alt sıralara düşmelidir | adminCount değerini tek başına kanıt saymak yerine güncel ve geçmiş grup üyeliklerini çözümleyin |
| Sınırlı bir kelime listesi (wordlist) testiyle lab/onaylı aday sırrının çözülmesi | Biletin istismar edilebilir olmasını Kerberos’un değil, parola politikasının sağladığını | Aynı bütçeyi bir gMSA veya uzun rastgele bir kontrole karşı çalıştırın ve kırılamadığını gösterin | Desteklenen servisleri gMSA’ya taşıyın, istisnaları rotate edin ve sonraki biletlerin AES kullandığını doğrulayın |
Sürekli karşılaştığım kalıp
İç ağ sızma testlerinde düşen hesaplar istisnasız hep aynı profile sahiptir: İlk kurulum sırasında oluşturulmuş, bir SPN atanmış, birinin bir kereliğine bir yapılandırma dosyasına yazması gereken bir parola verilmiş ve sonrasında kimsenin yeniden başlatmak istemediği bir servisi kesintiye uğratmamak adına kendi haline terk edilmiş bir servis hesabı. Düşen hesap hiçbir zaman dışarıdan önemli görünen hesap değildir. Düşen hesap, artık kimsenin sorumluluğunda olmayan hesaptır.
Bu bulgunun doğru bir şekilde kapatılmasının zor olmasının nedeni de budur. Parolayı değiştirmek yalnızca tek bir hesabı düzeltir. Bu zafiyet sınıfını kökten çözen şey, servisi Group Managed Service Account (gMSA) mimarisine taşımaktır. gMSA yapısında parola, makine tarafından üretilen 240 baytlık rastgele bir değerdir ve otomatik olarak yenilenir; bu noktada SPN artık biraz daha zor bir saldırı yolu olmaktan çıkar, tamamen bir saldırı yolu olmaktan çıkar.
Savunma ekiplerine teslim edilecek çıktılar
“Kerberoasting mümkündür” diyen bir rapor eyleme dönüştürülebilir değildir; çünkü Kerberoasting neredeyse her zaman mümkündür. Yazmaya değer bulgu, net bir şekilde önceliklendirilmiş listedir: Şu hesaplar, şu parola yaşlarıyla, hâlâ RC4 anlaşması yapıyor ve içlerinden biri ayrıcalıklı. Bu durumda iyileştirme adımları somuttur: Taşınabilecek olanlar için gMSA, taşınamayanlar için gerçek bir uzunluk zorunluluğu ile zorunlu rotasyon ve tamamında yalnızca AES şifreleme türlerinin zorunlu kılınması.
Asıl teslim edilebilir çıktı triyajdır. Kırılan hash bunu sadece kanıtlar.
Bu teknik not ne kadar güncel?
En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.
Yazar teknik incelemeyi tamamladı. Bu etiket tek başına laboratuvar yeniden üretimi iddiası taşımaz.
