Windows Defender ATP ile Gelişmiş Tehdit Koruması

Kurumsal ağlarda tehdit yönetimi artık “firewall kur, antivirus çalıştır” kadar basit bir iş değil. Ransomware kampanyaları, fileless malware saldırıları ve supply chain tehditleri, geleneksel güvenlik araçlarının sınırlarını çoktan aştı. Microsoft’un bu tabloya cevabı olan Windows Defender ATP (Advanced Threat Protection), artık Microsoft Defender for Endpoint adıyla anılsa da sysadmin dünyasında hâlâ eski adıyla biliniyor. Bu yazıda ATP’yi sıfırdan kurumsal ortama nasıl entegre edersiniz, PowerShell ile nasıl yönetirsiniz ve gerçek dünya senaryolarında nasıl tepki verirsiniz, bunları adım adım ele alacağız.

Windows Defender ATP Nedir, Ne Değildir?

Önce bir yanlış anlamayı düzeltelim: Defender ATP, klasik Windows Defender antivirüsünün üzerine inşa edilmiş bir EDR (Endpoint Detection and Response) çözümüdür. Salt imza tabanlı çalışmaz. Davranışsal analiz, bulut tabanlı tehdit istihbaratı ve makine öğrenimi kombinasyonuyla çalışır.

Temel bileşenler şunlardır:

  • Endpoint Behavioral Sensors: Kernel seviyesinde çalışan sensörler, her işlem çağrısını, ağ bağlantısını ve dosya operasyonunu izler
  • Cloud Security Analytics: Microsoft’un küresel telemetri veritabanına karşı gerçek zamanlı analiz
  • Threat Intelligence: Microsoft MSTIC ve global partner ağından beslenen IOC veritabanı
  • Automated Investigation and Remediation (AIR): Tespit edilen tehditlere otomatik müdahale
  • Attack Surface Reduction (ASR): Saldırı yüzeyini kısıtlayan kural seti

ATP, Microsoft 365 Defender portalı üzerinden merkezi olarak yönetilir. Ama birçok kritik konfigürasyon PowerShell ve Group Policy üzerinden de yapılabilir, ki sysadmin açısından asıl güç buradan geliyor.

Lisans ve Ön Gereksinimler

ATP için minimum şunlar gerekir:

  • Windows 10/11 Enterprise, Windows Server 2012 R2 ve üzeri
  • Microsoft 365 E5, Microsoft Defender for Endpoint Plan 1 veya Plan 2 lisansı
  • İnternet erişimi (belirli Microsoft URL’lerine)
  • MDE hizmet URL’lerine izin veren güvenlik duvarı kuralları

Windows Server 2012 R2 ve 2016 için MMA (Microsoft Monitoring Agent) tabanlı eski entegrasyon yerine artık unified agent kullanılıyor. 2019 ve sonrası sunucularda built-in sensör mevcut.

Onboarding: Cihazları ATP’ye Dahil Etme

PowerShell ile Tek Cihaz Onboarding

Microsoft 365 Defender portalından indirilen onboarding paketini dağıtmanın en hızlı yolu PowerShell scriptidir.

# Onboarding paketini indirdikten sonra paketi çıkartın
Expand-Archive -Path "C:ATPWindowsDefenderATPOnboardingPackage.zip" -DestinationPath "C:ATPOnboarding"

# Onboarding scriptini çalıştırın
Set-Location "C:ATPOnboarding"
.WindowsDefenderATPLocalOnboardingScript.cmd

# Onboarding durumunu kontrol edin
Get-Service -Name "Sense" | Select-Object Name, Status, StartType

Sense servisi çalışıyorsa cihaz ATP’ye başarıyla bağlanmış demektir. Portalda cihazın görünmesi 5-10 dakika alabilir.

Group Policy ile Toplu Onboarding (Domain Ortamı)

Büyük ölçekli dağıtım için GPO en pratik yöntemdir.

# GPO ayarları için registry path
# HKLMSOFTWAREPoliciesMicrosoftWindows Advanced Threat Protection

# PowerShell ile GPO registry değerlerini doğrulayın
$registryPath = "HKLM:SOFTWAREPoliciesMicrosoftWindows Advanced Threat Protection"
$onboardingStatus = Get-ItemProperty -Path $registryPath -Name "OnboardingState" -ErrorAction SilentlyContinue

