Skip to content

EPT Remapping (alternate-p2m view switching)

Bir guest için birden çok Extended Page Table tut ve aktif olanı hot-swap ederek farklı fiziksel memory görünümleri sun — stealth hypervisor-assisted hooking'in temeli (ve VM introspection / evasion için bir araç).

Mechanism

Neden çalışır

Intel VT-x'te bir guest physical address (GPA), VMCS'teki EPTP alanının işaret ettiği Extended Page Tables (EPT) tarafından bir host physical address (HPA)'ya çevrilir. Guest, EPT'yi göremez ya da modifiye edemez — tamamen hypervisor'da yaşar. Kritik nokta: EPTP yalnızca bir VMCS alanıdır: hypervisor birden çok EPT tutar ve EPTP'yi yeniden yazarsa, guest'in fiziksel memory görünümü bir sonraki VM-entry'de atomik olarak değişir.

EPT entry'leri her GPA için bağımsız read / write / execute permission'ları taşır. Böylece aynı guest frame'inin iki görünümünü inşa edebilirsin:

  • View A (execute): EPTP→ hook'lanmış/patch'li kodunu içeren bir frame, --X map'lenmiş (executable, readable değil).
  • View B (read): EPTP→ orijinal, değiştirilmemiş kod, R-- map'lenmiş.

Bir instruction fetch View A'yı kullanır (hook'unu çalıştırır); aynı GPA'nın bir data read'i bir EPT violation tetikler ve hypervisor bunu View B'ye geçerek handle eder, böylece herhangi bir integrity check el değmemiş byte'ları okur. Hook, in-guest memory scanner'larına görünmezdir. Xen bunu tam olarak altp2m (alternate p2m) olarak implement eder; "p2m" GPA→HPA katmanıdır; bir guest/monitor'ün birden çok fiziksel "view" yönetmesine ve VMCS'teki aktif EPT index'ini değiştirerek bunları swap etmesine izin verir.

Buna "remapping" denir çünkü tek bir GPA, aktif EPT'ye bağlı olarak sessizce farklı HPA'lara (ya da farklı permission'lara) yönlendirilir.

Walkthrough

VMX root / kontrol ettiğin bir hypervisor gerektirir

Burada Xen + LibVMI/DRAKVUF altp2m ile gösterilmiştir. Intel EPT'ye ve domain için etkin altp2m feature'ına ihtiyaç duyar.

1. Domain için altp2m'i etkinleştir.

# xl.cfg
altp2m = "external"     # allow an external monitor to manage views
hap = 1                 # hardware-assisted paging (EPT) on

2. Bir alternate view oluştur ve hedef page'i shadow'la. Kavramsal olarak (LibVMI tarzı API):

uint16_t view;
xc_altp2m_create_view(xch, domid, 0, &view);      // new EPT, clone of default
xc_altp2m_switch_to_default_view(xch, domid);

// Allocate a host frame holding the *patched* code (e.g. an int3/hook),
// then remap the guest GFN in `view` to that frame:
xc_altp2m_change_gfn(xch, domid, view, target_gfn, shadow_gfn);

// Restrict permissions so reads trap but exec runs:
xc_altp2m_set_mem_access(xch, domid, view, target_gfn, XENMEM_access_x);

3. Guest'i hooked view'a geçir.

xc_altp2m_switch_to_view(xch, domid, view);   // rewrites EPTP at next VM-entry

4. EPT violation'larını handle et (event-channel döngüsü): shadow page'de bir execute'ta hook'unu teslim et; aynı GFN'ye bir read/write'ta, page'in orijinal R-- frame'i olduğu bir view'a geçici olarak flip et, single-step et, geri flip et.

[monitor] EPT violation gfn=0x1f4 a2 type=exec  -> stay in hooked view
[monitor] EPT violation gfn=0x1f4 a2 type=read  -> swap to clean view, step, swap back
guest in-memory scanner reads gfn 0x1f4 -> sees ORIGINAL bytes  (hook hidden)
guest executes gfn 0x1f4               -> runs HOOK

Aynı mekanizma stealth VM introspection'ın temelidir (bir GFN'ye bir exec/RW trap'i koy, guest fark etmeden erişimleri gözlemle) ve evasive malware/cheat'ler tarafından guest'in içinde çalışan anti-cheat/AV'den patch'leri gizlemek için suistimal edilir.

Detection

  • Guest tarafından: execute edilen davranışı read-back byte'larla karşılaştıran bir self-integrity check, read/exec split'ini saptayabilir (ekstra VM-exit'lerin timing'i de trap'i sızdırabilir).
  • Host tarafından: tek bir GFN'de EPT-violation fırtınaları ve sık EPTP switch'leri, hypervisor telemetry'sinde açık imzalardır.

Mitigation

  • Untrusted domain'ler için altp2m'i kısıtla ya da devre dışı bırak; HVMOP_altp2m_*'i gate'le.
  • Guest tarafı: kodu, hypervisor'ın temiz bir shadow'dan karşılayamayacağı bir yolla ölç (örn. execute-and-hash sekansları) ya da hardware attestation'a güven.

References