Windows Credential Guard Kurulum ve Yapılandırma Rehberi

Kurumsal ortamlarda en büyük güvenlik kaygılarından biri kimlik bilgisi hırsızlığıdır. Pass-the-Hash, Pass-the-Ticket gibi saldırılar yıllardır Windows ortamlarının kâbusu olmaya devam ediyor. Microsoft bu soruna karşı Windows 10 ve Windows Server 2016 ile birlikte Credential Guard özelliğini hayata geçirdi. Bu yazıda Credential Guard’ı sıfırdan kurup yapılandıracağız, gerçek dünya senaryolarıyla ne zaman kullanmanız gerektiğini tartışacağız ve yaygın sorunları nasıl çözeceğinizi göstereceğiz.

Credential Guard Nedir ve Neden Önemlidir?

Klasik Windows mimarisinde LSASS (Local Security Authority Subsystem Service) süreci, kullanıcı kimlik bilgilerini bellekte tutar. Mimikatz gibi araçlar, yeterli yetkiye sahip bir saldırgan elinde bu bellekten NTLM hash’lerini, Kerberos biletlerini ve düz metin parolaları çekebilir. Bu noktada sistem yöneticisi olarak yapabileceğiniz çok şey yoktur; işletim sistemi bellekte saklanan veriyi koruyamaz.

Credential Guard bu sorunu Virtualization Based Security (VBS) kullanarak çözer. Kimlik bilgileri artık normal işletim sistemi çekirdeğinin erişemediği izole bir ortamda, Isolated LSA sürecinde saklanır. Hypervisor katmanında çalışan bu izole ortama, kernel seviyesinde çalışan bir zararlı yazılım bile erişemez.

Saldırı yüzeyini dramatik biçimde küçülten bu yaklaşımın bazı ön koşulları var:

  • 64-bit Windows 10 Enterprise/Education veya Windows Server 2016+
  • UEFI firmware (Secure Boot desteğiyle)
  • Hyper-V desteği (CPU seviyesinde sanallaştırma)
  • TPM 2.0 (önerilir, zorunlu değil)
  • Intel VT-x veya AMD-V desteği

Ortam Hazırlığı ve Ön Kontroller

Kuruluma geçmeden önce makinenizin Credential Guard’ı destekleyip desteklemediğini kontrol etmeniz gerekiyor. Microsoft bu iş için msinfo32 aracını öneriyor ama PowerShell ile daha hızlı ilerleyebilirsiniz.

# Sistem bilgilerini kontrol et
Get-ComputerInfo | Select-Object -Property `
    CsHyperVisorPresent, `
    CsManufacturer, `
    CsModel, `
    OsArchitecture, `
    WindowsProductName, `
    BiosSmBiosVersion

# VBS ve Credential Guard durumunu kontrol et
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace rootMicrosoftWindowsDeviceGuard

Bu komut çıktısında dikkat etmeniz gereken alanlar:

  • VirtualizationBasedSecurityStatus: 0 = Çalışmıyor, 1 = Etkin fakat çalışmıyor, 2 = Çalışıyor
  • SecurityServicesRunning: 1 değeri Credential Guard’ın aktif olduğunu gösterir
  • AvailableSecurityProperties: Desteklenen özellikler listesi
# UEFI Secure Boot durumunu kontrol et
Confirm-SecureBootUEFI

# Hyper-V özelliklerini kontrol et
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All |
    Select-Object FeatureName, State

Eğer Confirm-SecureBootUEFI komutu True döndürüyorsa Secure Boot etkin demektir. False dönüyorsa BIOS/UEFI ayarlarına girip Secure Boot’u aktive etmeniz gerekir.

Hyper-V ve VBS Özelliklerini Etkinleştirme

Credential Guard için Hyper-V Platform bileşenlerinin kurulu olması şart. Hyper-V rolünün tamamını kurmanıza gerek yok, yalnızca gerekli bileşenleri etkinleştirmek yeterli.

# Gerekli Windows özelliklerini etkinleştir
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor -All -NoRestart
Enable-WindowsOptionalFeature -Online -FeatureName IsolatedUserMode -NoRestart

# Windows Server için rol ekleme
Install-WindowsFeature -Name Hyper-V-Hypervisor