if ($onboardingStatus.OnboardingState -eq 1) {
    Write-Host "Cihaz onboard edilmis" -ForegroundColor Green
} else {
    Write-Host "Onboarding tamamlanmamis!" -ForegroundColor Red
}

GPO yapılandırması için:

  • Computer Configuration > Administrative Templates > Windows Components > Microsoft Defender Antivirus
  • Onboarding script’ini Computer Configuration > Windows Settings > Scripts > Startup altına ekleyin
  • WSUS üzerinden dağıtıyorsanız MDE agent paketini yazılım dağıtım politikasına dahil edin

Intune ile Cloud-Only Onboarding

Hibrit veya cloud-only ortamlarda Intune tercih edilir.

# Intune'dan onboarding durumunu PowerShell ile sorgulama
# Microsoft Graph API kullanımı
$tenantId = "your-tenant-id"
$clientId = "your-app-id"
$clientSecret = "your-secret"

$tokenUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$body = @{
    grant_type    = "client_credentials"
    client_id     = $clientId
    client_secret = $clientSecret
    scope         = "https://graph.microsoft.com/.default"
}

$tokenResponse = Invoke-RestMethod -Uri $tokenUrl -Method POST -Body $body
$accessToken = $tokenResponse.access_token

# Managed devices listesi
$headers = @{ Authorization = "Bearer $accessToken" }
$devices = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/deviceManagement/managedDevices" -Headers $headers
$devices.value | Select-Object deviceName, operatingSystem, complianceState | Format-Table

Attack Surface Reduction Kuralları

ASR kuralları ATP’nin en güçlü önleyici mekanizmalarından biridir. Ofis makrolarının shell başlatmasını, process injection girişimlerini ve credential dumping tekniklerini engellerler.

ASR Kurallarını PowerShell ile Yapılandırma

# Mevcut ASR kural durumlarını listele
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Actions

# Kritik ASR kurallarını etkinleştir
# Mod değerleri: 0=Disabled, 1=Block, 2=Audit, 6=Warn

# Office uygulamalarının child process başlatmasını engelle
Add-MpPreference -AttackSurfaceReductionRules_Ids "D4F940AB-401B-4EFC-AADC-AD5F3C50688A" `
    -AttackSurfaceReductionRules_Actions Enabled

# Credential stealing Windows Local Security Authority
Add-MpPreference -AttackSurfaceReductionRules_Ids "9E6C4E1F-7D60-472F-BA1A-A39EF669E4B0" `
    -AttackSurfaceReductionRules_Actions Enabled

# Obfuscated script execution engelleme
Add-MpPreference -AttackSurfaceReductionRules_Ids "5BEB7EFE-FD9A-4556-801D-275E5FFC04CC" `
    -AttackSurfaceReductionRules_Actions Enabled

# USB ve removable media'dan executable çalıştırmayı engelle
Add-MpPreference -AttackSurfaceReductionRules_Ids "B2B3F03D-6A65-4F7B-A9C7-1C7EF74A9BA4" `
    -AttackSurfaceReductionRules_Actions Enabled

Write-Host "ASR kuralları aktif edildi. Audit modunda başlamak için Actions değerini AuditMode yapın."

Önemli not: Production ortamında kuralları direkt Block moduna almak uygulama kırılmalarına yol açabilir. Önce AuditMode ile en az 2 hafta izleyin, sonra Block’a geçin.

ASR Audit Loglarını İnceleme

# ASR audit event'lerini görüntüle
$filter = @{
    LogName = 'Microsoft-Windows-Windows Defender/Operational'
    Id = @(1121, 1122, 1131, 1132)
}

$events = Get-WinEvent -FilterHashtable $filter -MaxEvents 100 -ErrorAction SilentlyContinue

foreach ($event in $events) {
    $xml = [xml]$event.ToXml()
    [PSCustomObject]@{
        TimeCreated  = $event.TimeCreated
        EventId      = $event.Id
        RuleId       = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "RuleId" } | Select-Object -ExpandProperty "#text"
        ProcessName  = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "ProcessName" } | Select-Object -ExpandProperty "#text"
        TargetFile   = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "FileName" } | Select-Object -ExpandProperty "#text"
    }
} | Format-Table -AutoSize

Gerçek Dünya Senaryosu: Ransomware Girişimini Yakalamak

Diyelim ki SOC ekibinizden bir alert geldi: “Muhasebe departmanındaki bir bilgisayarda şüpheli PowerShell aktivitesi var.” Bu tam da ATP’nin parlayacağı an.

