Cross-domain hypervisor exploitation (breaking isolation via shared state)¶
Tek bir device-emulation bug'ı üzerinden escape etmek yerine, hypervisor'ın domain'ler arasında paylaştığı state'i — cache'ler, TLB'ler, predictor yapıları, ring buffer'lar, grant table'lar, freed object'ler — suistimal eden bir guest-to-host / guest-to-guest saldırı sınıfı; amaç veri sızdırmak ya da başka bir domain'in görünümünü bozmaktır.
Mechanism¶
Note
Bir hypervisor'ın temel vaadi domain isolation'dır: domain A, izin verilen kanallar dışında domain B'yi (ya da host'u) okuyamamalı, yazamamalı veya etkileyememelidir. Cross-domain bug sınıfı, host'un mantıksal olarak per-domain ama fiziksel olarak paylaşılan ve tam olarak partition'lanmamış ya da flush edilmemiş bir state tuttuğu her yerde ortaya çıkar. Tekrarlayan üç alt-pattern: (1) microarchitectural sharing — doğru flush/tag edilmediğinde domain'ler arasında sızan cache'ler, TLB'ler, branch predictor'lar, store buffer'lar (transient-execution saldırılarının ve ASID/VPID flush bug'larının zemini); (2) shared software state — bir race ya da stale pointer'ın bir domain'in diğerini etkilemesine izin verdiği ring buffer'lar, grant table'lar, shared-memory ABI'lar ya da reference-count'lu object'ler (örn. grant-table unmap race'leri, FIFO event-channel UAF'leri); (3) stale translation / object reuse — ikinci bir domain'e verilen ama hâlâ ilki tarafından erişilebilen freed bir page ya da mapping.
İhlal edilen birleştirici invariant, cross-domain state'in tam partition'lanmasıdır. Bu saldırılar çoğu zaman bir device model'inde memory-corruption primitive'ine ihtiyaç duymaz; hypervisor'ın domain'leri multiplex etmek için kullandığı tesisatı exploit ederler.
Walkthrough¶
Bu bir şemsiye tekniktir; somut örnekler kendi entry'lerinde belgelenir. Bir shared-state surface'ini değerlendirmek için kavramsal akıl yürütme yolu:
- Host'un domain'ler arasında paylaştığı state'i enumerate et: fiziksel cache'ler/TLB'ler/predictor'lar; paylaşılan host memory'siyle desteklenen per-domain control yapıları; grant/event-channel table'ları; freed-then-reused frame'ler.
- Her biri için sor: partition'lanmış mı (per-domain kopya), tagged mı (ASID/VPID), yoksa her domain switch'inde flush mı ediliyor? Hiçbiri değilse, bu bir aday kanaldır.
- Domain A'da shared state'i yazan/prime eden bir probe inşa et, sonra domain B'nin (ya da host path'inin) onu gözlemlemesini sağla — bir covert/side channel — ya da host'un B'ye hizmet ederken A'nın stale object'i üzerinde işlem yapmasına yol açan bir race kur.
- Beklenen gözlem: aralarında izin verilen bir kanal olmadan, A'nın secret'ına/eylemlerine bağlı olan B'deki veri ya da davranış.
Warning
Tek bir örneği mitigate etmek (örn. bir grant-table race'ini patch'lemek) sınıfı kapatmaz. Shared-state partition'lamayı bir CVE listesi olarak değil, her surface için denetlenen bir tasarım invariant'ı olarak ele al.
Detection¶
- Host tarafı: anormal cross-domain korelasyon (B'nin timing/davranışının A'yı izlemesi); ihlal edilmiş reference-count ya da mapping-lifetime invariant'ları; introspection'ın bir domain'i kendi assignment'ı dışındaki memory'ye dokunurken görmesi.
- Microarchitectural varyantların runtime'da saptanması zordur; flush-on-switch denetimine ve bilinen saldırı imzalarına güven.
Mitigation¶
- Her per-domain yapıyı partition'la ya da tag'le; threat model gerektirdiğinde domain switch'inde microarchitectural state'i (cache'ler, predictor'lar, TLB tag'leri) flush et; yüksek-güvence tenant'lar için core scheduling / single-domain-per-core etkinleştir.
- Shared-memory ABI'ları (grant table'lar, event channel'lar, virtio ring'leri) race'ler ve stale-pointer reuse'u için denetle; freed page'leri yeni bir domain'e vermeden önce sıfırla ya da yeniden key'le.
- Hypervisor TCB'sini küçük tut ve spesifik shared-state CVE'leri için vendor advisory'lerini (Xen XSA'ları, KVM/Hyper-V advisory'leri) hızla uygula.
References¶
- Xen Security Advisory 218, "Races in the grant table unmap code" (CVE-2017-10913/10914) — grant-table cross-domain isolation class, https://xenbits.xen.org/xsa/advisory-218.html
- Xen Security Advisory 188, "Use after free in FIFO event channel code" (CVE-2016-7154) — event-channel shared-state isolation class, https://xenbits.xen.org/xsa/advisory-188.html
- General transient-execution / microarchitectural isolation literature (cache/TLB/predictor cross-domain leakage); see the corpus ASID/VPID tagging entry.