Eğer istemci makinelerde toplu kurulum yapıyorsanız DISM aracını tercih edebilirsiniz:

# DISM ile özellik etkinleştirme (CMD veya PowerShell'den)
dism /online /enable-feature /featurename:Microsoft-Hyper-V-Hypervisor /all /norestart
dism /online /enable-feature /featurename:IsolatedUserMode /norestart

Bu adımdan sonra yeniden başlatma yapmanız gerekiyor, ancak devamındaki adımları bitirdikten sonra tek seferde yeniden başlatmak daha verimli.

Registry ile Credential Guard Yapılandırması

Credential Guard’ı etkinleştirmenin birkaç yolu var: Registry, Group Policy veya UEFI kilidi. Registry yöntemi en hızlı test yöntemidir ancak Group Policy kadar merkezi yönetilemez.

# Device Guard ve Credential Guard Registry ayarları
$registryPath = "HKLM:SYSTEMCurrentControlSetControlDeviceGuard"

# Registry anahtarı yoksa oluştur
if (!(Test-Path $registryPath)) {
    New-Item -Path $registryPath -Force
}

# VBS'i etkinleştir
Set-ItemProperty -Path $registryPath -Name "EnableVirtualizationBasedSecurity" -Value 1 -Type DWord

# Secure Boot gereksinimini belirle (1 = Secure Boot, 3 = Secure Boot + DMA Protection)
Set-ItemProperty -Path $registryPath -Name "RequirePlatformSecurityFeatures" -Value 1 -Type DWord

# Credential Guard yapılandırması
$credGuardPath = "HKLM:SYSTEMCurrentControlSetControlLSA"
Set-ItemProperty -Path $credGuardPath -Name "LsaCfgFlags" -Value 1 -Type DWord

LsaCfgFlags değerleri için:

  • 0: Credential Guard devre dışı
  • 1: UEFI kilidi olmadan etkin (Registry ile devre dışı bırakılabilir)
  • 2: UEFI kilidi ile etkin (devre dışı bırakmak için fiziksel erişim gerekir)

Üretim ortamlarında değer 2‘yi kullanmanızı öneririm. UEFI kilidi, bir saldırganın sadece Registry’yi değiştirerek Credential Guard’ı bypass etmesini engeller. Ancak sorun yaşandığında devre dışı bırakmak için fiziksel erişim gerekeceğini unutmayın.

Group Policy ile Merkezi Dağıtım

Kurumsal ortamda Registry’yi elle düzenlemek yerine Group Policy kullanmak çok daha mantıklı. Onlarca veya yüzlerce makineyi tek noktadan yönetebilirsiniz.

Group Policy Management Console’u açın ve yeni bir GPO oluşturun. Ayarlar şu yolda bulunuyor:

Computer Configuration > Administrative Templates > System > Device Guard

# GPO'yu PowerShell ile doğrulama (GPMC modülü gerekli)
Import-Module GroupPolicy

# Mevcut GPO ayarlarını kontrol et
Get-GPOReport -Name "Credential Guard Policy" -ReportType XML |
    Select-String -Pattern "CredentialGuard"

# GPO'yu OU'ya bağla
New-GPLink -Name "Credential Guard Policy" `
           -Target "OU=Workstations,DC=sirket,DC=local" `
           -LinkEnabled Yes

GPO’da yapılandırmanız gereken ayarlar:

  • Turn On Virtualization Based Security: Enabled olarak işaretle
  • Select Platform Security Level: Secure Boot and DMA Protection
  • Credential Guard Configuration: Enabled with UEFI lock
  • Secure Launch Configuration: Enabled (DRTM desteği olan makineler için)
# GPO uygulamasını istemci tarafında zorla
gpupdate /force

# GPO sonuçlarını görüntüle
gpresult /h C:Tempgpresult.html /f
Start-Process C:Tempgpresult.html

Otomatik Kurulum Scripti

Gerçek dünyada tek tek sunucu yapılandırmak yerine bir script yazıp bunu dağıtmak çok daha pratik. Aşağıdaki script önce sistemi kontrol eder, uygunsa yapılandırır ve sonuçları loglar.

# Credential Guard Deployment Script
# Versiyon: 1.0
# Kullanim: Admin yetkisiyle calistir

#Requires -RunAsAdministrator

