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.