Skip to content

TLBleed

Bir SMT sibling üzerindeki shared TLB set residency'si üzerinden bir victim'in memory access'lerini gözetle — data cache CAT/TSX ile tamamen isolate edilmiş olsa bile secret'ları leak eder.

Mechanism

Neden çalışır

Cache side-channel savunmaları (Intel CAT cache partitioning, TSX-based cache pinning), cache'in tek shared microarchitectural channel olduğunu varsayar. TLBleed (Gras, Razavi, Bos, Giuffrida — USENIX Security 2018), Translation Lookaside Buffer'ın o savunmaların kapsamadığı ikinci, bağımsız bir channel olduğunu gösterir. TLB, virtual→physical translation'ları cache'ler; set-associative'dir ve SMT (hyperthreaded) core'larda dTLB her iki logical thread tarafından paylaşılır. Victim bir page'e dokunduğunda, belirli bir TLB set'ine bir translation install eder; o set'i doldurmuş olan sibling core üzerindeki bir attacker thread'i, kendi entry'lerinden birinin evict edildiğini görür ve bunu timing ile tespit eder — TLB uzayında bir Prime+Probe.

İki parça onu çalıştırır:

  1. Reverse-engineer edilmiş TLB addressing. Bir virtual address'i bir TLB set'ine map eden fonksiyon undocumented'tı; yazarlar onu yakın Intel core'ları için reverse-engineer etti, böylece attacker belirli bir page'in hangi set'e map olduğunu bilir.
  2. Spatial değil, temporal analiz. Bir TLB set'i kabadır (çok sayıda page'i kapsar), bu yüzden basit varlık/yokluk zayıftır. Bunun yerine bir machine-learning classifier, victim'in secret-dependent access dizisini yeniden inşa etmek için set aktivitesinin zaman içindeki temporal pattern'ini okur.

Exploit edilen invariant: address translation, TLB'de cache isolation'dan bağımsız — ve onunla korunmayan — shared, gözlemlenebilir bir footprint bırakır.

Walkthrough

Attack, bir attacker thread'ini victim ile aynı physical core'a (SMT sibling) co-locate eder ve hedeflenen bir TLB set'ini Prime+Probe'lar.

  1. Co-locate. Attacker ve victim'i bir physical core'un iki logical CPU'suna pin et ki dTLB/sTLB'yi paylaşsınlar.
  2. Prime. Target TLB set'ine map olan bir page kümesini walk et, onu doldurarak.
  3. Victim secret-dependent kodu çalıştırırken bekle (örneğin key bit'lerine göre branch yapan bir scalar multiplication).
  4. Probe. Priming page'lerini tekrar access et ve walk'u timing'le; yavaş page'ler evict edildi → victim bu window'da o TLB set'ini kullandı.
  5. Classify. Bit dizisini kurtarmak için per-window timing serisini eğitilmiş bir classifier'a besle.
// Conceptual TLB Prime+Probe of one set (pages chosen to collide in that set)
for (int i = 0; i < WAYS; i++) (void)*(volatile char *)prime_pages[i];   // prime
victim_runs();                                                            // wait
for (int i = 0; i < WAYS; i++) {
    uint64_t t0 = rdtscp();
    (void)*(volatile char *)prime_pages[i];     // re-touch -> times the TLB walk
    samples[i] = rdtscp() - t0;                 // slow == evicted by victim
}
Reported results
Target: libgcrypt EdDSA (Curve25519), state-of-the-art cache isolation on
Leak: 256-bit EdDSA secret key
From a SINGLE capture + ~17 s of analysis -> 98% success
RSA (hardened against Flush+Reload): 92% of key bits reconstructed
Works through Intel CAT and TSX cache protections.

Detection

  • TLB-pressure Prime+Probe, anormal TLB miss oranları olarak ortaya çıkar; dTLB-load-misses / iTLB-load-misses gibi perf counter'ları anlaşmalı bir sibling'de spike yapar.
  • SMT co-location gereklidir, bu yüzden cross-tenant hyperthread paylaşımını tespit etmek/önlemek kendi başına bir ipucudur.

Mitigation

  • Trust boundary'leri boyunca SMT / hyperthreading'i devre dışı bırak, ya da sibling logical CPU'larda yalnızca birbirine güvenen thread'leri schedule et (single-tenant core'lar).
  • Constant-time, data-oblivious kod ki page-access (ve dolayısıyla TLB-set) pattern'i secret'tan bağımsız olsun — bkz. ../mitigation/constant-time-programming.md.
  • Cache-only savunmaların (CAT, TSX pinning) TLB'yi kapsamadığını kabul et.
  • İlgili cache/DRAM channel'ları: prime-probe, flush-reload, drama.

References