Skip to content

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.

  1. 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
  1. 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).

  2. 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
  1. 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.

References