---
title: "Yönlü Bir Çizge Olarak Active Directory: Security Descriptor ve Nesne ACL'leri Gerçekte Nasıl Çalışır?"
description: "Active Directory her kullanıcı, grup, bilgisayar ve GPO nesnesini ikili bir nTSecurityDescriptor özniteliğine sahip LDAP nesnesi olarak saklar. GOAD'ın sevenkingdoms.local etki alanındaki sekiz adımlı yükseltme zinciri, ACE maskelerinin, Extended Rights GUID'lerinin ve sahiplik değişimlerinin yardım masası izinlerini nasıl Domain Controller ele geçirmeye dönüştürdüğünü gösterir."
date: 2026-11-03
author: Sevban Dönmez (@jankesec)
canonical: https://jankesec.com/tr/yazilar/active-directory-acls-and-security-descriptors/
---

## Active Directory Neden Yönlü Bir Çizge (graph) Veritabanı Gibi Davranır?

Bir yönetici *Active Directory Users and Computers* konsolunu açtığında dizin, Organizational Unit (`OU`) hiyerarşisinden oluşan bir ağaç gibi görünür. Ancak bu kurumsal hiyerarşi yalnızca nesnelerin LDAP içinde *nerede durduğunu* (`distinguishedName`) belirler. Kimin hangi nesne üzerinde yönetim hakkı olduğu konusunda neredeyse hiçbir şey söylemez. Bu yüzden bir denetimde yalnızca OU yapısına bakmak, yanlış bir güvenlik izlenimi verebilir.

Kaputun altında Active Directory, `ntds.dit` içindeki her dizin nesnesine ikili bir **`nTSecurityDescriptor`** (`[MS-DTYP §2.4.6]`) özniteliği ekler. Bu güvenlik tanımlayıcısının içinde, Access Control Entry (`ACE`) kayıtlarından oluşan sıralı bir Discretionary Access Control List (`DACL`) bulunur. Her ACE, kimlik doğrulamış bir kimliği (`Trustee SID`) hedef nesne üzerindeki belirli bir işlem kümesiyle (`AccessMask` ve isteğe bağlı `ObjectType` GUID) eşleştirir. Dizin nesnelerini **düğüm (node)**, varsayılan dışı ACE kayıtlarını da **yönlü kenar (directed edge)** olarak düşündüğünde, dizin karmaşık bir yönlü çizgeye dönüşür. Bu modelin gücü, saldırı yollarını görselleştirmeyi ve tek tek izinlerin birleşerek nasıl büyük bir yetkiye dönüştüğünü anlamayı sağlamasıdır.