Defender Portalı Üzerinden İnceleme Adımları

  1. Microsoft 365 Defender portalına girin
  2. Incidents & Alerts bölümünden ilgili alert’i açın
  3. Attack Story görünümünde kill chain’i inceleyin
  4. Device Timeline ile olayın tam kronolojisini görün

Paralelde PowerShell ile de araştırma yapabilirsiniz:

# Defender ATP API ile cihaz tehdit durumunu sorgula
# Önce token alın (yukarıdaki Graph API örneğine benzer şekilde)
# ATP için farklı endpoint kullanılır

$atpApiUrl = "https://api.securitycenter.microsoft.com"
$tenantId = "your-tenant-id"
$appId = "your-atp-app-id"
$appSecret = "your-atp-secret"

$oAuthUri = "https://login.microsoftonline.com/$tenantId/oauth2/token"
$authBody = @{
    resource      = "https://api.securitycenter.microsoft.com"
    client_id     = $appId
    client_secret = $appSecret
    grant_type    = "client_credentials"
}

$authResponse = Invoke-RestMethod -Method POST -Uri $oAuthUri -Body $authBody
$token = $authResponse.access_token

# Aktif alert'leri getir
$alertHeaders = @{
    'Content-Type' = 'application/json'
    'Authorization' = "Bearer $token"
}

$alerts = Invoke-RestMethod -Uri "$atpApiUrl/api/alerts?`$filter=status eq 'New'&`$top=20" `
    -Headers $alertHeaders -Method GET

$alerts.value | Select-Object id, title, severity, status, machineId, @{
    Name = "FirstEventTime"; Expression = { $_.firstEventTime }
} | Format-Table

Şüpheli Cihazı İzole Etme

Incident onaylandığında cihazı hemen ağdan izole etmeniz gerekir. ATP’nin Machine Isolation özelliği bunun için biçilmiş kaftan.

# Cihazı ağdan izole et (ATP API üzerinden)
$machineId = "etkilenen-cihazin-machine-id-degeri"
$isolationBody = @{
    Comment        = "Ransomware suphesi - Otomatik izolasyon - $(Get-Date)"
    IsolationType  = "Full"
} | ConvertTo-Json

$isolateUri = "$atpApiUrl/api/machines/$machineId/isolate"
$isolationResult = Invoke-RestMethod -Uri $isolateUri -Headers $alertHeaders `
    -Method POST -Body $isolationBody -ContentType "application/json"

Write-Host "Izolasyon durumu: $($isolationResult.status)" -ForegroundColor Yellow
Write-Host "Action ID: $($isolationResult.id)"

# İzolasyon sonrasında durumu kontrol et
Start-Sleep -Seconds 30
$actionStatus = Invoke-RestMethod -Uri "$atpApiUrl/api/machineactions/$($isolationResult.id)" `
    -Headers $alertHeaders -Method GET
Write-Host "Son durum: $($actionStatus.status)"

Network Protection ve Web İçerik Filtreleme

ATP’nin ağ koruması özelliği, kötü amaçlı domain ve IP’lere bağlantıları engeller. Bu özellik SmartScreen’den farklı olarak tüm süreçler için geçerlidir, sadece tarayıcı değil.

# Network Protection'ı etkinleştir
Set-MpPreference -EnableNetworkProtection Enabled

# Mevcut durumu kontrol et
$netProtStatus = Get-MpPreference | Select-Object EnableNetworkProtection
switch ($netProtStatus.EnableNetworkProtection) {
    0 { Write-Host "Network Protection: Disabled" -ForegroundColor Red }
    1 { Write-Host "Network Protection: Enabled (Block)" -ForegroundColor Green }
    2 { Write-Host "Network Protection: Audit Mode" -ForegroundColor Yellow }
}

# Network Protection olaylarını izle
$netEvents = Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Windows Defender/Operational'
    Id = @(1125, 1126, 1127, 1128)
} -MaxEvents 50 -ErrorAction SilentlyContinue

$netEvents | Select-Object TimeCreated, Id, Message | Format-List

Gelişmiş Tehdit Avcılığı: Kusto ile Advanced Hunting

Microsoft 365 Defender portalındaki Advanced Hunting özelliği, Kusto Query Language (KQL) kullanarak telemetri verisinde tehdit avcılığı yapmanıza olanak tanır. Bu özelliği API üzerinden de kullanabilirsiniz.

# Advanced Hunting API sorgusu
$huntingQuery = @"
DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName in~ ("powershell.exe", "cmd.exe", "wscript.exe", "cscript.exe")
| where ProcessCommandLine has_any ("encodedcommand", "bypass", "hidden", "downloadstring", "iex")
| project Timestamp, DeviceName, FileName, ProcessCommandLine, AccountName, InitiatingProcessFileName
| order by Timestamp desc
| take 100
"@

$huntingBody = @{
    Query = $huntingQuery
} | ConvertTo-Json

$huntingResult = Invoke-RestMethod -Uri "$atpApiUrl/api/advancedqueries/run" `
    -Headers $alertHeaders -Method POST -Body $huntingBody -ContentType "application/json"

