AD güvenliği, bir kez yapılıp unutulacak bir iş değil, sürekli bir denetim sürecidir. Bu adımları uygulayarak altyapınızı çok daha dirençli hale getirebilirsiniz.
Active Directory ortamlarında güvenliği sağlamak, sadece güçlü parolalar belirlemekten ibaret değildir; aynı zamanda kimin neyi, nereye ekleyebileceğini de kontrol etmektir. Varsayılan ayarlarda, herhangi bir kullanıcı etki alanına 10 adet makine dahil edebilir. Bu durum, saldırganlar için açık bir davetiyedir.
İşte bu riskleri minimize etmek için hazırladığımız, Domain Join (Etki Alanına Katılma) işlemlerini güvenli hale getirme rehberi:
---
1. Özel Bir Servis Hesabı Oluşturun
İlk adım, bu iş için özel olarak atanmış bir servis hesabı oluşturmaktır. Bu hesap, günlük işlerde kullanılan bir kullanıcı hesabı olmamalıdır.
İsimlendirme: Örneğin `djoinacc` gibi açıklayıcı bir isim kullanın.
Parola Güvenliği: En az 17 karakterden oluşan, güçlü bir parola veya hatırlanması kolay bir "passphrase" (parola cümlesi) tercih edin.
Yöntem: `dsa.msc` üzerinden ilgili Organizasyon Birimi (OU) altında yeni bir kullanıcı oluşturun.
2. Yetkileri (Delegasyon) Tanımlayın
Servis hesabını oluşturduktan sonra, ona sadece hedef OU (örneğin "Computers") üzerinde gerekli olan minimum yetkileri tanımlayın.

Tanımlanması gereken izinler şunlardır:
Create & Delete Computer Objects: Bu nesne ve tüm alt nesneler için izin verin.
Alt Bilgisayar Nesneleri İçin:
Tüm özelliklerini okuma ve yazma (Read & Write All Properties).
İzinleri okuma ve yazma (Read & Write Permissions).
Parola değiştirme ve sıfırlama (Change & Reset Password).
DNS ana bilgisayar adlarına ve servis asıl adlarına (SPN) doğrulanmış yazma yetkisi.

3. Güvensiz Varsayılan Yapılandırmaları Kaldırın
AD kurulumuyla gelen bazı "kolaylıklar" aslında güvenlik açığıdır. Bunları kapatmak şart.

Makine Hesabı Kotasını Sıfırlayın
Varsayılan olarak `ms-DS-MachineAccountQuota` değeri 10'dur; bu, her kimliği doğrulanmış kullanıcının 10 makineyi domain'e dahil edebileceği anlamına gelir.
Domain köküne sağ tıklayın > Attribute Editor > `ms-DS-MachineAccountQuota` değerini 0 yapın.
Grup İlkesini (GPO) Düzenleyin
"Default Domain Controllers Policy" üzerinde düzenleme yaparak yetkisiz erişimi engelleyin.
Yol: `Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > User Rights Assignment > Add workstations to domain`.
Buradaki "Authenticated Users" seçeneğini kaldırın ve sadece oluşturduğunuz servis hesabını (`djoinacc`) ve yedek olarak "Domain Admins" grubunu ekleyin.
4. Sahiplik ve ACL Temizliği Yapın
Bir bilgisayar objesi oluşturulduğunda, onu oluşturan hesap (servis hesabınız) otomatik olarak objenin sahibi (owner) olur. Sahiplik, hesap üzerinde dolaylı olarak tam kontrol sağlar; bu da RBCD veya LAPS üzerinden ayrıcalık yükseltme (privilege escalation) riskini doğurur.
Güvenlik önerileri:
Katılan bilgisayarları, devralınan hakları kaldırmak için delegasyon yapılan OU'nun dışına taşıyın.
Bilgisayar nesnelerinin sahipliğini düzenli olarak "Domain Admins" gibi korumalı bir gruba devreden temizlik betikleri çalıştırın.
Delegasyon hesabına ait kalıntı ACE (Access Control Entry) kayıtlarını temizleyin.

