Snapshot-based greybox hypervisor fuzzing¶
Hızlı bir VM snapshot alıp guest-controlled input'ları (MMIO/PIO/DMA/hypercall) mutate eden, Intel-PT ile hardware coverage toplayan ve her execution arasında state'i sıfırlamak için snapshot'ı restore eden coverage-guided bir fuzzing metodolojisi (kAFL / Nyx) — hypervisor ve virtual-device bug'larını bulur.
Mechanism¶
Note
Bir hypervisor'ı fuzz'lamak zordur çünkü (a) target guest'in altında çalışır, dolayısıyla sıradan in-process instrumentation uygulanamaz ve (b) device/hypercall handler'ları yeniden inşası pahalı, derin, stateful bir machine state taşır. İki fikir bunu tractable kılar. Hızlı VM snapshot'ları: ilginç bir noktada tam guest+device state'ini bir kez yakala, sonra her test case'ten sonra onu mikrosaniyelerde restore et; deterministik, side-effect-free reset'ler verir. Intel Processor Trace (Intel-PT) ile hardware coverage: CPU, host/hypervisor kodunun execute edilen control-flow'unu instrument etmeden kaydeder; bir greybox (AFL tarzı) mutation loop'unu süren edge coverage üretir. Fuzz'lanan input surface tam olarak guest→hypervisor sınırıdır: bir guest'in emüle device register'larına (PIO/MMIO) yazdığı değerler, device'ın geri okuduğu DMA buffer'ları ve hypercall argümanları — gerçek escape'lerin kötüye kullandığı aynı surface.
İzolasyon açısı: fuzzer'ın mutate ettiği her byte, kötü niyetli bir guest'in meşru biçimde sağlayabileceği bir şeydir; dolayısıyla bu harness altında hypervisor'da bir crash, aday bir guest→host memory-safety ya da logic bug'ıdır.
Kardeş teknikten farkı
Bu not'un odağı coverage-guided greybox loop'tur: fast snapshot/restore + Intel-PT edge feedback ile guest agent gerçek guest kodu çalıştırarak input'u sürer. Tamamlayıcı VM-exit injection fuzzing ise guest kodu hiç çalıştırmadan sentetik PIO/MMIO/hypercall exit'lerini doğrudan host emülatörlerine inject eder; o açı interface enumeration ve cross-hypervisor erişime, bu açı ise coverage feedback'e ağırlık verir.
Walkthrough¶
Kavramsal harness loop'u (kAFL/Nyx tarzı):
- İçinde fuzzer'dan input isteyip onları test edilen device/hypercall'a besleyen küçük bir agent barındıran bir target guest boot et.
- Guest'i ilgi noktasına sür, sonra tam VM state'inin (CPU, memory, device model'leri) bir root snapshot'ını al.
- Fuzzer agent'a mutate edilmiş bir input verir; agent guest-side aksiyonu yapar (örn. bir virtio queue programla, MMIO write'ları yap, bir hypercall çağır).
- Intel-PT hypervisor-side control-flow'u edge coverage'a decode eder; yeni coverage input'u ilginç işaretler ve daha fazla mutation'ı tohumlar.
- Her run'dan sonra snapshot'ı restore et ki tüm side effect'ler atılsın, sonra tekrarla.
- Bir hypervisor crash/sanitizer hit'i (QEMU'nun ASan build'i ya da bir KVM oops) ona sebep olan input'a kadar triage edilir.
Bu yolla tipik olarak ulaşılan target'lar
Warning
Bu, akademik ve vendor güvenlik çalışmalarında kullanılan defensive bir bug-finding metodolojisidir. Not harness mimarisini anlatır, herhangi bir spesifik exploit'i değil.
Detection¶
- Fuzz'lanan bir target karakteristik pattern'ler gösterir: aynı device'ta hızlı tekrarlı VM-exit'ler, sık snapshot-restore döngüleri ve alışılmadık hypercall/IO sekansları yapan in-guest bir agent — host'tan ya da audit log'larından gözlemlenebilir.
- Snapshot side effect'leri (örn. saatlerin geri atlaması), zamanı fingerprint'leyen bir guest tarafından fark edilebilir; bu yüzden anti-analysis malware bunu probe eder.
Mitigation¶
- Defender'lar için bu teknik mitigation'ın kendisidir: sürekli coverage-guided
fuzzing, device-emulation bug'larını saldırganlardan önce ortaya çıkarır;
ASan/UBSan build'leri ve
mem_reentrancy_guardsınıfı sertleştirmeyle birleştir (bkz. qemu-virtio-dma-reentrancy-double-free.md). - Analize direnen bir target için, guest-controlled input surface'i azaltmak (minimal device model'leri, sandbox'lanmış device process'leri) bir fuzzer'ın — ya da bir saldırganın — ulaşabileceğini daraltır.
References¶
- S. Schumilo ve diğerleri, "Nyx: Greybox Hypervisor Fuzzing using Fast Snapshots and Affine Types," USENIX Security 2021 — kaynak ve dokümantasyon. https://github.com/RUB-SysSec/Nyx
- S. Schumilo ve diğerleri, "kAFL: Hardware-Assisted Feedback Fuzzing for OS Kernels," USENIX Security 2017; kAFL dokümantasyonu. https://intellabs.github.io/kAFL/
- Intel 64 and IA-32 SDM, Vol. 3C — Intel Processor Trace.