Write-Host "Toplam $($huntingResult.Stats.total_rows) şüpheli proses eventi bulundu"
$huntingResult.Results | Format-Table -AutoSize

Bu sorgu özellikle living off the land (LOTL) saldırılarında sistem araçlarının kötüye kullanımını tespit etmek için oldukça değerlidir.

Otomatik Araştırma ve Müdahale (AIR) Konfigürasyonu

AIR, şüpheli aktiviteleri otomatik olarak araştırıp bazı durumlarda kendi başına temizlik yapabilen bir sistemdir. Konfigürasyonu doğru yapılmazsa ya çok gürültülü olur ya da gerçek tehditleri kaçırır.

AIR için dikkat edilmesi gereken ayarlar:

  • Automation level: Full automation üretim ortamı için riskli olabilir. Başlangıçta “Semi – require approval for all folders” ile başlayın
  • Remediation actions: Karantina, dosya silme ve proses durdurma yetkilerini kimin onaylayacağını netleştirin
  • Exclusions: Backup uygulamaları, monitoring araçları ve AV çakışmalarını önlemek için doğru exclusion’lar tanımlayın
# Mevcut exclusion listesini görüntüle
$exclusions = Get-MpPreference | Select-Object `
    ExclusionPath, ExclusionProcess, ExclusionExtension, ExclusionIpOrCidr

Write-Host "=== Dizin Exclusions ===" -ForegroundColor Cyan
$exclusions.ExclusionPath | ForEach-Object { Write-Host "  $_" }

Write-Host "=== Process Exclusions ===" -ForegroundColor Cyan
$exclusions.ExclusionProcess | ForEach-Object { Write-Host "  $_" }

# Backup aracı için exclusion ekle (örnek: Veeam)
Add-MpPreference -ExclusionProcess "VeeamAgent.exe"
Add-MpPreference -ExclusionPath "D:VeeamBackup"

# Exclusion'ın eklendiğini doğrula
$updatedExclusions = Get-MpPreference | Select-Object -ExpandProperty ExclusionProcess
if ($updatedExclusions -contains "VeeamAgent.exe") {
    Write-Host "VeeamAgent.exe exclusion'ı başarıyla eklendi" -ForegroundColor Green
}

Threat Vulnerability Management ile Güvenlik Açığı Yönetimi

ATP’nin TVM modülü, ortamınızdaki CVE’leri ve yanlış konfigürasyonları öncelik sırasıyla listeler.

TVM’nin öne çıkan özellikleri:

  • Exposure Score: Ortamınızın genel maruz kalma skoru (düşük tutmak hedef)
  • Security Score for Devices: Her cihaz için ayrı güvenlik skoru
  • Software vulnerabilities: Yüklü yazılımlardaki bilinen CVE’ler
  • Security recommendations: Önceliklendirilmiş düzeltme önerileri
  • Remediation tracking: Açıklara ne zaman, nasıl müdahale edildiğinin takibi

TVM verilerini API ile çekip kendi raporlama sisteminize entegre edebilirsiniz. Örneğin haftalık güvenlik raporu için:

# Kritik yazılım açıklarını listele
$vulnUri = "$atpApiUrl/api/vulnerabilities?`$filter=severity eq 'Critical'&`$top=50"
$vulns = Invoke-RestMethod -Uri $vulnUri -Headers $alertHeaders -Method GET

$report = $vulns.value | Select-Object @{
    Name = "CVE"; Expression = { $_.id }
}, @{
    Name = "CVSS"; Expression = { $_.cvssV3 }
}, @{
    Name = "PublicExploit"; Expression = { $_.publicExploit }
}, @{
    Name = "ExploitInKit"; Expression = { $_.exploitInKit }
}, @{
    Name = "EtkilenenCihaz"; Expression = { $_.exposedMachines }
} | Sort-Object CVSS -Descending

# HTML rapor oluştur
$reportHtml = $report | ConvertTo-Html -Title "Haftalik ATP Guvenlik Raporu" `
    -PreContent "<h2>Kritik Aciklar - $(Get-Date -Format 'dd.MM.yyyy')</h2>"