param(
    [switch]$WhatIf,
    [string]$LogPath = "C:LogsCredentialGuard_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
)

function Write-Log {
    param([string]$Message, [string]$Level = "INFO")
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $logEntry = "[$timestamp] [$Level] $Message"
    Write-Host $logEntry
    Add-Content -Path $LogPath -Value $logEntry
}

function Test-Prerequisites {
    $results = @{}

    # 64-bit kontrol
    $results.Is64Bit = [Environment]::Is64BitOperatingSystem

    # Secure Boot kontrol
    try {
        $results.SecureBoot = Confirm-SecureBootUEFI
    } catch {
        $results.SecureBoot = $false
    }

    # Hyper-V kontrol
    $hyperV = Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor
    $results.HyperVAvailable = ($hyperV.State -eq "Enabled")

    # Windows sürüm kontrol
    $osVersion = (Get-CimInstance Win32_OperatingSystem).Version
    $results.OSVersion = $osVersion
    $results.OSSupported = ([Version]$osVersion -ge [Version]"10.0.14393")

    return $results
}

# Log dizinini oluştur
$logDir = Split-Path $LogPath -Parent
if (!(Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null }

Write-Log "Credential Guard kurulum scripti baslatildi"

$prereqs = Test-Prerequisites

Write-Log "64-bit OS: $($prereqs.Is64Bit)"
Write-Log "Secure Boot: $($prereqs.SecureBoot)"
Write-Log "Hyper-V: $($prereqs.HyperVAvailable)"
Write-Log "OS Destekleniyor: $($prereqs.OSSupported)"

if (!$prereqs.Is64Bit -or !$prereqs.SecureBoot -or !$prereqs.OSSupported) {
    Write-Log "On kosullar karsilanamiyor. Script sonlandiriliyor." "ERROR"
    exit 1
}

if (!$WhatIf) {
    # Hyper-V Hypervisor etkinlestir
    if (!$prereqs.HyperVAvailable) {
        Write-Log "Hyper-V Hypervisor etkinlestiriliyor..."
        Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor -All -NoRestart
    }

    # Registry ayarlari
    $devGuardPath = "HKLM:SYSTEMCurrentControlSetControlDeviceGuard"
    if (!(Test-Path $devGuardPath)) { New-Item -Path $devGuardPath -Force | Out-Null }

    Set-ItemProperty -Path $devGuardPath -Name "EnableVirtualizationBasedSecurity" -Value 1 -Type DWord
    Set-ItemProperty -Path $devGuardPath -Name "RequirePlatformSecurityFeatures" -Value 3 -Type DWord

    $lsaPath = "HKLM:SYSTEMCurrentControlSetControlLSA"
    Set-ItemProperty -Path $lsaPath -Name "LsaCfgFlags" -Value 1 -Type DWord

    Write-Log "Credential Guard yapilandirmasi tamamlandi. Yeniden baslatma gerekiyor."
} else {
    Write-Log "WhatIf modu: Degisiklik yapilmadi" "WARN"
}

Kurulum Doğrulama ve Test

Yeniden başlatmanın ardından Credential Guard’ın gerçekten çalışıp çalışmadığını doğrulamak kritik önem taşır.

# Credential Guard durumunu detayli kontrol et
$dg = Get-CimInstance -ClassName Win32_DeviceGuard `
      -Namespace rootMicrosoftWindowsDeviceGuard

Write-Host "VBS Durumu: $($dg.VirtualizationBasedSecurityStatus)"
Write-Host "Calisan Guvenlik Servisleri: $($dg.SecurityServicesRunning)"
Write-Host "Yapilandirilan Guvenlik Servisleri: $($dg.SecurityServicesConfigured)"

# SecurityServicesRunning degerini yorumla
switch ($dg.SecurityServicesRunning) {
    {$_ -contains 1} { Write-Host "Credential Guard: AKTIF" -ForegroundColor Green }
    {$_ -contains 2} { Write-Host "HVCI: AKTIF" -ForegroundColor Green }
    default { Write-Host "Guvenlik servisleri calismiyor!" -ForegroundColor Red }
}

Ayrıca Task Manager’da lsaiso.exe sürecinin çalıştığını görmek, Credential Guard’ın aktif olduğunun en net göstergesidir. Bu süreci görev yöneticisinde Process sekmesinde arayabilirsiniz.

# lsaiso.exe surec kontrolu
$lsaiso = Get-Process -Name "lsaiso" -ErrorAction SilentlyContinue
if ($lsaiso) {
    Write-Host "lsaiso.exe calisiyor - Credential Guard AKTIF" -ForegroundColor Green
} else {
    Write-Host "lsaiso.exe bulunamadi - Credential Guard PASIF" -ForegroundColor Red
}

# Event log kontrolu
Get-WinEvent -LogName "Microsoft-Windows-DeviceGuard/Operational" |
    Where-Object { $_.Id -in @(7000, 7001, 7002) } |
    Select-Object TimeCreated, Id, Message |
    Format-List

Gerçek Dünya Senaryosu: Finans Sektöründe Dağıtım

Bir finans şirketinde çalıştığınızı düşünelim. SOC ekibi, iç ağda Pass-the-Hash saldırısı girişimi tespit etti. Saldırgan domain admin yetkisiyle birkaç iş istasyonuna erişim sağlamış ama henüz kritik sunuculara ulaşamamış. Bu senaryoda acil eylem planı şöyle olur:

Önce hangi makinelerin Credential Guard için uygun olduğunu tespit etmek gerekir:

# Active Directory'deki tum bilgisayarlari kontrol et
$computers = Get-ADComputer -Filter {OperatingSystem -like "*Windows 10*"} `
             -Properties OperatingSystem, OperatingSystemVersion

foreach ($computer in $computers) {
    try {
        $session = New-CimSession -ComputerName $computer.Name -ErrorAction Stop
        $dg = Get-CimInstance -CimSession $session `
              -ClassName Win32_DeviceGuard `
              -Namespace rootMicrosoftWindowsDeviceGuard

        [PSCustomObject]@{
            ComputerName = $computer.Name
            OS = $computer.OperatingSystem
            VBSStatus = $dg.VirtualizationBasedSecurityStatus
            CGRunning = ($dg.SecurityServicesRunning -contains 1)
        }
        Remove-CimSession $session
    } catch {
        [PSCustomObject]@{
            ComputerName = $computer.Name
            OS = $computer.OperatingSystem
            VBSStatus = "Erisilemedi"
            CGRunning = $false
        }
    }
} | Export-Csv -Path "C:ReportsCredentialGuard_Status.csv" -NoTypeInformation

Bu rapor size hangi makinelerin öncelikli olarak ele alınması gerektiğini gösterir.

Yaygın Sorunlar ve Çözümleri

Sorun 1: Credential Guard etkin olmasına rağmen lsaiso.exe çalışmıyor

Bu genellikle Secure Boot’un doğru yapılandırılmamasından kaynaklanır. UEFI ayarlarına girerek Secure Boot’u “Windows UEFI mode” olarak ayarlayın.

Sorun 2: Mimikatz hala çalışıyor gibi görünüyor

Credential Guard yalnızca domain kimlik bilgilerini korur. Yerel hesap NTLM hash’leri hala erişilebilir olabilir. Bu normal bir davranıştır. Kerberos biletleri ve domain credential’ları artık korunuyor olmalı.

Sorun 3: Belirli uygulamalar Credential Guard ile çalışmıyor

Credential Guard, CredSSP, NTLMv1 ve bazı eski kimlik doğrulama protokollerini desteklemez. Etkilenen uygulamalar:

  • NTLMv1 kullanan eski sistemler
  • CredSSP kaldırılmadan RDP single sign-on
  • Digest kimlik doğrulaması
# Uyumsuzluk tespiti icin Event Log kontrolu
Get-WinEvent -LogName Application |
    Where-Object { $_.Message -like "*Credential Guard*" -and $_.Level -eq 2 } |
    Select-Object TimeCreated, ProviderName, Message |
    Format-List

Sorun 4: VM’lerde Credential Guard çalışmıyor

Nested virtualization olmadan VM içinde Credential Guard çalışmaz. Hyper-V üzerindeki VM’lerde nested virtualization şöyle etkinleştirilir:

# Hyper-V host uzerinde VM icin nested virtualization
Set-VMProcessor -VMName "HedefVM" -ExposeVirtualizationExtensions $true

# VM'de VBS'in calistigini dogrula
Set-VMSecurity -VMName "HedefVM" -VirtualizationBasedSecurityOptOut $false

Credential Guard’ı Devre Dışı Bırakma

Bazen troubleshooting için veya uyumsuz bir uygulama nedeniyle Credential Guard’ı kapatmanız gerekebilir.

# UEFI kilidi olmadan devre disi birakma (LsaCfgFlags=1 ile kurulmussa)
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlLSA" `
                 -Name "LsaCfgFlags" -Value 0 -Type DWord

Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlDeviceGuard" `
                 -Name "EnableVirtualizationBasedSecurity" -Value 0 -Type DWord

# Yeniden baslatmanin ardindan Isolated LSA verilerini temizle
# (Bu adim kimlik bilgilerini sifirlar)
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device path EFIMicrosoftBootSecConfig.efi

UEFI kilidi ile kurulmuşsa (LsaCfgFlags=2) devre dışı bırakmak için fiziksel olarak makineye erişip UEFI/BIOS’a girmeniz ve Credential Guard ayarını oradan değiştirmeniz gerekir. Bu yüzden üretim ortamında hangi modu seçtiğinizi iyi düşünün.

İzleme ve Sürekli Doğrulama

Credential Guard’ı kurduktan sonra düzenli olarak izlemek önemli. Aşağıdaki script’i haftalık görev olarak zamanlayabilirsiniz:

# Haftalik Credential Guard saglık kontrolu
$computers = Get-ADComputer -Filter * -SearchBase "OU=Workstations,DC=sirket,DC=local"
$report = foreach ($computer in $computers) {
    try {
        $session = New-CimSession -ComputerName $computer.Name `
                   -SessionOption (New-CimSessionOption -Protocol Dcom) `
                   -ErrorAction Stop

        $dg = Get-CimInstance -CimSession $session `
              -ClassName Win32_DeviceGuard `
              -Namespace rootMicrosoftWindowsDeviceGuard

        [PSCustomObject]@{
            Tarih = Get-Date -Format "yyyy-MM-dd"
            Bilgisayar = $computer.Name
            VBS_Aktif = ($dg.VirtualizationBasedSecurityStatus -eq 2)
            CG_Aktif = ($dg.SecurityServicesRunning -contains 1)
            Durum = if ($dg.SecurityServicesRunning -contains 1) {"OK"} else {"UYARI"}
        }
        Remove-CimSession $session
    } catch {
        [PSCustomObject]@{
            Tarih = Get-Date -Format "yyyy-MM-dd"
            Bilgisayar = $computer.Name
            VBS_Aktif = "Bilinmiyor"
            CG_Aktif = "Bilinmiyor"
            Durum = "ERISIM_HATASI"
        }
    }
}

# Sorunlu makineleri filtrele ve raporla
$sorunlular = $report | Where-Object { $_.Durum -ne "OK" }
if ($sorunlular) {
    $sorunlular | Export-Csv "C:ReportsCG_Uyari_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
    # Burada e-posta bildirimi eklenebilir
}

Sonuç

Credential Guard, doğru yapılandırıldığında kimlik bilgisi hırsızlığına karşı gerçekten etkili bir savunma katmanı oluşturuyor. Pass-the-Hash ve Pass-the-Ticket saldırılarını imkânsız hale getirmese de son derece zorlaştırıyor. Özellikle domain admin hesaplarının yoğun kullanıldığı kurumsal ortamlarda bu özellik olmadan çalışmak büyük bir risk.

Kurulum sürecinde dikkat etmeniz gereken birkaç kritik nokta var: UEFI kilidini üretim ortamında mutlaka kullanın ancak bir sorun yaşandığında ne yapacağınızı önceden planlayın. Uyumsuz uygulamaları önceden tespit edip alternatif çözümler üretin. Ve son olarak Credential Guard’ı tek başına yeterli bir güvenlik çözümü olarak görmeyin; Privileged Access Workstation, LAPS ve düzenli audit loglarıyla birlikte katmanlı bir güvenlik mimarisinin parçası olarak değerlendirin.

Dağıtımı aşamalı yapın. Önce pilot grup, sonra kritik departmanlar, son olarak tüm organizasyon. Bu yaklaşım olası sorunları erken tespit etmenizi ve production ortamını riske atmadan çözüm üretmenizi sağlar.

Bir yanıt yazın

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