VMCS (Virtual Machine Control Structure) manipulation¶
Bir vCPU'nun guest-state, host-state ve control area'larını yapılandırmak ya da kurcalamak için VMREAD/VMWRITE üzerinden Intel VT-x VMCS field'larını okumak ve yazmak — bir VMM'nin (veya VMX-root code execution'a sahip bir saldırganın) guest/host isolation sınırını tanımlamak ve potansiyel olarak zayıflatmak için kullandığı temel primitive.
Mechanism¶
Note
VMCS, tüm virtualization context'ini tutan per-vCPU, 4 KB'lık, processor-managed bir
structure'dır: guest-state area (VM-entry'de yüklenir, VM-exit'te kaydedilir),
host-state area (VM-exit'te yüklenir), VM-execution control field'ları
(neyin exit'lere yol açtığı — exception bitmap, CR shadow'ları, MSR/IO bitmap'leri,
EPT pointer) ve VM-entry/VM-exit control field'ları. Software ona asla doğrudan
mov yapmaz; bir VMCS'i current yapmak için VMPTRLD'yi ve field'lara erişmek için
architectural field encoding'leriyle (Intel SDM Vol. 3, field-encoding appendix'i)
VMREAD/VMWRITE'ı kullanır. Isolation invariant'ı şudur: VMCS'i yalnızca
güvenilir VMX-root kodu düzenler ve yazdığı değerler guest'i confined tutar (exit'te
doğru host RIP/CR3/stack, hassas işlemler için exit'ler enabled). Bug class: bir
saldırgan VMX-root yürütmesine ulaşırsa (örn. bir hypervisor memory-corruption bug'ı
aracılığıyla) kötü niyetli bir host-state RIP/CR3 VMWRITE edebilir veya exit
control'lerini devre dışı bırakabilir — bir host bug'ını isolation sınırının tam
kontrolüne çevirir. Bir guest hypervisor'ın VMWRITE'larının gerçek field'lara
ulaşmasına izin veren nested-virtualization emülasyonu, bir seviye yukarıda aynı
risktir.
VMCS shadowing ve VMCS multiplexing for nesting'in temelidir; AMD benzeri VMCB manipulation'dır.
Walkthrough¶
Örnekleyici VMX-root field erişimi (kavramsal, Intel SDM ve felixcloutier instruction page'lerinden):
; make a VMCS current, then read/write fields by encoding
vmptrld [vmcs_phys] ; load current VMCS
mov rax, 0x6C16 ; HOST_RIP encoding
vmread rbx, rax ; rbx <- host RIP that runs after VM-exit
mov rdx, vmexit_handler ; (a VMM legitimately sets this here)
vmwrite rax, rdx ; HOST_RIP <- handler
Beklenen: bir sonraki VM-exit'te CPU, HOST_RIP/HOST_RSP/HOST_CR3'ü host-state area'sından yükler. Bir VMM bunları kendi güvenilir dispatch'ine set eder; yanlış bir değer yazmak post-exit host yürütmesini yönlendirir.
Warning
VMCS'i düzenlemek VMX-root (ring-0 host / VMM) ayrıcalığı gerektirir. Bu kayıt kavramsaldır; VMX-root'a ulaşacak bir hypervisor exploit chain sağlamaz.
Detection¶
- Hypervisor self-integrity: set kalması gereken control'leri (exit bitmap'leri, EPT pointer, MSR/IO bitmap'leri) ve host-state area'sını her VM-entry'de hash'le/denetle.
- Nested kurulumlar için, L1'den gelen beklenmedik VMREAD/VMWRITE exit pattern'lerini logla.
Mitigation¶
- VMX-root kodunu minimal ve memory-safe tut; VMCS yalnızca onu VMWRITE etmeye izinli kod kadar güvenlidir.
- Bir nested guest'in doğrudan hangi field'lara dokunabileceğini sınırlamak için hardware özelliklerini (örn. VMCS shadowing bitmap'leri) kullan.
- Bir nested-VMX implementasyonunun bir guest VMCS12'den kopyaladığı her field'ı, gerçek bir VMCS'e ulaşmadan önce doğrula.