Bir sysadmin olarak kariyerim boyunca en çok baş ağrıtan saldırı vektörlerinden biri Pass-the-Hash ve Pass-the-Ticket saldırıları olmuştur. Özellikle kurumsal ortamlarda bir domain hesabının hash’i ele geçirildiğinde, saldırganın ağda yatay hareket etmesi inanılmaz kolaylaşıyor. Windows’un bu probleme getirdiği en güçlü çözümlerden biri Credential Guard. Bugün bu özelliği derinlemesine inceleyeceğiz ve production ortamında nasıl devreye alacağınızı adım adım göstereceğim.
Credential Guard Nedir ve Neden Önemlidir?
Credential Guard, Windows 10 ve Windows Server 2016 ile birlikte gelen, kimlik bilgilerini sanallaştırma tabanlı güvenlik (VBS – Virtualization Based Security) kullanarak koruyan bir mekanizmadır. Temel mantığı şu: NTLM hash’leri ve Kerberos biletleri gibi hassas kimlik bilgileri, normal işletim sistemi ortamından izole edilmiş bir Secure Enclave içinde saklanır.
Klasik senaryoda bir saldırgan Mimikatz gibi araçlarla lsass.exe process’ini dump’layarak bellekteki hash’lere ulaşabiliyordu. Credential Guard devredeyken bu işlem artık mümkün değil çünkü kimlik bilgileri, hypervisor koruması altındaki ayrı bir sanal alanda tutuluyor. Ring 0 seviyesinde çalışan bir kernel driver bile bu alana erişemiyor.
Mimari Olarak Nasıl Çalışır?
Normal Windows ortamında LSA (Local Security Authority) prosesi, kimlik bilgilerini kendi bellek alanında tutar. Credential Guard bu yapıyı şöyle değiştirir:
- LSAIso (LSA Isolated): Hypervisor koruması altında çalışan izole LSA prosesi
- VTL1 (Virtual Trust Level 1): Kimlik bilgilerinin yaşadığı güvenli sanal ortam
- VTL0: Normal işletim sisteminin çalıştığı katman
- Secure Kernel: VTL1’i yöneten ve VTL0’dan gelen erişim taleplerini filtreleyen bileşen
Bir uygulama kimlik doğrulaması yapması gerektiğinde, LSA prosesi kimlik bilgisini doğrudan kullanmak yerine LSAIso’ya istek gönderir. LSAIso işlemi gerçekleştirir ve sonucu geri döndürür, ama hash veya bilet asla VTL0’a çıkmaz.
Ön Gereksinimler
Credential Guard devreye almadan önce donanım ve yazılım gereksinimlerini kontrol etmek şart. Yoksa “neden çalışmıyor” diye saatler harcarsınız.
Donanım gereksinimleri:
- 64-bit CPU (Intel VT-x veya AMD-V desteğiyle)
- UEFI firmware (Secure Boot desteğiyle)
- TPM 1.2 veya 2.0 (2.0 önerilir)
- IOMMU (Intel VT-d veya AMD-Vi)
Yazılım gereksinimleri:
- Windows 10 Enterprise/Education veya Windows Server 2016/2019/2022
- Hyper-V özelliğinin etkin olması
- Windows Enterprise lisansı (Home ve Pro sürümlerinde yok)
Sistemin uyumluluğunu kontrol etmek için şu PowerShell komutunu çalıştırın:
# Sistem uyumluluğunu kontrol et
Get-ComputerInfo | Select-Object -Property `
HyperVisorPresent, `
DeviceGuardSmartStatus, `
DeviceGuardRequiredSecurityProperties, `
DeviceGuardAvailableSecurityProperties, `
DeviceGuardSecurityServicesConfigured, `
DeviceGuardSecurityServicesRunning
Daha detaylı bir kontrol için Microsoft’un Device Guard ve Credential Guard Hardware Readiness Tool’unu kullanabilirsiniz:
# Hardware Readiness Tool ile kontrol
# Aracı indirdikten sonra
DG_Readiness_Tool.ps1 -Ready
# Credential Guard için özellikle
DG_Readiness_Tool.ps1 -Ready -CG
Credential Guard’ı Etkinleştirme Yöntemleri
Üç farklı yöntemle Credential Guard etkinleştirilebilir. Ben production ortamında her zaman Group Policy yöntemini tercih ederim çünkü merkezi yönetim çok daha sağlıklı.
Yöntem 1: Group Policy ile Etkinleştirme
Bu yöntem domain ortamlarında en pratik seçenek. GPO’yu şu path üzerinden yapılandırın:
Computer Configuration > Administrative Templates > System > Device Guard > Turn On Virtualization Based Security
Policy ayarları:
- Select Platform Security Level: Secure Boot and DMA Protection
- Virtualization Based Protection of Code Integrity: Enabled with UEFI lock
- Credential Guard Configuration: Enabled with UEFI lock
UEFI lock seçeneği kritik. Bu seçenek aktifken, Credential Guard’ı devre dışı bırakmak için fiziksel olarak UEFI’ye girip ayarları değiştirmek gerekiyor. Yani uzaktan kapatmak mümkün değil. Production’da mutlaka bunu seçin.
Yöntem 2: Registry ile Etkinleştirme
GPO olmayan ortamlar veya test senaryoları için registry düzenlemesi yapılabilir:
# Registry üzerinden Credential Guard etkinleştirme
# VBS'yi etkinleştir
reg add "HKLMSYSTEMCurrentControlSetControlDeviceGuard" `
/v EnableVirtualizationBasedSecurity `
/t REG_DWORD /d 1 /f
# Secure Boot ve DMA Protection
reg add "HKLMSYSTEMCurrentControlSetControlDeviceGuard" `
/v RequirePlatformSecurityFeatures `
/t REG_DWORD /d 3 /f
# Credential Guard'ı etkinleştir (1 = enabled, 2 = enabled with UEFI lock)
reg add "HKLMSYSTEMCurrentControlSetControlLsa" `
/v LsaCfgFlags `
/t REG_DWORD /d 1 /f
Yöntem 3: PowerShell ile Toplu Dağıtım
Birden fazla sunucuya aynı anda uygulamak için şu script’i kullanıyorum:
# Birden fazla sunucuya Credential Guard dağıtımı
$servers = @("SRVDC01", "SRVDC02", "SRVAPP01", "SRVAPP02")
foreach ($server in $servers) {
Invoke-Command -ComputerName $server -ScriptBlock {
# VBS kontrolü
$vbs = Get-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlDeviceGuard" `
-Name "EnableVirtualizationBasedSecurity" -ErrorAction SilentlyContinue
if ($vbs.EnableVirtualizationBasedSecurity -ne 1) {
# VBS etkinleştir
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlDeviceGuard" `
-Name "EnableVirtualizationBasedSecurity" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlDeviceGuard" `
-Name "RequirePlatformSecurityFeatures" -Value 3 -Type DWord
# Credential Guard etkinleştir
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlLsa" `
-Name "LsaCfgFlags" -Value 1 -Type DWord
Write-Host "$env:COMPUTERNAME: Credential Guard etkinlestirildi, yeniden baslatma gerekiyor" -ForegroundColor Yellow
} else {
Write-Host "$env:COMPUTERNAME: VBS zaten aktif" -ForegroundColor Green
}
}
}
Durumu Doğrulama ve İzleme
Değişikliği uyguladıktan ve sistemi yeniden başlattıktan sonra Credential Guard’ın gerçekten çalışıp çalışmadığını doğrulamak gerekiyor. “Sanırım çalışıyordur” production’da geçerli bir yaklaşım değil.
# Credential Guard durumunu detaylı kontrol et
$cgStatus = Get-CimInstance -ClassName Win32_DeviceGuard `
-Namespace rootMicrosoftWindowsDeviceGuard
# Sonuçları yorumlama
$securityServices = @{
1 = "Credential Guard"
2 = "Hypervisor Protected Code Integrity"
3 = "System Guard Secure Launch"
4 = "SMM Firmware Measurement"
}
Write-Host "=== Credential Guard Durum Raporu ===" -ForegroundColor Cyan
Write-Host "VBS Durumu: $($cgStatus.VirtualizationBasedSecurityStatus)"
Write-Host "Yapilandirilan Servisler:"
foreach ($service in $cgStatus.SecurityServicesConfigured) {
Write-Host " - $($securityServices[$service])" -ForegroundColor Yellow
}
Write-Host "Calisan Servisler:"
foreach ($service in $cgStatus.SecurityServicesRunning) {
Write-Host " - $($securityServices[$service])" -ForegroundColor Green
}
Çıktıda SecurityServicesRunning altında Credential Guard görüyorsanız, sistem doğru çalışıyor demektir. SecurityServicesConfigured‘da var ama SecurityServicesRunning‘de yoksa bir sorun var demek.
Event log’ları da izleyin:
# Credential Guard ile ilgili eventleri filtrele
Get-WinEvent -FilterHashtable @{
LogName = 'System'
ProviderName = 'Microsoft-Windows-Kernel-General'
Id = @(1, 2, 3)
} -MaxEvents 50 | Format-List TimeCreated, Message
# LSAIso prosesinin çalıştığını doğrula
Get-Process -Name "LsaIso" -ErrorAction SilentlyContinue
if ($?) {
Write-Host "LsaIso prosesi calisiyor - Credential Guard aktif!" -ForegroundColor Green
} else {
Write-Host "LsaIso prosesi bulunamadi!" -ForegroundColor Red
}
Gerçek Dünya Senaryoları ve Sorun Giderme
Senaryo 1: Mevcut Mimikatz Saldırısına Karşı Test
Credential Guard öncesi ve sonrasını karşılaştırmak için test ortamında şunu deneyebilirsiniz. Credential Guard aktifken Mimikatz’ın sekurlsa::logonpasswords komutu artık şifrelenmiş veya boş değerler döndürür, gerçek credential’lar görünmez.
Credential Guard öncesi Mimikatz çıktısı:
msv :
[00000003] Primary
* Username : AdminUser
* Domain : CONTOSO
* NTLM : aad3b435b51404eeaad3b435b51404ee (gerçek hash burada görünürdü)
Credential Guard sonrası:
msv :
[00000003] Primary
* Username : AdminUser
* Domain : CONTOSO
* NTLM : (null)
* SHA1 : (null)
Senaryo 2: Eski Uygulamalarla Uyumluluk Sorunu
Bu gerçekten can sıkıcı bir durum ve muhtemelen en çok karşılaşacağınız problem. Bazı eski uygulamalar ve protokoller Credential Guard ile uyumlu değil:
Uyumsuz protokoller ve durumlar:
- NTLMv1 tabanlı kimlik doğrulama tamamen bloke edilir
- Kerberos DES ve RC4 şifreleme desteği kaldırılır
- WDigest kimlik doğrulaması çalışmaz
- CredSSP ile bazı eski RDP senaryoları etkilenebilir
- Wi-Fi ve VPN çözümleri MS-CHAPv2 kullanıyorsa sorun yaşanabilir
Uyumluluk sorunlarını tespit etmek için:
# Uyumsuz uygulama ve servis taraması
# NTLMv1 kullanan uygulamaları bul
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4624
} -MaxEvents 1000 | Where-Object {
$_.Message -like "*NTLM V1*"
} | Select-Object TimeCreated, Message | Format-List
# WDigest'in devre dışı olduğunu doğrula
$wdigest = Get-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersWDigest" `
-Name "UseLogonCredential" -ErrorAction SilentlyContinue
if ($wdigest.UseLogonCredential -eq 1) {
Write-Warning "WDigest etkin! Bu Credential Guard ile catisiyor!"
# Devre disi birak
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlSecurityProvidersWDigest" `
-Name "UseLogonCredential" -Value 0
}
Senaryo 3: Sanallaştırma Ortamlarında Deployment
VMware vSphere veya Hyper-V üzerinde çalışan VM’lere Credential Guard uygulamak özel dikkat ister. Özellikle VMware’de Nested Virtualization aktif olmalı:
VMware için VM Ayarları:
- vbs.enabled: TRUE olmalı
- vhv.enable: TRUE (Nested HV)
- vpmc.enable: TRUE
- VM hardware version 14 veya üzeri gerekiyor
# Hyper-V VM'inde Credential Guard için gerekli ayarlar
# Bu komutu Hyper-V host üzerinde çalıştırın
$vmName = "SRVDC01"
# Nested virtualization etkinleştir
Set-VMProcessor -VMName $vmName -ExposeVirtualizationExtensions $true
# Güvenli önyükleme ve TPM ekle
Set-VMFirmware -VMName $vmName -EnableSecureBoot On
Enable-VMTPM -VMName $vmName
# VM'in kapalı olduğundan emin olun
# Stop-VM -VMName $vmName -Force
Write-Host "VM Credential Guard için hazirlanıyor: $vmName" -ForegroundColor Green
Credential Guard’ı Devre Dışı Bırakma
Bazen (özellikle UEFI lock olmadan etkinleştirdiyseniz) geri almanız gerekebilir. Test ortamında veya uyumluluk sorunları yaşadığınızda kullanırsınız.
# Credential Guard'ı devre disi birakma
# UEFI lock olmadan etkinlestirildiyse
# Registry temizleme
reg add "HKLMSYSTEMCurrentControlSetControlLsa" `
/v LsaCfgFlags /t REG_DWORD /d 0 /f
reg add "HKLMSYSTEMCurrentControlSetControlDeviceGuard" `
/v EnableVirtualizationBasedSecurity /t REG_DWORD /d 0 /f
# VBS driver'larini devre disi birak
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO,DISABLE-VBS
bcdedit /set vsmlaunchtype off
Write-Host "Sistem yeniden baslatildiginda Credential Guard devre disi olacak" -ForegroundColor Yellow
UEFI lock ile etkinleştirdiyseniz bu yöntem işe yaramaz. UEFI/BIOS’a girip Secure Boot ve VBS ayarlarını manuel değiştirmeniz gerekir. Bu kasıtlı bir güvenlik özelliği.
Monitoring ve Compliance Raporlama
Production ortamında sürekli izleme şart. Özellikle audit için Credential Guard durumunu düzenli raporlamak gerekebilir.
# Tüm domain bilgisayarlarında Credential Guard durum raporu
# Domain admin hakları gerekiyor
$computers = Get-ADComputer -Filter {OperatingSystem -like "*Windows Server*"} `
-Properties OperatingSystem | Select-Object -ExpandProperty Name
$report = @()
foreach ($computer in $computers) {
try {
$result = Invoke-Command -ComputerName $computer -ScriptBlock {
$cg = Get-CimInstance -ClassName Win32_DeviceGuard `
-Namespace rootMicrosoftWindowsDeviceGuard -ErrorAction Stop
[PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
VBSStatus = $cg.VirtualizationBasedSecurityStatus
CGConfigured = (1 -in $cg.SecurityServicesConfigured)
CGRunning = (1 -in $cg.SecurityServicesRunning)
OSVersion = (Get-CimInstance Win32_OperatingSystem).Caption
}
} -ErrorAction Stop
$report += $result
} catch {
$report += [PSCustomObject]@{
ComputerName = $computer
VBSStatus = "ERISIM HATASI"
CGConfigured = $false
CGRunning = $false
OSVersion = "Bilinmiyor"
}
}
}
# Raporu ekrana ve CSV'ye yaz
$report | Format-Table -AutoSize
$report | Export-Csv -Path "C:ReportsCredentialGuard_Status_$(Get-Date -Format 'yyyyMMdd').csv" `
-Encoding UTF8 -NoTypeInformation
Write-Host "Rapor olusturuldu. Toplam sunucu: $($report.Count)" -ForegroundColor Cyan
Write-Host "CG Aktif: $($report | Where-Object CGRunning -eq $true | Measure-Object | Select-Object -ExpandProperty Count)" -ForegroundColor Green
Write-Host "CG Pasif: $($report | Where-Object CGRunning -eq $false | Measure-Object | Select-Object -ExpandProperty Count)" -ForegroundColor Red
Ek Güvenlik Katmanları
Credential Guard tek başına yeterli değil. Onu tamamlayan diğer güvenlik kontrollerini de uygulamalısınız.
Protected Users Security Group: Kritik hesapları (Domain Admin, Enterprise Admin vb.) bu gruba ekleyin. Bu grup üyeleri için:
- NTLM kimlik doğrulaması tamamen devre dışı
- Kerberos DES ve RC4 şifreleme yasak
- Credential delegation engellendi
- Kerberos biletleri 4 saat sonra expire
# Kritik hesapları Protected Users grubuna ekle
$adminAccounts = @("DomainAdmin", "EnterpriseAdmin", "SchemaAdmin")
foreach ($account in $adminAccounts) {
Add-ADGroupMember -Identity "Protected Users" -Members $account
Write-Host "$account Protected Users grubuna eklendi" -ForegroundColor Green
}
# Protected Users grubunun üyelerini listele
Get-ADGroupMember -Identity "Protected Users" |
Select-Object Name, SamAccountName, ObjectClass |
Format-Table -AutoSize
Remote Credential Guard: RDP bağlantılarında hedef sunucuya credential göndermek yerine, Kerberos biletini lokal tutarak bağlantı kurulmasını sağlar:
# Remote Credential Guard ile RDP bağlantısı
# Hedef sunucuda registry ayarı gerekiyor
reg add "HKLMSystemCurrentControlSetControlLsa" `
/v DisableRestrictedAdmin /t REG_DWORD /d 0 /f
# Remote Credential Guard ile bağlan
mstsc.exe /remoteGuard /v:HEDEF_SUNUCU
Sonuç
Credential Guard, modern Windows güvenlik altyapısının en kritik bileşenlerinden biri. Pass-the-Hash ve Pass-the-Ticket saldırılarına karşı gerçek bir bariyer oluşturuyor ve doğru uygulandığında saldırganların lateral movement yapmasını ciddi ölçüde zorlaştırıyor.
Deployment sürecinde dikkat etmeniz gereken noktalara bakacak olursak: Önce test ortamında deneyin, eski uygulamaların uyumluluğunu mutlaka kontrol edin, UEFI lock ile etkinleştirmeyi tercih edin ve düzenli durum raporlamasını monitoring altyapınıza dahil edin. Sanal ortamlarda nested virtualization ayarlarını gözden geçirmeyi de atlamamak gerekiyor.
Credential Guard tek başına sihirli bir çözüm değil. Protected Users grubu, LAPS, privileged access workstation konsepti ve düzgün yapılandırılmış audit policy ile birlikte kullanıldığında gerçek anlamda katmanlı bir savunma mimarisi oluşturuyorsunuz. Güvenlik her zaman zincirleme; en zayıf halka neredeyse saldırı oraya yöneliyor. Credential Guard’ı devreye alırken bu bütünsel bakış açısını koruyun.