Follow

Active Directory Yetki Denetimi: Domain Admin ve Kritik Grup Değişikliklerini Anlık İzleyen PowerShell Scripti

Domain Admins gibi kritik AD gruplarındaki üyelik değişikliklerini PowerShell ile nasıl anlık izleyip uyarı ürettiğimi anlatıyorum.
PowerShell Active Directory Yetki Denetimi makalesi kapak görseli

Domain Admins grubuna kimin ne zaman eklendiğini şu an, bakmadan söyleyebilir misiniz? Çoğu ekip bu soruya net bir cevap veremiyor — çünkü grup üyeliği değişiklikleri genellikle sadece “bir şey ters gittiğinde” geriye dönük olarak inceleniyor. Oysa yetkisiz veya fark edilmeyen bir ekleme, kurumsal güvenlik açısından en kritik risklerden biri ve bunu manuel kontrol yerine otomatik izlemek saldırı yüzeyini ciddi şekilde daraltıyor.

Kritik Grupların Mevcut Üyelerini Alma

$kritikGruplar = @("Domain Admins", "Enterprise Admins", "Schema Admins", "Backup Operators")

foreach ($grup in $kritikGruplar) {
    Write-Host "`n=== $grup ===" -ForegroundColor Cyan
    Get-ADGroupMember -Identity $grup | Select-Object Name, SamAccountName
}

Değişiklik Tespiti: Anlık Snapshot Karşılaştırması

Bir değişikliğin “yeni mi eski mi” olduğunu anlamak için önceki durumu bir dosyada saklayıp her çalıştırmada karşılaştırmak işe yarıyor:

$grup = "Domain Admins"
$onceki = if (Test-Path "C:\Durum\domain_admins_onceki.json") {
    Get-Content "C:\Durum\domain_admins_onceki.json" | ConvertFrom-Json
} else { @() }

$guncel = Get-ADGroupMember -Identity $grup | Select-Object -ExpandProperty SamAccountName

$yeniEklenen = Compare-Object -ReferenceObject $onceki -DifferenceObject $guncel |
    Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject

if ($yeniEklenen) {
    $mesaj = "UYARI: $grup grubuna yeni üye(ler) eklendi: $($yeniEklenen -join ', ')"
    Send-MailMessage -From "[email protected]" -To "[email protected]" `
        -Subject "GÜVENLİK UYARISI: $grup Değişikliği" -Body $mesaj -SmtpServer "smtp.sirket.com" -Priority High
}

$guncel | ConvertTo-Json | Set-Content "C:\Durum\domain_admins_onceki.json"

Daha Gerçek Zamanlı Çözüm: Event Log Tabanlı İzleme

Snapshot karşılaştırması periyodik çalışırken (örneğin 15 dakikada bir), gerçek zamanlı bildirim isteyenler için Security Event Log’daki Event ID 4728 (bir kullanıcı güvenlik grubuna eklendi) olayını izlemek daha hızlı sonuç veriyor:

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4728} -MaxEvents 10 |
    Where-Object {$_.Message -match "Domain Admins"} |
    Select-Object TimeCreated, Message

Zamanlanmış Görev ile Sürekli İzleme

$tetikleyici = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 15) -RepetitionDuration ([TimeSpan]::MaxValue)
$eylem = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scriptler\YetkiDenetimi.ps1"
Register-ScheduledTask -TaskName "KritikGrupIzleme" -Trigger $tetikleyici -Action $eylem -RunLevel Highest

Bu Yeterli mi?

Hayır, tek başına değil. Bu tür izleme scriptleri değerli bir tespit katmanı ama asıl güçlü savunma PAM (Ayrıcalıklı Erişim Yönetimi) ile kalıcı yönetici yetkilerini baştan ortadan kaldırmaktan geçiyor. İzleme scriptlerini, PAM gibi önleyici kontrollerin yanında ikinci bir güvenlik katmanı olarak düşünmek gerekiyor — biri sorunu önlüyor, diğeri önlenemeyeni yakalıyor. İkisi birlikte, bir saldırganın veya yanlışlıkla yapılan bir değişikliğin fark edilme süresini saatlerden dakikalara indiriyor.

Comments
Join the Discussion and Share Your Opinion
Add a Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Newsletter
Join Design Community
Get the latest updates, creative tips, and exclusive resources straight to your inbox. Let’s explore the future of design and innovation together.