Skip to content

TLB Contention Channel

Bir sibling hyperthread'de eş-konumlanıp (co-located), cache'ler izole olsa bile bir victim'in address-translation desenini kurtarmak için paylaşılan L1 dTLB / L2 sTLB'deki contention'ı zamanlamak.

Mechanism

Note

MMU, virtual-to-physical çevirileri iki seviyeli bir TLB hierarchy'sinde cache'ler: bölünmüş bir L1 (iTLB + dTLB) ve daha büyük paylaşılan bir L2 sTLB; her biri bir data cache gibi set ve way'lere bölünmüştür. Hyperthreading'li Intel core'larında L1 dTLB ve L2 sTLB sibling hyperthread'ler arasında rekabetçi şekilde paylaşılır (L1 iTLB statik olarak partition edilmiştir). Sibling logical core'daki bir saldırgan bir TLB eviction set'ini doldurur, sonra re-access'i zamanlar: izlenen bir set'te daha yüksek latency, victim'in saldırganın entry'leriyle çakışan (contend) bir çeviri yaptığı anlamına gelir ve LLC, CAT ya da TSX ile izole edilmiş olsa bile victim'in page-level erişim desenini sızdırır. Kanal yalnızca 4 KiB granüler ve mekânsal olarak kaba olduğundan, TLBleed sırları kurtarmak için temporal erişim desenini artı machine learning'i sömürür.

Kanonik örnek TLBleed'dir (Gras, Razavi, Bos, Giuffrida, USENIX Security 2018).

Walkthrough

  1. TLB'yi reverse-engineer et (microarch başına tek seferlik) — set/way'leri ve set-selection hash'ini (linear vs XOR-7/XOR-8) bulmak için perf üzerinden Intel PMC'lerini kullan (dtlb_load_misses.stlb_hit, dtlb_load_misses.miss_causes_a_walk).
  2. Monitor/eviction set'leri oluştur: tek bir hedef set'i dolduran, hepsi data-cache gürültüsünü gidermek için tek bir physical page'e map'lenen virtual adresler.
  3. SMT ile eş-konumlan: spy'ı sibling hyperthread'e sabitle (affinity syscall'ları ya da bulut co-residency'si).
  4. Erişimleri unprivileged zamanla: set'i pointer-chase et, lfence ile bracket'lenmiş rdtsc/rdtscp ile zamanla; yüksek latency, victim'in o set'teki bir adresi çevirdiği anlamına gelir.
  5. Temporal bir trace yakala — 16 L1 dTLB set'i boyunca tek bir signing operasyonunun (~2 ms).
  6. Bir SVM ile sınıflandır: hedef set'i belirle (ASLR'ı yenerek), dup-vs-add (EdDSA) operasyonlarını sınıflandır, peak-detect ile bir bitstream'e dök, kalanı brute-force et.
Reverse-engineer edilen yapı & sonuçlar (makaleden)
  • L1 dTLB: 16 set, 4 way, linear hash, paylaşılan (Sandybridge..Coffeelake).
  • L2 sTLB: Skylake/Coffeelake 128 set x 12 way, XOR-7 hash; Broadwell-Xeon 256 set x 6 way, XOR-8; sTLB set'leri 64-entry offset ile paylaşılır (en üst set bit'i hyperthread ID ile XOR'lanır).
  • EdDSA: tek bir capture'dan 256-bit Curve25519 anahtarı, 17 s analiz, %98 başarı (libgcrypt 1.6.3, non-constant-time). uarch başına: Skylake 0.998, Broadwell 0.982, Coffeelake 0.998.
  • RSA: tek bir capture'dan 1024-bit bir anahtarın >%92'sini kurtarır.
  • Intel CAT altında ve TSX transaction'ları içinde hâlâ çalışır.

Detection

Saldırı unprivileged'dır ve yalnızca rdtsc zamanlaması kullanır, minimal iz bırakır. Cloak (TSX) gibi savunmalar beklenmeyen TLB-miss desenlerinde abort edecek şekilde genişletilebilir; bu hem bir dedektör hem bir mitigation'dır.

Mitigation

Makalenin en basit çözümü hyperthreading (SMT)'i devre dışı bırakmak ya da hassas process'leri bir core'da izole şekilde scheduling yapmaktır (OpenBSD sonradan HT'yi varsayılan olarak kapattı). Diğer seçenekler: virtual adres uzayının software TLB partitioning'i, TLB way'lerinin hardware partitioning'i (Intel CAT / CATalyst'i genişleterek) ve TSX'i beklenmeyen TLB miss'lerinde capacity-abort edecek şekilde genişletmek. Adres uzaylarını ayırmak yardımcı olmaz — TLB physical olarak paylaşılır.

References