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ızcat(ya da2t)tREFI'yi böldüğünde görünür;tREFI / t > 5ise 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.