Skip to content

Hypervisor-Protected Code Integrity (HVCI)

HVCI (Memory Integrity), code-integrity kararını VTL0 kernel'inin compromise olabileceğini varsayan, hypervisor-izole bir VTL1'e taşıyarak signed-only, W^X kernel kodunu uygulamak için VBS kullanır.

Mechanism

Security invariant

Kernel belleği asla aynı anda writable ve executable olmamalı ve kernel mode'da executable olan herhangi bir page, Code Integrity (signature) verification'ından geçmiş kod içermelidir. HVCI bu W^X-artı-signing invariant'ını VTL1'den uygular, böylece compromise olmuş bir VTL0 kernel'i attacker-controlled belleği executable olarak işaretleyemez.

HVCI olmadan, bir kernel-mode attacker bellek allocate edebilir, bir payload yazabilir, onu executable'a flip edebilir ve çalıştırabilir — unsigned driver'lar, code injection ve birçok post-exploitation primitive'i için klasik yol. HVCI o yeteneği ortadan kaldırır. VBS, VTL1'i (daha privileged bir "secure world") oluşturmak için Windows hypervisor'ını kullanır. Kernel için bir physical page'i executable yapma yetkisi, VTL0 değil VTL1 tarafından kontrol edilen Second-Level Address Translation (SLAT / EPT) tarafından yönetilir. VTL0 kernel'i bir page'in executable yapılmasını isteyebilir, ama yalnızca VTL1'in code-integrity mantığı — tampere edemeyeceği izolasyonda çalışan — onu verir ve yalnızca page'in içeriği Code Integrity policy'sini sağladıktan sonra. Sonuç: normal kernel asla writable+executable bir page tutamaz ve kernel mode'da yalnızca düzgün signed kod çalışır.

Bu, Device Guard'ın kernel-mode code integrity'sinin (KMCI) modern enkarnasyonudur. user-mode Code Integrity Guard'ı (code-integrity-guard.md) tamamlar ve windows-kernel-cfg.md ile doğal olarak eşleşir; HVCI onun kernel driver'ları için olan CFG bitmap'ini de modification'dan korur.

Walkthrough

How it operates

  • Boot'ta hypervisor başlar ve VTL1'i kurar; Secure Kernel ve code-integrity service'i onun içinde initialize olur.
  • Bir driver yüklendiğinde veya kernel code page'leri executable olarak map'lendiğinde, VTL0 SLAT/EPT permission'larını güncellemesi için VTL1'den istemek zorundadır.
  • VTL1, execute vermeden önce kodu CI policy'sine (geçerli signature / izin verilen catalog) karşı doğrular ve asla write+execute'u birlikte vermez.
  • Unsigned veya modifiye edilmiş kernel kodunu çalıştırma girişimleri başarısız olur; data-only page'ler non-executable kalır.

Bilinen bypass sınıfları (kavramsal, savunma bağlamı): yeni executable koda asla ihtiyaç duymayan data-only saldırılar (function pointer'ları, page table'ları veya güvenlikle ilgili veriyi corrupt etmek — kernel-data-protection.md ve SKPG'nin var olma nedeni budur); zaten-signed ama vulnerable bir driver'ın suistimali ("bring your own vulnerable driver" pattern'i, vulnerable-signed-firmware-access-drivers.md ve Microsoft vulnerable-driver blocklist'i ile mitigate edilir); Secure Kernel / hypervisor'ın kendisindeki açıklar; ve basitçe HVCI'nin etkin olmadığı host'larda çalışmak. HVCI, mevcut signed kodu reuse eden ROP/JOP'u durdurmaz — yeni unsigned kodu durdurur, dolayısıyla CFG ve shadow stack'lerle eşleştirilir.

Detection

  • HVCI'nin sadece configure edilmiş değil, gerçekten çalıştığını doğrula: Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard. SecurityServicesRunning'in 2 içermesi Memory Integrity'nin çalıştığı anlamına gelir; VirtualizationBasedSecurityStatus = 2 VBS'nin etkin ve çalışır olduğunu doğrular.
  • msinfo32.exe System Summary, en alttaki security özellikleri altında VBS'yi ve "Hypervisor enforced Code Integrity"yi listeler.
  • Windows Security > Device security > Core isolation, Memory Integrity'yi on/off gösterir; Windows 11 22H2+ kapalıyken bir warning yükseltir.
  • EDR/telemetry: HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity altındaki registry düzenlemelerine, hypervisor'ı devre dışı bırakan bcdedit değişikliklerine ve unsigned veya blocklist'li driver yükleme girişimlerine (ki HVCI bunları bloklar ve Code Integrity event-log girdileri üretirler) alert ver.

Mitigation

  • Memory Integrity'yi Windows Security, Intune (Virtualization Based Technology > Hypervisor Enforced Code Integrity), Group Policy (System > Device Guard > Turn on VBS) veya DeviceGuard registry key'leri üzerinden aç; temiz Windows 11 kurulumlarında ve Secured-core PC'lerde default olarak açıktır.
  • Remote/policy devre dışı bırakmayı önlemeniz gereken yerlerde Enabled with UEFI lock'ı tercih et; o zaman devre dışı bırakmanın UEFI access gerektirdiğini anla.
  • Driver ve hardware uyumluluğunu önce bir test ring'inde ön-validate et — uyumsuz driver'lar yüklenmeyebilir veya nadiren boot failure'a yol açabilir. MBEC (Intel) / GMET (AMD) yetenekli CPU'lar daha yavaş "Restricted User Mode" emülasyon yolundan kaçınır.
  • Tam kernel-defense stack'iyle eşleştir: hyperguard.md (SKPG), windows-kernel-cfg.md, kernel-data-protection.md, credential-guard.md ve vulnerable-driver blocklist'i; firmware'i ve Secure Kernel'i patch'li tut.

References