KVA Shadow (Windows PTI)¶
Windows'un kernel/user page-table isolation'ı: user mode'u privileged kernel belleği unmapped halde çalıştırır, böylece Meltdown transient load'unun sızdıracak bir şeyi olmaz — Linux KPTI'nin Windows muadili.
Mechanism¶
Neden çalışır
Meltdown (CVE-2017-5754, "rogue data cache load" / variant 3), bir user instruction'ın mapped bir kernel adresini transient olarak okumasına izin verir: load fault verir, ama fault retire olmadan önce speculative read çoktan cache state'ini değiştirmiştir ve byte'ı bir Flush+Reload channel'ı üzerinden sızdırır. Önkoşul, kernel belleğinin user mode'dan translate edilebilir olmasıdır — tarihsel olarak performans için her process'e (yalnızca-supervisor) map'lenirdi.
KVA Shadow o önkoşulu ortadan kaldırır. Microsoft'a göre, "her process artık en fazla iki address space'e sahip olabilir: kernel address space'i ve user address space'i", her biri kendi page-directory hierarchy'siyle (kendi CR3'üyle):
- Kernel address space'i — tam user ve kernel belleğini map'ler; kernel'de execute ederken kullanılır.
- User ("shadow") address space'i — user belleğini artı "kernel address space'ine girip çıkmak için gereken yalnızca minimal bir kernel mode transition code ve data page alt kümesini" map'ler. Kernel belleğinin büyük kısmı present değildir.
User-yarısı PDE'ler her iki space'e replicate edilir; kernel yarısı shadow'a replicate edilmez. Kernel sırları user execution sırasında basitçe unmapped olduğundan, Meltdown transient load'unun üzerinde speculate edeceği geçerli bir translation yoktur. Geri kazanılan invariant: unmapped bellek (speculatively) okunamaz.
Walkthrough¶
KVA Shadow kernel'in içine gömülüdür; bir API çağırmak yerine onu işletir ve
gözlemlersin. Yalnızca belirli "güvenli" structure'lar user page table'larına
shadow'lanır — per-processor transition stack'leri (KTRANSITION_STACK'ler), GDT,
IDT, TSS ve per-processor descriptor area (KPROCESSOR_DESCRIPTOR_AREA); hepsi
contiguous, nonpageable bir bölgede tutulur.
1. Mitigation durumunu resmi araçlarla kontrol et. Microsoft'un
SpeculationControl PowerShell module'ü KVA Shadow durumunu raporlar:
PS> Install-Module SpeculationControl
PS> Get-SpeculationControlSettings
Windows OS support for kernel VA shadow is present: True
Windows OS support for kernel VA shadow is enabled: True
Windows OS support for PCID performance optimization is enabled: True
2. User/kernel sınırındaki CR3 swap'i. Bir trap'te, entry path CR3'ü kernel
page-directory pointer'ıyla yeniden yükler; return'de shadow CR3'ü geri yükler. Bir
per-processor KPRCB page'i, "kolay erişim için mevcut processor'ün kernel CR3
değerinin bir kopyasını" tutar:
(conceptual entry/exit)
trap from user -> load CR3 = kernel PML4 (full kernel map)
... service the trap on a KTRANSITION_STACK ...
return to user -> load CR3 = shadow PML4 (kernel unmapped)
3. PCID optimizasyonu. PCID-yetenekli CPU'larda KVA Shadow iki tag kullanır —
PCID_KERNEL ve PCID_USER — böylece CR3 swap'lerinin tüm TLB'yi flush etmesi
gerekmez, "system service call'larında ve diğer yüksek frekanslı user/kernel
geçişlerinde tüm TB içeriğinin korunması."
KVA Shadow yalnızca Meltdown içindir
Linux KPTI gibi KVA Shadow da kernel belleğini unmap ederek Meltdown'ı yener; Spectre v1/v2'yi (intra-address-space leak'leri) ya da L1TF'yi durdurmaz; bunlar kendi mitigation'larını gerektirir (retpoline/IBRS, L1D flush).
Detection¶
Bir saldırı değil. Gözlemlenebilirlik operasyoneldir: Get-SpeculationControlSettings
("kernel VA shadow is present/enabled") ve syscall/interrupt entry path'inde shadow
CR3 swap'inin varlığı.
Mitigation¶
(Residual risk / bypass.) User space'te kalması gereken minimal transition mapping'leri residual bir attack surface'tir: araştırmalar, sabit KVA Shadow trampoline/transition mapping'lerinin KASLR bilgisini sızdırmak için suistimal edilebileceğini gösterdi ("Meltdown Reloaded") ve kernel exploit payload'ları dual-CR3 rejimi altında doğru çalışacak şekilde uyarlandı. KVA Shadow ayrıca sibling-thread L1TF için hiçbir şey yapmaz.
References¶
- Microsoft MSRC. KVA Shadow: Mitigating Meltdown on Windows. — https://www.microsoft.com/en-us/msrc/blog/2018/03/kva-shadow-mitigating-meltdown-on-windows
- Blue Frost Security. Meltdown Reloaded: Breaking Windows KASLR by Leaking KVA Shadow Mappings. (arşivlenmiş kopya — Wayback Machine) — https://web.archive.org/web/20250414175102/https://labs.bluefrostsecurity.de/blog/2020/06/30/meltdown-reloaded-breaking-windows-kaslr/