MSR bitmap interception¶
VMCS MSR-bitmap address'ini 4 KB'lık bir bitmap'e işaret ettirerek guest
RDMSR/WRMSR'lerini seçici biçimde trap'leme; böylece yalnızca işaretli MSR'ler VM-exit'e yol açarken geri kalanı native hızda çalışır — bir hypervisor'ın model-specific register'ları aracılamak için kullandığı per-MSR access-control primitive'i.
Mechanism¶
Note
Prensipte her RDMSR/WRMSR VM-exit edebilir, ama hepsini trap'lemek fazla
yavaştır. VMX, "use MSR bitmaps" VM-execution control'ünü sağlar: set
edildiğinde, VMCS field'ı MSR_BITMAP dört adet 1 KB quadrant'a bölünmüş 4 KB'lık,
4 KB hizalı bir bölgeyi işaret eder:
- read bitmap, low MSRs
0x00000000–0x00001FFF - read bitmap, high MSRs
0xC0000000–0xC0001FFF - write bitmap, low MSRs
- write bitmap, high MSRs
Aralık içindeki bir MSR için, karşılık gelen bit exit'e karar verir: bit = 1 -> VM-exit, bit = 0 -> native çalıştır. Her iki aralığın da dışındaki herhangi bir MSR'ye erişim daima VM-exit eder (bitmap'ten bağımsız olarak). Invariant: hypervisor, per-MSR ve per-direction olarak, hangi register erişimlerini aracılaması gerektiğine karar verir; bir exit'te erişimi emulate/virtualize eder (örn. bir değeri sahteleyerek, bir feature'ı gizleyerek ya da bir policy uygulayarak). Bu bitmap'i yanlış yapmak bir güvenlik açığıdır — örn. hassas bir host MSR'sini un-trapped bırakmak (karşılaştır: nested_svm_vmrun host MSR control, burada free edilmiş bir nested MSR bitmap host MSR'lerini açığa çıkarır).
Walkthrough¶
Public reference: Intel SDM Vol. 3C (MSR bitmaps; RDMSR/WRMSR exit conditions). Minimal bir hypervisor'da kavramsal kurulum:
- 4 KB hizalı bir page allocate et, sıfırla (varsayılan: aralık içindeki MSR'ler için exit yok).
- Processor-based VM-exec control'lerinde "use MSR bitmaps"i etkinleştir ve page'in
physical address'ini
MSR_BITMAPVMCS field'ına yaz. - Örneğin
IA32_LSTAR'a (0xC0000082) yazmaları trap'lemek için, onun bit'ini write/high quadrant'ında set et: - Bir guest
WRMSR LSTAR'ında, CPU "WRMSR" sebebiyle VM-exit eder; handlerECX/EDX:EAX'i okur, policy uygular (bkz. IA32 LSTAR MSR write interception) ve sonra resume eder.
Exit-reason check sketch
Warning
Bitmap'te temiz (clear) bir bit native erişim demektir — guest gerçek MSR'ye dokunur. Host-sensitive MSR'leri yalnızca gerçekten güvenliyse un-trapped bırak; nested kurulumlar L1'in ve L0'ın bitmap'lerini merge etmeli ki L0 kendi gerekli trap'lerini asla düşürmesin.
Detection¶
- Bir guest
RDMSR/WRMSR'yi zamanlayabilir: trap'lenmiş MSR'ler native olanlardan belirgin biçimde yavaştır (VM-exit latency'si), bu da hypervisor'ın hangi MSR'leri intercept ettiğini fingerprint'ler (bkz. VM-exit latency fingerprinting).
Mitigation¶
- Bitmap'leri tutucu (conservative) kur: hassas MSR'ler için varsayılan olarak trap'le; hangi MSR'lerin native bırakıldığını audit et.
- Nested virtualization'da guest ve host MSR bitmap'lerini doğru biçimde merge et ve bir run onu tüketirken bitmap'i asla free etme/desenkronize etme.
References¶
- Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 3C (MSR bitmaps; RDMSR/WRMSR VM-exit conditions). https://cdrdv2-public.intel.com/671506/326019-sdm-vol-3c.pdf