Mimari, Zafiyet Yüzeyi ve Suistimal Zincirleri
1.1 Yönetici Özeti
Active Directory’deki kullanıcı, grup, bilgisayar, OU, GPO ve domain gibi nesneler, güvenlik tanımlayıcısıyla korunan erişim denetimine tabi nesnelerdir. DACL içindeki ACE’ler, hangi güvenlik principal’ının hangi nesne üzerinde ne yapabileceğini belirler.
Bu bir CVE değildir. Sorun; meşru yönetim ve delegasyon için tasarlanmış hakların yanlış principal’a, yanlış nesneye veya gereğinden geniş kapsamda verilmesidir.
Düşük ayrıcalıklı hesap
→ tehlikeli doğrudan/devralınan ACE
→ hedef nesne üzerinde kontrol
→ parola sıfırlama, grup üyeliği, SPN yazma,Shadow Credentials, RBCD veya DCSync
→ ayrıcalık yükseltme / kalıcılık / domain compromiseHak | Tipik etki |
|---|---|
| Hedef nesne üzerinde tam denetim |
| Çok sayıda özelliği ve validated write işlemini değiştirme |
| Yeni ACE ekleme veya mevcut ACE’leri kaldırma |
| Sahipliği alarak DACL kontrolüne ilerleme |
| Mevcut parolayı bilmeden sıfırlama |
| Gruba üyelik ekleme |
| Hedefli Kerberoasting |
| Shadow Credentials |
| Resource-Based Constrained Delegation |
Replikasyon hakları | DCSync |
Not: AD güvenliği yalnızca “kim Domain Admin?” sorusuyla ölçülemez. Asıl soru, kimin hangi ACL zinciri üzerinden Domain Admin veya eşdeğer Tier 0 yetkisine ulaşabildiğidir.
1.2 Amaç ve Kapsam
Bu bölüm:
1. Security descriptor, DACL, SACL ve ACE mimarisini
2. Generic, object-specific ve validated write haklarını
3. Tehlikeli BloodHound sınırlarını
4. ACL hakkından ayrıcalık yükseltmeye giden zincirleri
5. AdminSDHolder ve GPO tabanlı kalıcılığı
6. Test doğrulama yaklaşımını
ele alır.
Cok uzun olmaması sınırların net olması icin aşagıdaki başlıklar Kapsam dışı bırakılmıştır:
Entra ID RBAC,
AD CS ESC teknikleri,
Kerberoasting parola kırma ayrıntıları,
NTLM relay ile ACL yazımı,
tam GPO içerik enjeksiyonu,
prevention ve detection kuralları.
1.3 Güvenlik Tanımlayıcısının Yapısı
AD nesnesinin nTSecurityDescriptor niteliği temel olarak şu bileşenleri içerir:
Bileşen | İşlev |
|---|---|
Owner SID | Nesnenin sahibi |
Primary Group SID | AD erişim kararlarında pratik kullanımı sınırlı tarihsel alan |
DACL | Erişime izin veren veya erişimi reddeden ACE listesi |
SACL | Hangi işlemlerin denetim olayı üreteceğini belirler |
Control flags | Inheritance ve DACL/SACL davranışını belirler |
SACL nüansı
SACL özellikle şu olayların güvenilir üretilmesi için önemlidir:
4662 — An operation was performed on an object
5136 — A directory service object was modified
Ancak parola sıfırlama olayı olan 4724, nesne SACL’ından değil Account Management audit politikasından gelir. Bu nedenle “SACL yoksa 4724 üretilmez” denmemelidir.
1.4 Empty DACL ve Null DACL
Durum | Sonuç |
|---|---|
Empty DACL | DACL vardır ancak ACE yoktur; erişim reddedilir |
Null DACL | DACL yoktur; normal access check uygulanmaz ve herkese erişim verilir |
AD DS, normal LDAP güncellemesiyle bir nesneye Null DACL yazılmasını desteklemez ve bunu reddeder. Bunun nedeni “her schema class mutlaka defaultSecurityDescriptor içerir” şeklinde genellenmemelidir. Daha doğru ifade etmek gerekirse, AD DS’nin Null DACL saklanmasına izin vermemesidir.
1.5 ACE Yapısı
Bir ACE şu temel alanlardan oluşur:
Alan | Açıklama |
|---|---|
ACE type | Allow, Deny veya object-specific varyant |
Access mask | Verilen veya reddedilen hak bitleri |
Trustee SID | Hakkın uygulandığı principal |
Object Type GUID | Özellik, property set, validated write veya control-access right |
Inheritance flags | ACE’nin alt nesnelere uygulanma biçimi |
Object Type GUID boş olduğunda sonuç ACE’deki access-mask türüne bağlıdır. Örneğin WriteProperty ile birlikte boş GUID görülmesi tüm yazılabilir özellikleri kapsayabilir ama bu durum “ACE nesne üzerindeki her türlü hakkı verir” anlamına gelmez.
1.6 ACE Değerlendirme Mantığı
Tercih edilen canonical sıra genel olarak şöyledir:
1. Explicit Deny
2. Explicit Allow
3. Inherited ACE’ler:
a. en yakın atadan en uzağa,
b. her seviyede Deny önce Allow
Ancak “ilk eşleşen ACE tüm isteğin sonucunu belirler” ifadesi aşırı basitleştirmedir. Windows erişim denetimi, talep edilen access mask içindeki izin bitlerini toplu olarak değil, hak bazında değerlendirir. Allow ACE'ler talep edilen hakların bir kısmını veya tamamını karşılayabilir; buna karşılık uygun bir Deny ACE, henüz verilmemiş haklardan herhangi birini açıkça reddedebilir
Ayrıca object-specific ACE'ler, property set'ler, extended rights ve çok seviyeli inheritance yapıları değerlendirme sürecini daha karmaşık hâle getirir. Bu nedenle erişim kontrolünün sonucu yalnızca ACE sırasına bakılarak değil, talep edilen haklar ile tüm ilgili ACE'lerin birlikte değerlendirilmesiyle belirlenir.
1.7 Owner ve WriteOwner Gerçeği
Bir nesnenin sahibi (owner), varsayılan olarak aşağıdaki haklara sahiptir:
"READ_CONTROL" & "WRITE_DAC"
Haklarına sahip olur.
Owner doğrudan GenericAll almaz.
Ancak owner olmak, tek başına GenericAll (Full Control) hakkı vermez. Bunun yerine yetki yükseltme zinciri genellikle şu şekilde işler:
Owner
↓
WRITE_DAC
↓
DACL'i değiştirebilme
↓
Kendisine gerekli ACE'leri ekleyebilme
↓
Full Control (GenericAll)İstisnalar
Owner'a tanınan bu örtük (implicit) haklar her durumda geçerli değildir:
DACL içerisinde
OWNER RIGHTS(S-1-3-4) SID'i için tanımlanmış ACE'ler bulunuyorsa, owner'ın varsayılan READ_CONTROL ve WRITE_DAC hakları sınırlandırılabilir veya tamamen kaldırılabilir.Active Directory'de
BlockOwnerImplicitRightsdavranışı etkin olduğunda, belirli koşullar altında owner'ın sahiplikten kaynaklanan WRITE_DAC yetkisi göz ardı edilebilir. Bu mekanizma özellikle bilgisayar nesneleri (computer objects) ve bunlardan türetilen nesnelerde yetki yükseltme senaryolarını engellemek amacıyla uygulanır.BlockOwnerImplicitRights davranışının kapsamı ve uygulanma şekli işletim sistemi sürümüne göre değişebildiğinden, değerlendirme yapılırken güncel Microsoft dokümantasyonu esas alınmalıdır.
WriteOwner
WRITE_OWNER sahibi normalde owner değerini kendisine veya token’ında owner olarak kullanılabilen bir SID’e değiştirebilir. Başka bir principal’ı keyfî biçimde owner yapmak için tipik olarak SeRestorePrivilege gerekir. SeTakeOwnershipPrivilege, erişim verilmemiş olsa bile sahipliği almayı sağlar ancak keyfî üçüncü taraf atama hakkı değildir.
1.8 Tehlikeli Haklar
Hak | Teknik kapsam | Suistimal |
|---|---|---|
| Genel tam denetim | Hedef nesne türüne göre tüm kritik işlemler |
|
| SPN, script path, delegation ve benzeri özellikler |
| DACL değiştirme | Kendine yeni hak veya DCSync hakkı verme |
| Owner değiştirme | Owner → |
| GUID ile hedeflenen özellik/property set |
|
| Nesneye uygulanabilen control-access rights | ForceChangePassword, replikasyon hakları vb. |
| Validated write ( | Self-Membership gibi doğrulanan yazımlar |
| Control-access right | Mevcut parola olmadan reset |
|
| İstenen hesabı gruba ekleme |
AllExtendedRights, düz bir attribute olan msDS-KeyCredentialLink için otomatik olarak write hakkı sağlamaz.
1.9 Validated Write Nüansı
Validated write, normal WriteProperty işleminden farklıdır. AD, yazılan değere ek semantik kurallar uygular.
Bu konu açısından örnekler:
Validated write | Uygulandığı nesne | GUID |
|---|---|---|
Self-Membership | Group |
|
Validated-DNS-Host-Name | Computer |
|
Validated-SPN | Computer / uygun managed service account sınıfları |
|
NOT:
bf967a7f-...Validated-SPN GUID’i değildir. Validated-SPN veservicePrincipalNameiçin ilgili GUIDf3a64788-5306-11d1-a9c5-0000f80367c1değeridir.
Validated-SPN yalnızca hedef bilgisayarın izin verilen DNS kimliğiyle uyumlu SPN değerlerine izin verir. Kullanıcı hesabına keyfî SPN ekleyerek hedefli Kerberoasting yapmak için normal property-write yolu gerekir.
1.10 Suistimal Zincirleri
1.10.1 ForceChangePassword
GUID: 00299570-246d-11d0-a768-00aa006e0529
Zincir:
ForceChangePassword
→ hedef parolasını mevcut parola olmadan sıfırla
→ hedef hesapla kimlik doğrula
→ hedefin yetkilerini kullanBirincil audit olayı: 4724— An attempt was made to reset an account's password
4738, genel kullanıcı hesabı değişikliği bağlamı sağlayabilir ancak parola resetinin kanonik olayı değildir.
Not: Parola sıfırlama, daha önce verilmiş Kerberos biletlerini anında evrensel biçimde iptal etmez. Biletlerin kullanımı, geçerlilik süreleri ve ilgili Kerberos politikalarına bağlı olarak devam edebilir.
BloodHound: ForceChangePassword MITRE: T1098
1.10.2 AddMember ve AddSelf
Primitifler:
WriteProperty(member)
→ istenen hesabı gruba ekleme
ADS_RIGHT_DS_SELF
→ principal'ın kendisini gruba eklemesiNot: Tier 0 gruplara üyelik doğrudan kritik etki yaratır. DNSAdmins, Backup Operators veya özel yönetim gruplarının etkisi ise ortam ve yapılandırmaya bağlıdır; bunların üyeliği her zaman otomatik Domain Admin anlamına gelmez
BloodHound: AddMember, AddSelf MITRE: T1098.007
1.10.3 WriteSPN ve Hedefli Kerberoasting
Zincir:
GenericAll / GenericWrite / WriteProperty(servicePrincipalName)
→ hedef kullanıcıya SPN ekleme
→ TGS isteme
→ offline parola tahmini/kırmaNot: Validated-SPN, bilgisayar nesnelerinde değer doğrulaması uyguladığı için keyfî kullanıcı SPN yazımıyla aynı primitive değildir.
SPN değişikliği için 5136 olayının üretilme şartları:
A. Audit Directory Service Changes açıksa,
B. ilgili kullanıcı/OU üzerinde uygun SACL varsa
BloodHound: WriteSPN MITRE: T1558.003
1.10.4 Shadow Credentials
Shadow Credentials, hedef kullanıcı veya bilgisayarın msDS-KeyCredentialLink özelliğine saldırgan kontrollü bir KeyCredential eklenmesidir.
Zincir:
Attribute write access
→ asimetrik anahtar üret
→ public key/KeyCredential hedef nesneye ekle
→ private key ile PKINIT
→ hedef hesap adına TGTÖn koşullar
• Domain Functional Level: Windows Server 2016 veya üzeri
• En az bir uygun Windows Server 2016+ DC
• Kullanılan KDC’de PKINIT’i destekleyen güvenilir sertifika ve private key
• Hedef
msDS-KeyCredentialLinkniteliğine yazma hakkı• LDAP ve Kerberos erişimi
Yazma hakkı şu yollardan gelebilir:
• GenericAll
• GenericWrite
• WriteProperty(msDS-KeyCredentialLink)
• WriteDACL → kendine attribute-write ACE
• Owner → WRITE_DAC → attribute-write ACE
Not: AllExtendedRights tek başına yeterli değildir.
PKINIT ile TGT alınması temel sonuçtur. Bazı KDC, hesap ve araç kombinasyonlarında U2U/Kerberos credential-retrieval zincirleriyle NT hash de elde edilebilir; bu sonuç her ortam için garanti değildir.
Kullanıcılar varsayılan olarak kendi msDS-KeyCredentialLink değerlerini yazamaz. Bilgisayar hesaplarının self-write davranışı ise ek doğrulama ve değer durumu kısıtlarına tabidir ve arbitrary write ile eşdeğer sayılmamalıdır.
BloodHound: AddKeyCredentialLink MITRE: T1098, T1556
1.10.5 Resource-Based Constrained Delegation
Bir bilgisayar nesnesinin msDS-AllowedToActOnBehalfOfOtherIdentity niteliğine yazabilen saldırgan, saldırgan kontrollü bir computer/service principal'ı hedef bilgisayar adına delegation yapabilecek şekilde tanımlayabilir.
Zincir:
AddAllowedToAct hakkı
→ saldırgan kontrollü principal'ı attribute'a ekle
→ S4U Kerberos zinciri
→ hedef host servislerine başka kullanıcı adına erişimÖn koşul: Uygun SPN'e sahip saldırgan kontrollü bir principal ve Kerberos erişimi
BloodHound: AddAllowedToAct
Not: Bu teknik kalıcı olarak "hedef hostta local admin" vermekle eş anlamlı değildir; elde edilen etki, erişilebilen SPN/servis ve impersonate edilen kimliğin yetkilerine bağlıdır
1.10.6 WriteDACL
WriteDACL
→ saldırgan kontrollü principal için ACE ekle
→ GenericAll / WriteProperty / AddMember / Shadow Credentials / DCSyncHedef | Olası sonuç |
|---|---|
User | Parola sıfırlama veya Shadow Credentials |
Group | Üyelik değiştirme |
Computer | RBCD veya Shadow Credentials |
Domain naming context | DCSync hakları |
AdminSDHolder | Protected-account kalıcılığı |
GPO/GPC | GPO delegasyonunu değiştirme |
BloodHound: WriteDACL MITRE: Ortaya çıkan davranışa göre T1098, T1003.006, T1484.001
1.10.7 WriteOwner
Zincir:
WriteOwner
→ owner = saldırgan
→ örtük WRITE_DAC
→ DACL'a gerekli ACE
→ hedef nesne üzerinde kontrolBu zincir Koşullu olabilir çünkü:
•
OWNER RIGHTSACE’leri,•
BlockOwnerImplicitRights,• Computer-derived object davranışı
BloodHound: WriteOwner
1.10.8 DCSync
Domain naming context üzerinde temel replikasyon hakları:
Hak | GUID |
|---|---|
DS-Replication-Get-Changes |
|
DS-Replication-Get-Changes-All |
|
DS-Replication-Get-Changes-In-Filtered-Set |
|
Not: İlk iki hak, secret domain data içeren tam DCSync için temel ikilidir. Filtered-set hakkı her DCSync için zorunlu değildir; RODC-filtered/confidential attribute senaryolarında önem kazanır
Zincir:
WriteDACL / GenericAll on domain NC
→ replication ACE'leri
→ MS-DRSR/DRSUAPI ile replication request
→ krbtgt ve domain hesap sırlarıNot: DC'ye interaktif oturum veya LDAP, DCSync protokolünün zorunlu parçası değildir. Temel gereksinim RPC Endpoint Mapper/MS-DRSR erişimi ve gerekli replikasyon haklarıdır; kullanılan araçlar discovery için LDAP'tan da yararlanabilir.
MITRE: T1003.006
1.11 AdminSDHolder ve SDProp
Mekanizma:
AdminSDHolder (CN=AdminSDHolder,CN=System,DC=...), korunan hesap ve gruplar için security descriptor şablonudur.
SDProp, PDC Emulator üzerinde varsayılan olarak yaklaşık 60 dakikada bir çalışır ve korunan nesnelerin izinlerini AdminSDHolder ile hizalar.
Korumalı nesne örnekleri:
• Domain Admins
• Enterprise Admins
• Schema Admins
• Administrators
• Account Operators
• Backup Operators
• Server Operators
• Print Operators
• Sürüm/domain özelliklerine göre diğer korunan gruplar ve üyeleri
Liste eksiksiz sabit liste olarak görülmemeli Microsoft Appendix C esas alınmalıdır.
Suistimal:
AdminSDHolder DACL'ına saldırgan ACE
→ SDProp
→ ACE korunan nesnelere uygulanır
→ yalnızca hedef hesaptan silinen ACE yeniden gelebilirKök neden AdminSDHolder DACL’ıdır.
Manuel çalıştırma:
SDProp, gerekli yetkiye sahip bir principal tarafından rootDSE üzerinde RunProtectAdminGroupsTask = 1 işlemiyle manuel tetiklenebilir.
Admin Count:
adminCount=1, nesnenin halen korunan grupta olduğunu kanıtlamaz.
Nesne gruptan çıkarıldıktan sonra:
•
adminCount• inheritance-disabled durumu
otomatik olarak geri alınmayabilir.
Görünürlük:
4780, SDProp protected account ACL'ını AdminSDHolder ile yeniden hizalayıp gerçekten değiştirdiğinde üretilebilir. Bazı OS sürümlerinde güvenilir biçimde oluşmayabileceği için tek detection kaynağı olmamalıdır.
1.12 GPO ACL Suistimali
Bir GPO iki parçadan oluşur:
Parça | Konum | İçerik |
|---|---|---|
GPC | Active Directory | Metadata, sürüm ve |
GPT | SYSVOL |
|
Not: gPLink, GPO nesnesinde değil; site, domain veya OU nesnesinde bulunur.
Bu nedenle iki ayrı yetki yüzeyi vardır:
GPC/GPT üzerinde modify
→ mevcut GPO içeriğini değiştirme
→ AD ve SYSVOL izinlerine bağlı
OU/domain/site üzerinde gPLink write
→ GPO'yu hedef kapsama bağlama
→ ayrı bir haktırNot: GPC üzerindeki yalnızca WriteProperty, SYSVOL'daki GPT dosyalarını otomatik olarak değiştirmenizi sağlamaz. Standart yönetim araçları çoğu zaman GPC/GPT izinlerini birlikte delege etse de iki katman ayrı denetlenmelidir..
MITRE: T1484.001
1.13 ACL Görünürlüğünü Zorlaştıran Teknikler
Teknik | Gerçek etki |
|---|---|
Owner’ı saldırgan hesaba taşıma | Koşullara bağlı olarak DACL kontrolüne ilerleme |
| ACL görünürlüğünü azaltabilir |
| List Object Mode ve parent/child izinlerine bağlı olarak nesne görünürlüğünü azaltabilir |
Meşru principal/grup adı kullanma | Analist ve allowlist yanıltma |
AdminSDHolder | Silinen ACE’nin şablondan geri gelmesi |
Owner’ın örtük READ_CONTROL hakkı ve ayrıcalıklı sahiplik alma yolları nedeniyle “Everyone Deny ile yöneticiler dahil kimse ACL’ı göremez” gibi mutlak ifadeler kullanılmamalıdır.
1.14 MITRE ATT&CK Eşlemesi
Davranış | MITRE |
|---|---|
Parola veya account attribute manipülasyonu | T1098 |
Local/domain group üyeliği ekleme | T1098.007 |
Hedefli Kerberoasting | T1558.003 |
Shadow Credentials | T1098, T1556 |
DCSync | T1003.006 |
GPO modification/link manipulation | T1484.001 |
Elde edilen domain hesabını kullanma | T1078 |
Group/account discovery | T1069 / T1087, gerçekleştirilen keşfe göre |
AD nesnesi DACL değişikliği için T1222 kullanılmamalıdır; T1222 dosya ve dizin izinleri bağlamındadır. ACL primitive’leri, ürettikleri nihai davranışa göre eşlenmelidir.
1.15 Güvenli Lab PoC
Ana lab amacı exploitation değil, ACL hakkının attack-path'e nasıl dönüştüğünü doğrulamaktır.
Lab düzeni:
Lab OU
├── lab-attacker
├── lab-target
└── lab-delegated-group1.15.1. ACL keşfi
Get-DomainObjectAcl -Identity "lab-target" -ResolveGUIDs |
Select-Object IdentityReference,
ActiveDirectoryRights,
ObjectType,
IsInherited1.15.2. Güvenli grup üyeliği doğrulaması
Önceden yalnızca disposable lab-delegated-group üzerinde verilen AddSelf/WriteMembers delegation'ı doğrulayın:
Add-ADGroupMember -Identity "lab-delegated-group" -Members "lab-attacker"
Get-ADGroupMember -Identity "lab-delegated-group"1.15.3. Temizleme
Remove-ADGroupMember -Identity "lab-delegated-group" `
-Members "lab-attacker" `
-Confirm:$falseLab ilkeleri:
• Domain Admins, AdminSDHolder veya domain root hedeflenmemeli.
• DCSync çalıştırılmamalı.
• Gerçek servis hesabının parolası sıfırlanmamalı.
• Meşru
msDS-KeyCredentialLinkdeğerleri silinmemeli.• Her ACE ve attribute değişikliği için cleanup planı hazırlanmalı.
• SACL ve event üretimi aynı testte gözlemlenmeli.
Not: Shadow Credentials, AdminSDHolder ve DCSync gibi Tier 0 etkili teknikler kavramsal olarak açıklanmalı; operasyon komutları ayrı, kontrollü purple-team prosedüründe tutulmalıdır.
1.16 Bölüm 1 Sonuçları
AD ACL/ACE suistimali, meşru delegasyon mekanizmasının yanlış principal, hedef veya kapsamla kullanılmasından doğar. GenericAll, WriteDACL, WriteOwner, ForceChangePassword, WriteSPN, Shadow Credentials, RBCD ve replikasyon hakları farklı attack-path'lerle aynı sonuca ulaşabilir: ayrıcalık yükseltme, kalıcılık veya domain compromise.
Owner doğrudan GenericAll değildir; gücü WRITE_DAC üzerinden gelir. gPLink GPO'da değil hedef site/domain/OU üzerindedir. Shadow Credentials için attribute-write yanında PKINIT yapabilen KDC altyapısı gerekir. AdminSDHolder ise yalnızca hedef hesaptaki ACE temizlenerek ortadan kaldırılamayan şablon tabanlı bir kalıcılık yüzeyidir.
AD güvenliğinde asıl soru yalnızca “kim Domain Admin?” değildir; “kim, hangi nesne üzerinde, hangi ACE zinciriyle Domain Admin veya eşdeğer Tier 0 yetkisine dönüşebilir?” sorusudur.