Slice+Slice (fast LLC eviction set generation)¶
Bir adresin hangi LLC slice'ına map'lendiğini microarchitectural bir timing race ile belirlemek, ardından slice function'ını kullanarak eviction set'leri page offset'leri arasında propagate etmek — tam eviction set'leri iki saniyenin altında inşa etmek.
Mechanism¶
Note
Intel last-level cache'leri çekirdek başına slice'lara bölünür; bir physical address bir slice'a, physical-address bit'leri üzerinden açıklanmamış, çoğu zaman non-linear bir hash ile map'lenir, bu da eviction set inşa etmeyi pahalı kılar. Slice+Slice, iki bellek erişimi arasındaki microarchitectural bir race'i sömürür — biri target adrese, biri bilinen-slice'lı bir "compare" adresine — ve target'ın slice'ını bunların göreceli timing'inden ("win probability") çıkarır. Bir adresin slice'ını bilmek, saldırganın slice mapping'ini diğer adreslere extrapolate etmesine ve eviction set'leri 4 KB page offset'leri arasında propagate etmesine imkân verir, böylece eviction set'lerin yalnızca küçük bir kısmı yavaş (geleneksel) yolla inşa edilmek zorunda kalır.
Walkthrough¶
Slice, RDTSCP ile zamanlanan bir "comparator gate" race'iyle belirlenir;
timing aralığını büyütmek için speculative execution ve conditional return-address
değişikliği kullanılır:
1. issue access to target T and to compare address C (known slice s_C) concurrently
2. RDTSCP-time which access "wins" the comparator gate
3. win-probability distribution => infer slice(T)
4. use the recovered hash to extrapolate slice mappings and propagate
eviction sets across page offsets
Raporlanan sonuçlar
- Tam eviction-set üretimi Intel i7-9850H'de ~0.7 saniye ve i9-10900K'de ~1.6 saniye, ikisi de non-linear slice hash'leriyle.
- Toplam eviction set'lerin yalnızca ~%15-22'si geleneksel construction gerektirir; geri kalanı page offset'leri arasında propagate edilir.
- Slice-identification doğruluğu herhangi bir çekirdekten ~%97.
Mitigation¶
Slice mapping'ini zaman içinde değiştiren randomize/skew edilmiş cache indexing (CEASER tarzı şemalar) ve cache partitioning, slice function'ını geri kazanmanın maliyetini yükseltir ve propagate edilmiş eviction set'lerin yeniden kullanılabilirliğini azaltır.