Skip to content

VM-exit injection fuzzing (PIO/MMIO/hypercall exits)

VM-exit'lere yol açan interface'leri — port I/O, MMIO, hypercall'lar ve DMA — sürerek hypervisor'ı fuzz'lamak; böylece fuzzer'ın input'u doğrudan host'un exit handler'larına ve device-emülasyon koduna iner.

Mechanism

Note

Bir guest, host koduna yalnızca hardware'in VM-exit'e dönüştürdüğü event'ler üzerinden ulaşır: PIO/IN/OUT, MMIO (device region'larında EPT/NPT fault'ları), hypercall'lar (VMCALL/VMMCALL), privileged instruction'lar ve DMA (device'in guest memory'sini okuması/yazması). Fuzzer'ların exploit ettiği invariant: host attack surface'inin her byte'ı bu exit'lerden birinin downstream'idir ve host, guest-controlled exit verisini (port/width/value, GPA/length, hypercall arg'ları, DMA descriptor'ları) validate etmek zorundadır. Yani bu kanallar üzerinden structured-random input'lar beslemek, tam olarak escape bug'larının yaşadığı emülasyon yollarını çalıştırır (bkz. VM-exit handler interception). Gelişmiş fuzzer'lar daha da ileri gider: guest kodu çalıştırmak yerine, sentetik bir PIO/MMIO/hypercall VM-exit'i inject eder, hypervisor'ın onu emüle etmesine izin verir, vmresume'u intercept eder ve hemen sonraki exit'i inject eder — böylece tüm fuzz zamanı hypervisor'ın emülatörlerinde geçer.

Walkthrough

Public referanslar: HYPER-CUBE (NDSS'20), Nyx (USENIX'21), HYPERPILL (USENIX'24). Kavramsal metodoloji:

  1. Interface'leri enumerate et. Guest-tarafı PIO, device BAR'larına MMIO write'ları, VMCALL/VMMCALL hypercall'ları ve DMA descriptor ring'lerini sür — "VM-exit tetikleyen: I/O, hypercall ve privileged instruction" kategorileri.
  2. Input üret. HYPER-CUBE, high-dimensional I/O dizilimleri üretmek için random bytecode yorumlar; Nyx, device state machine'lerine saygı göstermek ve coverage feedback'i almak için fast snapshot'lar + affine-typed structured input'lar kullanır.
  3. Snapshot + replay. Bir VM snapshot al, bir fuzz input uygula, crash/coverage gözlemle, sonra restore et — fast snapshot reload throughput'u yüksek tutar.
  4. HYPERPILL-tarzı exit injection. Guest kodu çalıştırmak yerine, bir PIO/MMIO/hypercall VM-exit'i inject et, hypervisor'ı resume et, vmresume'u intercept et ve sonraki exit'i inject et — hypervisor'ın emülatörlerini doğrudan ve (hardware sınırında çalıştığı için) farklı hypervisor'lar genelinde fuzz'lar.
  5. Host crash'lerini (QEMU/KVM, vb.) hatalı exit handler'a geri triage et.

Beklenen gözlemlenebilir: belirli PIO/MMIO/hypercall dizilimlerine bağlı host (device-model) crash'leri/ASAN raporları.

Kardeş teknikten farkı

Bu not VM-exit interface'lerini (PIO/MMIO/hypercall/DMA) sürmeye ve HYPERPILL tarzı sentetik exit injection'a — guest kodu çalıştırmadan, hardware sınırında, cross-hypervisor — odaklanır. Tamamlayıcı snapshot-based greybox hypervisor fuzzing ise in-guest agent ile gerçek guest kodu çalıştırıp Intel-PT coverage feedback'le greybox mutation loop'unu sürmeye odaklanır; bu not exit'i nereden enjekte ettiğine, o not coverage'ı nasıl topladığına ağırlık verir.

Warning

Bir araştırma/savunma test tekniği. Yalnızca test etmeye yetkili olduğun sistemlere karşı çalıştır.

Detection

  • Bu kendisi bir detection (bug-bulma) yöntemidir; operasyonel olarak, bir guest'ten kitlesel hatalı PIO/MMIO/hypercall trafiği ya da tekrarlayan device-model crash'leri, devam eden bir fuzzing'e işaret eder.

Mitigation

  • Device model'leri release öncesi sürekli fuzz'la; her guest-controlled exit alanını (port/width, GPA/length, hypercall arg'ları, DMA descriptor'ları) validate et.
  • Device emülasyonunu sandbox'la/deprivilege et (sVirt, seccomp) ki bulunan bir bug sınırlansın; intercepted/etkin device'lerin setini minimize et.

References

  • HYPERPILL: Fuzzing for Hypervisor-bugs by Leveraging the Hardware (USENIX Security 2024): https://www.usenix.org/system/files/usenixsecurity24-bulekov.pdf
  • Nyx: Greybox Hypervisor Fuzzing using Fast Snapshots and Affine Types (USENIX Security 2021): https://www.usenix.org/system/files/sec21-schumilo.pdf
  • HYPER-CUBE: High-Dimensional Hypervisor Fuzzing (NDSS 2020): https://www.ndss-symposium.org/wp-content/uploads/2020/02/23096-paper.pdf