$reportHtml | Out-File "C:ReportsATP_Weekly_$(Get-Date -Format 'yyyyMMdd').html"
Write-Host "Rapor oluşturuldu: $($report.Count) kritik açık bulundu" -ForegroundColor Yellow

SIEM Entegrasyonu

ATP alertlerini Sentinel veya üçüncü taraf SIEM sistemlerine beslemek, SOC operasyonlarının merkezileşmesi için kritiktir.

Microsoft Sentinel kullanıyorsanız entegrasyon neredeyse tek tık. Diğer SIEM’ler için iki seçenek var:

  • Streaming API: Azure Event Hub üzerinden gerçek zamanlı olay akışı
  • Advanced Hunting API: Zamanlı sorgularla batch veri çekme

Syslog tabanlı SIEM entegrasyonu için Microsoft Defender for Endpoint Connector veya Azure Arc kullanılabilir. QRadar, Splunk ve ArcSight için Microsoft’un resmi connector’ları mevcut.

Yaygın Sorunlar ve Troubleshooting

Sahada sıkça karşılaşılan sorunlar şunlardır:

  • Sense servisi başlamıyor: Windows Update veya WSUS konfigürasyon sorunu olabilir. sc query sense ile durumu kontrol edin
  • Cihaz portalde görünmüyor: Onboarding tamamlandı ama internet bağlantısı ATP URL’lerine gidemiyor. Proxy bypass listesini kontrol edin
  • Çok fazla false positive: ASR kuralları veya Network Protection çok agresif ayarlanmış. Audit moduna alıp exclusion listesini düzenleyin
  • Yüksek CPU kullanımı: Tarama zamanlamasını ayarlayın, büyük dosya sunucularında exclusion’ları optimize edin
  • AIR otomatik temizlik iş dosyalarını sildi: Automation level’ı düşürün ve kritik dizinler için korumalı klasör politikası hazırlayın
# ATP servis durumu ve bağlantı testi
$services = @("WinDefend", "Sense", "MdCoreSvc", "MdNSE", "MdatpSvc")
foreach ($svc in $services) {
    $status = Get-Service -Name $svc -ErrorAction SilentlyContinue
    if ($status) {
        $color = if ($status.Status -eq "Running") { "Green" } else { "Red" }
        Write-Host "$($svc): $($status.Status)" -ForegroundColor $color
    } else {
        Write-Host "$($svc): Bulunamadi" -ForegroundColor DarkYellow
    }
}

# ATP connectivity test
& "C:Program FilesWindows Defender Advanced Threat ProtectionMsSense.exe" -testconnectivity

Sonuç

Windows Defender ATP, doğru konfigüre edildiğinde kurumsal bir ortamda gerçek anlamda derin görünürlük ve müdahale kapasitesi sunan ciddi bir güvenlik platformudur. Ama sadece “lisansı var, otomatik korur” zihniyetiyle bırakırsanız potansiyelinin küçük bir kısmını kullanmış olursunuz.

En kritik adımları şöyle özetleyebilirim: ASR kurallarını önce audit modunda test edin, production’a geçmeden önce exclusion listesini dikkatlice hazırlayın. Advanced Hunting sorgularını periyodik çalışacak şekilde SIEM’e entegre edin. TVM önerilerini sadece bir liste olarak görmeyip aylık patch süreçlerinize dahil edin. Machine Isolation ve remediation yetkilerini kimin kullanacağını önceden playbook olarak yazın, kriz anında karar vermeye çalışmayın.

ATP bir araç, sysadmin ise onu kullanan stratejist. Araç ne kadar iyi olursa olsun, arkasında anlayan biri yoksa sadece pahalı bir lisans olarak kalır. Ortamınızı tanıyın, temel davranışları bilin, anomalileri fark edebilecek durumda olun. Gerisi zaten ATP’nin işi.

Yorum yapın