FLARE-targeted KASLR breaks¶
Timing yoluyla mapped/kullanılan kernel page'leri unmapped/kullanılmayanlardan ayırt eden microarchitectural KASLR break sınıfı — FLARE'in silmek için tasarlandığı özelliğin ta kendisi.
Mechanism¶
Neden çalışır
Çoğu microarchitectural KASLR break, tek bir kök invariant'ı paylaşır: unprivileged koddan, bir CPU mapped (physically backed) olan bir kernel adresi için, olmayana göre farklı davranır ve bu fark timing ile gözlemlenebilir. Kernel image tam olarak tek bir randomize edilmiş slide'da yaşar, dolayısıyla hangi aday adreslerin "kullanıldığını" bulmak slide'ı ortaya çıkarır.
Bu sınıfın üyeleri arasında prefetch side channel, TSX-abort probing (DrK), load-stall vs. transient-load probing (EchoLoad) ve tagged-TLB tabanlı probing (TagBleed) bulunur. Hepsi KASLR: Break It, Fix It, Repeat'teki generic savunma olan FLARE tarafından hedeflenir:
- Her durumda leak, kernel page'lerinin used/unused ayırt edilebilirliğidir (translation cached mı değil mi, fault teslim mi edildi bastırıldı mı, load stall mı ediyor yoksa devam mı ediyor).
- FLARE'in karşı önlemi: aksi halde kullanılmayan tüm kernel adreslerini tek bir reserved dummy page'e map'lemek ve komşularının permission bit'lerini mirror'lamak; böylece her probe edilen kernel adresi tutarlı permission'larla mapped görünür — break'lerin dayandığı timing sinyalini çökerterek.
Bu atom en iyi savunulan saldırı yüzeyi olarak anlaşılır: oracle'ı "bu kernel page kullanılıyor mu?" olan her side channel kapsama girer.
Walkthrough¶
Sınıf genelinde paylaşılan probe biçimi "boz, bir kernel adayına eriş, ölç"tür:
// Generic used/unused oracle (instantiated differently per attack).
int kernel_page_used(void *candidate) {
prepare_channel(); // flush / set up TSX / fault suppression
probe_kernel_address(candidate); // prefetch, TSX-load, or transient load
return measure() < THRESHOLD; // fast/abort-class => mapped (used)
}
// Sweep KASLR base candidates; the contiguous "used" region == kernel image.
for (uint64_t base = KBASE_MIN; base <= KBASE_MAX; base += KSTEP)
if (kernel_page_used((void*)base)) record_slide(base);
FLARE uygulandığında kernel_page_used(), tüm adaylar için "used" döndürür,
dolayısıyla süpürme hiçbir bilgi vermez.
FLARE'in etkisi (kavramsal)
Mitigation¶
- FLARE: reserved-page mapping + mirror'lanmış permission bit'leri, ihmal edilebilir overhead, tüm "used vs. unused" oracle sınıfını etkisiz kılar.
- Belirli oracle'ları kaldırmak (TSX'i devre dışı bırakmak, prefetch/timer'ları kısıtlamak) yardımcı olur ama generic değil, saldırı başınadır.