VM-exit latency fingerprinting¶
Bir VM-exit'i zorlayan instruction'ları (ör.
CPUID) timing yaparak bir hypervisor'ı tespit etmek: exit + handler + entry round-trip'i native execution'dan çok daha fazla cycle'a mal olur ve bu açığı hypervisor'ın tamamen gizlemesi zordur.
Mechanism¶
Note
Bazı instruction'lar koşulsuz (ya da konfigürasyonla) intercept edilir, dolayısıyla
virtualization altında bir VM-exit'e yol açar. CPUID kanonik örnektir. Detector'ın dayandığı
invariant: bir VM-exit, guest state'i kaydetmeli, hypervisor'a geçmeli, handler'ı çalıştırmalı
ve yeniden girmelidir — tamamen silinemeyen architectural bir maliyet. Native olarak CPUID
~80–200 cycle'dır; bir hypervisor altında exit+handler+entry ~500–2.000+ cycle ekler. CPUID'yi
RDTSC ile çevreleyip bir threshold'a karşı kıyaslayarak, bir guest virtualize olduğunu çıkarsayabilir
— bir "red pill" timing oracle'ı. Hypervisor bunu
TSC offsetting ile köreltebilir, ama kümülatif TSC
oynaması monotonluğu bozar, dolayısıyla evasion kusurludur.
Walkthrough¶
Public referans: Rossow vd., "Detecting Hardware-Assisted Virtualization" (DIMVA 2016). Kavramsal ölçüm:
- Trap eden bir instruction seç.
CPUIDbir VM-exit'i zorlar ve ring-3'ten kullanılabilir, bu da onu standart probe yapar. - Onu çok kez timing yap cycle counter ile: Noise'u bastırmak için çok sayıda iterasyon üzerinden minimum/median al.
- Threshold. Native
CPUIDdüşük cycle'larda kümelenir; virtualize edilmiş, yüzlerce–binlerce cycle daha yüksekte kümelenir. Threshold'un üzerinde ölçülen bir median, bir hypervisor'ı işaret eder. - Sağlamlık. Bağımsız bir timer'a (HPET/PM-timer) karşı kıyasla ki TSC offsetting sonucu sessizce normalize edemesin; bir "trap next RDTSC" savunmasına direnmek için probe'u (diğer intercepted op'lar) çeşitlendir.
Beklenen gözlemlenebilir: aynı silikonda aynı instruction için bimodal bir latency dağılımı — bare metal'e karşı virtualize.
Warning
Hem malware/anti-cheat tarafından sandbox'lardan kaçmak için, hem de savunmacılar tarafından bir stealth hypervisor'ı tespit etmek için kullanılır; teknik için dokümante edilmiştir.
Detection¶
- VMM tarafından:
RDTSC; CPUID; RDTSC'yi sıkı şekilde loop'layan bir guest, bir timing probe'unun imzasıdır veCPUIDexit oranı üzerinden gözlemlenebilir.
Mitigation¶
- Stealth VMM'ler, görünür maliyeti normalize etmek için intercept'leri azaltır ve TSC offsetting / "trap next RDTSC" uygular (bkz. TSC offset / TSC scaling emulation ve stealth VT-x anti-detection) — ama cross-timer kontrolleri bunu sınırlar.
- Kötü amaçlı bir hypervisor'ı tespit etmek isteyen savunmacılar, tek bir TSC-bazlı threshold yerine çapraz-referanslı bağımsız clock'ları tercih etmelidir.
References¶
- C. Rossow et al., "Detecting Hardware-Assisted Virtualization" (DIMVA 2016): https://www.christian-rossow.de/publications/detectvt-dimva2016.pdf