Merhaba
Bir Active Directory ortamını hiçbir şeyi değiştirmeden tarayan ve size ortamın fotoğrafını tek parça, çevrimdışı bir HTML raporu olarak veren 6 PowerShell modülü. Bu yazıda ne yaptıklarını, nasıl çalıştırıldıklarını ve ürettikleri raporların KVKK, ISO 27001 ve CIS açısından ne anlama geldiğini anlatıyorum.
Her Active Directory ortamı zamanla “birikir”. Yıllar içinde açılıp unutulan servis hesapları, kimsenin dokunmaya cesaret edemediği eski GPO’lar, hala ayakta duran bir Windows Server 2012 domain controller, “geçici” diye kurulmuş ama kalıcılaşmış bir trust ilişkisi… Bunların hiçbiri tek başına alarm vermez. Ama bir araya geldiklerinde denetim zamanı geldiğinde ya da bir güvenlik olayının ortasında ortamın gerçekte neye benzediğini kimsenin net bilmediği ortaya çıkar.
Bu yüzden Active Directory Audit Suite‘i yazdım: Active Directory ortamını hiçbir şeyi değiştirmeden, salt okunur biçimde tarayan ve size ortamın fotoğrafını tek parça, çevrimdışı bir HTML raporu olarak veren bir PowerShell modülleri koleksiyonu. Ne ajan kurulumu, ne bulut, ne telemetri scripti çalıştırıyorsunuz, tarayıcıda açılan raporu okuyorsunuz.
Neden bir araç daha?
Piyasada Active Directory denetim araçları var; birçoğu ya ücretli, ya ajan kuruyor, ya da veriyi bir yere gönderiyor. Benim ihtiyacım daha sadeydi:
- Salt okunur olmalı. Denetim aracı ortamı değiştirmemeli. Bu suite’teki her sorgu yalnızca okur.
- Çevrimdışı ve taşınabilir olmalı. Rapor tek bir HTML dosyası olmalı; internet olmadan açılmalı, e-postayla gönderilebilmeli, denetçiye teslim edilebilmeli.
- Kurulum istememeli. RSAT dışında bağımlılık yok; kopyala, çalıştır.
- Anlaşılır olmalı. Çıktı ham CSV değil; KPI’lar, grafikler ve drill-down’lar içeren okunabilir bir dashboard.
Altı modül, altı bakış açısı
Suite bağımsız çalışan altı modülden oluşuyor. Hepsini çalıştırmak zorunda değilsiniz; her biri kendi başına anlamlı bir rapor üretir.
1. AD-Overview – Kuşbakışı
Forest’ın üst düzey özeti: fonksiyonel seviyeler, şema sürümü, FSMO rol sahipleri, tombstone lifetime; kullanıcı / bilgisayar / grup / OU / GPO sayıları; hesap durumu (etkin, devre dışı, eski, kilitli, parolası hiç dolmayan) ve OS dağılımı. Ortama ilk kez bakıyorsanız buradan başlayın.
Çalıştırmak için: Windows PowerShell‘i Run as administrator (Yönetici olarak) açın ve scriptlerin bulunduğu klasöre geçip komutu çalıştırın:
cd C:\Scripts
powershell -ExecutionPolicy Bypass -File .\AD-Overview.ps1
AD-Overview.ps1 çalışırken: Forest bilgileri ve Domain başına nesne sayıları toplanıyor.
Rapor, forest’ın tek ekranda fotoğrafını veriyor: bakicubuk.local, Windows Server 2025 fonksiyonel seviyesi, tek domain, tek site, iki Global Catalog ve FSMO rollerinin tamamı W25DC üzerinde. Nesne envanteri 25 kullanıcı, 71 grup, 3 bilgisayar, 3 OU ve 2 GPO gösteriyor. Asıl dikkat çeken hesap durumu: 25 hesabın 12’si devre dışı, 13’ünde parola hiç dolmuyor ve 9 hesap hiç oturum açmamış. Bu üç sayı, denetimde ilk elden ele alınması gereken “ölü ve zayıf kimlik” tablosudur.
2. AD-Topology – Harita
Forest → domain → site → domain controller hiyerarşisini interaktif bir harita olarak çizer. FSMO rolleri, subnetler, site-link’ler ve replikasyon sağlığı burada. Her Domain Controller sağlığına göre renklenir; replikasyonu gecikmiş ya da bozulmuş bir DC anında göze çarpar ki bu, Active Directory‘de görebileceğiniz en kritik sorunlardan biridir.
Çalıştırmak için: Windows PowerShell‘i Run as administrator (Yönetici olarak) açın ve scriptlerin bulunduğu klasöre geçip komutu çalıştırın:
cd C:\Scripts
powershell -ExecutionPolicy Bypass -File .\AD-Topology.ps1
AD-Topology.ps1: topoloji ve replikasyon sağlık matrisi kuruluyor.
Script çalışırken her aşamayı ekranda canlı görürsünüz: topoloji verisi çekilir, orphaned DC metadata kontrol edilir ve replikasyon sağlık matrisi kurulur. Bu matris, DC’ler arası ortaklıkların (partnership) ve dizin bölümlerinin (partition) güncel olup olmadığını değerlendirir; gecikmiş ya da bozuk bir replikasyon burada işaretlenir. AD’de en kritik takip edilmesi gereken sağlık göstergesidir.
Harita, Forest → Domain → Site → DC hiyerarşisini iç içe kartlarla gösteriyor. İki domain controller (W25DC, W25ADC) tek sitede; FSMO rollerinin tamamı (PDC, RID, INFRA, SCHEMA, DN) tek DC olan W25DC’de toplanmış o sunucu düştüğünde birden çok kritik rol aynı anda kaybolur, yedeklilik açısından gözden geçirilmelidir. Terminal çıktısındaki “1 stale/lingering finding” bilgisi de replikasyon hijyeni için not düşülmesi gereken bir bulgudur.
Replikasyon Sağlık Matrisi – burayıkontrolet.
3. AD-DCInventory – Envanter
Her domain controller’ın envanteri: OS ve build, IP, site, Global Catalog / RODC durumu, uptime; ardından CIM/WMI ile donanım (üretici, model, CPU, RAM, diskler, NIC’ler) ve performans (CPU/RAM kullanımı, NTDS.dit boyutu). Bir DC’ye erişilemezse ilgili alanlar hata yerine “Unavailable” gösterilir.
Çalıştırmak için: Windows PowerShell‘i Run as administrator (Yönetici olarak) açın ve scriptlerin bulunduğu klasöre geçip komutu çalıştırın:
cd C:\Scripts
powershell -ExecutionPolicy Bypass -File .\AD-DCInventory.ps1
AD-DCInventory.ps1: DC’ler keşfediliyor, donanım ve performans toplanıyor.
Envanter, iki domain controller’ı da çevrimiçi, Windows Server 2025 Datacenter (build 26100), 16 GB RAM ile listeliyor; RODC yok ve “Legacy OS” sayacı sıfır desteği bitmiş bir OS üzerinde çalışan DC yok. Genişletilebilir kartlar her DC için donanım ve anlık performansı (CPU %15 / %1, çekirdek, disk) veriyor. Bu ekran, “hangi kimlik sunucularım var ve ne durumdalar” sorusunun belgelenmiş cevabıdır.
4. AD-Credential – Kimlik güvenliği
Suite’in en yoğun güvenlik modülü. Parola/lockout politikasını bir baseline’a göre puanlar; PSO’ları, gMSA/sMSA managed account’ları ve LAPS kapsamını listeler; riskli hesapları işaretler: parolası hiç dolmayanlar, unconstrained delegation, SID history, eski servis parolaları, SPN’ler ve krbtgt parola yaşı. Her kategori CSV olarak indirilebilir.
Çalıştırmak için: Windows PowerShell‘i Run as administrator (Yönetici olarak) açın ve scriptlerin bulunduğu klasöre geçip komutu çalıştırın:
cd C:\Scripts
powershell -ExecutionPolicy Bypass -File .\AD-Credential.ps1
AD-Credential.ps1: 8 aşamada Parola Politikası, PSO, Managed Account, LAPS ve Hesap Riskleri taranıyor.
Bu modül işini sekiz aşamada yapar ve her adımı canlı raporlar: parola & kilitleme politikası, fine-grained password policy’ler (PSO), managed account’lar, LAPS kapsamı ve yetkilendirme, kullanıcı ve bilgisayar hesabı riskleri, foreign security principal’lar ve sahipsiz SID taraması. Ürettiği rapor “Hesap ve Kimlik Bilgisi Güvenliği” başlığıyla açılır ve suite’in en yoğun güvenlik çıktısıdır.
İçgörü paneli kimlik hijyenini tek bakışta özetliyor: 2 politika sorunu, 1 servis (SPN) hesabı, 0 gMSA ve LAPS kapsamı “yok”. Risk bayrakları çubuğunda en dikkat çekici satır, parolası hiç dolmayan 14 hesap ile parola gerektirmeyen 2 hesap. Parola/kilitleme politikası bir baseline’a göre puanlanıyor ve “Minimum password length = 7” ayarı, önerilen ≥14 eşiğinin altında kaldığı için BAŞARISIZ işaretlenmiş teoride değil, ortamın gerçek ayarında ölçülen somut bir zayıflık.
Parola ve Hesap Kilitleme Politikası – burayıkontrolet.
Bu ekran kullanıcı hesaplarını risk kategorilerine ayırıp YÜKSEK ORTA DÜŞÜK önemle etiketliyor: parola gerektirmeyen 2 hesap (YÜKSEK), 14 süresiz-parola hesabı (ORTA), 1 SPN taşıyan servis hesabı ve adminCount işaretli 3 ayrıcalıklı hesap. Üstteki kutu SPN’li hesapların Kerberoasting’e açık olduğunu açıklıyor: saldırgan servis biletini isteyip çevrimdışı kırabilir; uzun/karmaşık parola, AES ve mümkünse gMSA önerilir. Her kategori “Aç” ve “CSV” ile drill-down ve dışa aktarım sunar — bulgu kanıt olarak denetçiye teslim edilebilir.
buradakaldım.
Bilgisayar tarafında 3 nesne taranmış: desteği biten OS yok, eski makine parolası yok, ancak 2 nesnede unconstrained delegation YÜKSEK riskle işaretlenmiş. DC olmayan bir nesnede bu ayar, herhangi bir kullanıcının TGT’sini yakalayıp yeniden kullanmaya kapı bırakır ve doğrulanmalıdır. Foreign Security Principal taraması temiz; sahipsiz SID bölümünde 306 nesne taranmış, 0 sahipsiz SID bulunmuş. Bu modül yalnızca tespit eder, hiçbir şeyi değiştirmez.
5. AD-TrustRelationships – Güven ilişkileri
Her trust’ı keşfeder: yön, tip, transitivity ve güvenlik durumu SID filtering, selective authentication, TGT delegation, AES/SHA. Riskleri hardcode etmez, türetir: bir external trust’ta SID filtering kapalıysa bunu yüksek risk olarak işaretler, çünkü bu SID history ile ayrıcalık yükseltmeye kapı açar.
Çalıştırmak için: Windows PowerShell‘i Run as administrator (Yönetici olarak) açın ve scriptlerin bulunduğu klasöre geçip komutu çalıştırın:
cd C:\Scripts
powershell -ExecutionPolicy Bypass -File .\AD-TrustRelationships.ps1
AD-TrustRelationships.ps1: Trust’lar keşfediliyor ve güvenlik açısından değerlendiriliyor.
Bu ortamda dış trust bulunmuyor; harita yalnızca bakicubuk.local’i “bu forest / bu domain” olarak gösteriyor ve risk paneli 0 trust raporluyor. Trust olmaması aslında iyi bir güvenlik tablosudur — her external/forest trust, özellikle SID filtering kapalıysa, ayrıcalık yükseltme için ek bir yol demektir. İleride bir trust kurulduğunda rapor, SID filtering ve selective authentication durumunu otomatik değerlendirip riskli olanları işaretleyecektir.
6. GPO-PolicyAnalyzer – Politika karşılaştırıcı
Microsoft’un Policy Analyzer’ıyla elle yapılan işi otomatikleştirir: her GPO’yu yedekler, ham Registry.pol ve GptTmpl.inf dosyalarını ADMX/ADML ile anlaşılır politika isimlerine çözer ve tüm GPO’ları tek bir tabloda karşılaştırıp çakışan (conflict) ayarları işaretler. GPO’larınızın çeliştiği, sonucun önceliğe bağlı sürprizlere döndüğü yerleri görürsünüz.
Çalıştırmak için: Windows PowerShell‘i Run as administrator (Yönetici olarak) açın ve scriptlerin bulunduğu klasöre geçip komutu çalıştırın:
cd C:\Scripts
powershell -ExecutionPolicy Bypass -File .\GPO-PolicyAnalyzer.ps1
GPO-PolicyAnalyzer.ps1: GPO’lar yedekleniyor, ADMX/ADML ile çözülüyor ve baseline’a göre puanlanıyor.
Dashboard iki GPO’yu (Default Domain Policy ve Default Domain Controllers Policy) ve toplam 48 ayarı analiz ediyor; boş, bağlanmamış, gereksiz ya da çakışan GPO yok çakışma oranı %0. Kategoriye göre dağılım Registry 4, Security 5, User 24, Parola/Kilitleme 10 ve Kerberos 5 ayar. Alttaki “GPO Bütünlüğü” kontrolleri her GPO’nun etkin, AD/SYSVOL sürümlerinin tutarlı ve doğru bağlanmış olduğunu doğruluyor — politika altyapısının kendisi sağlıklı.
Raporun en kritik bölümü bu: “Starter Hardening Baseline” uyumluluğu yalnızca %35 — 20 kontrolün 7’si Compliant, 2’si Yanlış Değer, 11’i Eksik. Somut açıklar: minimum parola uzunluğu 7 (beklenen ≥14), hesap kilitleme eşiği 0 (kilitleme yok), LAN Manager kimlik doğrulama seviyesi eksik, anonim enumerasyon kısıtlaması eksik, UAC/Admin Approval Mode eksik, WDigest ve LSASS RunAsPPL sertleştirmesi eksik, SMBv1 ve LLMNR devre dışı bırakılmamış. Her biri bilinen, istismar edilebilir zayıflıktır; %35, ortamın sertleştirmede nerede durduğunu tek rakamla ortaya koyar.
Policy Ayarları ve Çakışmaları – burayıkontrolet.
C:\Scriptsdizini altında bütün raporlar HTML dosyası olarak oluşturulacaktır. Ayrıca GPOBackups yedek dosyasını görüyoruz.
Nasıl çalıştırılır
Önkoşullar
Domain’e katılı bir Windows makinesi, PowerShell 5.1+ ve RSAT ActiveDirectory modülü yeterli. GPO modülü için ek olarak RSAT GroupPolicy (GPMC) gerekir. Active Directory‘ye okuma yetkisi olan bir domain hesabı çoğu rapor için yeterlidir; DC donanım/performans ve bazı güvenlik alanları için Domain Admin daha eksiksiz sonuç verir.
RSAT’ı kurmak için (Windows 10/11, yönetici PowerShell):
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Add-WindowsCapability -Online -Name Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0
İndirme
Git yüklüyse:
git clone https://github.com/bakicubuk/AD-Assessment.git
cd AD-Assessment
Git yoksa, GitHub’daki yeşil Code → Download ZIP ile indirin, ZIP’e sağ tıklayıp Properties → Unblock işaretini koyun (internetten inen dosyalar bloklu gelir), ardından Extract All ile açın.
Çalıştırma
Her modül tek satırla çalışır:
powershell -ExecutionPolicy Bypass -File .\scripts\AD-Overview.ps1
Tüm raporları tek bir klasöre toplamak isterseniz -OutputPath verin:
.\scripts\AD-Overview.ps1 -OutputPath C:\ADReports
.\scripts\AD-Credential.ps1 -OutputPath C:\ADReports
.\scripts\GPO-PolicyAnalyzer.ps1 -OutputPath C:\ADReports
Script biter bitmez rapor tarayıcıda açılır. Otomatik açılmasını istemezseniz -OpenReport:$false ekleyin.
Raporları regülasyon gözüyle okumak
İşin asıl değer yaratan kısmı burası. Bu araçlar bir sızma testi ya da resmi bir uyumluluk sertifikası değildir ama denetimlerde en çok zaman alan işi, yani kanıt (evidence) toplamayı otomatikleştirir.
Aşağıda tipik bulguları başlıca çerçevelerle eşleştirdim.
KVKK açısından
KVKK’nın 12. maddesi, veri sorumlusuna “kişisel verilere hukuka aykırı erişimi önlemek” için uygun teknik ve idari tedbirleri alma yükümlülüğü getirir. Active Directory, çoğu kurumda kimlik ve erişimin merkezi olduğundan bu tedbirlerin büyük kısmı doğrudan Active Directory‘de yaşar:
- Eski, pasif, hiç kullanılmamış hesaplar (Overview, Credential): Gereksiz erişimler saldırı yüzeyidir. Bunları tespit edip kaldırmak, “erişimi gerekenle sınırlama” ilkesinin somut kanıtıdır.
- Zayıf parola/lockout politikası (Credential): Kimlik doğrulama güvenliği en temel teknik tedbirlerden biridir.
- Trust güvenliği (TrustRelationships): Harici taraflarla kurulan güven ilişkilerinin güvence altına alınması, veri paylaşımının kontrolüne dair kanıttır.
ISO/IEC 27001:2022 açısından
Annex A kontrolleriyle eşleme (rehber niteliğinde):
| Rapor bulgusu | ISO 27001:2022 Annex A |
|---|---|
| Eski / pasif hesaplar, erişim yönetimi | A.5.16A.5.18 |
| Parola politikası, kimlik doğrulama bilgisi | A.5.17 |
| Ayrıcalıklı erişim, delegation, krbtgt | A.8.2A.8.5 |
| GPO sertleştirme ve çakışmalar | A.8.9 |
| DC envanteri, OS desteği, açık yönetimi | A.8.8A.8.6 |
| Replikasyon sağlığı, yedeklilik | A.8.14 |
CIS Controls v8 açısından
- Control 1-2 (Asset envanteri): DCInventory ve Topology, hangi DC’lerin var olduğunu ve ne durumda olduklarını belgeler.
- Control 4 (Secure Configuration): GPO-PolicyAnalyzer, yapılandırmanın baseline’dan saptığı yerleri gösterir.
- Control 5-6 (Account & Access Management): Credential ve Overview, hesap hijyeninin doğrudan kanıtı.
Önerdiğim denetim döngüsü
- Referans al. Tüm modülleri çalıştırıp raporları tarih damgasıyla arşivleyin — bu sizin “sıfır noktası”nız.
- Önceliklendirin. Önce yüksek riskli maddeler: SID filtering kapalı trust’lar, desteği biten DC işletim sistemleri, unconstrained delegation, eski krbtgt parolası.
- Düzeltin ve belgeleyin. Her düzeltme için sorumlu, tarih ve gerekçe kaydı tutun. Bu kayıt, denetçinin görmek istediği “iz”dir.
- Periyodik tekrarlayın. Aylık ya da çeyreklik yeniden çalıştırıp önceki raporla karşılaştırın; iyileşmeyi somut olarak, raporlarla kanıtlarsınız.
Bir güvenlik hatırlatması
Raporlar hassas bilgi içerir: hesap adları, DC isimleri, IP’ler, topoloji ve güvenlik zayıflıkları. Bunları herkese açık paylaşmayın; erişimi kısıtlı, tercihen şifreli bir konumda saklayın. Üretilen HTML/CSV dosyalarını ve GPO yedeklerini Git’e commit etmeyin — depodaki .gitignore bunları zaten hariç tutar.
Kapanış
Active Directory Audit Suite’i, “ortamımı gerçekten tanıyor muyum?” sorusuna dürüst bir cevap vermek için yazdım. Tek bir doğru araç yok; ama salt okunur, çevrimdışı ve okunabilir bir fotoğraf, hem günlük operasyonda hem de denetim döneminde işi ciddi biçimde kolaylaştırıyor.
Proje MIT lisansıyla açık: dilediğiniz gibi kullanın, değiştirin, kurumunuza uyarlayın. Geri bildirim ve katkılara açığım.
Başka bir yazımızda görüşmek dileğiyle…

