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:
- Interface'leri enumerate et. Guest-tarafı PIO, device BAR'larına MMIO write'ları,
VMCALL/VMMCALLhypercall'ları ve DMA descriptor ring'lerini sür — "VM-exit tetikleyen: I/O, hypercall ve privileged instruction" kategorileri. - 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.
- 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.
- 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. - 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