Domain Admins grubuna yetkisiz veya fark edilmeyen bir üye eklenmesi, kurumsal güvenlik açısından en kritik risklerden biridir. Bu değişiklikleri manuel kontrol yerine otomatik izlemek, saldırı yüzeyini önemli ölçüde daraltır.
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ırıyorum:
$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 (örn. 15 dakikada bir), gerçek zamanlı bildirim için Security Event Log’daki Event ID 4728 (bir kullanıcı güvenlik grubuna eklendi) olayını izlemek daha hızlı sonuç verir:
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
Sahadan Bir Not: PAM ile Tamamlayın
Bu tür izleme scriptleri değerli bir tespit katmanıdır, ancak asıl güçlü savunma PAM (Ayrıcalıklı Erişim Yönetimi) ile kalıcı yönetici yetkilerini tamamen ortadan kaldırmaktan geçer. İzleme scriptleri, PAM gibi önleyici kontrollerin yanında ikinci bir güvenlik katmanı olarak düşünülmeli.
Sonuç
Kritik AD gruplarındaki değişiklikleri otomatik izlemek, düşük maliyetli ama yüksek etkili bir güvenlik pratiğidir. Bir saldırganın veya yanlışlıkla yapılan bir değişikliğin fark edilme süresini saatlerden dakikalara indirir.