Skip to content

Reload+Refresh

Bir victim'in erişimlerini victim'in line'ını evict etmeden izleyen gizli bir cross-core cache saldırısı — last-level-cache replacement-policy state'ini manipüle eder, böylece victim'in verisi cache'te kalır, neredeyse hiç LLC miss üretmez ve miss-counter detector'larını alt eder.

Mechanism

Neden çalışır

Klasik shared-memory cache saldırıları (Flush+Reload, Evict+Reload) victim'in line'ını kaldırarak ve sonra victim'in onu geri getirip getirmediğini kontrol ederek çalışır. Bu kaldırma victim üzerinde bir cache miss'ine zorlar, ki bu tam olarak hardware-performance-counter detector'larının aradığı şeydir.

Reload+Refresh bu numarayı tersine çevirir. Set-associative LLC'ler bir miss'te bir victim line'ı deterministic bir replacement policy ile seçer — incelenen Intel part'larında cache set başına tree-based pseudo-LRU (PLRU). Replacement state, attacker'ın reverse-engineer edip sürebileceği küçük bir finite-state machine'dir: bir set'in congruent line'larına belirli bir sırada erişerek attacker bir sonraki miss'in tam olarak hangi way'i replace edeceğini öngörebilir ve izlenen victim line'ını bir sonraki evict edilecek way'e yerleştirecek şekilde ayarlayabilir — yine de resident kalmaya devam ederek.

Leak/transmit/decode invariant'ı:

  • Kurulum (Reload): target set'i prime et, böylece victim'in line'ı mevcut ve replacement state onu bir sonraki eviction adayı olarak gösterir.
  • Bekle: victim çalışır. İzlenen line'a eriştiyse o erişim PLRU state'ini günceller (line artık "recently used"), dolayısıyla artık sıradaki evict edilecek değildir; line'a erişmediyse state değişmez.
  • Refresh / decode: attacker tam olarak bir replacement tetikleyen tek bir congruent erişim yapar. Hangi line'ın evict edildiğini ölçerek — kendi helper line'ı mı yoksa victim line mı — victim'in izlenen line'a dokunup dokunmadığını öğrenir, sonra bir sonraki round için priming state'ini geri yükler.

Victim'in verisi attacker tarafından hiç evict edilmediğinden, victim ekstra cache miss yaşamaz: kanal cache miss'lerinden değil, replacement-state transition'larından okunur; onu gizli kılan da budur.

Walkthrough

Primitive, bir cache hit'i bir miss'ten ayırmak için kullanılan kalibre edilmiş, ölçülmüş bir erişimdir (Flush+Reload ile aynı rdtscp/maccess yapı taşı):

#include <stdint.h>
#include <x86intrin.h>

static inline uint64_t time_access(volatile char *p) {
    unsigned aux;
    uint64_t t0 = __rdtscp(&aux);
    (void)*p;                       // load
    uint64_t t1 = __rdtscp(&aux);
    return t1 - t0;                 // small => LLC hit, large => miss
}

İzlenen her set için attacker, sıralı bir congruent eviction helper kümesi E[0..k] tutar (victim line ile aynı LLC set'ine map'lenen adresler) ve PLRU'yu bilinen bir duruma sürer:

1. RELOAD : access the victim line V and helpers E[] in the policy-derived
            order so that:
               - V is resident, and
               - the PLRU tree points at V as the NEXT eviction candidate.
2. WAIT   : let the victim execute its secret-dependent code.
3. REFRESH: issue ONE congruent access that causes a single replacement, and
            time it / probe E[] to see what got evicted:
               - if V was evicted  -> victim did NOT touch V this round
               - if V survived     -> victim DID touch V (its access moved V
                                        out of the next-evict slot)
4. restore the priming order and loop.
Gösterilen hedefler ve detection sinyali (kavramsal)
Targets (paper):  AES T-table implementation -> recovered key bytes
                  RSA square-and-multiply    -> recovered exponent bits
Platform:         Intel LLC with tree-PLRU replacement
Detection signal: LLC-miss rate stays ~indistinguishable from a benign
                  process, because the victim line is never evicted by
                  the attacker. Miss-counter detectors that catch
                  Flush+Reload / Prime+Probe do not fire.

Erişim sırası detayı saldırının tamamıdır: aynı load'lar yanlış sırada ya victim'i evict eder (Evict+Reload'a dönüşüp gürültülü olur) ya da deterministik tek bir eviction kurmayı başaramaz. Tahminin geçerli olması için replacement policy doğru biçimde modellenmelidir.

Detection

  • Miss-rate / Flush+Reload detector'ları ona karşı kördür: attacker neredeyse hiç victim-side ya da attacker-side LLC miss üretmez.
  • Bunun yerine izlenecek artık (residual) sinyaller: yüksek oranda congruent-set erişimi ve karakteristik priming pattern'i; yazarlar, mevcut miss tabanlı olanlar geçerli olmadığından yeni detection karşı önlemlerinin gerektiğini belirtir.

Mitigation

  • Yapısal savunmalar hâlâ geçerlidir: cross-domain memory paylaşımından kaçın (page deduplication/KSM'yi devre dışı bırak), constant-time / scatter-gather crypto kullan, böylece secret'lar cache line seçmez.
  • Non-deterministic veya randomized replacement policy'leri saldırının dayandığı öngörülebilirliği kaldırır; LLC'yi partition'lamak (örn. cache coloring veya way partitioning) attacker'ın victim'in set'ini paylaşmasını önler.

References