Skip to content

SLAP: Data Speculation Attacks via Load Address Prediction on Apple Silicon

Apple Silicon'ın Load Address Predictor'ını mispredict edecek şekilde eğiten, böylece CPU'nun out-of-bounds veri üzerinde speculatively hesap yapıp onu sızdırmasına neden olan bir speculative-execution saldırısı — Safari'ye karşı uçtan uca gösterildi.

Mechanism

Bug sınıfı / invariant

Yakın dönem Apple core'ları (M2/A15 ve yeni), gözlemlenen access pattern'lerine (örn. stride'lar) dayanarak bir load'un hangi address'i hedefleyeceğini speculate eden ve gerçek address hesaplanmadan önce öngörülen address'ten veriyi prefetch eden/forward eden bir Load Address Predictor (LAP) içerir. Kırılan güvenlik invariant'ı şu: speculation, programın asla meşru biçimde erişmeyeceği veri üzerinde işlem yapmamalı. LAP mispredict ettiğinde core, yanlış bir address'ten transiently byte forward eder ve bağımlı instruction'ların bunlar üzerinde speculative execution altında hesap yapmasına izin verir — amaçlanan nesnenin sınırları dışındaki address'ler dahil. Bu transient hesaplamalar, rollback'ten sağ çıkan micro-architectural izler (cache state) bırakır ve bir side channel oluşturur. Klasik Spectre-v1'in aksine, attacker bir branch yönünü değil, core'un speculate ettiği veri address'ini yönlendirir. Bu, bir victim ile yalnızca bir process/address space paylaşan attacker'ın, kendi meşru erişiminin dışındaki veriyi okumasını sağlar. (Kardeş saldırı FLOP ise bunun yerine M3/A17 sınıfı Load Value Predictor'ı hedefler ve bir load'un değeri üzerinde speculate eder.)

Walkthrough

Kim, Genkin, Yarom et al. (IEEE S&P 2025; predictors.fail) makalesinden üst seviye yeniden üretim.

Yalnızca kavramsal

Yayımlanan uçtan uca PoC, page içeriğini kurtaran bir Safari exploit'iydi. Aşağıdaki adımlar mantıksal yapıdır, çalıştırılabilir kod değil.

  1. Predictor'ı bir stride ile eğit. Belleğe düzenli bir striding pattern'iyle tekrar tekrar eriş ki LAP dizideki bir sonraki address'i öngörmeyi öğrensin.
  2. Tahmini bir secret'a yönlendir. Belleği öyle düzenle ki LAP'in sonraki tahmini attacker-seçimi, out-of-bounds veriye düşsün (örn. same-process koşulundan sonra aynı allocator bölgesini paylaşan başka bir web page'in string'leri).
# representative logical flow, not runnable
for i in stride_pattern: touch(base + i*STRIDE)   # train LAP
# LAP now predicts base + (n+1)*STRIDE -> points at secret
transient: x = secret_byte
           touch(probe[x * LINE])                  # encode into cache
  1. Yanlış veri üzerinde speculatively hesap yap. LAP mispredict ettiğinde core, secret byte'lar üzerinde transiently hesaplama yapar ve secret-dependent bir index'i cache tabanlı bir covert channel'a encode eder.
  2. Timing ile kurtar. Kanal üzerinde Flush+Reload tarzı bir probe, sızdırılan byte'ları ortaya koyar. Browser senaryosunda attacker, e-posta ya da gezinme verisi gibi cross-page içeriği yeniden inşa eder ve same-process web isolation'ını alt eder.

Detection

  • Browser-içi/process-içi side-channel davranışsal signature'ları: strided eğitim döngülerini izleyen yüksek çözünürlüklü timing probe'ları; untrusted JavaScript'te JIT spray artı sıkı cache-probe döngüleri şüphelidir.
  • Same-process cross-origin co-residency. Safari varyantı, victim ve attacker page'lerinin bir renderer process paylaşmasına dayanır; böyle bir paylaşımı işaretleyen site-isolation telemetrisi yararlı bir çevresel sinyaldir.
  • Tüm transient-execution sızıntılarında olduğu gibi veri akışı micro-architectural'dır ve konvansiyonel EDR'ye görünmez; tespit, içerik incelemesi değil sezgiseldir (timing-loop ve predictor-mistraining pattern'leri).

Mitigation

  • Apple platform güncellemeleri. Apple'ın düzeltmeleri LAP predictor'ın speculative davranışını kısıtlamayı içerir (örn. etkilenen context'lerde LAP'in güvenlik sınırları boyunca address predict etme yeteneğini devre dışı bırakmak/kısıtlamak); macOS/iOS/iPadOS'u güncel tut.
  • Browser isolation'ını güçlendir. Tam site isolation / process-per-origin, Safari exploit'inin dayandığı same-process önkoşulunu kaldırır.
  • Untrusted web context'lerinde covert channel'ın noise floor'unu yükseltmek için timer/kanal çözünürlüğünü azalt (kabalaştırılmış timer'lar, devre dışı bırakılmış shared-memory yüksek çözünürlüklü timing).
  • Hassas kodda secret'ların data-oblivious işlenmesi ki mispredict edilen load'lar secret-dependent bellek erişimlerini beslemesin.

References