Prime+Scope¶
"Observer effect"i aşan high-precision bir Prime+Probe: priming'den sonra tek bir scope line'ı, bir sonraki tek eviction adayıdır, böylece tek bir hızlı/yavaş erişim victim'in set'e dokunduğu anı söyler — primed state'i bozmadan.
Mechanism¶
Neden çalışır
Klasik Prime+Probe'un bir observer effect'i vardır: set'i probe etmek
tüm W eviction-set line'ına tekrar erişmek demektir; bu hem çok cycle
alır (kaba zamansal çözünürlük) hem de yan etki olarak set'i yeniden prime
eder (yani ölçüm, ölçülen state'in ta kendisini bozar). Bir pencere boyunca
bir victim erişiminin olduğunu öğrenirsin ama tam olarak ne zaman
olduğunu öğrenemezsin ve bir sonraki gözlemden önce yeniden prime etmen
gerekir.
Prime+Scope bunu cache replacement policy'den faydalanarak ortadan kaldırır. Priming'den sonra attacker belirli bir line'ı — scope line'ı — set'in tek (unique) bir sonraki eviction adayı olacak şekilde ayarlar. Invariant şu: set'e map'lenen ilk victim erişimi tam olarak scope line'ı evict eder, başka hiçbir şeyi değil. Attacker sonra tekrar tekrar yalnızca scope line'a erişir. Cache'te kaldığı sürece erişim hızlıdır (birkaç cycle); yavaşladığı an victim set'e az önce erişmiştir — ve yalnızca scope line bozulduğundan primed set'in geri kalanı sağlamdır, dolayısıyla izleme yeniden prime etmeye gerek kalmadan hemen sürebilir.
Bu, detection'ı (tek, ucuz, tekrarlanabilir bir scope erişimi) priming'den (bir kez yapılır) ayırır; victim erişimlerinin cycle-accurate timing'ini verir ve kanalı high-bandwidth, low-noise bir covert channel ve hassas bir eavesdropping primitive'i olarak uygun hale getirir. Teknik Antoon Purnal, Furkan Turan ve Ingrid Verbauwhede'ye aittir (CCS 2021); KU Leuven COSIC tarafından açık kaynak bir implementation yayımlanmıştır. Hem inclusive hem de non-inclusive Intel last-level cache'lerinde çalışacak şekilde tasarlanmıştır.
Walkthrough¶
Çekirdek döngü şudur: bir kez prime et → tek sentinel line'ı "scope"lamaya devam et.
// es[0..W-1] : congruent eviction set; es[SCOPE] is set up as the unique
// next-eviction candidate after priming (order/access pattern is policy-aware)
static inline void prime(void) {
for (int i = 0; i < W; i++) // fill the set
(void)*(volatile char *)es[i];
set_scope_as_next_victim(es); // make es[SCOPE] the LRU/next-evict
}
static inline uint64_t scope(void) { // ONE timed access
unsigned aux;
uint64_t t0 = __rdtscp(&aux);
(void)*(volatile char *)es[SCOPE]; // the single sentinel access
uint64_t t1 = __rdtscp(&aux);
return t1 - t0; // slow => victim just hit the set
}
Kullanım — bir kez prime et, sonra scope line'ı yüksek hızda poll et:
prime();
for (;;) {
uint64_t t = scope(); // a few cycles normally...
if (t > THRESHOLD) { // ...slow => victim accessed THIS set, now
record_timestamp();
prime(); // re-prime only after a detected event
}
}
Her detection yalnızca bir erişime mal olduğundan, ölçüm penceresi tam bir
W-line probe'undan çok daha incedir ve primed state gözlem eylemiyle yok
edilmez. Yayımlanan artifact bunun dayandığı parçaları bir araya getirir:
primescope_demo basic Prime+Scope demonstration
evsets eviction-set construction for inclusive AND non-inclusive caches
primetime finds efficient PRIME access patterns (policy-aware ordering)
covert_inclusive cross-core covert channel using variable-time memory accesses
Replacement-policy bağımlılığı
Scope line'ı deterministik bir sonraki victim olarak ayarlamak, set'in
replacement davranışını bilmeyi / zorlamayı gerektirir, dolayısıyla prime
sıralaması target microarchitecture'a göre ayarlanır (bunu primetime ve
evsets araçları halleder). Adaptive ya da randomized replacement'a sahip
cache'lerde single-victim garantisi zayıflar.
Mitigation¶
- Constant-time code: secret-independent memory erişimleri, scope line'ın gözlemleyeceği set'e özgü hiçbir şey bırakmaz.
- Cache partitioning / coloring, attacker'a victim'le paylaşılan bir set vermez.
- Randomized cache'ler (ScatterCache, CEASER-S) sabit mapping'i kırar; ama Prime+Prune+Probe bunları hedef aldığından randomization tam bir cevap değildir.
References¶
- Antoon Purnal, Furkan Turan, Ingrid Verbauwhede. Prime+Scope: Overcoming the Observer Effect for High-Precision Cache Contention Attacks. ACM CCS 2021 — https://dl.acm.org/doi/10.1145/3460120.3484816
- Author PDF — https://antoonpurnal.github.io/files/pdf/PrimeScope.pdf
- Open-source implementation (KU Leuven COSIC) — https://github.com/KULeuven-COSIC/PRIME-SCOPE