ScatterCache¶
Werner et al. (USENIX Security 2019): a randomized skewed-associative cache that uses a keyed Index Derivation Function to map each (address, security domain) to a different set in every cache way, eliminating fixed cache-set congruences so attackers cannot build static eviction sets for Prime+Probe.
Mechanism¶
Neden çalışır
Prime+Probe gibi conflict-based cache saldırıları istikrarlı, saldırganın keşfedebileceği bir mapping'e bağlıdır: normal bir set-associative cache'te address bit'leri sabit bir set seçer, böylece bir saldırgan hepsi victim'in set'ine map'lenen bir address grubu toplayabilir — bir eviction set — ve contention yoluyla victim'in erişimlerini tespit edebilir. Tüm saldırı, bir address'i (ya da aynı set-index bit'lerini) paylaşan iki process'in öngörülebilir, statik bir şekilde çakıştığı invariant'ına dayanır.
ScatterCache bu invariant'ı iki birleşik adımda yok eder:
- Skewed associativity. Tüm way'ler tarafından paylaşılan tek bir set index yerine, her cache way'i bağımsız olarak index'lenir, böylece bir address cache boyunca "scatter" edilir — ait olduğu tek bir physical set yoktur.
- Keyed bir Index Derivation Function (IDF). IDF, address'i ve per-security-domain bir key/identifier'ı alır ve "her input address için, cache set'i oluşturmak üzere nways index çıkarır." Mapping keyed ve security-domain bağımlı olduğu için, bir victim ile bir saldırganın paylaştığı line kümesi farklı ve gizlidir.
Sonuç: "tamamen örtüşen cache set'leri bulmak neredeyse imkânsızdır." İki domain bir address'in hangi physical line'ları işgal ettiği konusunda asla anlaşmaz, bu yüzden saldırgan bir statik eviction set'i enumerate edemez ve algılanan (mantıksal) cache set sayısı physical cache'ten çok daha büyük olur. Koruma, partitioning yerine randomize edilmiş, keyed congruence'tır — domain başına statik olarak kapasite rezerve etmeden cache saldırılarının sömürdüğü öngörülebilirliği kaldırır.
Walkthrough¶
ScatterCache bir hardware tasarımıdır (bir microarchitectural öneri / simülasyon), bu yüzden bir komut çalıştırmak yerine onun üzerine akıl yürütürsünüz. Mapping, kavramsal olarak:
classic set-assoc cache:
set_index = addr[ s+l-1 : l ] # same index for ALL ways
line = cache[set_index][0..W-1] # one fixed set -> static eviction set
ScatterCache:
for way in 0..W-1:
idx[way] = IDF(key_domain, addr, way) # keyed, per-way, per-domain
line scattered across cache[idx[0]][0], cache[idx[1]][1], ...
Per-way scatter'ı gerçekleştirmenin iki yolu (makaleden): partition başına ayrı bir key / domain identifier kullanın ya da tek bir key/identifier kullanın ama index bit'lerinin konumunu partition (way) numarasına bağımlı yapın.
Bir Prime+Probe eviction set'i neden artık transfer olmaz
Saldırgan, victim'in address'ine map'lendiğine inandığı bir mantıksal set'i prime eder.
Domain-bağımlı bir IDF altında, saldırganın domain key'i victim'inkinden farklıdır, bu
yüzden per-way index'leri IDF(key_atk, addr, w) ve IDF(key_vic, addr, w) ayrışır —
prime edilen line'lar ve victim'in line'ları yalnızca kısmen örtüşür ve bu örtüşme
saldırgana bilinmez.
eviction-set construction için gereken
deterministik contention sinyali çöker.
Detection¶
Runtime alarmı olarak geçerli değil — ScatterCache savunmacı bir cache microarchitecture'ı, yazılıma şeffaf. Varlığı yalnızca istikrarlı conflict-based kanalların yokluğu olarak gözlemlenir (eviction-set arama algoritmaları küçük, yeniden kullanılabilir bir set'te yakınsamada başarısız olur).
Mitigation¶
(Artık risk / bypass.) ScatterCache, contention'ın var olup olmadığını değil, hangi line'ların çakıştığını randomize eder, bu yüzden kanalı zayıflatır ama tamamen ortadan kaldırmaz:
- Probabilistic / dynamic Prime+Probe. Sonraki çalışmalar, bir saldırganın tek bir statik eviction set inşa etmek yerine kısmen-örtüşen set'leri dinamik olarak profilleyerek hâlâ probabilistic Prime+Probe ve covert channel'lar kurabileceğini gösterir (bkz. Advanced profiling for probabilistic Prime+Probe ... in ScatterCache). Periyodik re-keying bunu sınırlar ama kaldırmaz.
- Set index'inin tek bir global keyed permutasyonunu uygulayan CEASER'in (ve onun skewed varyantı CEASER-S'in) aksine, ScatterCache her cache way'ini bağımsız olarak keyed bir Index Derivation Function (IDF) ile — per-way ve per-security-domain — index'ler, böylece bir address cache boyunca "scatter" edilir ve ait olduğu tek bir physical set olmaz. Bu per-way, per-domain randomization eviction-set arama maliyetini çok daha yükseğe iter, ama güvenlik argümanı mutlak değil, istatistiksel kalır.
References¶
- Werner, Unterluggauer, Giner, Schwarz, Gruss, Mangard. ScatterCache: Thwarting Cache Attacks via Cache Set Randomization, USENIX Security 2019, pp. 675–692. — https://www.usenix.org/conference/usenixsecurity19/presentation/werner
- PDF mirror. — https://gruss.cc/files/scattercache.pdf