Data Bounce¶
Store edilen bir değerin store buffer üzerinden transient olarak geri forward edilip edilmediğini kontrol ederek bir virtual address'in geçerli olup olmadığını test eder ve KASLR'ı kırar (Fallout, Canella vd.).
Mechanism¶
Store buffer, az önce yazılan bir değeri aynı address'e gelen sonraki bir load'a forward eder (store-to-load forwarding). Write Transient Forwarding (WTF), bu forwarding'in fault'laması gereken load'lar için bile transient olarak gerçekleşmesi flaw'ıdır — ama yalnızca address'in geçerli bir translation'ı olduğunda.
Note
Data Bounce bunu kullanır: bir hedef address'e bilinen bir değer store et, sonra ondan load et. Eğer address geçerli/translate edilebilir ise, store edilen değer forward edilir ve transient load onu bir cache covert channel'a encode eder; eğer address geçersiz ise, hiçbir forwarding/cache etkisi olmaz. Invariant basitçe forwarding-başarısı ⇔ address-geçerli'dir; bu hangi kernel address'lerinin backed olduğunu haritalar ve randomize edilmiş kernel base'ini açığa çıkarır.
Walkthrough¶
- Store. Aday bir kernel virtual address'i için, transient window içinde ona bir marker değer store et.
- Bounce. Aynı address'ten transient olarak load et ve yüklenen değeri attacker'a ait bir probe array'ini index'lemek için kullan (cache channel).
- Decode. Probe array'ini
FLUSH+RELOADile çöz: bir hit, değerin forward edildiği ⇒ address'in geçerli olduğu anlamına gelir. - Kernel base'ini bulmak için KASLR aday aralığını tara.
Note
İyileştirme olan Fetch+Bounce, Data Bounce'u iki kez çalıştırır: ilk denemede başarı, translation'ın zaten TLB'de olduğu anlamına gelir; başarının yalnızca ikincide gelmesi, translation'ı önce walk edilmesi gereken geçerli bir address anlamına gelir — TLB residency / page-walk state'ini sızdırır.
VUSec, Data Bounce'u Linux ve Windows üzerinde, native ve VM içinde, en hızlı, en güvenilir KASLR break olarak rapor eder ve in-silicon Meltdown patch'li CPU'larda hâlâ çalışır.
Detection¶
MDS ailesiyle aynı — kitlesel faulting-load / transient probing'in heuristik tespiti; temiz bir sinyal yok.
Mitigation¶
MDS sınıfı microcode artı context switch'te buffer temizleme (VERW/MD_CLEAR); store-to-load forwarding'i serialize etme / forward etmeden önce translation'ı doğrulama. KPTI bazı kernel-leak varyantlarına yardımcı olur ama aksi takdirde Meltdown-patch'li silikonda KASLR break'ini durdurmaz.