Skip to content

HyperGuard (Secure Kernel Patch Guard)

HyperGuard / SKPG, NT kernel ve Secure Kernel integrity'sini VTL1'den uygular; burada attacker-controlled VTL0 kernel kodu ona ulaşamaz veya onu devre dışı bırakamaz.

Mechanism

Security invariant

Kritik kernel structure'ları ve security policy runtime'da sessizce modifiye edilmemelidir. HyperGuard (Secure Kernel Patch Guard, SKPG), bu invariant'ı koruduğu şeyden daha yüksek bir trust boundary'den uygular, böylece tamamen compromise olmuş bir NT kernel bile guard'ı veya check'lerini tespit edilmeden tampere edemez.

Klasik PatchGuard (KPP, bkz. kpp.md) tamamen VTL0'daki NT kernel'in içinde çalışır. Polis ettiği kodla aynı privilege domain'ini paylaştığı için yeterince yetenekli bir kernel-mode attacker check'lerini konumlandırabilir, etkisiz hale getirebilir veya onlarla race edebilir. HyperGuard, integrity verification'ı Virtualization-Based Security (VBS) tarafından oluşturulan Secure Kernel ortamı olan VTL1'e taşıyarak o açığı kapatır. Hypervisor belleği Virtual Trust Level'lara böler; VTL1 VTL0'dan kesinlikle daha privileged'dır ve belleği VTL0'dan map'lenebilir veya yazılabilir değildir. Dolayısıyla normal kernel'de çalışan kod SKPG'nin state'ini okuyamaz, verification routine'lerini patch'leyemez veya sonuçlarını forge edemez.

SKPG, bir set "extent" izler — security-critical kabul ettiği tarif edilmiş bellek ve configuration region'ları: hypervisor ve Secure Kernel structure'ları, EPT/SLAT ve VMCS state'i, seçili NT kernel kodu ve read-only data, MSR'lar ve control register'lar ve VBS'nin dayandığı security policy. Tespit edilen bir mismatch'te bir bug check yükseltir (yaygın olarak bir CRITICAL_STRUCTURE_CORRUPTION / 0x109 sınıfı stop), PatchGuard'ın kullandığı aynı fail-closed yanıtı.

Walkthrough

Conceptual only

Aşağıdakiler public reverse-engineering yazılarından üst düzey bir tariftir. Hiçbir offset, structure layout'u veya bypass kodu reproduce edilmez.

  • Secure Kernel initialization sırasında SKPG, izleyeceği region'ları ("extent"leri) register eder ve beklenen state'lerinin snapshot'ını alır.
  • Verification, VTL1'den bir randomize edilmiş schedule üzerinde sürülür (düzensiz aralıklarla ateşlenen bir patch-guard timer object'i), böylece check'leri tahmin etmek ve atlamak zordur.
  • Verifier, scheduling'i ve reference state'in hepsi VTL1'de yaşadığı için bir VTL0 kernel rootkit'i bir check'in ne zaman çalışacağını gözlemleyemez ve karşılaştırmayı patch'leyemez.
  • Gözlemlenen ve beklenen state arasındaki bir sapma, kurtarılabilir bir hata yerine bir fail-closed bug check tetikler.

Bilinen bypass sınıfları (kavramsal): guard edilmiş bir extent'i modifiye etmeyi gerektirmeyen saldırılar (ör. SKPG'nin kapsamadığı data-only structure'ları suistimal etmek), VTL0'ın VTL1'i etkilemesine izin veren Secure Kernel'in kendi içindeki logic açıkları (özel Secure Kernel bug araştırmasının konusu) veya VBS/HVCI'nin basitçe etkin olmadığı, dolayısıyla SKPG'nin hiç initialize olmadığı ortamlar. HyperGuard maliyeti yükseltir; bir Secure Kernel zafiyetine karşı bir garanti değildir.

Detection

  • SKPG'ye güvenmeden önce VBS ve Secure Kernel'in gerçekten çalıştığını doğrula: Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard ve VirtualizationBasedSecurityStatus = 2'yi (etkin ve çalışıyor) kontrol et. msinfo32.exe System Summary de VBS durumunu raporlar.
  • SKPG enforcement'ı kernel bug check'leri olarak yüzeye çıkar (CRITICAL_STRUCTURE_CORRUPTION / 0x109 ailesi). Crash dump'larını merkezi olarak topla ve triyaj et; böyle stop'ların bir kümesi tampering girişimlerini veya driver uyumsuzluğunu gösterebilir.
  • EDR/host telemetry: VBS/HVCI'yi devre dışı bırakma girişimlerine (HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard altında registry write'ları), unsigned/beklenmeyen driver yüklemelerine ve hypervisor'ı kapatan boot configuration değişikliklerine (bcdedit hypervisorlaunchtype düzenlemeleri) alert ver.
  • VBS "enabled but not running" raporlayan bir host'u korunmasız olarak ele al ve Secure Kernel'in neden başlamadığını araştır.

Mitigation

  • VBS'yi hypervisor ve Secure Kernel ile etkinleştir; SKPG, ayrıca toggle edilen bir özellik değil o ortamın bir özelliğidir. Onu hypervisor-protected-code-integrity.md (HVCI) ile eşleştir, böylece kernel kodu da signed-only ve W^X olur.
  • Remote/policy-tabanlı devre dışı bırakmanın endişe olduğu yerlerde VBS için UEFI lock kullan, böylece bir attacker korumayı sessizce kapatamaz.
  • VTL1'in threat model'inde yaşayan tamamlayıcı kernel hardening ile birleştir: credential-guard.md, kernel-data-protection.md ve windows-kernel-cfg.md.
  • Firmware'i, hypervisor'ı ve Secure Kernel'i patch'li tut — Secure Kernel zafiyetleri SKPG'nin etrafından dolaşmanın birincil gerçekçi yoludur, dolayısıyla zamanında OS/firmware güncellemeleri configuration ayarlamalarından daha önemlidir.
  • Geniş rollout'tan önce driver uyumluluğunu validate et; uyumsuz driver'larda bir fail-closed bug check amaçlanan davranıştır.

References