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:
- 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.
- 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.
- Co-locate. Attacker ve victim'i bir physical core'un iki logical CPU'suna pin et ki dTLB/sTLB'yi paylaşsınlar.
- Prime. Target TLB set'ine map olan bir page kümesini walk et, onu doldurarak.
- Victim secret-dependent kodu çalıştırırken bekle (örneğin key bit'lerine göre branch yapan bir scalar multiplication).
- 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ı.
- 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
Detection¶
- TLB-pressure Prime+Probe, anormal TLB miss oranları olarak ortaya çıkar;
dTLB-load-misses/iTLB-load-missesgibiperfcounter'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¶
- Ben Gras, Kaveh Razavi, Herbert Bos, Cristiano Giuffrida. Translation Leak-aside Buffer: Defeating Cache Side-channel Protections with TLB Attacks. USENIX Security 2018 — https://www.usenix.org/conference/usenixsecurity18/presentation/gras
- VU Amsterdam research record — https://research.vu.nl/en/publications/translation-leak-aside-buffer-defeating-cache-side-channel-protec/