Skip to content

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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