Shadow page mapping (cloned hooked page)¶
Bir guest-physical page'in iki host kopyasını tutan bir EPT memory-introspection tekniği — temiz bir read/write kopyası ve hook'lanmış bir execute kopyası — ve EPT violation'larda bunlar arasında geçiş yaparak in-guest integrity check'lerinin eklenmiş hook'u asla gözlemlememesi.
Mechanism¶
Note
Intel EPT altında, bir guest-physical page için second-level
page-table entry'si bağımsız read (R), write (W) ve execute (X)
permission bit'leri taşır. Bu teknik, aşağıdaki adım 4'teki execute-only
encoding'e (R=0, W=0, X=1) dayandığı için spesifik olarak Intel EPT'nin
execute-only desteğini gerektirir; AMD NPT execute-only permission'ı
sağlamadığından bu split aynen NPT'ye uygulanamaz (AMD NPT'nin bu pattern'i
execute-only olmadan nasıl yaklaştırdığı için bkz.
npt-based-hooking.md). CPU bu bit'lere bir data access ile bir instruction
fetch için ayrı ayrı baktığı için, tek bir guest-physical address, guest'in
page'i okumasına mı yoksa execute etmesine mi göre farklı host physical
frame'lere çözümlenecek şekilde yapılabilir. Shadow page mapping bu
decoupling'i kullanır: hypervisor, hedef page'in değiştirilmiş bir kopyasını
tutan ikinci bir host frame tahsis eder (örn. bir int3/0xCC breakpoint ya da
hook'lanan fonksiyonun ilk byte'ına yazılmış bir detour) ve EPT'yi öyle ayarlar
ki instruction fetch'ler hook'lanmış frame'e, read'ler temiz frame'e
çözümlensin. Page'i geri okuyan bir in-guest integrity scanner pristine byte'ları
görür, dolayısıyla hook bir read-based check'e görünmez. Bu, EPT stealth hooking
ve altp2m "shadow" view'ının ardındaki temel primitive'dir.
İzolasyon açısı: guest bir guest-physical page'in tek, tutarlı bir nesne olduğuna inanır, ama hypervisor — guest'in kendi paging'inin altında, SLAT katmanında oturarak — sessizce iki view sunar. Hook tamamen guest'in adresleyemeyeceği host memory'de yaşar.
Walkthrough¶
Tek bir 4 KiB page için read/execute split'inin kavramsal akışı:
- Hook'lanacak fonksiyonu içeren guest-physical page'i (GPA) belirle. Onu guest virtual address'ten bir guest page-table walk ile çözümle (bkz. guest-page-table-walk.md).
- Bir host shadow frame tahsis et, orijinal page'i içine kopyala ve shadow kopyayı patch et (hook offset'ine breakpoint/detour yaz).
- GPA'nın EPT entry'sini temiz frame'e
R=1, W=1, X=0permission'larıyla yönelt (okunabilir/yazılabilir, executable değil). - Guest o page'de execute etmeye çalıştığında,
X=0bit'i bir EPT violation tetikler (exit reason "EPT misconfiguration/violation"). Handler aynı GPA'nın EPT entry'sini shadow frame'eR=0, W=0, X=1(execute-only) ile yeniden yöneltir, sonra resume eder — patch'lenmiş byte'lar artık çalışır. - Guest daha sonra page'i okuduğunda (örn. bir anti-cheat / PatchGuard tarzı
tarama), shadow entry'deki
R=0başka bir EPT violation tetikler; handler temizR=1,W=1,X=0frame'e geri geçer ki read orijinal byte'ları döndürsün.
Temsili EPT-entry permission state'leri
Warning
Bu, standart, yayımlanmış bir VM-introspection / EDR tarzı tekniktir (DRAKVUF-class tooling ve hypervisor research projeleri tarafından kullanılır). Burada kavramsal permission-bit düzeyinde anlatılmıştır; tam kod hypervisor-specific'tir.
Detection¶
- Timing: her read↔execute geçişi bir VM-exit ve bir
INVEPTflush'a mal olur; shadow mapping altındaki bir page, normal bir page'e kıyasla anormal derecede yavaş alternating read/execute access'e sahiptir. - View discrepancy probe: bilinen bir instruction'ı execute edip sonra aynı adresi okuyan kod, execute olan byte'ların okunan byte'lardan farklı olduğunu saptayabilir — bir shadow mapping'in tanımlayıcı belirtisi.
- Bir bölgeyi single-step'leyip alternating access tipinde açıklanamayan EPT violation'ları izlemek.
Mitigation¶
- Self-modifying / self-reading code: aynı cache line'dan sıkı interleaving ile okuyup execute eden bir rutin, sürekli swap'ı zorlar, maliyeti yükseltir ve hook'u timing ile ortaya çıkarır.
- Hypervisor tarafında teknik kendisi bir defense primitive'idir; bir adversary ondan sub-page değişikliklerle ya da önce hypervisor'ı saptayarak kaçar (bkz. stealth-vt-x-hypervisor-anti-detection.md).
- Herhangi bir permission split'te fault veren coherent SLAT tasarımları, artı EPT-violation oranlarının performance-counter monitoring'i, stealth'i sınırlar.
References¶
- Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 3C — EPT, EPT-induced VM exit'leri, execute-only EPT page'leri (Convertible EPT Violations, §25.5.6). https://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol3/o_fe12b1e2a880e0ce-1089.html
- DRAKVUF Wiki, "Xen altp2m" — execute-only shadow + read-only temiz page; PatchGuard'dan breakpoint gizleme. https://github.com/tklengyel/drakvuf/wiki/Xen-altp2m
- Xen Project, "Stealthy monitoring with Xen altp2m". https://xenproject.org/2016/04/13/stealthy-monitoring-with-xen-altp2m