Skip to content

Cross-Core Prefetcher Channel (PrefetchX)

PrefetchX, Intel'in belgelenmemiş XPT (eXtended Prediction Table) LLC-miss predictor'ını — global, cross-core bir yapıyı — cache-agnostic bir covert ve side channel olarak istismar eder.

Mechanism

Teori / invariant

XPT ("eXtended Prediction Table") bir spatial/temporal cache prefetcher değildir; last-level cache'e paralel duran bir LLC-miss predictor'dır. XPT bir load'ın LLC'yi miss edeceğini predict ettiğinde, DRAM read'i LLC lookup ile paralel olarak başlatır ve normal bir miss'ten ölçülebilir biçimde daha hızlı olan "optimized bir LLC miss" üretir.

PrefetchX, XPT'yi global, fully-associative, 256 entry'lik bir tablo olarak reverse-engineer eder; 4 KiB page başına bir entry, tüm core'lar ve process'ler tarafından paylaşılır. Bir page, >= 32 LLC miss biriktirdikten sonra "enabled" hale gelir; eviction, tüm process'ler boyunca global bir LRU kullanır. İki özellik bunu bir kanal yapar:

  • Cross-core: tablo tek bir paylaşımlı yapı olduğundan, bir core'da train edilen bir page, başka bir core'un gözlemlediğini değiştirir — paylaşımlı bir cache line ya da bir SMT kardeşi gerekmez.
  • Cache-agnostic: leakage primitive'i XPT entry state'idir (trained mı yoksa evicted/reset mi), saf olarak load latency üzerinden okunur. Cache hiyerarşisi hiçbir zaman sinyal değildir; bu yüzden cache partitioning ve cache tabanlı detection (krş. Prime+Probe, Flush+Reload) geçerli değildir.

İki root cause istismar edilir: (1) XPT eviction — yalnızca 256 entry ile, victim'in bellek etkinliği LRU üzerinden saldırganın en eski entry'sini evict eder; ve (2) TLB flush — bir page'in TLB mapping'ini flush'lamak onun XPT entry'sini de reset'ler; böylece context switch'ler, swap'ler ve permission değişiklikleri gözlemlenebilir hale gelir.

Walkthrough

Ice Lake'te rdtsc ile ölçülen latency katmanları: LLC hit < 160 cycle; normal LLC miss 350+ cycle; optimized (XPT) LLC miss ~170-330 cycle. Normal bir miss ile optimized bir miss arasındaki fark biti taşır.

PrefetchX-Evict primitive (paylaşımlı bellek yok)
# 1. PRIME: access >256 distinct 4 KiB pages so a target/oldest XPT
#          entry is tracked (table is global, fills across cores).
# 2. WAIT:  victim performs an operation (e.g. RSA 'square') that issues
#          >=32 LLC misses, evicting the attacker's oldest XPT entry.
# 3. PROBE: re-access the oldest page; measure latency.
#          optimized-miss latency  -> entry still trained (no victim activity)
#          normal-miss latency     -> entry evicted   (victim ran the op)

PrefetchX-Flush (paylaşımlı bellek gerektirir, daha düşük gürültü, daha yüksek throughput): gönderici, paylaşımlı bir page'in XPT state'ini reset'leyip/flush'layarak ya da etmeyerek bir bit kodlar; alıcı, train edilmiş page'i kabaca her 1 us'de bir yeniden kontrol eder. "XPT'yi reset etmedi" = 1, "reset etti" = 0.

Gösterilen sonuçlar (makale sayıları, AWS m6i.4xlarge, Xeon Platinum 8375C):

  • Covert channel'lar: PrefetchX-Flush <%1 hata ile 122 KiB/s; PrefetchX-Evict <%8 hata ile 21 KiB/s.
  • RSA side channel: en güncel MbedTLS ve GnuPG 1.4'teki Square-and-Multiply RSA — bir private-exponent byte'ı ~20 s'de, tam bir 2048-bit anahtara ~80 dakika olarak extrapolate edildi.
  • Normal-vs-optimized miss latency farkı üzerinden keystroke ve network-traffic side channel'ları.

Tuzaklar

  • XPT'deki "X" "eXtended"tır, "cross" değil. XPT, Extended Prediction Table'dır; PrefetchX ise onu core'lar boyunca istismar eden saldırıdır.
  • XPT esasen belgelenmemiştir — yalnızca Intel'in 3. nesil Xeon HPC tuning guide'ında kısaca tarif edilir, architecture manual'ında değil.
  • Kanal cross-core ve hiçbir context switch'in olmadığı hyperthread'ler boyunca çalışır; bu yüzden context switch'te XPT'yi temizlemek tek başına yetersizdir.

Detection

Cache tabanlı detector'lar bu kanalı görmez çünkü sinyali olarak cache hiyerarşisini hiçbir zaman kullanmaz. Detection bunun yerine XPT-priming davranışını (>256 page'i süpürmek) ya da anormal optimized-miss latency pattern'lerini izlemelidir.

Mitigation

  • XPT prefetcher'ı devre dışı bırak — leak'i tamamen engeller ama bellek-yoğun, düzensiz erişimli workload'larda performansa mal olur.
  • XPT'yi partition'la (tercih edilen), her entry'de zaten mevcut olan ASID ve CoreID tag'lerini kullanarak; böylece entry'ler core'lar ya da process'ler boyunca evict/gözlem edilemez — özelliği devre dışı bırakmadan leakage-free.
  • 3. nesil Intel Xeon (Ice Lake / Sunny Cove) üzerinde doğrulandı; Intel PSIRT'e açıklandı.

References