Virtualization-Based Security (VBS)¶
Windows, compromise olmuş bir kernel'in en hassas kod ve data'ya ulaşamaması için OS'u trust level'larına ayırmak üzere hypervisor'ı kullanır.
Mechanism¶
Invariant
VBS tek bir mimari kaymaya dayanır: NT kernel artık makinedeki en yüksek
privilege değildir. Windows hypervisor'ı (Hyper-V) OS'un altında çalışır ve
execution'ı Virtual Trust Level'lara partition'lar. VTL0 (Normal World)
konvansiyonel NT kernel'i ve driver'ları barındırır; VTL1 (Secure World)
Secure Kernel'i ve isolated trustlet'leri barındırır. Hypervisor,
Second-Level Address Translation (SLAT / EPT / RVI) kullanarak VTL1'e VTL0'ın
tahrif edemeyeceği bir memory görünümü verir — VTL0 page table'ları
VTL1-owned physical page'lere erişimi basitçe ifade edemez.
VBS'nin saldırgan için aştığı güvenlik sınırı, "ring-0 her şeye sahiptir" varsayımıdır. VTL0'da arbitrary kernel read/write ile bile, bir saldırgan şunları yapamaz:
- VTL1 (Secure Kernel) onaylamadan bir page'i executable yapmak — bu, HVCI / Memory Integrity'nin temelidir; burada W^X daha yüksek bir privilege seviyesinden zorlanır, böylece kernel page'leri hiçbir zaman aynı anda writable ve executable olmaz.
- VTL1-protected sırları okumak (örn. Credential Guard'ın NTLM hash'leri / Kerberos ticket'ları isolated bir LSA trustlet'inde yaşar).
- VTL1-protected read-only kernel data'sını değiştirmek (Kernel Data Protection'ın substrat'ı).
DMA yeteneğine sahip cihazlar bir IOMMU/SMMU'nun arkasında oturmalıdır; böylece kötü amaçlı bir cihaz SLAT'i bypass edip VTL1 belleğine doğrudan yazamaz.
Walkthrough¶
Kavramsal olarak, trust model şöyle katmanlanır:
VTL1 (Secure World) VTL0 (Normal World)
┌──────────────────┐ ┌──────────────────┐
│ Secure Kernel │ │ NT kernel + drivers│
│ + trustlets │ │ (assumed breakable)│
│ (HVCI, CredGuard, │ │ │
│ KDP, HyperGuard) │ │ │
└─────────┬─────────┘ └─────────┬──────────┘
│ Windows Hypervisor (Ring -1) │
└────────── SLAT / IOMMU ───────────────┘
Yüksek seviyeli boot/enforcement akışı (kamuya açık Microsoft dokümantasyonundan):
- UEFI Secure Boot, measured, signed bir boot chain başlatır; hypervisor ve Secure Kernel trusted boot'un parçası olarak yüklenir.
- Hypervisor SLAT'i enable eder ve VTL1 physical page'lerini VTL0'a erişilemez olarak işaretler.
- Memory Integrity (HVCI) açıkken, bir kernel page'i executable işaretlemek için gelen herhangi bir VTL0 isteği Secure Kernel'e devredilir; Secure Kernel, executable bir mapping'e izin vermeden önce page'i code-integrity policy'sine karşı doğrular. Executable page'ler hiçbir zaman writable bırakılmaz.
Warning
VBS bir containment sınırıdır, bir vulnerability eliminatörü değil. Secure Kernel'deki bir bug, HVCI policy'sinden önce yüklenen signed-ama-vulnerable bir VTL0 driver'ı ya da zayıf firmware/SMM (aşağıdaki WSMT/SMM hardening'e bakın) garantiyi aşındırabilir.
Detection¶
- Konfigürasyon / posture telemetry'si:
Win32_DeviceGuard'ı sorgula (msinfo32→ "Virtualization-based security" → Running ve HVCI/Credential Guard'ı listeleyenSecurityServicesRunning). EDR'ler ve MDM baseline'ları, VBS/HVCI Running'dan Off'a geçtiğinde alert vermeli. - Registry izleme:
HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuardve...\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrityaltındaki Device Guard key'leriniEnabled'ın temizlenmesi için izle — unsigned bir driver yüklemenin yaygın bir habercisi. - Event log'ları: bloklanan/unsigned image load'ları için Hyper-V /
Kernel-Integrity (
Microsoft-Windows-CodeIntegrity) olayları; boot-configuration değişiklikleri (hypervisorlaunchtype'a yapılanbcdeditdüzenlemeleri). - Anomali: VBS'nin ani disable edilmesi, ardından bir reboot ve yeni bir third-party kernel driver, klasik bir "bring-your-own-vulnerable-driver" staging pattern'idir.
Mitigation¶
- VBS + Memory Integrity (HVCI)'yi enable et ve kilitle. Group Policy (Turn on Virtualization Based Security) ya da MDM üzerinden enforce et; UEFI lock'u tercih et ki setting OS'tan sessizce toggle edilemesin.
- Hardware baseline'ını karşıla: VT-x/AMD-V, SLAT (EPT/RVI), IOMMU (VT-d/AMD-Vi/SMMU), TPM 2.0, Secure Boot ve WSMT uyumlu SMM hardening'e sahip 64-bit CPU.
- Tamamlayıcı VTL1 servisleri ekle: Credential Guard, Kernel Data Protection, HyperGuard (Secure Kernel PatchGuard) ve bir vulnerable-driver blocklist'i.
- Driver'ları, deployment'tan önce Driver Verifier'ın Code Integrity check'leri ve HLK Hypervisor Code Integrity Readiness testi kullanarak Memory Integrity'ye karşı doğrula.