Skip to content

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