TagBleed tagged-TLB KASLR break¶
Kernel page-table isolation (KPTI/KAISER) esas olarak Meltdown'u mitigate etmek için tasarlandı; TLB-tabanlı KASLR side-channel'larını zorlaştırması ikincil bir etkidir. Ama tagged TLB'ler (PCID/ASID) kernel translation'larını user/kernel switch boyunca resident bırakır, bu yüzden KPTI izolasyonuna rağmen TagBleed, randomize edilmiş kernel virtual-address bit'lerini kurtarmak için o residual TLB entry'lerini probe eder.
Mechanism¶
Note
Page-table isolation'ı uygun maliyetli hale getirmek için x86, TLB entry'lerini bir Process-Context Identifier (PCID) ile tag'ler (ARM bir ASID kullanır). Tagging, CPU'nun birden çok address space'ten entry'leri TLB'de tutmasına ve bir context switch'te full flush'ı atlamasına izin verir — entry'ler basitçe tag'e göre filtrelenir. TagBleed'in suistimal ettiği şey tam olarak bu optimization'dır: bir kernel syscall user space'e döndükten sonra, kernel'in TLB entry'leri flush edilmek yerine resident kalır. TLB set-associative'dir ve bir entry'nin hangi set'i işgal ettiği page'in virtual-address bit'lerinin bir fonksiyonudur. KASLR o bit'leri randomize eder, bu yüzden kernel'in hangi set'leri doldurduğu kendi başına secret'tir. Seçilen TLB set'lerini evict ederek ve sonraki bir kernel access'in bir TLB miss'e yol açıp açmadığını timing'leyerek attacker, kernel'in hangi set'lere dokunduğunu öğrenir — ve dolayısıyla onları index'leyen randomize edilmiş kernel virtual-address bit'lerini. Isolation kernel'in data'sını sakladı, ama tagged TLB hâlâ onun addressing'ini leak eder.
Walkthrough¶
PCID-tagged TLB'lere sahip bir Intel Core i7-6700K (Skylake) üzerinde değerlendirildi; attack, isolated bir kernel'e karşı unprivileged user kodudur.
-
TLB geometry'sini profile et. L1 dTLB/iTLB ve shared L2 STLB'nin set sayısını ve associativity'sini ve her set'i seçen virtual-address bit'lerini belirle. Bu, kernel VA bit'lerinden TLB set index'ine mapping'i sabitler.
-
Bir target set'i prime'la. Seçilen bir TLB set'ine map olan controlled bir user page eviction set'ine access et, way'lerini doldurarak.
-
Bir syscall üzerinden kernel'i çağır ki kernel (randomize edilmiş) page'lerini walk etsin ve translation'lar install etsin — PCID altında bunlar return'den sonra kalıcı olur.
// Probe one TLB set: prime it, enter the kernel, then re-time our own pages.
// A slow re-access (eviction) means the kernel installed a translation in
// THIS set -> the kernel touched a page whose VA bits index this set.
prime_tlb_set(set);
syscall(SYS_getpid); // kernel populates its tagged TLB entries
uint64_t t0 = rdtscp();
touch(eviction_page_for(set)); // our page in the same set
uint64_t t1 = rdtscp();
if (t1 - t0 > TLB_MISS_THRESHOLD)
kernel_used_set[set] = 1; // residual kernel entry collided here
- Tüm set'leri tara ve kernel'in hangi set'leri doldurduğunu oku. İşgal edilen set index'leri onları seçen kernel VA bit'lerini açığa çıkarır, KASLR entropy'sini daraltır. TagBleed, bu TLB channel'ını kalan bit'leri kurtarmak ve kernel image'ini tamamen derandomize etmek için tamamlayıcı cache-based bir side channel ile birleştirir — ~4 dakikanın altında bir VM'in tamamen remote KASLR break'i dahil.
Expected behavior
Defense bypassed: KPTI/KAISER kernel page-table isolation
Root cause: PCID/ASID-tagged TLB not flushed -> residual kernel entries
Channel: set-associative TLB; set index = f(virtual-address bits)
Probe: evict a TLB set, syscall, time re-access -> miss = kernel hit
Leak: kernel VA bits indexing populated sets => KASLR entropy
Platform: Intel Core i7-6700K (Skylake); combined with cache channel
Result: kernel derandomized; remote VM break < ~4 minutes
Detection¶
Attack, yüksek syscall ve TLB-miss oranlarına sahip sıkı bir prime/syscall/time loop'udur; syscall başına TLB miss'leri üzerinde performance-counter anomaly detection'ı onu kusurlu da olsa işaretleyebilir. Leak aksi takdirde architectural olarak sessizdir.
Mitigation¶
Kernel TLB tag'lerini user/kernel boundary'sinde flush et (PCID performans faydasından vazgeçerek), ya da TLB-set kullanımını partition/randomize et ki kernel set occupancy'si hiçbir VA bilgisi taşımasın; KASLR entropy'sini TLB geometry'sinin çözebileceğinin ötesine artır. Bkz. ../mitigation/kpti.md, ../mitigation/kva-shadow.md, and ../mitigation/kernel-address-space-layout-randomization.md; aynı-channel TLBleed ile karşılaştır.