Stealth VT-x hypervisor anti-detection (CPUID/RDTSC spoofing)¶
Thin bir Intel VT-x hypervisor, CPUID exit'lerini intercept ederek hypervisor-present bit'ini ve vendor leaf'lerini gizleyerek ve TSC'yi yöneterek VM-exit'lerin cycle maliyetini guest timing kontrollerinden maskeleyerek gözlemlenebilir footprint'ini minimize eder.
Mechanism¶
Note
Bir guest bir hypervisor'ı yalnızca CPU'nun açtığı mimari kanallardan
"görebilir". İkisi baskındır. CPUID: leaf 1 bir hypervisor-present bit'i
(CPUID.1:ECX[31]) raporlar ve leaf aralığı 0x40000000–0x400000FF hypervisor
vendor signature'ını taşır. VT-x'te CPUID her zaman bir VM-exit doğurur,
dolayısıyla hypervisor her probe'u görür ve dönen register'ları yeniden yazabilir
— ECX[31]'i temizleyip vendor leaf'leri sıfırlayarak/sahteleyerek guest'in bare
metal'de olduğuna inanmasını sağlar. Timing (RDTSC/RDTSCP): virtualization,
VM-exit eden işlemlere (CPUID, belirli MSR/CR access'leri) latency ekler. Bir
guest rdtsc; cpuid; rdtsc timing'ler ve anormal büyük bir delta'yı flag'ler.
Stealth bir hypervisor buna VT-x TSC-offset ve TSC-scaling control'leri
(ve RDTSC'yi trap'leyerek) ile karşı koyar; guest'e exit maliyetini gizleyen bir
timeline verir.
İzolasyon açısı burada terstir: host'u guest'ten korumak yerine, hypervisor guest'in virtualization sınırı görüşünü manipüle eder ki in-guest detection (tipik olarak anti-analysis malware) VM'i donanımdan güvenilir biçimde ayırt edemesin.
Walkthrough¶
Klasik guest-side probe'lar ve hypervisor'ın karşı-handling'i:
- Hypervisor-bit probe — guest çalıştırır:
CPUID VM-exit handler'ı guest'e dönen değerde bit 31'i temizler, böylece
CF=0. - Vendor-leaf probe — guest,
"KVMKVMKVM","Microsoft Hv","VMwareVMware"gibi bir signature bekleyerekEAX=0x40000000ileCPUIDçalıştırır. Handler sıfır (ya da sahte bare-metal-benzeri yanıt) döndürür, VMM kimliğini gizler. - Timing probe — guest
rdtsc; cpuid; rdtscdelta'sını bir threshold'a karşı ölçer (bkz. rdtsc-timing-detection.md). Hypervisor bir TSC offset uygular ki ikincirdtscnative execution'la tutarlı görünen bir maliyet yansıtsın.
Spoof'lanmış CPUID handler mantığı (kavramsal)
Warning
Anti-evasion / VM-introspection research ve thin-hypervisor projelerinde belgelenmiştir. CPUID/RDTSC spoofing kolay belirtileri handle eder; tek başına her detection vector'ünü yenmez (bkz. Mitigation).
Detection¶
CPUID/RDTSC spoofing ile bile, residual sinyaller bir VMM'i ele verir:
- CPU errata probing: gerçek bir CPU'nun sahip olduğu ama emulator/hypervisor'ın ince bir şekilde yanlış yaptığı microarchitectural quirk/errata sorgulamak (bkz. cpu-errata-probing-for-vm-detection.md).
- Diğer forced-exit timing: yalnızca CPUID timing'i tune edilmişse, exit eden descriptor-table ya da MSR access'leri hâlâ şişmiş latency gösterebilir.
- Descriptor-table relocation (SIDT/SGDT Red Pill kontrolü, bkz. red-pill.md) ve interrupt-latency varyansı.
Mitigation (hypervisor'ın stealth'i ve sınırları için)¶
- Stealth'i güçlendirmek için: TSC'yi tüm exit yollarında tutarlı virtualize et, descriptor-table instruction'larını trap'le ve errata yanıtlarını normalize et — büyük, kırılgan bir surface.
- Böyle bir hypervisor'ı saptamaya çalışan defender/analist'ler için: birden çok bağımsız kanalı birleştir (errata + birkaç exit tipinin timing'i + descriptor-table kontrolleri); tek bir spoof hepsini kapsamaz.
References¶
- Intel 64 and IA-32 SDM, Vol. 3C — CPUID exiting, RDTSC exiting, TSC-offset ve TSC-scaling VM-execution control'leri. https://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol3/o_fe12b1e2a880e0ce-1077.html
- J. Rutkowska, "Introducing Blue Pill" (Invisible Things Lab) — thin hypervisor stealth. http://theinvisiblethings.blogspot.com/2006/06/introducing-blue-pill.html
- "Reaching the far corners of MATRIX: generic VMM fingerprinting" (Source Seattle 2015) — spoofing'in sınırları, çok-kanallı detection. http://www.c7zero.info/stuff/source-seattle-2015-generic_vmm_fingerprinting.pdf