Skip to content

Kernel Data Protection (KDP)

Windows virtualization-based-security özelliği; seçili kernel/driver data'sını secure kernel'de SLAT üzerinden korumayı enforce ederek read-only yapar, böylece VTL0 kernel kodu onu asla değiştiremez.

Mechanism

Güvenlik invariant'ı

KDP, kernel belleğinin belirlenmiş bölgelerinin korumanın ömrü boyunca normal NT kernel'inde (VTL0) çalışan tüm yazılım için read-only olmasını zorunlu kılar. Read-only özelliği, kernel write primitive'i olan bir saldırganın geri alabileceği NT kernel'inin kendisi tarafından değil, hypervisor'ın Second Level Address Translation (SLAT) page table'ları aracılığıyla secure kernel (VTL1) tarafından enforce edilir. VTL0, SLAT entry'lerini düzenleyemediği için, arbitrary kernel write'a ulaşmış bir saldırgan bile korunan data'yı (security configuration, function-pointer table'ları, policy flag'leri) kötü amaçlı bir değere geri çeviremez. Bu, yüksek değerli kernel yapılarının data-only corruption'ını saldırganın araç setinden çıkararak çıtayı yükseltir.

KDP bir data-integrity mitigation'ıdır; control-flow integrity (kCFG/KCET) ve code integrity (HVCI)'yi tamamlar: CFI forward edge'i korur, HVCI kod page'lerinin writable+executable olmasını engeller ve KDP seçili data'yı değişmez tutar.

Walkthrough

Microsoft'un özelliği public olarak tanıtmasından yola çıkarak:

  1. VBS temeli. KDP, Virtualization-Based Security gerektirir. KDP altına yerleştirilen bellek, secure kernel (VTL1) tarafından doğrulanır ve hypervisor'ın sürdürdüğü SLAT table'larıyla korunur, böylece hiçbir VTL0 (NT-kernel) kodu ona yazamaz.
  2. Static KDP. Bir driver, MmProtectDriverSection'ı çağırarak kendi image'ının bir section'ını read-only olarak işaretler. Başarı durumunda, o static section'ı destekleyen bellek VTL0 için read-only ve SLAT-protected olur — bir kez initialize edilip asla meşru biçimde değiştirilmeyen data için ideal (örn. security policy, dispatch table'ları).
  3. Dynamic KDP. Image-build zamanında bilinmeyen data için dynamic KDP, bir driver'ın secure kernel tarafından yönetilen bir secure pool'dan read-only bellek allocate edip initialize etmesine izin verir; bir kez initialize edildikten sonra bölge VTL0'a read-only kilitlenir.
  4. Ele alınan tehdit. Microsoft, kernel belleğini kurcalayan (örn. integrity flag'lerini çeviren) signed-ama-vulnerable driver'ların suistimalini, KDP'nin etkisiz hale getirdiği birincil hedef sınıfı olarak gösterir.
Kapsam ve sınırlar (public olarak belirtilmiş)
  • Opt-in kapsam. KDP yalnızca bir driver'ın açıkça işaretlediğini korur; blanket bir read-only kernel değildir. Korunmayan data yapıları writable kalır.
  • Yalnızca immutable. Gerçekten write-once ya da nadiren değişen data'ya uyar; sık değişen yapılar static KDP altına yerleştirilemez.
  • VBS gerektirir. VBS/hypervisor devre dışıyken SLAT destekli garanti kullanılamaz.

Detection

  • Posture: VBS'nin etkin olduğunu doğrula (msinfo32Virtualization-based security, ya da Get-CimInstance -ClassName Win32_DeviceGuard). KDP ona bağlıdır.
  • API kullanımı: MmProtectDriverSection (static) ya da secure-pool read-only allocation'ları (dynamic) kullanan driver'lar KDP benimsemesine işaret eder.
  • Telemetri: SLAT-protected bir page'e yapılan bir VTL0 write girişimi, sessiz bir modifikasyon yerine bir access violation / bugcheck olarak yüzeye çıkar — o fault, bir data-corruption girişiminin bloklandığının sinyalidir.

Mitigation

  • VBS/HVCI'yi etkinleştir ki KDP (ve kCFG/KCET) enforce edilebilsin; KDP, VBS-tabanlı hardening setinin bir sütunudur.
  • Write-once güvenlik-ilgili data için driver'larda KDP'yi benimse: image data'sı için MmProtectDriverSection üzerinden static KDP'yi ve runtime-allocated read-only data için dynamic KDP'yi tercih et.
  • Savunmaları katmanla: KDP'yi kCFG (kernel-control-flow-guard.md), HVCI (hypervisor-protected-code-integrity.md), read-only-after-init desenleri (read-only-after-init.md) ve KASLR (kaslr-kernel-heap-aslr.md) ile birleştir ki ne kod, ne control flow, ne de kilit data tek bir primitive ile corrupt edilebilsin.
  • Saldırganın hypervisor sınırına erişimini azalt (vulnerable-driver blocklist'leri, HVCI) ki VBS root of trust'u sağlam kalsın.

References