Skip to content

SMASH

Many-sided bir hammering pattern'ını memory controller'ın refresh (REF) komutlarıyla senkronize ederek in-DRAM TRR'nin tutarlı bir şekilde yanlış row'ları sample etmesini sağlamak — tamamen JavaScript'ten gerçekleştirilir.

Mechanism

Note

In-DRAM Target Row Refresh (TRR), sık activate edilen aggressor row'ları tespit eden bir sampler'a ve her REF komutunda muhtemel victim'leri refresh eden bir inhibitor'a sahiptir. Sampler, refresh interval'ı başına yalnızca sınırlı sayıda aggressor takip edebilir. SMASH'in içgörüsü şudur: bit flip'leri yalnızca çok aggressor değil, aynı zamanda doğru scheduling gerektirir: erişimleri öyle düzenle ki sampler aynı row'ları sample etmeye devam etsin, böylece diğer aggressor'lar hammer'lamak için serbest kalsın. SMASH bunu JavaScript'ten yapar — clflush olmadan ve garantili contiguous bellek olmadan — kendi self-evicting erişim pattern'ını memory controller'ın per-row REF komutlarıyla senkronize ederek; bu komutlar DDR4'te her tREFI ≈ 7.8 µs'de bir gelir.

Pattern, slice coloring ile bulunan double-sided aggressor çiftlerine ayrılır (slice-collision timing'i sömürür, jitter'lı JS timer'larını tolere etmek için amplify edilir). Senkronizasyon işin can alıcı noktasıdır: pattern refresh'e göre fazla hızlı çalışırsa hiç flip olmaz.

Walkthrough

SMASH, double-sided çiftler artı dummy erişimler ve cache hit'lerinden 18-sided bir pattern ("16-assisted double-sided" pattern) inşa eder, sonra timing'ini refresh'e göre ayarlar:

  • Hard synchronization (native): pattern'ın önüne NOP'lar ekle, böylece her iterasyon süresi t, tREFI'yi bölsün. Flip'ler yalnızca t (ya da 2t) tREFI'yi böldüğünde görünür; tREFI / t > 5 ise pattern fazla hızlıdır ve hiç flip olmaz.
  • Soft synchronization (JS): NOP'ları XOR loop'larıyla değiştir ve cache hit'lerini öyle dağıt ki controller'ın fırsatçı şekilde REF issue etmesi için tek bir NOP-gap kalsın — böylece tam NOP sayısını bilme ihtiyacı ortadan kalkar.
self-evicting pattern (reduced associativity W=3 on a 16-way LLC):
  [ double-sided pair ] [ 8 pairs of dummies ] [ 26 hits ]  x repeat
  -> aligned so REF lands on the intended gap each interval
Raporlanan kurulum ve sonuç
  • Test makinesi: Intel i7-7700K (Kaby Lake), 16-way LLC; iki ayrı satıcıdan DDR4.
  • Coloring: 5 rastgele huge page, her birinde 4 congruent adres (toplam 20); 8^5 = 32768 arasında 8 geçerli color permütasyonu arar; ArrayBuffer'ı destekleyen 500 huge page profilini çıkarır; transparent huge page'lere dayanır.
  • Uçtan uca: hiçbir software bug'ı olmadan Firefox'u ortalama ~15 dakikada tam olarak ele geçirir; ~1 dakika initialization.

Mitigation

SMASH, sahaya konuşlandırılmış in-DRAM TRR'yi bypass eder, dolayısıyla daha güçlü, controller seviyesinde refresh-management şemalarını motive etti. Tarayıcılarda transparent huge page'leri kaldırmak ve timer/eviction hassasiyetini azaltmak JavaScript varyantının maliyetini yükseltir.

References