---
title: "Çok Ormanlı Active Directory Mimarisi: Ormanlar, Güven İlişkileri, DNS ve Katmanlı Servisler Gerçekte Nasıl Çalışır?"
description: "Bir istismarı çalıştırmadan önce beş sunuculu GOAD ortamına sistem tarafından bakmak: kuruluşlar neden ormanlara ve alt etki alanlarına ayrılır, dizin bölümleri nasıl replike olur, DNS koşullu yönlendiricileri ve Trusted Domain Objects ormanlar arası kimlik doğrulamayı nasıl yönlendirir ve normal Windows özellikleri nerede saldırı yoluna dönüşür?"
date: 2026-11-02
author: Sevban Dönmez (@jankesec)
canonical: https://jankesec.com/tr/yazilar/multi-forest-active-directory-architecture/
---

## Dizin Topolojisi ve Orman Güvenlik Sınırları

Kurumsal ortamlarda Active Directory güvenlik değerlendirmeleri, etki alanı yönetim sınırları ile güvenlik sınırları karıştırıldığında yanlış varsayımlara dayanır. Bir Domain Controller izole bir hedef değildir; dizin bölümleri, güven öznitelikleri ve servis konumlandırma kayıtlarıyla yönetilen, replike bir dizin topolojisinin düğümüdür. Bu yüzden tek bir DC'ye bakıp "burası zaten ele geçirildi" demek, çoğu zaman ormanın geri kalanını gözden kaçırmak demektir. Active Directory'deki yapılandırma sorunları nadiren yazılım hatasıdır; daha sık olarak, yanlış kurgulanmış güven sınırları üzerinde çalışan standart Windows mimari özellikleridir:

- **AS-REP Roasting ve Kerberoasting**, hedef hesabın uzun vadeli gizli anahtarıyla şifrelenen standart RFC 4120 bilet alışverişleridir (`AS-REP` ve `TGS-REP`). Bu tasarım, durumsuz (stateless) KDC'lerin bellekte istemci başına oturum durumu tutmasını gereksiz kılar; saldırgan için ise biletin çevrimdışı kırılabilmesi anlamına gelir.
- **Kısıtlı Delegasyon (`S4U2Self` / `S4U2Proxy`)**, çok katmanlı kurumsal uygulamaların (örneğin arka uçtaki bir MSSQL veritabanını sorgulayan IIS web ön yüzünün) kimlik doğrulanmış kullanıcılar adına işlem yapmasını sağlayan bir protokol uzantısıdır. Açık metin parola saklamadan çalışır; bu yüzden meşru bir ihtiyaçtır, ama yanlış hedefe verildiğinde bir saldırı yoludur.
- **Ebeveyn–Alt (Parent–Child) `ExtraSids` Yetki Yükseltmesi**, alt etki alanının bir güvenlik sınırı değil, yalnızca bir yönetim birimi olması nedeniyle çalışır. Bir Active Directory ormanındaki her etki alanı aynı `Configuration` ve `Schema` bölümlerini paylaşır; bu yüzden alt taraftaki bir ele geçirme, üst tarafa taşınabilir.
- **Dizin Çizgesi Numaralandırması (BloodHound)**, Windows üye sunucularının ve etki alanı istemcilerinin Group Policy uygulamak, SID çözümlemek ve servis bulmak için `Authenticated Users` kimliğiyle dizin metadata'sına ve nesne güvenlik tanımlayıcılarına (`nTSecurityDescriptor`) okuma erişimine ihtiyaç duyması sayesinde çalışır.