[GOAD (Game of Active Directory)](https://orange-cyberdefense.github.io/GOAD/) ortamında BloodHound, `sevenkingdoms.local` içinde `tywin.lannister` hesabından (parolası bir `SYSVOL` betiğinden kurtarılır) başlayıp Forest Root Domain Controller `KINGSLANDING$` (`192.168.56.10`) sunucusuna uzanan kesintisiz sekiz adımlı bir yol çizer. Bu yolu parçalarına ayırmak, Windows Güvenlik Referans Monitörünün (`SRM`) erişim denetimlerini nasıl yaptığını ve bunun idari ele geçirmeye nasıl dönüştüğünü gösterir. Yani çizge yalnızca bir görsel değil, işletim sisteminin karar mekanizmasının modelidir.

<figure class="diagram">
<svg viewBox="0 0 760 360" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Active Directory nTSecurityDescriptor özniteliğinin ikili anatomisi ve Güvenlik Referans Monitörü'nün bir ACCESS_ALLOWED_OBJECT_ACE kaydını etkin bir grafik kenarına nasıl dönüştürdüğü.">
<defs>
  <marker id="ad-en-d1-m-arr" 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="ad-en-d1-m-crit" 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>
</defs>
<text x="12" y="18" class="dg-muted">nTSecurityDescriptor ANATOMİSİ · İKİLİ YERLEŞİM VE ACE DEĞERLENDİRME MOTORU</text>
<rect x="12" y="30" width="226" height="318" rx="8" class="dg-box-accent" />
<text x="24" y="50" class="dg-accent">nTSecurityDescriptor</text>
<text x="24" y="66" class="dg-muted dg-compact">NESNE İKİLİ ÖZNİTELİĞİ [MS-DTYP]</text>
<rect x="22" y="76" width="206" height="44" rx="5" class="dg-box" />
<text x="32" y="94" class="dg-label dg-compact">Kontrol Bayrakları (16-bit)</text>
<text x="32" y="110" class="dg-mono dg-compact">0x8004 (SE_DACL_PRESENT | SELF_REL)</text>
<rect x="22" y="128" width="206" height="52" rx="5" class="dg-box" />
<text x="32" y="146" class="dg-label dg-compact">Sahip SID</text>
<text x="32" y="160" class="dg-mono dg-compact">S-1-5-32-544 (Domain Admins)</text>
<text x="32" y="172" class="dg-crit dg-compact">Örtük: WRITE_DAC &amp; READ_CONTROL</text>
<rect x="22" y="188" width="206" height="42" rx="5" class="dg-box" />
<text x="32" y="206" class="dg-label dg-compact">Grup SID ve SACL</text>
<text x="32" y="220" class="dg-muted dg-compact">Birincil Grup SID'i · Denetim ACE Dizisi</text>
<rect x="22" y="238" width="206" height="98" rx="5" class="dg-box-accent" />
<text x="32" y="258" class="dg-accent dg-compact">DACL (Sıralı ACE Dizisi)</text>
<text x="32" y="274" class="dg-mono dg-compact">Kanonik: Açık Red ➔ İzin</text>
<text x="32" y="290" class="dg-label dg-compact">AceCount: Etkin ACE Kayıtları</text>
<text x="32" y="306" class="dg-muted dg-compact">Her ACE: AccessMask + ObjectType</text>
<text x="32" y="322" class="dg-crit dg-compact">BloodHound Alımı ➔</text>
<line x1="228" y1="287" x2="256" y2="287" class="dg-line" marker-end="url(#ad-en-d1-m-arr)" />
<rect x="260" y="30" width="244" height="318" rx="8" class="dg-box" />
<text x="272" y="50" class="dg-label">ACCESS_ALLOWED_OBJECT_ACE</text>
<text x="272" y="66" class="dg-muted dg-compact">TÜR 0x05 · NESNEYE ÖZEL ACE</text>
<rect x="270" y="76" width="224" height="44" rx="5" class="dg-box" />
<text x="280" y="94" class="dg-label dg-compact">ACE Başlığı (4 Bayt)</text>
<text x="280" y="110" class="dg-mono dg-compact">Tür: 0x05 · Bayraklar: 0x00 (Açık)</text>
<rect x="270" y="128" width="224" height="52" rx="5" class="dg-box-accent" />
<text x="280" y="146" class="dg-label dg-compact">AccessMask (32-bit Bitmask)</text>
<text x="280" y="160" class="dg-mono dg-compact">0x00000100 (ControlAccess)</text>
<text x="280" y="172" class="dg-accent dg-compact">Genişletilmiş Hak İşlem Filtresi</text>
<rect x="270" y="188" width="224" height="66" rx="5" class="dg-box-accent" />
<text x="280" y="206" class="dg-label dg-compact">ObjectType GUID (128-bit)</text>
<text x="280" y="222" class="dg-mono dg-compact">00299570-246d-11d0-a768-00aa006e0529</text>
<text x="280" y="238" class="dg-crit dg-compact">CN=User-Force-Change-Password</text>
<rect x="270" y="262" width="224" height="74" rx="5" class="dg-box" />
<text x="280" y="280" class="dg-label dg-compact">Trustee SID (Yetkilendirilen Hesap)</text>
<text x="280" y="296" class="dg-mono dg-compact">S-1-5-21-3291916993-...-1113</text>
<text x="280" y="312" class="dg-accent dg-compact">Identity: tywin.lannister</text>
<text x="280" y="326" class="dg-muted dg-compact">Hedefte açık hak sahibi</text>
<line x1="504" y1="221" x2="526" y2="221" class="dg-line-crit" marker-end="url(#ad-en-d1-m-crit)" />
<rect x="530" y="30" width="218" height="318" rx="8" class="dg-box-danger" />
<text x="542" y="50" class="dg-crit" font-weight="700">SRM VE GRAFİK ÇÖZÜMLEMESİ</text>
<text x="542" y="66" class="dg-muted dg-compact">GÜVENLİK REFERANS MONİTÖRÜ</text>
<rect x="538" y="76" width="202" height="52" rx="5" class="dg-box" />
<text x="548" y="94" class="dg-label dg-compact">Erişim Denetimi Çağrısı</text>
<text x="548" y="108" class="dg-mono dg-compact">Çağıran Belirteci: tywin (SID 1113)</text>
<text x="548" y="120" class="dg-muted dg-compact">Hedef Nesne: jaime (SID 1114)</text>
<rect x="538" y="136" width="202" height="54" rx="5" class="dg-box" />
<text x="548" y="154" class="dg-label dg-compact">Değerlendirme Motoru</text>
<text x="548" y="168" class="dg-mono dg-compact">Belirteç SID'leri Trustee SID'iyle eşleşiyor mu?</text>
<text x="548" y="180" class="dg-ok dg-compact">STATUS_SUCCESS (Verildi)</text>
<rect x="538" y="198" width="202" height="138" rx="5" class="dg-box-danger" />
<text x="548" y="218" class="dg-crit dg-compact" font-weight="700">ETKİN GRAFİK KENARI</text>
<text x="548" y="234" class="dg-label dg-compact">Düğüm: tywin.lannister</text>
<text x="548" y="252" class="dg-crit dg-compact">──[ForceChangePassword]──►</text>
<text x="548" y="270" class="dg-label dg-compact">Hedef: jaime.lannister</text>
<text x="548" y="292" class="dg-mono dg-compact">Primitif: unicodePwd sıfırlama</text>
<text x="548" y="308" class="dg-muted dg-compact">Araç: net rpc / bloodyAD</text>
<text x="548" y="324" class="dg-accent dg-compact">Sonuç: Hesap Ele Geçirildi</text>
</svg>
<figcaption>Bir Active Directory <code>nTSecurityDescriptor</code> özniteliğinin ikili mimarisi: Güvenlik Referans Monitörü (SRM), çağıranın belirteç SID'lerini DACL kayıtlarındaki (ACE) Trustee SID'leriyle karşılaştırarak etkin saldırı çizgesi kenarlarını oluşturur.</figcaption>
</figure>

---

## 1. Nesneye Özgü ACE Kaydının Anatomisi (`ACCESS_ALLOWED_OBJECT_ACE`)

NTFS dosya sistemi izinlerinde erişim maskesi genel okuma, yazma ve çalıştırma bayraklarını kodlar. Active Directory nesneleri ise bundan çok daha zengindir: onlarca ayrı öznitelik (`member`, `servicePrincipalName`, `msDS-KeyCredentialLink`) ve özel işlem (`User-Force-Change-Password`, `DS-Replication-Get-Changes-All`) içerir. Bu yüzden tek bir genel "yazma" biti, dizin nesnelerinin ihtiyaç duyduğu ince ayarı karşılayamaz.

Active Directory, 32 bitlik maskede bit tüketmeden ince taneli delegasyon sağlamak için **Nesneye Özgü ACE'leri (`ACCESS_ALLOWED_OBJECT_ACE`, Tip `0x05`)** kullanır. Bu yapı iki parçalıdır:

1. **`AccessMask` (`ActiveDirectoryRights`):** İşlem sınıfını kodlar (`0x00000020 = ADS_RIGHT_DS_WRITE_PROP`, `0x00000100 = ADS_RIGHT_DS_CONTROL_ACCESS`, `0x00040000 = WRITE_DAC`, `0x00080000 = WRITE_OWNER`, `0x10000000 = GENERIC_ALL`).
2. **`ObjectType` (128-bit GUID):** `AccessMask`'ı belirli bir öznitelik şema GUID'ine veya Extended Right GUID'ine daraltır. `ObjectType` boş (`GUID_NULL`) olduğunda izin, nesnedeki **tüm öznitelikler veya tüm işlemler** için koşulsuz geçerlidir.

`sevenkingdoms.local` içindeki sekiz hedefte miras alınmamış ACE kayıtlarını `impacket-dacledit` ile incelediğimizde zincirin tamamı tek bir tabloda görünür:

```bash
Principal (Trustee SID)                  RightName            Inherited  Target Object (SID)
---------------------------------------  -------------------  ---------  ---------------------------------------------
TYWIN.LANNISTER (...-1113)               ForceChangePassword  False      JAIME.LANNISTER (...-1114)
JAIME.LANNISTER (...-1114)               GenericWrite         False      JOFFREY.BARATHEON (...-1118)
JOFFREY.BARATHEON (...-1118)             WriteDacl            False      TYRON.LANNISTER (...-1116)
TYRON.LANNISTER (...-1116)               AddSelf              False      SMALL COUNCIL (...-1108)
SMALL COUNCIL (...-1108)                 AddMember            False      DRAGONSTONE (...-1109)
DRAGONSTONE (...-1109)                   WriteOwner           False      KINGSGUARD (...-1110)
KINGSGUARD (...-1110)                    GenericAll           False      STANNIS.BARATHEON (...-1120)
STANNIS.BARATHEON (...-1120)             GenericAll           False      KINGSLANDING.SEVENKINGDOMS.LOCAL (...-1001)
```

Tablodaki `Inherited = False` değeri önemlidir: bu izinler üst kaptan miras alınmamış, doğrudan nesneye yazılmıştır. Yani birisi bu ACE'leri bilinçli olarak eklemiştir. BloodHound gibi araçların yolu çizebilmesi de tam olarak bu açık kayıtlar sayesindedir.

<figure class="diagram">
<svg viewBox="0 0 760 442" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="GOAD sevenkingdoms.local içindeki sekiz adımlı Active Directory DACL yetki yükseltme grafiği: düşük yetkili tywin.lannister'dan grup yuvalama ve nesne sahipliği devralma üzerinden Domain Controller KINGSLANDING'e.">
<defs>
  <marker id="ad-en-d2-m-right" 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="ad-en-d2-m-left" 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>
  <marker id="ad-en-d2-m-down" viewBox="0 0 8 8" refX="4" refY="7" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L4,8 L8,0 z" class="dg-arrow-crit" /></marker>
</defs>
<text x="12" y="18" class="dg-muted">GOAD SEVENKINGDOMS.LOCAL · 8 ADIMLI YETKİ YÜKSELTME YÖNLÜ GRAFIĞI</text>
<rect x="12" y="28" width="736" height="114" rx="8" class="dg-box-accent" />
<text x="22" y="44" class="dg-accent dg-compact">AŞAMA 1 · KULLANICI HESABI ADIMLARI (GENİŞLETİLMİŞ HAKLAR VE ÖZELLİK YAZMALARI)</text>
<rect x="22" y="54" width="130" height="76" rx="6" class="dg-box" />
<text x="30" y="71" class="dg-accent dg-compact">[GİRİŞ · KULLANICI]</text>
<text x="30" y="88" class="dg-label">tywin.lannister</text>
<text x="30" y="104" class="dg-mono dg-compact">RID 1113 · SYSVOL</text>
<text x="30" y="117" class="dg-muted dg-compact">Düz Metin Parola</text>
<line x1="152" y1="92" x2="210" y2="92" class="dg-line-crit" marker-end="url(#ad-en-d2-m-right)" />
<rect x="156" y="65" width="50" height="16" rx="3" class="dg-box-danger" />
<text x="181" y="76" text-anchor="middle" class="dg-crit dg-compact" font-size="8">1: FCP</text>
<rect x="215" y="54" width="130" height="76" rx="6" class="dg-box" />
<text x="223" y="71" class="dg-muted dg-compact">[KULLANICI · SIFIRLAMA]</text>
<text x="223" y="88" class="dg-label">jaime.lannister</text>
<text x="223" y="104" class="dg-mono dg-compact">RID 1114 · Sıfırlama</text>
<text x="223" y="117" class="dg-accent dg-compact">net rpc password</text>
<line x1="345" y1="92" x2="403" y2="92" class="dg-line-crit" marker-end="url(#ad-en-d2-m-right)" />
<rect x="349" y="65" width="50" height="16" rx="3" class="dg-box-danger" />
<text x="374" y="76" text-anchor="middle" class="dg-crit dg-compact" font-size="8">2: GW</text>
<rect x="408" y="54" width="130" height="76" rx="6" class="dg-box" />
<text x="416" y="71" class="dg-muted dg-compact">[KULLANICI · SHADOW]</text>
<text x="416" y="88" class="dg-label">joffrey.baratheon</text>
<text x="416" y="104" class="dg-mono dg-compact">RID 1118 · PKINIT</text>
<text x="416" y="117" class="dg-accent dg-compact">pywhisker (KeyCred)</text>
<line x1="538" y1="92" x2="596" y2="92" class="dg-line-crit" marker-end="url(#ad-en-d2-m-right)" />
<rect x="542" y="65" width="50" height="16" rx="3" class="dg-box-danger" />
<text x="567" y="76" text-anchor="middle" class="dg-crit dg-compact" font-size="8">3: WD</text>
<rect x="601" y="54" width="137" height="76" rx="6" class="dg-box-accent" />
<text x="609" y="71" class="dg-crit dg-compact">[KULLANICI · DACL DÜZENLEME]</text>
<text x="609" y="88" class="dg-label">tyron.lannister</text>
<text x="609" y="104" class="dg-mono dg-compact">RID 1116 · Tam Denetim</text>
<text x="609" y="117" class="dg-accent dg-compact">impacket-dacledit</text>
<line x1="670" y1="130" x2="670" y2="168" class="dg-line-crit" marker-end="url(#ad-en-d2-m-down)" />
<rect x="680" y="137" width="56" height="22" rx="4" class="dg-box-danger" />
<text x="708" y="148" text-anchor="middle" class="dg-crit dg-compact" font-weight="700">Adım 4</text>
<text x="708" y="156" text-anchor="middle" class="dg-label dg-compact" font-size="7.5">AddSelf</text>
<rect x="12" y="168" width="736" height="114" rx="8" class="dg-box" />
<text x="22" y="184" class="dg-muted dg-compact">AŞAMA 2 · GÜVENLİK GRUBU YUVALAMA VE NESNE SAHİPLİĞİ YENİDEN YAZIMI</text>
<rect x="508" y="194" width="230" height="76" rx="6" class="dg-box" />
<text x="518" y="212" class="dg-muted dg-compact">[GRUP · KENDİ KAYDI]</text>
<text x="518" y="230" class="dg-label">SMALL COUNCIL</text>
<text x="518" y="246" class="dg-mono dg-compact">RID 1108 · bloodyAD add self</text>
<text x="518" y="258" class="dg-accent dg-compact">tyron kendini gruba ekler</text>
<line x1="508" y1="232" x2="456" y2="232" class="dg-line-crit" marker-end="url(#ad-en-d2-m-left)" />
<rect x="458" y="205" width="46" height="16" rx="3" class="dg-box-danger" />
<text x="481" y="216" text-anchor="middle" class="dg-crit dg-compact" font-size="8">5: AM</text>
<rect x="248" y="194" width="204" height="76" rx="6" class="dg-box" />
<text x="258" y="212" class="dg-muted dg-compact">[GRUP · YUVALANMIŞ]</text>
<text x="258" y="230" class="dg-label">DRAGONSTONE</text>
<text x="258" y="246" class="dg-mono dg-compact">RID 1109 · member özniteliği</text>
<text x="258" y="258" class="dg-accent dg-compact">member üzerinde WriteProperty</text>
<line x1="248" y1="232" x2="196" y2="232" class="dg-line-crit" marker-end="url(#ad-en-d2-m-left)" />
<rect x="198" y="205" width="46" height="16" rx="3" class="dg-box-danger" />
<text x="221" y="216" text-anchor="middle" class="dg-crit dg-compact" font-size="8">6: WO</text>
<rect x="22" y="194" width="170" height="76" rx="6" class="dg-box-accent" />
<text x="32" y="212" class="dg-crit dg-compact">[GRUP · DEVİRALMA]</text>
<text x="32" y="230" class="dg-label">KINGSGUARD</text>
<text x="32" y="246" class="dg-mono dg-compact">RID 1110 · Sahip Değişti</text>
<text x="32" y="258" class="dg-accent dg-compact">impacket-owneredit</text>
<line x1="107" y1="270" x2="107" y2="308" class="dg-line-crit" marker-end="url(#ad-en-d2-m-down)" />
<rect x="117" y="277" width="68" height="22" rx="4" class="dg-box-danger" />
<text x="151" y="288" text-anchor="middle" class="dg-crit dg-compact" font-weight="700">Adım 7</text>
<text x="151" y="296" text-anchor="middle" class="dg-label dg-compact" font-size="7.5">GenericAll</text>
<rect x="12" y="308" width="736" height="124" rx="8" class="dg-box-danger" />
<text x="22" y="324" class="dg-crit dg-compact" font-weight="700">AŞAMA 3 · KAYNAK TABANLI KISITLI DELEGASYON (RBCD) VE ORMAN DEVRALMA</text>
<rect x="22" y="334" width="240" height="86" rx="6" class="dg-box" />
<text x="32" y="352" class="dg-muted dg-compact">[KULLANICI · KONTROL EDİLEN PRİNSİPAL]</text>
<text x="32" y="370" class="dg-label">stannis.baratheon</text>
<text x="32" y="386" class="dg-mono dg-compact">RID 1120 · GenericAll Hedefi</text>
<text x="32" y="402" class="dg-accent dg-compact">pywhisker (Shadow Cred) ➔ TGT</text>
<line x1="262" y1="377" x2="370" y2="377" class="dg-line-crit" marker-end="url(#ad-en-d2-m-right)" />
<rect x="272" y="349" width="94" height="26" rx="4" class="dg-box-danger" />
<text x="319" y="361" text-anchor="middle" class="dg-crit dg-compact" font-weight="700">Adım 8: GenericAll</text>
<text x="319" y="371" text-anchor="middle" class="dg-mono dg-compact" font-size="8">RBCD · S4U2Proxy</text>
<rect x="376" y="334" width="362" height="86" rx="6" class="dg-box-danger" />
<text x="388" y="352" class="dg-crit dg-compact" font-weight="700">[TIER-0 ORMAN KÖKÜ DOMAIN CONTROLLER]</text>
<text x="388" y="370" class="dg-label" font-size="14">KINGSLANDING.SEVENKINGDOMS.LOCAL</text>
<text x="388" y="386" class="dg-mono dg-compact">192.168.56.10 · RID 1001 · DC01$ (Computer)</text>
<text x="388" y="404" class="dg-crit dg-compact" font-weight="700">DCSync (krbtgt + DA Hash'leri) ➔ ORMAN KÖKÜNÜN TAM ELE GEÇİRİLMESİ</text>
</svg>
<figcaption><code>sevenkingdoms.local</code> içindeki tam sekiz adımlı yükseltme çizgesi: <code>tywin.lannister</code> giriş noktasından parola sıfırlama, shadow credentials, DACL yeniden yazma, grup yuvalama ve nesne sahipliği üzerinden RBCD ve DCSync ile Tier-0 Forest Root ele geçirmeye uzanır.</figcaption>
</figure>

---

## 2. Genişletilmiş Haklar (Extended Rights): Öznitelik Yazmanın Ötesi

1. adım, iki parçalı ACE yapısının neden var olduğunu gösterir. Bir kullanıcının parolası LDAP üzerinden düz metin bir dize yazılarak güncellenemez; `unicodePwd` özel bir protokol sarmalaması gerektirir. Mevcut parolayı bilmeden parola sıfırlamak ise bir **Extended Right (`ADS_RIGHT_DS_CONTROL_ACCESS` / `0x100`)** işlemidir. Yani "parola yazma" gibi görünen şey, aslında ayrı bir işlem sınıfıdır:

```bash
$ impacket-dacledit -action read -principal tywin.lannister -target jaime.lannister \
    'sevenkingdoms.local/samwell.tarly:Heartsbane' -dc-ip 192.168.56.10
[*] ACE[0] info:
[*]   ACE Type                  : ACCESS_ALLOWED_OBJECT_ACE
[*]   AccessMask                : ControlAccess (0x00000100)
[*]   ObjectType                : User-Force-Change-Password (00299570-246d-11d0-a768-00aa006e0529)
```

`AccessMask` değeri `0x00000100` olduğunda KDC, `ObjectType` GUID'ini `CN=Extended-Rights,CN=Configuration` altındaki tanımlarla eşleştirir. Bu iki GUID, bu yazıda en çok karşılaşacağın örneklerdir:

- **`00299570-246d-11d0-a768-00aa006e0529` (`User-Force-Change-Password`):** `tywin.lannister`'ın `jaime.lannister` üzerinde RPC `SamrSetInformationUser` (`net rpc password`) veya LDAPS parola değişikliği (`bloodyAD set password`) yapmasını sağlar.
- **`1131f6ad-9c07-11d1-f79f-00c04fc2dcd2` (`DS-Replication-Get-Changes-All`):** Etki alanı bölümü kökünde (`DC=sevenkingdoms,DC=local`) verildiğinde, DC olmayan hesapların `DRSGetNCChanges` (`DCSync`) çağırarak orman genelindeki parola hash'lerini çekmesini sağlar.

Bu ayrımın pratik sonucu şudur: bir hesabın "yazma" izni olduğunu görmek, onun parola sıfırlayabileceği anlamına gelmez. Extended Rights, işlemin türünü ayrı bir GUID ile tanımlar; yanlış hakkı okumak, saldırıyı da yanlış planlamana yol açar.

---

## 3. Öznitelik Yazma İzinleri: Kapsamlı Haklar ve GenericWrite

2., 4. ve 5. adımlar öznitelik yazma delegasyonunu gösterir. Buradaki ince nokta, `WriteProperty` hakkının hangi özniteliğe daraltıldığıdır:

1. **`AddMember` (`SMALL COUNCIL` → `DRAGONSTONE`):** `AccessMask = 0x20` (`WriteProperty`) ile `ObjectType = bf9679c0-0de6-11d0-a285-00aa003049e2` (yani **`member`** özniteliğinin şema GUID'i) birleşir. `SMALL COUNCIL` üyesi olan herkes `DRAGONSTONE` grubuna istediği kullanıcı hesabını ekleyebilir.
2. **`AddSelf` (`tyron.lannister` → `SMALL COUNCIL`):** `ADS_RIGHT_DS_SELF` (`0x08`) bayrağını `Self-Membership` GUID'i (`bf9679c0-0de6-11d0-a285-00aa003049e2`) ile birleştirir. `tyron.lannister` yalnızca *kendi* kimliğini gruba eklemekle sınırlıdır.
3. **`GenericWrite` (`jaime.lannister` → `joffrey.baratheon`):** GUID filtresi olmadan *tüm korumasız öznitelikler* üzerinde `WriteProperty` (`0x20`) verir. Kritik olarak `GenericWrite` içinde `ControlAccess` (`0x100`) yoktur; bu yüzden `jaime` doğrudan `joffrey`'nin parolasını zorla sıfırlayamaz.

Buna karşılık `GenericWrite`, üç modern hesap ele geçirme tekniğini açar. Bunların her biri, aynı geniş yazma hakkının farklı bir özniteliğe uygulanmasıdır:

- **Shadow Credentials (`msDS-KeyCredentialLink`):** `msDS-KeyCredentialLink` (`5b47d60f-6090-40b2-9f37-2a4de88f3063`) alanına bir X.509 sertifika açık anahtarı yazmak, kullanıcının parolasını değiştirmeden PKINIT üzerinden Kerberos TGT'si almayı ve NT hash'ini kurtarmayı sağlar.
- **Hedefli Kerberoasting (`servicePrincipalName`):** `servicePrincipalName` alanına sahte bir SPN yazıp servis bileti istemek ve parola hash'ini çevrimdışı kırmak mümkün olur.
- **Bilgisayarda RBCD (`msDS-AllowedToActOnBehalfOfOtherIdentity`):** Hedef bir bilgisayar olduğunda, `msDS-AllowedToActOnBehalfOfOtherIdentity` alanına bir makine hesabı SID'i yazmak, `Administrator` olarak `S4U2Proxy` çalıştırılmasını sağlar.

Bu üç yolun ortak noktası şudur: hepsi tek bir `GenericWrite` hakkıyla başlar, ama hangisinin işe yarayacağı hedefin türüne ve ortamda AD CS bulunup bulunmadığına bağlıdır.

---

## 4. Güvenlik Tanımlayıcısını Değiştirmek: WriteDacl, WriteOwner ve GenericAll

3., 6., 7. ve 8. adımlar doğrudan `nTSecurityDescriptor` ikili yapısını hedef alır. Bu, "nesnenin verisini değiştirmek" ile "nesne hakkındaki kuralları değiştirmek" arasındaki farktır:

- **`WriteDacl` (`0x00040000`, `joffrey` → `tyron`):** Hedefin DACL'ini yeniden yazma izni verir; böylece hedefe açık bir `GenericAll` ACE'si enjekte edilebilir.
- **`WriteOwner` (`0x00080000`, `DRAGONSTONE` → `KINGSGUARD`):** Nesnenin Sahip SID değerini değiştirmeye izin verir. Windows SRM mimarisinde (`[MS-DTYP]`), **bir nesnenin sahibi, DACL açıkça erişimi reddetse bile örtük `READ_CONTROL` ve `WRITE_DAC` (`0x00040000`) haklarına sahiptir**. Bu nedenle `WriteOwner`, matematiksel olarak `WriteDacl` ile eşdeğerdir.
- **`GenericAll` (`0x10000000`, `stannis` → `KINGSLANDING$`):** Tüm standart, özel ve genel hakları kapsar. Bir Domain Controller'ın bilgisayar nesnesi üzerinde `GenericAll` tutmak, RBCD veya Shadow Credentials yoluyla anında ele geçirme ve ardından `DCSync` ile etki alanı hakimiyeti demektir.

Buradaki ortak ders, izinlerin birbirine dönüşebilmesidir. `WriteOwner` doğrudan üye ekleme hakkı vermez, ama `WriteDacl`'a, o da `GenericAll`'a dönüşür. Bu yüzden bir nesnedeki "sadece sahiplik" gibi görünen küçük bir sapma, zincirin en tehlikeli halkası olabilir.

---

## Telemetri ve Savunma Mühendisliği

### Dizin Erişim Denetimi Telemetri Matrisi

| Event ID | Günlük Sağlayıcı | Olay Adı | Teknik Bağlam |
| :--- | :--- | :--- | :--- |
| `5136` | Directory Service Changes | A Directory Object Was Modified | `nTSecurityDescriptor`, `msDS-KeyCredentialLink` ve `msDS-AllowedToActOnBehalfOfOtherIdentity` dahil öznitelik değişikliklerini kaydeder. |
| `4724` | Security | Password Reset Attempt | `User-Force-Change-Password` extended right'ının kullanılmasını izler. |
| `4728` / `4732` / `4756` | Security | Member Added to Security Group | Global, domain local veya universal güvenlik gruplarına yapılan eklemeleri kaydeder. |
| `4738` | Security | User Account Modified | `servicePrincipalName` eklemelerini (hedefli Kerberoasting) izler. |

```kql
// KQL Query: Detect Unauthorized Modifications to Active Directory Security Descriptors
SecurityEvent
| where EventID == 5136
| where AttributeLDAPDisplayName in~ ("nTSecurityDescriptor", "msDS-AllowedToActOnBehalfOfOtherIdentity", "msDS-KeyCredentialLink")
| project TimeGenerated, Computer, SubjectUserName, ObjectDN, AttributeLDAPDisplayName, OperationType
```

### Sıkılaştırma ve Sınır Uygulaması

1. **AdminSDHolder Korumasını Zorunlu Kıl:** Yüksek ayrıcalıklı nesneler (Domain Admins, Enterprise Admins) `AdminSDHolder` tarafından korunmaya devam etmelidir. `SDProp` süreci her 60 dakikada bir çalışarak yetkisiz DACL değişikliklerinin üzerine yazar.
2. **Tier-0 Nesne Sahipliğini Denetle:** Tier-0 hesap ve grupların `Sahip SID` değerinin yalnızca `Domain Admins` veya `Enterprise Admins` olduğundan emin ol.
3. **Geçişli İzin Zincirlerini Ortadan Kaldır:** BloodHound kullanarak Tier-2 veya Tier-1 kimliklerini Tier-0 varlıklarına bağlayan geçişli izin zincirlerini denetle ve buda.

---

## ACL Primitiflerinin Özeti

| Yetki Adı | İkili Gösterim (`AccessMask` + `ObjectType`) | GOAD Saldırı Adımı | Yürütme Primitifi | Tespit Telemetrisi |
| :--- | :--- | :--- | :--- | :--- |
| **`ForceChangePassword`** | `0x00000100` (`ControlAccess`) + `User-Force-Change-Password` | `tywin` → `jaime` | RPC/SAMR veya LDAPS ile `unicodePwd` üzerine yaz. | Event ID `4724`; yardım masası sıfırlama delegasyonunu kısıtla. |
| **`GenericWrite`** | `0x00020028` (`ReadControl \| Self \| WriteProp`) | `jaime` → `joffrey` | Shadow Credentials (`msDS-KeyCredentialLink`) veya RBCD. | Hassas LDAP özniteliklerinde Event ID `5136`. |
| **`AddSelf` / `AddMember`** | `0x00000008` / `0x00000020` + `member` GUID | `tyron` → `SMALL COUNCIL` → `DRAGONSTONE` | Kullanıcı DN'ini grubun `member` özniteliğine ekle. | Event ID `4728`, `4732`, `4756`. |
| **`WriteDacl`** | `0x00040000` (`WRITE_DAC`) | `joffrey` → `tyron` | Hedef DACL'e `GenericAll` ACE'si enjekte et. | `nTSecurityDescriptor` üzerinde Event ID `5136`. |
| **`WriteOwner`** | `0x00080000` (`WRITE_OWNER`) | `DRAGONSTONE` → `KINGSGUARD` | Sahip SID'i değiştirerek örtük `WRITE_DAC` kazan. | Event ID `5136`; varsayılan dışı nesne sahiplerini denetle. |
| **`GenericAll`** | `0x10000000` (`GENERIC_ALL`) | `stannis` → `KINGSLANDING$` | Tam nesne kontrolü; DC üzerinde RBCD veya Shadow Credentials. | Tier-0'ı `AdminSDHolder` / `SDProp` ile koru. |

---

## Kanıt ve sınırlar

ACE dökümleri, GUID'ler ve sekiz adımlı örnekler, Bölüm 3'te kullanılan GOAD dizininden gelir. `impacket-dacledit` çıktısı, ilgili BloodHound kenarları ve Microsoft'un `ACCESS_ALLOWED_OBJECT_ACE`, erişim maskeleri ve nesneye özgü hak tanımlarıyla karşılaştırıldı. Bu nedenle yazı BloodHound'u bir yol bulucu, dizin güvenlik tanımlayıcısını ise otorite olarak ele alır. Bir çizge kenarı, kesin ACE ve hedef davranışı doğrulanana kadar test edilebilir bir hipotezdir.

Bu yazı eksiksiz bir Windows yetkilendirme modeli değildir. Miras alma, deny ACE sıralaması, `AdminSDHolder`, korumalı nesneler, doğrulanmış yazmalar (validated writes) ve uygulamaya özgü kontroller etkin erişimi değiştirebilir. Buradaki örnekler yalnızca izole GOAD laboratuvarında doğrulandı; üretimde aynı ACE'yi görsen bile hedefin davranışını ayrıca test etmen gerekir.

## Kaynaklar

- **Microsoft Open Specifications, `[MS-ADTS]` §5.1.3 Authorization:** [learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/4e11a7e6-e18c-46e4-a781-3ca2b4de6f30)
- **Microsoft Open Specifications, `[MS-DTYP]` §2.4.6 `SECURITY_DESCRIPTOR` and `ACE` Structures:** [learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/7d4dac05-9cef-4563-a058-f108abecce1d)
- **Orange Cyberdefense, GOAD (Game of Active Directory):** [orange-cyberdefense.github.io/GOAD](https://orange-cyberdefense.github.io/GOAD/)
- **MITRE ATT&CK, File and Directory Permissions Modification: Windows (`T1222.001`):** [attack.mitre.org/techniques/T1222/001](https://attack.mitre.org/techniques/T1222/001/)
