SLUBStick software cross-cache arbitrary write¶
Bir SLUB allocator timing
side channel'ı kullanarak software-only bir cross-cache attack'i güvenilir (>%99) hale getir; sınırlı birheapgüvenlik açığını arbitrary page-table read/write'a — ve dolayısıyla tam bellek kontrolüne — yükselt.
Mechanism¶
Cross-cache attack'ler bir slab'ı free eder, böylece sayfaları page allocator'a döner, sonra başka bir tipteki victim object'in üzerine bindirmek için onları farklı bir cache'e yeniden allocate eder. Klasik zayıflıkları belirsizliktir: attacker hedef slab page'inin gerçekte ne zaman geri dönüştürüldüğünü güvenilir biçimde söyleyemez, dolayısıyla başarı tarihsel olarak ~%40 civarındaydı ve başarısızlıklar sıkça sistemi çökertirdi.
Note
SLUBStick (USENIX Security 2024, TU Graz) bu boşluğu bir allocator timing side channel'ı ile kapatır: allocation latency'sini ölçerek free edilmiş bir slab page'inin döndürülüp yeniden kullanılıp kullanılmadığını güvenilir biçimde belirler ve sık kullanılan generic kmalloc cache'leri için cross-cache güvenilirliğini %99'un üzerine çıkarır. Güvenilir page yeniden kullanımıyla, page table'ları manipüle eden kernel kod pattern'lerini exploit eder ve sınırlı bir heap primitive'ini bir arbitrary page-table read/write'a — ve dolayısıyla tüm sistem belleği üzerinde kontrole — yükseltir; SMEP, SMAP ve KASLR'ı yener.
Walkthrough¶
Mevcut sınırlı bir heap bug'ının üzerinde kavramsal pipeline (paper'dan):
Heap'i stabilize et ve bir hedef slab'ın sayfalarının page allocator tarafından ne zaman free edilip geri dönüştürüldüğünü gözlemlemek için timingside channel'ı kullan.- Cross-cache pivot: geri dönüştürülmüş sayfaları hassas bir object tutan bir cache'e yeniden allocate et — onları özellikle bir page table'ı (PTE page) backleyecek şekilde yönlendir.
- Arbitrary R/W: sınırlı bug artık bir page-table entry'sini corrupt eder; bir PTE'yi kontrol etmek herhangi bir fiziksel
page'in read/write'ını, yani arbitrary kernel bellek erişimini verir. - Escalate: credential'ları / kernel data'sını patch'lemek ve root kazanmak için page-table primitive'ini kullan.
Gösterilen kapsam
Yazarlar en az dokuz gerçek CVE'ye (ör. CVE-2023-3609, CVE-2022-32250, CVE-2022-29582, CVE-2022-27666, CVE-2021-4157, CVE-2021-3492) uygulanabilirlik raporlar; SMEP, SMAP ve KASLR'a karşı etkili değerlendirilmiştir.
Detection¶
Tanımlayıcı davranış, generic bir kmalloc cache'ine karşı allocate/free/measure timing probe'larının sıkı bir loop'u artı kitlesel page-table allocation'ıdır — allocator instrumentation'ına ve alışılmadık page-table büyüme monitoring'ine gözlemlenebilir.
Mitigation¶
Free edilmiş slab sayfalarının yeniden tiplendirilememesi için slab page address space'lerini pin'lemek (SLAB_VIRTUAL önerisi) cross-cache yeniden kullanımı doğrudan yener; allocator timing gözlemlenebilirliğini azaltmak ve page-table sayfalarını generic cache'lerden izole etmek de tekniği köreltir. Standart W^X/SMEP/SMAP/KASLR onu durdurmaz.