SysBumps (speculative syscall KASLR break, Apple Silicon)¶
Apple Silicon için macOS'taki ilk KASLR break (CCS 2024): bir syscall'un Spectre gadget'ını speculatively çalıştırıp seçilmiş bir kernel adresine dokun, ardından TLB'yi Prime+Probe ile okuyup mapped'i unmapped'ten ayır — kernel'i derandomize et.
Mechanism¶
Neden çalışır
macOS kernel address-space layout randomization (KASLR) kernel base'i rastgele bir slide ile gizler; başarılı bir break, tahmin edilen bir kernel virtual adresinin mapped olup olmadığını söyleyen bir oracle'a ihtiyaç duyar. SysBumps bu oracle'ı Apple Silicon (M serisi) üzerinde iki bileşenden kurar: (1) bir system call içinden erişilebilen Spectre-type bir gadget — branch predictor'ını mistrain ederek saldırgan, attacker-chosen bir kernel adresini dereference eden transient (speculative) execution'ı sürer; ve (2) data TLB, ki paylaşımlıdır ve o transient translation'ın bir yan etkisi olarak dolar. Geçerli (mapped) bir kernel adresi TLB'de bir translation bırakır; geçersiz olan bırakmaz. Saldırgan sonra TLB'yi probe eder ve farkı latency olarak okur.
KASLR invariant'ı — "bir saldırgan mapped kernel page'lerini unmapped olanlardan ayırt edemez" — kırılmıştır; çünkü bir syscall boyunca giden speculative path translation'ı gerçekleştirir ve TLB state'i squash'tan sonra ölçülebilecek kadar uzun süre hayatta kalır. KPTI tarzı page-table isolation yardımcı olmaz: etki mimari bir read'de değil, microarchitectural TLB'dedir.
Walkthrough¶
Saldırı şöyle ilerler (CCS 2024 paper'ı ve yayımlanan koda göre):
1. Reverse-engineer the M-series TLB (set count, associativity) using the
hardware performance monitoring unit (PMU).
2. Mistrain the branch predictor of a Spectre gadget inside a syscall.
3. Issue the syscall so it speculatively translates a candidate kernel address.
4. Prime+Probe the data TLB: short probe latency => the candidate was mapped
(a TLB entry was installed transiently); long latency => unmapped.
5. Sweep candidate slides; the mapped/unmapped boundary reveals the KASLR slide.
Raporlanan sonuçlar (Jang, Kim, Shin — CCS 2024)
- Hedefler: Apple M1, M1 Pro, M2, M2 Pro, M2 Max, M3, M3 Pro.
- macOS sürümleri 13.1 – 15.1.
- Ortalama doğruluk %96.28; tam KASLR break yaklaşık 3 saniyede.
- TLB bir Prime+Probe side channel olarak kullanılır; gadget system call'ların speculative execution'ında çalışır.
Microarchitectural, bir memory-safety bug'ı değil
SysBumps yalnızca layout bilgisini (KASLR slide) kurtarır. Ayrı bir memory-corruption exploit'ini güvenilir kılan bir derandomization primitive'idir; tek başına ne kernel data okur ne de kod çalıştırır.
Detection¶
Saldırı mimari seviyede sessizdir (transient execution ve TLB timing'e dayanır),
dolayısıyla hiçbir syscall-error veya crash izi bırakmaz. Yazarların artifact'ı,
kurtarılan slide'ları out-of-band olarak bir kernel_slide.kext (SIP disabled
gerektirir) veya dtrace kernel-panic incelemesi üzerinden doğrular — yani
ground-truth tooling'tir, bir savunmacının detector'ı değil.
Mitigation¶
Bu saldırıyı durduran veya köreltenler:
- TLB'yi user/kernel sınırı boyunca izole et — syscall entry/exit'te TLB state'ini flush etmek veya partition'lamak, oracle'ın dayandığı paylaşımlı side channel'ı ortadan kaldırır (ruhen KPTI'nin address-space bölünmesine benzer, ama KPTI tek başına burada yetersizdir).
- Syscall entry'de speculation'ı kısıtla — Spectre tarzı gadget hardening (etkilenen syscall path'lerinde serialization / barrier'lar) transient kernel-address translation'ını engeller.
- Daha güçlü / re-randomized KASLR kanalı düzeltmez ama work factor'ı yükseltir; asıl hedef altta yatan oracle'dır.
Kavramsal olarak ilgili microarchitectural KASLR break'ler: TLB/cache KASLR timing oracle, prefetch side-channel KASLR break, EntryBleed (KPTI/KASLR).