Beş sunuculu [GOAD (Game of Active Directory)](https://orange-cyberdefense.github.io/GOAD/) laboratuvarı, çok katmanlı mimariyi değerlendirmek için eksiksiz bir referans model sunar. Bir güvenlik denetim makinesinden (`192.168.56.0/24`) gönderilen salt okunur LDAP ve DNS sorgularıyla bu analiz, iki ayrı ormanın, üç etki alanının, üç Domain Controller'ın ve iki üye sunucunun Microsoft Windows Server protokolleri altında nasıl etkileştiğini ayrıntılandırır.

<figure class="diagram">
<svg viewBox="0 0 760 365" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="GOAD'da Active Directory bölüm ve güven mimarisi: Forest 1 (sevenkingdoms.local) Schema ve Configuration bölümlerini DC01 ve DC02 arasında paylaşır; Forest 2 (DC03 üzerindeki essos.local) ise SID filtering'li ormanlar arası güvenle bağlanan yalıtılmış bölümleri korur.">
<defs>
  <marker id="arch-m1" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L8,4 L0,8 z" class="dg-arrow" /></marker>
  <marker id="arch-m1-crit-r" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L8,4 L0,8 z" class="dg-arrow-crit" /></marker>
  <marker id="arch-m1-crit-l" viewBox="0 0 8 8" refX="1" refY="4" markerWidth="6" markerHeight="6" orient="auto"><path d="M8,0 L0,4 L8,8 z" class="dg-arrow-crit" /></marker>
</defs>
<text x="12" y="20" class="dg-muted">ORMAN GÜVENLİK SINIRLARI · PAYLAŞILAN BÖLÜMLER VE ORMANLAR ARASI GÜVEN</text>
<rect x="12" y="34" width="314" height="318" rx="8" class="dg-box-accent" />
<text x="24" y="55" class="dg-accent">ORMAN 1 · sevenkingdoms.local</text>
<rect x="22" y="66" width="294" height="46" rx="6" class="dg-box" />
<text x="34" y="85" class="dg-label">Paylaşılan Orman Bölümleri</text>
<text x="34" y="101" class="dg-mono dg-compact">CN=Schema · CN=Configuration · DC=ForestDnsZones</text>
<line x1="169" y1="112" x2="169" y2="124" class="dg-line dg-dash" marker-end="url(#arch-m1)" />
<rect x="22" y="124" width="294" height="52" rx="6" class="dg-box" />
<text x="34" y="145" class="dg-label">DC01 · kingslanding (.10)</text>
<text x="228" y="145" class="dg-accent dg-compact">ORMAN KÖKÜ</text>
<text x="34" y="163" class="dg-mono dg-compact">DC=sevenkingdoms,DC=local · SEVENKINGDOMS-CA</text>
<line x1="169" y1="176" x2="169" y2="184" class="dg-line" />
<rect x="36" y="184" width="266" height="18" rx="4" class="dg-box" style="fill: #0c0e0e; stroke: rgba(255,255,255,0.2);" />
<text x="169" y="196" text-anchor="middle" class="dg-muted dg-compact">Üst/Alt Güven (0x20) · SID Filter KAPALI</text>
<line x1="169" y1="202" x2="169" y2="212" class="dg-line" marker-end="url(#arch-m1)" />
<rect x="22" y="212" width="294" height="52" rx="6" class="dg-box" />
<text x="34" y="233" class="dg-label">DC02 · winterfell (.11)</text>
<text x="230" y="233" class="dg-muted dg-compact">ALT DOMAIN</text>
<text x="34" y="251" class="dg-mono dg-compact">DC=north,DC=sevenkingdoms,DC=local</text>
<line x1="169" y1="264" x2="169" y2="280" class="dg-line" marker-end="url(#arch-m1)" />
<rect x="22" y="280" width="294" height="56" rx="6" class="dg-box" />
<text x="34" y="301" class="dg-label">SRV02 · castelblack (.22)</text>
<text x="228" y="301" class="dg-muted dg-compact">ÜYE SUNUCU</text>
<text x="34" y="318" class="dg-muted dg-compact">IIS 80 · MSSQL 1433 · Kısıtlı Delegasyon</text>
<rect x="337" y="112" width="86" height="76" rx="6" class="dg-box-danger" />
<text x="380" y="129" text-anchor="middle" class="dg-crit dg-compact" font-weight="700">ORMAN GÜVENİ</text>
<text x="380" y="143" text-anchor="middle" class="dg-label dg-compact">TDO (ÇİFT YÖNLÜ)</text>
<text x="380" y="158" text-anchor="middle" class="dg-crit dg-compact">SID FILTER AÇIK</text>
<text x="380" y="172" text-anchor="middle" class="dg-muted dg-compact">0x48 / 0x08</text>
<line x1="316" y1="150" x2="337" y2="150" class="dg-line-crit" marker-start="url(#arch-tr-m1-crit-l)" />
<line x1="423" y1="150" x2="444" y2="150" class="dg-line-crit" marker-end="url(#arch-m1-crit-r)" />
<rect x="337" y="222" width="86" height="42" rx="6" class="dg-box" />
<text x="380" y="238" text-anchor="middle" class="dg-label dg-compact">DNS YÖNL.</text>
<text x="380" y="252" text-anchor="middle" class="dg-muted dg-compact">Koşullu 53</text>
<line x1="316" y1="243" x2="337" y2="243" class="dg-line dg-dash" />
<line x1="423" y1="243" x2="444" y2="243" class="dg-line dg-dash" />
<rect x="434" y="34" width="314" height="318" rx="8" class="dg-box-accent" />
<text x="446" y="55" class="dg-accent">ORMAN 2 · essos.local</text>
<rect x="444" y="66" width="294" height="46" rx="6" class="dg-box" />
<text x="456" y="85" class="dg-label">Yalıtılmış Orman Bölümleri</text>
<text x="456" y="101" class="dg-mono dg-compact">CN=Schema · CN=Configuration (Independent)</text>
<line x1="591" y1="112" x2="591" y2="124" class="dg-line dg-dash" marker-end="url(#arch-m1)" />
<rect x="444" y="124" width="294" height="52" rx="6" class="dg-box" />
<text x="456" y="145" class="dg-label">DC03 · meereen (.12)</text>
<text x="650" y="145" class="dg-accent dg-compact">ORMAN KÖKÜ</text>
<text x="456" y="163" class="dg-mono dg-compact">DC=essos,DC=local · ESSOS-CA</text>
<line x1="591" y1="176" x2="591" y2="184" class="dg-line" />
<rect x="461" y="184" width="260" height="18" rx="4" class="dg-box" style="fill: #0c0e0e; stroke: rgba(255,255,255,0.2);" />
<text x="591" y="196" text-anchor="middle" class="dg-muted dg-compact">Domain Üyesi · Kerberos / RPC (SMB)</text>
<line x1="591" y1="202" x2="591" y2="212" class="dg-line" marker-end="url(#arch-m1)" />
<rect x="444" y="212" width="294" height="52" rx="6" class="dg-box" />
<text x="456" y="233" class="dg-label">SRV03 · braavos (.23)</text>
<text x="652" y="233" class="dg-muted dg-compact">ÜYE SUNUCU</text>
<text x="456" y="251" class="dg-mono dg-compact">MSSQL 1433 · LAPS · gMSA</text>
<line x1="591" y1="264" x2="591" y2="280" class="dg-line" marker-end="url(#arch-m1)" />
<rect x="444" y="280" width="294" height="56" rx="6" class="dg-box-danger" />
<text x="456" y="301" class="dg-crit dg-compact" font-weight="700">ORMAN GÜVENLİK SINIRI UYGULANIYOR</text>
<text x="456" y="318" class="dg-muted dg-compact">Yabancı Admin SID'leri ayıklanır · Yalıtılmış bölümler</text>
</svg>
<figcaption>GOAD genelindeki dizin bölümü yerleşimi: <code>sevenkingdoms.local</code> ve <code>north.sevenkingdoms.local</code>, Forest 1 içinde tek bir <code>CN=Configuration</code> ve <code>CN=Schema</code> paylaşır; <code>essos.local</code> ise ormanlar arası bir Trusted Domain Object (TDO) ve koşullu DNS yönlendirmesiyle bağlanan ayrı bir ormandır.</figcaption>
</figure>

---

## 1. Dizin Bölümleri: Güvenlik Sınırı Neden Etki Alanı Değil Ormandır?

Bir Active Directory ormanında ilk Domain Controller yükseltildiğinde (`Install-ADDSForest`), Windows `C:\Windows\NTDS\ntds.dit` konumunda bir Extensible Storage Engine (`ESE`) veritabanı dosyası oluşturur. Bu veritabanının içinde nesneler, Domain Controller'lar arasındaki replikasyon kapsamını yönetmek için mantıksal **Adlandırma Bağlamlarına (Naming Contexts / Partitions)** ayrılır. Yani "dizin" tek bir düz dosya değil, farklı kapsamlara sahip bölümlerin birleşimidir.

`DC01` (`192.168.56.10`) üzerinde `CN=Partitions,CN=Configuration,DC=sevenkingdoms,DC=local` sorgulandığında Forest 1 için bölüm kayıtlarının tamamı görünür:

```bash
$ ldapsearch -x -H ldap://192.168.56.10 -D "samwell.tarly@north.sevenkingdoms.local" -w "Heartsbane" \
    -b "CN=Partitions,CN=Configuration,DC=sevenkingdoms,DC=local" "(objectClass=crossRef)" \
    cn nCName dnsRoot | grep -E "^(cn|nCName|dnsRoot)"
cn: Enterprise Configuration
nCName: CN=Configuration,DC=sevenkingdoms,DC=local
dnsRoot: sevenkingdoms.local
cn: Enterprise Schema
nCName: CN=Schema,CN=Configuration,DC=sevenkingdoms,DC=local
dnsRoot: sevenkingdoms.local
cn: SEVENKINGDOMS
nCName: DC=sevenkingdoms,DC=local
dnsRoot: sevenkingdoms.local
cn: NORTH
nCName: DC=north,DC=sevenkingdoms,DC=local
dnsRoot: north.sevenkingdoms.local
cn: 3d4b07e3-c44f-4f9e-ab6c-19dbc611d4e3
nCName: DC=DomainDnsZones,DC=sevenkingdoms,DC=local
dnsRoot: DomainDnsZones.sevenkingdoms.local
cn: 7a98ffc5-6322-406d-89c3-4f33b87dd679
nCName: DC=ForestDnsZones,DC=sevenkingdoms,DC=local
dnsRoot: ForestDnsZones.sevenkingdoms.local
cn: a7e87a5b-d212-4656-9be1-dc9505595501
nCName: DC=DomainDnsZones,DC=north,DC=sevenkingdoms,DC=local
dnsRoot: DomainDnsZones.north.sevenkingdoms.local
```

### Bölüm Sınıfları ve Replikasyon Kapsamları

| Bölüm Türü | LDAP Ayırt Edici Adı | Replikasyon Kapsamı | Güvenlik Etkisi |
| :--- | :--- | :--- | :--- |
| **Schema NC** | `CN=Schema,CN=Configuration,DC=...` | Tüm Orman (Tüm DC'ler) | Nesne sınıflarını ve özniteliklerini tanımlar. Yalnızca Schema Master FSMO rolünde yazılabilir. |
| **Configuration NC** | `CN=Configuration,DC=...` | Tüm Orman (Tüm DC'ler) | Kurumsal topolojiyi, siteleri, alt ağları ve AD CS PKI kaplarını tutar. Tüm DC'ler yazılabilir replikaya sahiptir. |
| **Domain NC** | `DC=domain,DC=local` | Etki Alanı İçi DC'ler | Etki alanı kullanıcı hesaplarını, grupları, bilgisayarları ve GPO'ları içerir. Yalnızca o etki alanı içinde yazılabilir. |
| **Global Catalog (GC)** | `3268/tcp` / `3269/tcp` | Tüm Orman (Seçili DC'ler) | Ormandaki tüm etki alanı bölümlerinin salt okunur kısmi öznitelik kümesini (PAS) sunar. |
| **Application NC** | `DC=ForestDnsZones`, `DC=DomainDnsZones` | Orman DC'leri veya Etki Alanı DNS Sunucuları | Active Directory Tümleşik DNS (ADIDNS) bölgelerini barındırır. |

Kurumsal yapılarda şirketler, yönetim kontrolünü alt ekiplere devretmek için sıklıkla alt etki alanları (`north.sevenkingdoms.local` gibi) oluşturur. Ancak `DC01` (`kingslanding`) ve `DC02` (`winterfell`) orman genelindeki `CN=Configuration` ve `CN=Schema` bölümlerini paylaştığı için Microsoft, **gerçek güvenlik sınırını etki alanı değil orman** olarak tanımlar. Bu ayrımı anlamak, bir denetimde "hangi hedefe saldırırsam ormanın tamamını etkilerim?" sorusunun cevabını verir.

Bir orman içinde ebeveyn–alt güvenleri SID filtering uygulamaz. Bu nedenle bir alt etki alanı DC'sini (`DC02`) ele geçirmek, o etki alanının `krbtgt` hash'ini verir; bu hash ile `ExtraSids` (`sIDHistory`) alanında orman kökünün `Enterprise Admins` SID'ini (`S-1-5-21-3291916993-3717649449-3745629854-519`) taşıyan bir Kerberos bileti üretilebilir ve tüm orman ele geçirilebilir. Yani alt etki alanı, teknik olarak ayrı bir yönetim birimi olsa da güvenlik açısından ormanın içindedir. Bu nedenle bir alt etki alanındaki zayıf bir yönetici hesabı, orman kökündeki ayrıcalıklara giden bir basamak olarak değerlendirilmelidir.

---

## 2. Çok Ormanlı DNS ve `_msdcs` Servis Çözümlemesi

Windows Active Directory servis keşfi için tamamen DNS'e bağımlıdır. LDAP bağlantısı kurmadan, Kerberos bileti istemeden veya Group Policy güncellemesi yapmadan önce Windows istemcileri, dizin servislerinin IP adreslerini ve port numaralarını çözmek için **RFC 2782 `SRV` sorguları** gönderir. Bu yüzden DNS yanlış yapılandırıldığında, dizin ayakta olsa bile istemciler onu bulamaz.

GOAD içindeki her Domain Controller, kendi yetkili bölgesi için Windows DNS Server rolünü çalıştırır (`sevenkingdoms.local` için `.10`, `north.sevenkingdoms.local` için `.11`, `essos.local` için `.12`). Temel `_msdcs` kayıtlarını sorgulamak bu konumlandırma sürecini gösterir:

```bash
$ dig @192.168.56.10 _ldap._tcp.dc._msdcs.sevenkingdoms.local SRV +short
0 100 389 kingslanding.sevenkingdoms.local.

$ dig @192.168.56.10 _kerberos._tcp.dc._msdcs.sevenkingdoms.local SRV +short
0 100 88 kingslanding.sevenkingdoms.local.

$ dig @192.168.56.10 _ldap._tcp.pdc._msdcs.sevenkingdoms.local SRV +short
0 100 389 kingslanding.sevenkingdoms.local.

$ dig @192.168.56.10 _ldap._tcp.gc._msdcs.sevenkingdoms.local SRV +short
0 100 3268 kingslanding.sevenkingdoms.local.
0 100 3268 winterfell.north.sevenkingdoms.local.
```

Global Catalog sorgusu (`_ldap._tcp.gc._msdcs.sevenkingdoms.local`) `3268` portunda hem `kingslanding` (`.10`) hem de `winterfell` (`.11`) sunucularını döndürür. Global Catalog tüm ormanı indekslediği için `sevenkingdoms.local` içindeki herhangi bir istemci, evrensel grup üyeliklerini veya etki alanları arası UPN'leri çözmek için `winterfell`'e `3268` portundan sorgu gönderebilir.

### Koşullu Yönlendiriciler ile Ormanlar Arası Çözümleme

`sevenkingdoms.local` ile `essos.local` ayrı ormanlarda yer aldığı ve ortak bir Global Catalog paylaşmadığı için ormanlar arası çözümleme, `DC01` ve `DC03` üzerinde yapılandırılmış **DNS Koşullu Yönlendiricileri (Conditional Forwarders)** gerektirir:

```powershell
Add-DnsServerConditionalForwarderZone -Name "essos.local" -MasterServers 192.168.56.12
```

`north.sevenkingdoms.local` içindeki bir makine `braavos.essos.local` adresini sorguladığında, yerel DNS sunucusu sorguyu doğrudan `192.168.56.12` (`meereen.essos.local`) adresine iletir. Bu, istemcinin diğer ormanın iç bölgesini çözmesini sağlar; aksi hâlde ad çözümlemesi başarısız olur ve güven çalışsa bile erişim kurulamaz.

Denetim açısından koşullu yönlendiriciler, ormanlar arası güven ilişkilerini kimlik doğrulamasız DNS keşfine açar. Dahası, Active Directory Tümleşik DNS (`DC=DomainDnsZones` ve `DC=ForestDnsZones`) varsayılan olarak `Authenticated Users` grubunun yeni kayıt oluşturmasına izin verdiği için, ele geçirilmiş hesaplar SMB signing zorunlu değilse ad çözümlemesini zehirlemek amacıyla joker veya hedef kayıtlar enjekte edebilir. Bu nedenle DNS, yalnızca bir "kolaylık" katmanı değil, saldırı yüzeyinin parçasıdır.

---

## 3. Güven Mimarisi: Trusted Domain Objects ve Kerberos Yönlendirmeleri

DNS, ormanlar arası ana bilgisayar adı çözümlemesini sağlasa da etki alanları arası kimlik doğrulama için `CN=System,DC=<domain>,DC=<tld>` altında bulunan bir **Trusted Domain Object (`trustedDomain`)** nesnesi gerekir. Bu nesne, güvenin yönünü, tipini ve SID filtering davranışını taşır.

`DC01` (`sevenkingdoms.local`) ve `DC03` (`essos.local`) üzerindeki `trustedDomain` kayıtlarını sorgulamak yönlendirme bayraklarını ortaya çıkarır:

```bash
$ ldapsearch -x -H ldap://192.168.56.10 -D "samwell.tarly@north.sevenkingdoms.local" -w "Heartsbane" \
    -b "CN=System,DC=sevenkingdoms,DC=local" "(objectClass=trustedDomain)" \
    cn flatName trustDirection trustType trustAttributes | grep -E "^(cn|flatName|trust)"
cn: north.sevenkingdoms.local
trustDirection: 3
trustType: 2
trustAttributes: 32
flatName: NORTH
cn: essos.local
trustDirection: 3
trustType: 2
trustAttributes: 72
flatName: ESSOS

$ ldapsearch -x -H ldap://192.168.56.12 -D "missandei@essos.local" -w "fr3edom" \
    -b "CN=System,DC=essos,DC=local" "(objectClass=trustedDomain)" \
    cn flatName trustDirection trustType trustAttributes | grep -E "^(cn|flatName|trust)"
cn: sevenkingdoms.local
trustDirection: 3
trustType: 2
trustAttributes: 8
flatName: SEVENKINGDOMS
```

<figure class="diagram">
<svg viewBox="0 0 760 250" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="GOAD'da ormanlar arası Kerberos yönlendirme zinciri: north.sevenkingdoms.local kullanıcısı braavos.essos.local'e erişmek ister; DC02 winterfell, DC01 kingslanding'e ormanlar arası bir TGT verir; DC01 de DC03 meereen'e ormanlar arası yönlendirme TGT'si verir ve burada SID filtering, SRV03 braavos için servis bileti verilmeden önce yabancı ayrıcalıklı SID'leri ayıklar.">
<defs><marker id="arch-m2" 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" /></marker></defs>
<text x="0" y="16" class="dg-muted">ORMANLAR ARASI KERBEROS YÖNLENDİRME ZİNCİRİ · NORTH → SEVENKINGDOMS → ESSOS</text>
<rect x="0" y="38" width="165" height="78" rx="8" class="dg-box" />
<text x="14" y="62" class="dg-label">1. DC02 · winterfell</text>
<text x="14" y="82" class="dg-mono dg-compact">NORTH KDC (.11)</text>
<text x="14" y="100" class="dg-muted">ROOT'a TGT verir</text>
<line x1="165" y1="77" x2="195" y2="77" class="dg-line" marker-end="url(#arch-m2)" />
<rect x="198" y="38" width="175" height="78" rx="8" class="dg-box-accent" />
<text x="212" y="62" class="dg-label">2. DC01 · kingslanding</text>
<text x="212" y="82" class="dg-mono dg-compact">ROOT KDC (.10)</text>
<text x="212" y="100" class="dg-accent">SID Filter yok (0x20)</text>
<line x1="373" y1="77" x2="403" y2="77" class="dg-line-crit" marker-end="url(#arch-m2)" />
<rect x="406" y="38" width="175" height="78" rx="8" class="dg-box-danger" />
<text x="420" y="62" class="dg-label">3. DC03 · meereen</text>
<text x="420" y="82" class="dg-mono dg-compact">ESSOS KDC (.12)</text>
<text x="420" y="100" class="dg-crit">SID Filter AÇIK (0x08)</text>
<line x1="581" y1="77" x2="611" y2="77" class="dg-line" marker-end="url(#arch-m2)" />
<rect x="614" y="38" width="146" height="78" rx="8" class="dg-box" />
<text x="628" y="62" class="dg-label">4. SRV03 · braavos</text>
<text x="628" y="82" class="dg-mono dg-compact">CIFS/braavos (.23)</text>
<text x="628" y="100" class="dg-muted">Servis TGS'ini kabul eder</text>
<rect x="0" y="144" width="373" height="84" rx="8" class="dg-box-accent" />
<text x="14" y="168" class="dg-label">Orman İçi Adım (NORTH ↔ SEVENKINGDOMS)</text>
<text x="14" y="188" class="dg-muted">trustAttributes = 32 (WITHIN_FOREST)</text>
<text x="14" y="208" class="dg-accent">ExtraSids (S-1-5-21-root-519) adım boyunca korunur</text>
<rect x="406" y="144" width="354" height="84" rx="8" class="dg-box-danger" />
<text x="420" y="168" class="dg-label">Ormanlar Arası Adım (SEVENKINGDOMS ↔ ESSOS)</text>
<text x="420" y="188" class="dg-muted">trustAttributes = 8 / 72 (FOREST_TRANSITIVE)</text>
<text x="420" y="208" class="dg-crit">Yabancı Enterprise Admin SID'leri SID Filtering ile ayıklanır</text>
</svg>
<figcaption>Kerberos yönlendirmeleri GOAD'ın iki güven sınırını nasıl geçer: orman içi yönlendirmeler (<code>WITHIN_FOREST = 32</code>) <code>NORTH</code> ile <code>SEVENKINGDOMS</code> arasında <code>ExtraSids</code> değerlerini korur; <code>ESSOS</code> sınırına giden ormanlar arası geçiş (<code>FOREST_TRANSITIVE = 8</code>) ise SID filtering uygular.</figcaption>
</figure>

### `trustAttributes` Bitmask Referansı `[MS-ADTS §6.1.6.7.9]`

| Bit Değeri | Hex | Bayrak Adı | Açıklama |
| :--- | :--- | :--- | :--- |
| `1` | `0x0001` | `TRUST_ATTRIBUTE_NON_TRANSITIVE` | Güven, alt veya ortak etki alanlarına geçişli olarak yayılmaz. |
| `2` | `0x0002` | `TRUST_ATTRIBUTE_UPLEVEL_ONLY` | Güveni yalnızca Windows 2000 ve üzeri işletim sistemleriyle sınırlar. |
| `4` | `0x0004` | `TRUST_ATTRIBUTE_FILTER_SIDS` | Karantinaya alınmış etki alanı: dış güvenlerde SID filtering açıkça uygulanır. |
| `8` | `0x0008` | `TRUST_ATTRIBUTE_FOREST_TRANSITIVE` | İki orman kökü arasında geçişli ormanlar arası kimlik doğrulamayı etkinleştirir. |
| `16` | `0x0010` | `TRUST_ATTRIBUTE_CROSS_ORGANIZATION` | Seçici kimlik doğrulama açık: çağıranın hedef ana bilgisayarlarda `Allowed to Authenticate` izni olması gerekir. |
| `32` | `0x0020` | `TRUST_ATTRIBUTE_WITHIN_FOREST` | Aynı orman içindeki ebeveyn–alt güveni. **SID filtering devre dışı.** |
| `64` | `0x0040` | `TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL` | Orman güvenini dış sınır uygulama semantiğiyle değerlendirir. |
| `512` | `0x0200` | `TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION` | Kuruluşlar arası sınırlarda TGT delegasyonunu engeller. |

### SID Filtreleme Protokol Mekaniği

Bir yönlendirme TGT'si ormanlar arası bir güvenden (`0x08` veya `0x04`) geçtiğinde, kabul eden KDC kullanıcının Privilege Attribute Certificate (`PAC`) yapısını `[MS-PAC] §4.1.2.2` uyarınca değerlendirir:

1. KDC, kullanıcının PAC yapısındaki `ExtraSids` alanını inceler.
2. `TRUST_ATTRIBUTE_WITHIN_FOREST` (`32`) ayarlıysa hiçbir filtreleme yapılmaz. Yabancı yönetim SID'leri (`Enterprise Admins` gibi) PAC içinde korunur ve doğrudan etki alanından ormana yükseltmeye izin verir.
3. `TRUST_ATTRIBUTE_FOREST_TRANSITIVE` (`8`) ayarlıysa kabul eden KDC `FilterSids()` çağırır. İyi bilinen yönetim RID'lerine sahip tüm SID'ler (`RID < 1000`; `500` Administrator, `512` Domain Admins, `519` Enterprise Admins dahil) ve güvenilen etki alanının temel SID'iyle eşleşmeyen SID'ler yetkilendirme bağlamından kalıcı olarak çıkarılır.

Bu mekanizma, ormanlar arası bir güvenin neden "sadece bir güven" olmadığını gösterir: bilet hâlâ geçerlidir, ama içindeki ayrıcalık iddiaları sınırda yeniden yazılır.

---

## 4. Üye Sunucu Mimarisi ve Servis Kimlikleri

GOAD'daki iş yükleri iki üye sunucuda çalışır: `north.sevenkingdoms.local` içindeki `SRV02` (`castelblack`, `.22`) ve `essos.local` içindeki `SRV03` (`braavos`, `.23`). Servis hesaplarını LDAP üzerinden denetlemek, operasyonel parametrelerini ortaya çıkarır:

```bash
$ ldapsearch -x -H ldap://192.168.56.11 -D "samwell.tarly@north.sevenkingdoms.local" -w "Heartsbane" \
    -b "DC=north,DC=sevenkingdoms,DC=local" "(|(sAMAccountName=jon.snow)(sAMAccountName=sql_svc)(sAMAccountName=CASTELBLACK$))" \
    sAMAccountName servicePrincipalName msDS-AllowedToDelegateTo userAccountControl | grep -E "^(sAMAccountName|servicePrincipalName|msDS-Allowed|userAccountControl)"
sAMAccountName: CASTELBLACK$
userAccountControl: 4096
servicePrincipalName: HOST/castelblack.north.sevenkingdoms.local
msDS-AllowedToDelegateTo: HTTP/winterfell.north.sevenkingdoms.local
msDS-AllowedToDelegateTo: HTTP/winterfell
sAMAccountName: jon.snow
userAccountControl: 16842752
servicePrincipalName: HTTP/thewall.north.sevenkingdoms.local
servicePrincipalName: CIFS/thewall.north.sevenkingdoms.local
msDS-AllowedToDelegateTo: CIFS/winterfell.north.sevenkingdoms.local
msDS-AllowedToDelegateTo: CIFS/winterfell
sAMAccountName: sql_svc
userAccountControl: 66048
servicePrincipalName: MSSQLSvc/castelblack.north.sevenkingdoms.local:1433
servicePrincipalName: MSSQLSvc/castelblack.north.sevenkingdoms.local
```

### Üye Sunucularda Kimlik Modelleri

1. **Service Principal Names (SPN):** Bir istemci `castelblack.north.sevenkingdoms.local:1433` adresine eriştiğinde, `MSSQLSvc/castelblack.north.sevenkingdoms.local:1433` için bir Kerberos servis bileti (`TGS-REQ`) ister. KDC bu SPN'i taşıyan hesabı (`sql_svc`) bulur ve bileti o hesabın NTLM/AES gizli anahtarıyla şifreler. SPN atanmış standart etki alanı kullanıcıları (`jon.snow`, `sql_svc`) bu yüzden çevrimdışı Kerberoasting saldırılarına açıktır.
2. **Kısıtlı Delegasyon (`msDS-AllowedToDelegateTo`):** `jon.snow` hesabında `userAccountControl` değeri `16842752` (`0x1010000 = DONT_EXPIRE_PASSWORD | TRUSTED_TO_AUTH_FOR_DELEGATION`) olarak ayarlıdır. Bu, protokol geçişini (`S4U2Self` ve `S4U2Proxy`) açarak `jon.snow`'un `Administrator` dahil rastgele kullanıcıları taklit ederek `CIFS/winterfell.north.sevenkingdoms.local` için bilet istemesini sağlar.
3. **Managed Service Accounts (gMSA) ve LAPS:** `essos.local` içinde modern kontroller kimlik bilgisi hırsızlığını azaltır: bir **group Managed Service Account (`gmsaDragon$`)**, KDC tarafından otomatik döndürülen 240 baytlık bir parolaya sahiptir ve yalnızca `msDS-GroupMSAMembership` ile yetkilendirilmiş ana bilgisayarlar tarafından okunabilir. Aynı zamanda **LAPS**, `SRV03`'ün yerel yönetici parolasını `ms-Mcs-AdmPwd` içinde saklar. Bu kontroller çevrimdışı hash kırmayı ortadan kaldırır, ama saldırı yüzeyini LDAP ACL'lerine taşır: `ReadLAPSPassword` (`jorah.mormont`) veya `ReadGMSAPassword` verilmiş herhangi bir principal, bu kimlik bilgilerini LDAP üzerinden açık metin olarak alabilir.

---

## 5. Kurumsal PKI: Active Directory Certificate Services (AD CS)

AD CS yapılandırma verileri `CN=Public Key Services,CN=Services,CN=Configuration,DC=<forest>,DC=<tld>` altında saklanır. GOAD'da farklı mimari katmanlarda konumlanmış iki Enterprise Sertifika Otoritesi (CA) vardır:

```bash
$ ldapsearch -x -H ldap://192.168.56.10 -D "samwell.tarly@north.sevenkingdoms.local" -w "Heartsbane" \
    -b "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=sevenkingdoms,DC=local" \
    "(objectClass=pKIEnrollmentService)" cn dNSHostName | grep -E "^(cn|dNSHostName)"
cn: SEVENKINGDOMS-CA
dNSHostName: kingslanding.sevenkingdoms.local

$ ldapsearch -x -H ldap://192.168.56.12 -D "missandei@essos.local" -w "fr3edom" \
    -b "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=essos,DC=local" \
    "(objectClass=pKIEnrollmentService)" cn dNSHostName certificateTemplates | grep -E "^(cn|dNSHostName|certificateTemplates: ESC)"
cn: ESSOS-CA
dNSHostName: braavos.essos.local
certificateTemplates: ESC13
certificateTemplates: ESC9
certificateTemplates: ESC4
certificateTemplates: ESC3-CRA
certificateTemplates: ESC3
certificateTemplates: ESC2
certificateTemplates: ESC1
```

### Kurumsal CA Katmanlandırma Sonuçları

Bir istemci bir sertifika şablonuna (`pKICertificateTemplate`) kaydolduğunda CA, çağıranın SID'ini şablonun DACL'iyle (`Enroll` / `Autoenroll`) karşılaştırır. Yetki varsa CA, istemci kimlik doğrulama EKU'ları (`1.3.6.1.5.5.7.3.2`) ve bir kimlik eşleme alanı (`Subject Alternative Name` veya `szOID_NTDS_CA_SECURITY_EXT`) içeren imzalı bir X.509 sertifikası verir. İstemci bu sertifikayı PKINIT (`AS-REQ` pre-auth type `16`) ile sunarak bir Kerberos TGT'si alabilir.

- `sevenkingdoms.local` içinde `SEVENKINGDOMS-CA`, doğrudan Forest Root DC `DC01` (`kingslanding`, `.10`) üzerinde çalışır ve `80` portunda HTTP Web Enrollment (`/certsrv/`) sunar.
- `essos.local` içinde `ESSOS-CA`, üye sunucu `braavos.essos.local` (`.23`) üzerinde barındırılır; Domain Controller ise `DC03` (`meereen`, `.12`) sunucusudur.

Bir Enterprise CA ormanın `NTAuthCertificates` kabına yayınlandığı için **ormandaki tüm etki alanı hesapları adına kimlik sertifikası verme** yetkisine sahiptir. Bu nedenle bir Enterprise CA, `BRAAVOS` gibi Tier-1 üye sunucuda barındırılsa bile doğası gereği **Tier-0 varlığıdır**. `BRAAVOS`'un ele geçirilmesi, orman kökünün tamamen ele geçirilmesi anlamına gelir; çünkü CA, sertifika verirken etki alanı sınırlarını değil ormanın güven deposunu esas alır.

---

## 6. Güvenlik Tanımlayıcıları ve Yönlü Çizge Saldırı Yolları

Active Directory, güvenlik tanımlayıcılarını her LDAP nesnesindeki `nTSecurityDescriptor` ikili özniteliğinde saklar. Bu yapı bir Owner SID, Group SID, Discretionary Access Control List (DACL) ve System Access Control List (SACL) içerir.

Varsayılan olarak şema (`defaultSecurityDescriptor`), `Authenticated Users` (`S-1-5-11`) grubuna Domain ve Configuration bölümlerinde `READ_CONTROL` (`0x00020000`) hakkı verir. Bu okuma erişimi Windows işletim sisteminin çalışması için zorunludur: istemciler Group Policy uygulamasını değerlendirmek, sertifika şablonu kayıt haklarını doğrulamak ve iç içe grup üyeliklerini çözmek için DACL'leri incelemek zorundadır.

Açık `READ_CONTROL` izninin bir sonucu olarak, kimliği doğrulanmış herhangi bir etki alanı kimliği tüm ormanın yetkilendirme çizgesini alıp haritalayabilir. Özel ACE eklemeleri (`GenericAll`, `WriteDacl` veya `User-Force-Change-Password` gibi extended rights) doğrudan Tier-0 hakimiyetine giden kesintisiz yönlü saldırı yolları oluşturur. Bu yüzden BloodHound'un gücü, dizinde zaten okunabilir olan veriyi anlamlı bir bütüne dönüştürmesinden gelir. Ancak bir çizge kenarı tek başına kanıt değildir; ilgili ACE'nin gerçekten var olduğunu ve hedef nesnenin davranışının bu izni uyguladığını ayrıca doğrulamak gerekir. Okunabilirlik, keşfi kolaylaştırır; sömürülebilirlik ise iznin türüne ve hedefin yapılandırmasına bağlıdır.

---

## Telemetri ve Tespit Mühendisliği

### Ormanlar Arası Kimlik Doğrulama Telemetrisi

| Event ID | Günlük Sağlayıcı | Olay Açıklaması | Tespit Kriteri |
| :--- | :--- | :--- | :--- |
| `4768` | Security | Kerberos TGT İsteği | Standart dışı kullanıcı hesaplarına verilen Pre-Authentication Type `16` (PKINIT) veya anormal bilet seçenekleri. |
| `4769` | Security | Kerberos Servis Bileti İsteği | `Service Name: krbtgt/<TRUSTED_REALM>` ve `Ticket Options: 0x40810010` taşıyan etki alanları arası yönlendirme istekleri. |
| `4624` | Security | Başarılı Oturum Açma | Etki alanı üyesi olmayan IP aralıklarından veya beklenmeyen ormanlar arası hesaplardan gelen Logon Type `3` (Network) oturumları. |
| `5136` | Security | Dizin Servisi Nesnesi Değiştirildi | `trustedDomain` nesnelerindeki (`trustAttributes`) değişiklikler veya ADIDNS bölgelerinde sahte `dnsNode` kaydı oluşturulması. |

```kql
// KQL: Detect Anomalous Cross-Realm Kerberos Ticket Requests
SecurityEvent
| where EventID == 4769
| where ServiceName startswith "krbtgt/" and ServiceName !endswith TargetDomainName
| project TimeGenerated, Computer, TargetUserName, ServiceName, TicketOptions, TicketEncryptionType, IpAddress
```

---

## Mimari Özet

| Mimari Katman | Sunucu / LDAP Konumu | Operasyonel İşlev | Güvenlik Sınırı Kuralı |
| :--- | :--- | :--- | :--- |
| **Paylaşılan Orman Bölümleri** | `DC01` & `DC02` üzerinde `CN=Partitions,CN=Configuration` | Orman genelinde Schema, Siteler, PKI ve Global Catalog (`3268/tcp`). | **Tek güvenlik sınırı ormandır.** Alt etki alanı ele geçirildiğinde `ExtraSids` ile orman köküne yükseltilir. |
| **DNS SRV ve Koşullu Yönlendiriciler** | `.10`, `.11`, `.12` üzerinde `53` portu + ADIDNS | Servis keşfi (LDAP, KDC, GC) ve ormanlar arası ad çözümleme. | Koşullu yönlendiriciler güven topolojisini açığa çıkarır; kimlik doğrulamasız DNS zehirlenmesine karşı ADIDNS yazma ACL'lerini denetle. |
| **Trusted Domain Objects (TDO)** | `.10` ve `.12` üzerinde `CN=System,DC=...` | Yönlendirme biletlerini yönetir (`WITHIN_FOREST: 32` ile `FOREST_TRANSITIVE: 8/72`). | Ormanlar arası güven, yabancı `ExtraSids` değerlerine karşı SID filtering uygular; yine de tüm `Authenticated Users` kaynaklarını açar. |
| **Servis Kimlikleri ve Delegasyon** | `CASTELBLACK` (`.22`), `BRAAVOS` (`.23`), `jon.snow` | Kerberos servis kimlik doğrulaması, S4U kimlik bürünmesi ve gMSA parola rotasyonu. | Domain Controller'lara asla delegasyon tanımlamayın; Kerberoasting'i önlemek için kullanıcı SPN'lerini gMSA ile değiştirin. |
| **Kurumsal PKI (AD CS)** | `SEVENKINGDOMS-CA` (`.10`) & `ESSOS-CA` (`.23`) | Orman genelinde sertifika verme ve PKINIT Kerberos kimlik doğrulaması. | **Her Enterprise CA bir Tier-0 varlığıdır.** CA barındıran üye sunucular Domain Controller gibi sıkılaştırılmalıdır. |
| **Güvenlik Tanımlayıcıları (`nTSecurityDescriptor`)** | Tüm LDAP dizin nesneleri | İnce taneli isteğe bağlı erişim denetimi (DACL/ACE). | Okuma erişimi tasarım gereği `Authenticated Users` grubuna açıktır; savunma, varsayılan dışı delegasyon yollarını denetlemektir. |

---

## Kanıt ve sınırlar

Topoloji, adlandırma bağlamları, güven nesneleri, servis yerleşimi ve ACL örnekleri bu seri boyunca kullanılan GOAD örneğine bağlıdır. Yazıdaki LDAP ve Kerberos çıktıları çalışan laboratuvara karşı kontrol edildi; protokol davranışı ve alan anlamları Microsoft Open Specifications belgeleriyle çapraz doğrulandı. Bu yüzden yazı, laboratuvarın gösterdiği şey ile protokolün garanti ettiği şeyi ayrı tutar.

GOAD bilerek küçük ve savunmasızdır. İki ormanı ve üç etki alanı sınırları gözlemlemek için kullanışlıdır, ama referans bir kurumsal tasarım değildir. Diyagramlar replikasyon sitelerini, hibrit kimliği, uç nokta yönetimini ve üretimdeki birçok PKI kontrolünü dışarıda bırakır. Adresleri, güven bayraklarını ve servis kimliklerini her AD kurulumu için varsayılan değil, bu laboratuvarın envanteri olarak oku.

## Kaynaklar

- **Orange Cyberdefense, GOAD Architecture & Inventory:** [orange-cyberdefense.github.io/GOAD](https://orange-cyberdefense.github.io/GOAD/)
- **Microsoft Open Specifications, `[MS-ADTS]` Active Directory Technical Specification:** [learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/d2435927-0999-4c62-8c6d-13ba31a52e1a)
- **Microsoft Open Specifications, `[MS-PAC]` Privilege Attribute Certificate Data Structure:** [learn.microsoft.com](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac)
- **Microsoft, Best Practices for Securing Active Directory:** [learn.microsoft.com](https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/best-practices-for-securing-active-directory)
- **RFC 4120, The Kerberos Network Authentication Service (V5):** [datatracker.ietf.org/doc/html/rfc4120](https://datatracker.ietf.org/doc/html/rfc4120)
- **RFC 2782, A DNS RR for Specifying the Location of Services (DNS SRV):** [datatracker.ietf.org/doc/html/rfc2782](https://datatracker.ietf.org/doc/html/rfc2782)