bu PowerShell betiği, paylaştığın dokümanda belirtilen güvenlik adımlarını (hesap oluşturma, kota sıfırlama ve yetki delegasyonu) otomatize etmek için tasarlanmıştır.
Aşağıdaki betik, dokümanda yer alan "djoinacc" hesabını oluşturur, etki alanı kotasını güvenlik gerekçesiyle sıfırlar ve hedef OU üzerinde gerekli hassas izinleri tanımlar.
# --- Değişkenler ---
[cite_start]$AccountName = "djoinacc" [cite: 18]
[cite_start]$TargetOUDN = "OU=Computers,DC=ad,DC=local" [cite: 48, 116]
[cite_start]$DomainDN = (Get-ADDomain).DistinguishedName [cite: 148]
# 1. Güvenli Servis Hesabını Oluşturma
# Doküman 17+ karakterli güçlü bir parola önerir[cite: 15, 16].
$Password = Read-Host -AsSecureString "Servis hesabı için güçlü bir parola girin"
[cite_start]New-ADUser -Name $AccountName -SamAccountName $AccountName -AccountPassword $Password -Enabled $true -Path "OU=Users,$DomainDN" [cite: 11, 14]
# 2. ms-DS-MachineAccountQuota Değerini Sıfırlama
# Her kullanıcının 10 makine ekleme hakkını (varsayılan güvensiz ayar) 0'a indirir[cite: 142, 145, 163].
[cite_start]Set-ADDomain -Identity $DomainDN -Replace @{"ms-DS-MachineAccountQuota" = 0} [cite: 164]
# 3. OU Üzerinde Yetki Delegasyonu
$SID = (Get-ADUser $AccountName).SID
$ACL = Get-Acl -Path "AD:\$TargetOUDN"
# A. Bilgisayar Nesnesi Oluşturma/Silme İzinleri (Bu nesne ve tüm alt nesneler) [cite: 51, 52, 100]
$CreateDeleteRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
$SID,
"CreateChild,DeleteChild",
"Allow",
[Guid]"bf967a86-0de6-11d0-a285-00aa003049e2", # Computer Object Class GUID
"All"
)
$ACL.AddAccessRule($CreateDeleteRule)
# B. Alt Bilgisayar Nesneleri İçin Özellik Yazma ve Parola Sıfırlama İzinleri [cite: 53-59]
$InheritedRules = @(
[cite_start]"ReadProperty,WriteProperty", # Read & Write All Properties [cite: 54]
[cite_start]"ExtendedRight" # Reset Password & Validated Writes [cite: 57, 58, 59]
)
foreach ($Rule in $InheritedRules) {
$ADRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
$SID,
$Rule,
"Allow",
"Descendant",
[cite_start][Guid]"bf967a86-0de6-11d0-a285-00aa003049e2" # Sadece Computer nesnelerine uygulanır [cite: 53]
)
$ACL.AddAccessRule($ADRule)
}
Set-Acl -Path "AD:\$TargetOUDN" -AclObject $ACL
# 4. Sahiplik Temizliği (Bakım Planı)
# Doküman, oluşturulan nesnelerin sahipliğinin Domain Admins'e devredilmesini önerir[cite: 201].
Write-Host "İşlem Tamamlandı. Lütfen GPO üzerinden 'Add workstations to domain' ayarını güncellemeyi unutmayın." [cite_start]-ForegroundColor Cyan [cite: 178, 182]
Önemli Notlar ve Bakım
GPO Düzenlemesi: Betik AD izinlerini ayarlar ancak Default Domain Controllers Policy içindeki "Add workstations to domain" hakkını manuel olarak (veya GPO modülüyle) sadece bu servis hesabına kısıtlamanız gerekir.
Sahiplik (Ownership): Dokümana göre, djoinacc hesabı oluşturduğu nesnelerin sahibi olur. Ayrıcalık yükseltme saldırılarını (RBCD gibi) önlemek için bu nesnelerin sahipliğini düzenli olarak bir script ile Domain Admins grubuna aktarmalısınız.
PowerShell ile Katılım: Bilgisayarları bu hesapla etki alanına dahil ederken Add-Computer komutunu -OUPath parametresiyle birlikte kullanmalısınız.
Dokümanda belirtilen riskleri (sahiplik üzerinden ayrıcalık yükseltme, RBCD veya LAPS verilerine erişim) önlemek için bu temizlik işleminin düzenli olarak yapılması kritiktir.
Aşağıdaki betik, delegasyon OU'suna yeni eklenen bilgisayarları tespit eder, sahipliğini değiştirir, izin kalıntılarını temizler ve onları güvenli bir üretim OU'suna taşır.
AD Temizlik ve Güvenlik Betiği (Cleanup Task)
powershell
--- Ayarlar ---
[cite_start]$DelegatedOU = "OU=Computers,OU=T2,DC=ad,DC=local" Bilgisayarların ilk katıldığı yer [cite: 116]
[cite_start]$Producti Taşınacak güvenli yer [cite: 200]
[cite_start]$ServiceAccount = "ad\djoinacc" Yetkili servis hesabı [cite: 48]
[cite_start]$AdminGroup = "AD\Domain Admins" Yeni sahibi olacak grup [cite: 201]
1. Delegasyon OU'sundaki bilgisayarları bul
$Computers = Get-ADComputer -Filter -SearchBase $DelegatedOU
foreach ($PC in $Computers) {
Write-Host "İşleniyor: $($PC.Name)" -ForegroundColor Yellow
$ObjectPath = "AD:\$($PC.DistinguishedName)"
[cite_start]2. Sahipliği Değiştir (Ownership Transfer) [cite: 201]
[cite_start]Sahiplik, hesaba Write All Properties yetkisi olmasa bile tam kontrol sağlar[cite: 197].
$ACL = Get-Acl -Path $ObjectPath
$AdminSID = (Get-ADGroup $AdminGroup).SID
$ACL.SetOwner($AdminSID)
Set-Acl -Path $ObjectPath -AclObject $ACL
[cite_start]3. Servis Hesabı ACE Kayıtlarını Temizle [cite: 203]
djoinacc hesabına ait tüm doğrudan izinleri kaldırır.
$ACL = Get-Acl -Path $ObjectPath
$RulesToRemove = $ACL.Access | Where-Object { $_.IdentityReference -eq $ServiceAccount }
foreach ($Rule in $RulesToRemove) {
$ACL.RemoveAccessRule($Rule)
}
Set-Acl -Path $ObjectPath -AclObject $ACL
[cite_start]4. Bilgisayarı Üretim OU'suna Taşı [cite: 200]
Bu işlem, delegasyon OU'sundan gelen miras izinleri keser.
Move-ADObject -Identity $PC.DistinguishedName -TargetPath $ProductionOU
Write-Host "$($PC.Name) başarıyla temizlendi ve taşındı." -ForegroundColor Green
}
---
Bu Betiği "Scheduled Task" Olarak Ayarlama
Bu işlemi otomatize etmek için Windows Görev Zamanlayıcı'yı (Task Scheduler) kullanabilirsiniz:
1. Görev Oluştur: "AD-Cleanup-DomainJoin" adında yeni bir görev oluşturun.
2. Tetikleyici (Trigger): Her gün veya her saat başı çalışacak şekilde ayarlayın.
3. Eylem (Action): powershell.exe programını başlatın.
4. Bağımsız Değişkenler: -ExecutionPolicy Bypass -File "C:\Scripts\ADCleanup.ps1" yolunu ekleyin.
5. Kullanıcı: Görevin "Domain Admin" yetkisine sahip bir hesapla (veya SYSTEM hesabı, eğer DC üzerinde çalışacaksa) çalıştırıldığından emin olun.
Neden Bu Temizlik Gerekli?
Ayrıcalık Yükseltme (Privilege Escalation): Nesne sahibi olan hesap, msDS-AllowedToActOnBehalfOfOtherIdentity (RBCD) gibi kritik öznitelikleri değiştirebilir.
Gizli Verilere Erişim: Sahiplik hakları, LAPS parolaları (ms-Mcs-AdmPwd) gibi hassas bilgilerin okunmasına yol açabilir.
Miras İzinlerin Kesilmesi: Bilgisayarı farklı bir OU'ya taşımak, djoinacc hesabının o nesne üzerindeki devralınmış tüm haklarını etkisiz hale getirir.