Skip to content

CPU errata probing for VM detection

Bir emulator ya da hypervisor'ın kusurlu reprodüksiyon yaptığı microarchitectural davranışları — CPU errata, model-specific quirk'ler, LBR/TSC/MSR corner case'leri — exercise ederek virtualization'ı saptamak; böylece gözlemlenen sonuç gerçek silikondan ayrışır.

Mechanism

Note

Sadık bir hypervisor bir guest'i bare metal'den ayırt edilemez kılmaya çalışır, ama tam microarchitectural fidelity pratik değildir. Gerçek CPU'ların belgelenmiş errata'sı ve belgelenmemiş quirk'leri vardır: edge-case instruction'ların belirli flag etkileri, Last Branch Record (LBR) içeriği, performance-counter davranışı, reserved-MSR semantiği, partial-register ve pipeline artefaktları. Bir hypervisor ya da instruction emulator (örn. trap'lanan bir instruction'ı handle ederken) çoğunlukla mimari olarak belgelenmiş davranışı implement eder, tam erratum'u değil. Detection invariant'ı bu yüzden behavioral divergence'dir: bir guest, sonucu gerçek silikon ile emulator/hypervisor arasında farklı olduğu bilinen bir sekans çalıştırır ve hangisini aldığını okur.

Bu, CPUID present bit ve RDTSC timing gibi daha kaba kontrollerin bir incelmesidir: errata probing, bariz belirtileri bastıran ama her microarchitectural detayı kopyalayamayan hypervisor'ları hedefler. Hiçbir izolasyon sınırını geçmez — anti-analysis ya da fingerprinting besleyen bir recon'dur (bkz. generic VMM fingerprinting).

Walkthrough

Bu entry kavramsaldır. Bir prober'ın izlediği akıl yürütme yolu:

  1. Emulation'ın yanlış yapmaya meyilli olduğu, bilinen bir model-specific ya da erratum-driven sonucu olan bir davranış seç (örn. kontrollü bir jump sonrası LBR stack içeriği, bir corner case'te bir instruction'ın bir flag üzerindeki etkisi, gerçek silikonun belirli bir state'te bıraktığı bir MSR).
  2. Hedef CPU family için beklenen bare-metal sonucu belirle (vendor erratum listesi / SDM'den).
  3. Sekansı in-guest çalıştır ve karşılaştır. Bir uyumsuzluk (ya da native silikonun trap etmeyeceği bir VM-exit) bir hypervisor/emulator'a işaret eder.
  4. Beklenen gözlem: ölçülen ile belgelenmiş native davranış arasında divergence; çoğunlukla emulator "temiz" mimari değeri döndürürken gerçek silikon quirk'i gösterir.

Warning

Errata probe'ları kırılgan ve CPU-model-specific'tir; farklı VMM'ler farklı detayları kaçırdığı için aynı zamanda hangi hypervisor/emulator'ın mevcut olduğunun bir fingerprint'i olarak iş görürler.

Detection

  • Host/monitor tarafı: anti-analysis kodu bu probe'ları çoğunlukla launch'tan kısa süre sonra yapar; nadir instruction/MSR read kümeleri ya da sıkı control flow etrafında tekrarlı LBR read'leri bir imzadır.
  • Bare metal'de trap etmeyen bir instruction'da bir VM-exit, guest'in aradığı belirtinin ta kendisidir — bu tür exit'leri minimize etmek sinyali azaltır.

Mitigation

  • Yüksek-fidelity analiz sandbox'ları için: ilgili errata/LBR/MSR davranışını modelle, ya da native CPU feature'larını pass-through et (hardware-assisted, daha az emüle instruction) ki daha az davranış ayrışsın.
  • Mükemmel transparency'nin ulaşılamaz olduğunu kabul et; fidelity'yi monitor'ün control-flow obfuscation'ı ve tutarlı TSC/CPUID spoofing'i ile birleştir.
  • Evasive guest'leri saptayan defender'lar için, errata-probing pattern'lerini fidelity silahlanma yarışını kazanmaya çalışmak yerine bir anti-analysis indicator olarak ele al.

References