Kurumsal ortamlarda Windows Defender’ı “sadece açık bırakıyoruz” diye geçiştirmek, en yaygın ve en tehlikeli sysadmin hatalarından biri. Varsayılan ayarlarla çalışan bir Defender, ev kullanıcısı için yeterli olabilir ama yüzlerce endpoint’i yöneten bir kurumsal yapıda bu yaklaşım ciddi güvenlik açıkları doğurur. Bu yazıda Windows Defender’ı kurumsal düzeyde nasıl yapılandıracağımızı, Group Policy, PowerShell ve SCCM/Intune entegrasyonunu ele alarak detaylıca inceleyeceğiz.
Windows Defender Kurumsal Yapılandırmanın Temelleri
Windows Defender Antivirus, Windows 10/11 ve Windows Server 2016 ve sonrasında yerleşik olarak gelir. Microsoft Endpoint Protection veya üçüncü parti bir antivirüs kullanıyor olsanız bile, Defender’ın altyapısını anlamak kritik önem taşır.
Kurumsal yapılandırmanın üç temel ayağı vardır:
- Group Policy (GPO): Active Directory ortamlarında merkezi yönetim için
- PowerShell (ConfigDefender modülü): Otomasyon ve hızlı müdahale için
- Microsoft Intune / Endpoint Manager: Hibrit ve cloud-first ortamlar için
Hangisini seçeceğiniz, altyapınızın yapısına bağlı. Ama çoğu kurumsal ortamda GPO ile PowerShell kombinasyonu hala en pratik çözüm.
Group Policy ile Merkezi Defender Yapılandırması
GPO Şablonlarını Güncel Tutmak
İlk adım, Group Policy şablonlarınızın güncel olduğundan emin olmak. Windows Defender ADMX dosyaları, işletim sistemi sürümüyle birlikte değişiyor. Eski şablonlarla yeni özellikleri yapılandıramazsınız.
# ADMX dosyalarını PolicyDefinitions klasörüne kopyalama
# Kaynak: C:WindowsPolicyDefinitions
# Hedef: \SYSVOLdomainPoliciesPolicyDefinitions
Copy-Item -Path "C:WindowsPolicyDefinitionsWindowsDefender.admx" `
-Destination "\contoso.localSYSVOLcontoso.localPoliciesPolicyDefinitions" -Force
Copy-Item -Path "C:WindowsPolicyDefinitionstr-TRWindowsDefender.adml" `
-Destination "\contoso.localSYSVOLcontoso.localPoliciesPolicyDefinitionstr-TR" -Force
Temel GPO Ayarları
GPO yolunuz: Computer Configuration > Administrative Templates > Windows Components > Microsoft Defender Antivirus
Kurumsal ortamda mutlaka yapılandırmanız gereken politikalar:
- Turn off Microsoft Defender Antivirus: Kesinlikle “Disabled” olarak ayarlayın. Bu politikayı “Not Configured” bırakmak, bazı durumlarda Defender’ın kapanmasına izin verebilir.
- Turn on behavior monitoring: Enabled olarak ayarlayın.
- Scan all downloaded files and attachments: Enabled.
- Monitor file and program activity on your computer: Enabled.
Real-time protection ayarları için alt yol: Microsoft Defender Antivirus > Real-time Protection
- Turn on process scanning whenever real-time protection is enabled: Enabled
- Define the maximum size of downloaded files and attachments to be scanned: Kurumsal dosya boyutlarınıza göre ayarlayın, genellikle 20480 (20MB) makul bir başlangıç.
PowerShell ile Defender Yapılandırması
PowerShell, Defender yönetiminin en güçlü silahı. ConfigDefender modülü, tüm ayarlara programatik erişim sağlar.
Mevcut Yapılandırmayı Okumak
# Mevcut Defender yapılandırmasını görüntüle
Get-MpComputerStatus | Select-Object -Property `
AMServiceEnabled, `
AntispywareEnabled, `
AntivirusEnabled, `
BehaviorMonitorEnabled, `
IoavProtectionEnabled, `
NISEnabled, `
OnAccessProtectionEnabled, `
RealTimeProtectionEnabled, `
TamperProtectionSource
# Tercihler ve ayarlar
Get-MpPreference | Format-List
Bu komutun çıktısını bir baseline olarak kaydedin. Bir şeyler ters gittiğinde karşılaştırmak için altın değerinde.
Tarama Zamanlaması ve Performans Ayarları
Kurumsal ortamda en sık karşılaştığım şikayetlerden biri: “Defender tarama yaparken sunucu kasıyor.” Bu genellikle tarama ayarlarının production iş yüküne göre optimize edilmemiş olmasından kaynaklanır.
# Kurumsal ortam için optimize edilmiş Defender yapılandırması
Set-MpPreference -ScanScheduleDay 6 # 0=Her gün, 6=Cumartesi
Set-MpPreference -ScanScheduleTime "02:00:00" # Gece 02:00
Set-MpPreference -ScanScheduleQuickScanTime "06:00:00" # Hızlı tarama sabah 06:00
# CPU kullanım limiti (iş saatlerinde)
Set-MpPreference -ScanAvgCPULoadFactor 30 # Max %30 CPU
# Tarama önceliği düşür (background process olarak çalıştır)
Set-MpPreference -ScanOnlyIfIdle $true
# Tam tarama süresini sınırla (dakika cinsinden)
Set-MpPreference -ScanPurgeItemsAfterDelay 30
# Low priority modu - diğer process'leri etkilemesin
Set-MpPreference -EnableLowCpuPriority $true
Cloud-Delivered Protection ve MAPS
Microsoft’un cloud tabanlı koruma servisi olan MAPS (Microsoft Active Protection Service), kurumsal ortamlarda dikkatli yapılandırılmalıdır. Özellikle veri gizliliği politikalarınız varsa.
# Cloud koruma seviyesini ayarla
# 0=Devre dışı, 1=Temel, 2=Gelişmiş
Set-MpPreference -MAPSReporting 2
# Cloud block seviyesi
# 0=Varsayılan, 2=Yüksek, 4=Yüksek+, 6=Sıfır tolerans
Set-MpPreference -CloudBlockLevel 2
# Cloud extended timeout (saniye)
Set-MpPreference -CloudExtendedTimeout 50
# Sample submission (örnek gönderimi)
# 0=Her zaman sor, 1=Otomatik gönder, 2=Hiç gönderme, 3=Güvenli örnekler gönder
Set-MpPreference -SubmitSamplesConsent 3
Önemli not: Sağlık, hukuk veya finans sektöründeyseniz SubmitSamplesConsent 2 (hiç gönderme) seçeneğini değerlendirin. Hassas veriler içeren dosyaların Microsoft sunucularına gönderilmesi KVKK ve sektörel regülasyonlar açısından sorun yaratabilir.
Exclusion (Dışlama) Yönetimi
Kurumsal ortamlarda en kritik ve en çok yanlış yapılan konu: exclusion yönetimi. Çok az dışlama performans sorunlarına, çok fazla dışlama güvenlik açıklarına yol açar.
Doğru Exclusion Stratejisi
# Uygulama bazlı exclusion ekleme (SQL Server örneği)
Add-MpPreference -ExclusionPath "C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATA"
Add-MpPreference -ExclusionPath "C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLLog"
Add-MpPreference -ExclusionPath "C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLBackup"
# Process bazlı exclusion (SQL Server)
Add-MpPreference -ExclusionProcess "sqlservr.exe"
Add-MpPreference -ExclusionProcess "sqlagent.exe"
Add-MpPreference -ExclusionProcess "sqlbrowser.exe"
# Extension bazlı exclusion (dikkatli kullanın!)
Add-MpPreference -ExclusionExtension ".mdf"
Add-MpPreference -ExclusionExtension ".ldf"
Add-MpPreference -ExclusionExtension ".ndf"
# Mevcut exclusion'ları listele
Get-MpPreference | Select-Object -Property ExclusionPath, ExclusionProcess, ExclusionExtension
Exclusion eklerken şu kuralları benimseyin:
- Asla C: veya D: gibi root dizinleri dışlamayın. Bunu isteyen uygulama satıcılarına hayır deyin.
- Temp ve download klasörlerini dışlamayın. Bu klasörler saldırıların ilk hedefidir.
- Extension bazlı dışlamalar yerine path + extension kombinasyonu tercih edin.
- Her exclusion için bir iş gerekçesi belgelendirmesi yapın.
Exclusion Audit Scripti
Kurumsal ortamda tüm sunucuların exclusion listelerini merkezi olarak denetlemek için:
# Tüm domain bilgisayarlarından exclusion bilgisi toplama
$computers = Get-ADComputer -Filter {OperatingSystem -like "*Server*"} | Select-Object -ExpandProperty Name
$results = foreach ($computer in $computers) {
try {
$prefs = Invoke-Command -ComputerName $computer -ScriptBlock {
Get-MpPreference | Select-Object ExclusionPath, ExclusionProcess, ExclusionExtension
} -ErrorAction Stop
[PSCustomObject]@{
ComputerName = $computer
ExclusionPaths = ($prefs.ExclusionPath -join "; ")
ExclusionProcesses = ($prefs.ExclusionProcess -join "; ")
ExclusionExtensions = ($prefs.ExclusionExtension -join "; ")
Status = "OK"
}
}
catch {
[PSCustomObject]@{
ComputerName = $computer
ExclusionPaths = "N/A"
ExclusionProcesses = "N/A"
ExclusionExtensions = "N/A"
Status = "Erişim Hatası: $($_.Exception.Message)"
}
}
}
$results | Export-Csv -Path "C:ReportsDefenderExclusions_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
Write-Host "Rapor oluşturuldu: $($results.Count) bilgisayar tarandı"
Tamper Protection ve Güvenlik Sertleştirme
Tamper Protection, son kullanıcıların veya kötücül yazılımların Defender ayarlarını değiştirmesini engeller. Kurumsal ortamda bu mutlaka açık olmalı.
# Tamper Protection durumunu kontrol et
Get-MpComputerStatus | Select-Object TamperProtectionSource, IsTamperProtected
# Tamper Protection'ı PowerShell ile etkinleştir (Intune bağlı değilse)
# Not: Intune yönetimli cihazlarda bu ayar Intune'dan yapılmalıdır
Set-MpPreference -DisableTamperProtection $false
Tamper Protection açıkken dikkat etmeniz gereken bir durum var: Bazı otomatik deployment ve patch yönetim araçları, Defender ayarlarını değiştirmeye çalışırken başarısız olabilir. Bu durumda işlemi Intune veya SCCM üzerinden yapmanız gerekir.
Attack Surface Reduction (ASR) Kuralları
ASR kuralları, modern kurumsal güvenliğin en güçlü katmanlarından biri. Pek çok sysadmin bu özelliği bilmiyor ya da çok az kullanıyor.
# ASR kurallarını etkinleştir (Audit modundan başlayın!)
# Kural modları: 0=Devre dışı, 1=Block, 2=Audit
# Office macro'larının child process oluşturmasını engelle
Add-MpPreference -AttackSurfaceReductionRules_Ids "D4F940AB-401B-4EFC-AADC-AD5F3C50688A" `
-AttackSurfaceReductionRules_Actions AuditMode
# Obfuscated script çalıştırmayı engelle
Add-MpPreference -AttackSurfaceReductionRules_Ids "5BEB7EFE-FD9A-4556-801D-275E5FFC04CC" `
-AttackSurfaceReductionRules_Actions AuditMode
# Email ve web üzerinden gelen executable içerikleri engelle
Add-MpPreference -AttackSurfaceReductionRules_Ids "BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550" `
-AttackSurfaceReductionRules_Actions AuditMode
# Credential stealing (LSASS) koruması
Add-MpPreference -AttackSurfaceReductionRules_Ids "9E6C4E1F-7D60-472F-BA1A-A39EF669E4B2" `
-AttackSurfaceReductionRules_Actions AuditMode
# Mevcut ASR kurallarını görüntüle
Get-MpPreference | Select-Object -Property AttackSurfaceReductionRules_Ids, AttackSurfaceReductionRules_Actions
Kritik tavsiye: ASR kurallarını direkt “Block” modunda devreye almayın. Önce 2-4 hafta “Audit” modunda çalıştırın, Windows Event Log’daki 1121 ve 1122 eventlarını inceleyin, false positive’leri belirleyin, sonra Block moduna geçin. Production ortamında aceleyle devreye alınan ASR kuralları ciddi iş kesintilerine yol açabilir.
Defender Güncellemelerini Yönetmek
İmza güncellemeleri, Defender’ın kalbi. Kurumsal ortamda bu güncellemeleri nasıl yönettiğiniz, korumanızın kalitesini doğrudan etkiler.
# Manuel imza güncelleme
Update-MpSignature
# Güncelleme kaynağını ayarla (fallback sırası)
# 0=MMPC (Microsoft Malware Protection Center)
# 1=Internal WSUS/SCCM
# 2=Windows Update
# 3=File Share
Set-MpPreference -SignatureUpdateFallbackOrder "InternalDefinitionUpdateServer", "MicrosoftUpdateServer", "MMPC"
# WSUS sunucusu belirt (internal update için)
Set-MpPreference -SignatureDefinitionUpdateFileSharesSources "\wsus-serverDefenderUpdates"
# Güncelleme sıklığı (saat cinsinden, 1-24 arası)
Set-MpPreference -SignatureUpdateInterval 4
# İmza yaşını kontrol et
$status = Get-MpComputerStatus
Write-Host "Son imza güncellemesi: $($status.AntivirusSignatureLastUpdated)"
Write-Host "İmza versiyonu: $($status.AntivirusSignatureVersion)"
$signatureAge = (Get-Date) - $status.AntivirusSignatureLastUpdated
if ($signatureAge.Hours -gt 24) {
Write-Warning "İmza güncellemesi 24 saatten eski! Acil güncelleme gerekiyor."
}
Tehdit Tespit ve Müdahale Otomasyonu
Kurumsal ortamda tehdit tespit edildiğinde otomatik müdahale kritik önem taşır. İşte basit ama etkili bir monitoring scripti:
# Defender tehdit izleme ve alert scripti
function Get-DefenderThreatReport {
param(
[string[]]$ComputerList,
[int]$DaysBack = 7,
[string]$SmtpServer = "mail.contoso.local",
[string]$AlertEmail = "[email protected]"
)
$threats = foreach ($computer in $ComputerList) {
try {
$detections = Invoke-Command -ComputerName $computer -ScriptBlock {
Get-MpThreatDetection | Where-Object {
$_.InitialDetectionTime -gt (Get-Date).AddDays(-$using:DaysBack)
} | Select-Object ThreatID, ActionSuccess, InitialDetectionTime,
RemediationTime, Resources
} -ErrorAction Stop
foreach ($detection in $detections) {
$threatInfo = Get-MpThreat -ThreatID $detection.ThreatID -ErrorAction SilentlyContinue
[PSCustomObject]@{
Computer = $computer
ThreatName = $threatInfo.ThreatName
Severity = $threatInfo.SeverityID
DetectionTime = $detection.InitialDetectionTime
ActionSuccess = $detection.ActionSuccess
Resources = ($detection.Resources -join ", ")
}
}
}
catch {
Write-Warning "$computer erişilemiyor: $($_.Exception.Message)"
}
}
# Kritik tehditler için email gönder
$criticalThreats = $threats | Where-Object { $_.Severity -ge 4 -or $_.ActionSuccess -eq $false }
if ($criticalThreats) {
$body = "Kritik Defender Tehditleri Tespit Edildi:`n`n"
$body += $criticalThreats | Format-Table -AutoSize | Out-String
Send-MailMessage -To $AlertEmail -From "[email protected]" `
-Subject "UYARI: Kritik Defender Tehdidi Tespit Edildi" `
-Body $body -SmtpServer $SmtpServer
}
return $threats
}
# Kullanım
$servers = Get-ADComputer -Filter {OperatingSystem -like "*Server*"} | Select-Object -ExpandProperty Name
$report = Get-DefenderThreatReport -ComputerList $servers -DaysBack 7
$report | Export-Csv "C:ReportsThreatReport_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
Windows Server Üzerinde Özel Yapılandırma Konuları
Windows Server ortamında Defender yapılandırması, workstation’lardan farklı düşünülmeli.
Hyper-V sunucuları: VM dosyalarının bulunduğu dizinleri dışlamak gerekebilir ama bunu dikkatli yapın. .vhd ve .vhdx uzantıları yerine, sadece belirli VM depolama path’leri için exclusion tanımlayın.
Domain Controller’lar: DC’lerde SYSVOL ve NTDS dizinleri için Microsoft’un resmi exclusion listesini uygulayın. Bu liste düzenli güncelleniyor, Microsoft Docs’tan takip edin.
Exchange Server: Exchange, Defender ile uyum sorunları yaşayabilen en karmaşık uygulamalardan biri. Microsoft’un Exchange için yayınladığı exclusion listesi oldukça kapsamlı. Exchange kurulumundan önce bu listeyi hazır edin.
Terminal Server / RDS: Çok kullanıcılı ortamlarda tarama sırasındaki CPU spike’larını minimize etmek için ScanOnlyIfIdle mutlaka aktif olsun.
Compliance ve Raporlama
Kurumsal ortamlarda güvenlik durumunu raporlamak, hem iç denetimler hem de regülasyona uyumluluk açısından zorunlu. Basit ama işlevsel bir compliance kontrol scripti:
# Defender Compliance Check Scripti
function Test-DefenderCompliance {
param([string]$ComputerName = $env:COMPUTERNAME)
$status = Get-MpComputerStatus
$prefs = Get-MpPreference
$signatureAge = (Get-Date) - $status.AntivirusSignatureLastUpdated
$checks = @{
"Defender Aktif" = $status.AntivirusEnabled
"Real-time Protection" = $status.RealTimeProtectionEnabled
"Behavior Monitoring" = $status.BehaviorMonitorEnabled
"Cloud Protection" = ($prefs.MAPSReporting -ge 1)
"Tamper Protection" = $status.IsTamperProtected
"Imza Guncelligi (24 saat)" = ($signatureAge.Hours -lt 24)
"Network Inspection" = $status.NISEnabled
}
$passed = 0
$failed = 0
foreach ($check in $checks.GetEnumerator()) {
if ($check.Value) {
Write-Host "[GECTI] $($check.Key)" -ForegroundColor Green
$passed++
} else {
Write-Host "[BASARISIZ] $($check.Key)" -ForegroundColor Red
$failed++
}
}
$score = [math]::Round(($passed / $checks.Count) * 100)
Write-Host "`nKompliyans Skoru: $score% ($passed/$($checks.Count) kontrol gecti)" -ForegroundColor $(if ($score -ge 80) {"Yellow"} else {"Red"})
return $score
}
Test-DefenderCompliance
Sonuç
Windows Defender’ı kurumsal ortamda doğru yapılandırmak, tek seferlik bir işlem değil. İmza güncellemeleri, yeni ASR kuralları, değişen exclusion ihtiyaçları ve sürekli gelişen tehdit ortamı, Defender yönetimini sürekli bir süreç haline getirir.
Başlangıç noktanız net olsun: Önce mevcut durumu baseline olarak kaydedin, sonra değişiklikler yapın. Her değişikliği test ortamında deneyin, audit modunu ihmal etmeyin ve exclusion listelerinizi yılda en az bir kez gözden geçirin.
En pratik tavsiyem şu: ASR kurallarını audit modunda en az bir ay çalıştırın ve o sürede üretilen logları analiz edin. Bu adımı atlayanların büyük çoğunluğu, block moduna geçince production kesintisi yaşıyor. Acele etmeyin, veriye dayalı karar verin.
Defender, doğru yapılandırıldığında enterprise grade bir güvenlik katmanı sunar. Üstelik sıfır lisans maliyetiyle. Bunu göz ardı etmek, masanızda duran güçlü bir aleti kullanmadan işinizi elinizle yapmaya benzer.