iLeakage: Timerless Speculative Execution Attacks on Apple Devices¶
Apple Silicon üzerinde Safari'nin timer/addressing/value-poisoning savunmalarını, timing ölçümlerini timerless bir race-condition cache distinguisher ile değiştirerek çökerten browser tabanlı bir Spectre sınıfı attack; ardından speculative type confusion ile cross-origin secret'ları sızdırır.
Mechanism¶
Neden çalışır
Spectre tarzı leakage normalde iki bileşene ihtiyaç duyar: secret-dependent cache state'e dokunan bir transient window ve o cache state'i geri okumak için bir timer (Flush+Reload, Prime+Probe). Apple'ın browser sertleştirmesi timer'a saldırdı: WebKit kasıtlı olarak yalnızca kaba, jitter'lı bir clock sunar, JS değerleri için sıkıştırılmış 35-bit bir address space kullanır ve out-of-bounds okumaların non-pointer çöp döndürmesi için value poisoning uygular. Bunların her biri attacker'a ya kullanılabilir bir channel ya da kullanılabilir bir primitive'i vermemek için tasarlanmıştır.
iLeakage'ın çekirdek invariant'ı şudur: bir cache hit ile miss, hiç clock okumadan ayırt edilebilir — latency farkı, sıralaması bir line'ın cache'te olup olmadığına bağlı iki operasyon arasındaki bir race'in sonucuna çevrilir. Microarchitecture'ın kendisi comparator olur, böylece düşük-çözünürlüklü-timer savunması kökünden bypass edilir. Çalışan bir timerless distinguisher ile attacker eviction set'leri kurabilir ve tam bir Spectre sınıfı attack çalıştırabilir. iLeakage ardından JS engine'inde bir speculative type-confusion (cross-address-space PHT akrabası) gadget'ı katmanlar: misspeculation altında engine bir object'in byte'larını başka bir tip olarak ele alır ve Safari'nin renderer'ı içinde 64-bit pointer'ların out-of-bounds okumasını üretir — 35-bit addressing ve value-poisoning karşı önlemlerini çökertir. Modern browser'lar farklı sitelerin sayfalarını tek bir renderer process'inde birleştirdiği için bu okuma cross-origin secret'lara ulaşır.
Walkthrough¶
Genel kamuya açık iLeakage writeup'ından ve CCS 2023 paper'ından (Kim, van Schaik, Genkin, Yarom) üst düzey kavramsal reprodüksiyon. Exploit düzeyinde bir gadget verilmez.
- Bir timerless distinguisher kur. JavaScript'te, iki branch'i race eden speculation tabanlı bir gadget oluştur; "kazanan" branch, bir probe line'ının cache'te olup olmadığına bağlıdır. Gözlemlenebilir sonuç bir time değil, bir boolean'dır.
distinguish(line):
arrange two transient operations whose relative completion order
flips depending on cache(line) == HIT
return winner-of-race # 1 bit, no clock read
-
Eviction set'leri oluştur. Bu tek-bitlik oracle'ı kullanarak, bir hedef cache set'i evict eden set'leri toplamak için candidate adresleri tekrar tekrar test et (klasik bir eviction-set aramasının timed adımlarının yerini alır).
-
Mistrain + misspeculate (type confusion). Polymorphic bir JS access site'ını öyle eğit ki, speculatif olarak bir tipteki değer başka bir tip gibi ele alınsın ve renderer'da attacker'ın seçtiği offset'lerin out-of-bounds okumasını üretsin.
// conceptual: speculative path reads OOB, then encodes secret into cache
if (rarely_false_after_training) // misspeculated
probe[ secret_byte * STRIDE ] // secret -> cache footprint
- Recover et. Secret-dependent cache state'i tek seferde bir byte geri okumak için timerless distinguisher'ı probe array boyunca uygula.
Raporlanan veriler (ileakage.com / CCS 2023)
Targets: Gmail inbox content, autofilled credentials, cross-site data
Platforms: A-series / M-series Apple Silicon (devices ~2020+)
Browsers: Safari (macOS); Safari engine is forced on iOS, so Chrome/
Firefox/Edge/Tor on iOS are also affected
Disclosed: Apple notified 2022-09-12
Fixed in: Safari 17.2 (macOS 14.2 / iOS 17.2)
Detection¶
- Pratik host detection zayıftır: attack saf, browser içi JavaScript'tir; syscall yok, native kod yok ve işaretlenecek bir timing API kötüye kullanımı yok.
- Telemetry açıları: bir renderer tab'ında sürekli yüksek CPU, anomalous JIT/GC baskısı ve agresif şekilde allocate eden / typed-array churn yapan sayfalar korele olabilir, ama bunlar spesifik değildir.
- En güvenilir sinyal patch seviyesidir — Safari/WebKit build'inin 17.2'den önce olduğunu doğrulamak, aktif detection'dan ziyade maruziyete işaret eder.
Mitigation¶
- Apple'ın WebKit fix'ini uygula (Safari 17.2 / macOS 14.2 / iOS 17.2); bu, renderer'ı bu type-confusion + timerless channel'a karşı sertleştirir.
- Site isolation: cross-origin sayfaların bir address space'i paylaşmamasını sağlamak cross-origin erişimi ortadan kaldırır; WebKit'in mitigation'ları bu yönde ilerler.
- Yazarlar tarafından belgelenen geçici kullanıcı savunmaları: Lockdown Mode'u etkinleştir veya güvenilmeyen siteler için JavaScript'i devre dışı bırak.
- Engine'ler için genel Spectre hijyeni: speculative array erişimlerinde index masking, OOB sonuçlarını poisoning ve type check'lerde speculation'ı kısıtlama.