EPT split (exec view vs read/write view)¶
Bir guest page'in execute permission'ını read/write permission'ından second-level translation içinde ayırmak; böylece aynı guest-physical address'in instruction fetch'i ile data read'i farklı host frame'lere çözümlenir — stealth hooking'in temeli.
Mechanism¶
Note
"Execute-only EPT" desteği olan Intel CPU'larda, bir EPT leaf entry bir guest-physical frame üzerinde bağımsız Read, Write ve Execute permission bit'leri taşır. Bu bit'lerin sahibi host'tur. Bir EPT split bu bağımsızlığı kullanır: bir GFN öyle map edilir ki onu fetch etmek bir frame'e, onu read/write etmek başka bir frame'e çözümlenir. altp2m views ile birleştiğinde host, bir page'in iki fiziksel kopyasını tutar — temiz bir page (orijinal byte'lar, okunabilir) ve bir shadow page (hook'lanmış byte'lar, executable — bkz. shadow page mapping) — ve execution'ı shadow'a yönlendirirken read'leri temiz kopyaya bırakır.
Bu primitive'in hedef aldığı izolasyon/integrity özelliği code-read/code-exec tutarlılığıdır: yazılım (ve guest integrity checker'ları) bir adreste okudukları byte'ların orada execute olan byte'lar olduğunu varsayar. Bir EPT split bu varsayımı guest'in dışından, in-guest read'lere görünmez biçimde kırar. Hem defensive bir primitive'dir (stealth breakpoint, introspection) hem de offensive (inline patch'leri gizleyen EPT-hooking rootkit'ler).
Walkthrough¶
Kavramsal akış (public reference: Intel SDM EPT bölümü; DRAKVUF / hvpp / hyperbone tarzı EPT-hook write-up'ları):
- Bir hedef page seç (örn. bir syscall entry'si ya da hook'lanacak fonksiyon).
- Onu bir shadow frame'e klonla ve hook'u yalnızca shadow'a uygula (bir
int3/0xCC ya da bir JMP trampoline). - Aktif altp2m view'ında hedef GFN'nin EPT entry'sini execute-only yap; böylece execution shadow frame'e map olur.
- O GFN'ye herhangi bir read/write'ta CPU bir EPT violation yükseltir; host geçici olarak GFN'yi temiz frame'i map eden read-only mapping'e geçirir, erişimi single-step eder, sonra execute-only'ye geri döner.
- Execution hook'lanmış shadow page'den akar; read'ler her zaman temiz byte'ları gözlemler.
Beklenen gözlem: X-ama-R-değil (ya da R-ama-X-değil) permission'lara sahip per-page EPT entry'leri ve her erişimin etrafında bir page'i iki frame arasında flip eden eşleşmiş EPT-violation handling.
Warning
EPT split, execute-only EPT page'leri için donanım desteğine bağlıdır. Bu olmadan host, read/write trapping ile yaklaşık bir çözüm üretmek zorunda kalır; bu çok daha gürültülüdür (her fetch ve read fault verir) ve guest tarafından timing ile saptanması çok daha kolaydır.
Detection¶
- Kendi instruction byte'larını okuyan self-checksumming guest kodu, temiz kopyayı görür ama hook'lanmış kopyayı execute eder — bir guest, "read" byte'larının hash'ini runtime davranışıyla karşılaştırarak ya da single-step vs. block-execution ayrışmasıyla split'i saptayabilir.
- Timing: read'lerdeki ekstra EPT-violation handling, split page'ler için erişim latency'sini şişirir.
- Host tarafı: asimetrik R/W/X bit'li EPT entry'leri ve sık permission flip'leri authoritative sinyaldir.
Mitigation¶
- Bunu bir feature olarak sunan bir hypervisor için, split kurulumunu host control plane'e kısıtla ve hangi frame'in execution'ı desteklediğini guest state'in asla etkilemesine izin verme.
- Defensive monitor'ler erişim timing'ini normalize ederek guest saptamasına karşı sertleştirilebilir, ama timing'leyip checksum yapabilen bir guest'e karşı mükemmel stealth ulaşılabilir değildir.
- Compromise olmuş bir host bileşeninin kötü niyetli EPT-hooking yapmasını önlemek için, EPT/altp2m konfigürasyonunun trusted hypervisor'a ait olmasını ve denetlenmesini zorunlu kıl; nested guest'lerde L1 EPT split'leri L0 tarafından sadakatle shadow'lanmalı.
References¶
- Intel 64 and IA-32 SDM, Vol. 3C — EPT, execute-only EPT page'leri (Convertible EPT Violations bölümü, §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 page + read-only temiz page ile stealth hook. 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