Skip to content

Spectre Variant 2 (Branch Target Injection) on Arm

Arm core'larında indirect-branch (ve return) target'larının branch-predictor poisoning'i; victim speculation'ını bir cache channel üzerinden sızdıran, attacker'ın seçtiği bir gadget'a yönlendirir (CVE-2017-5715).

Mechanism

Bug sınıfı / aşılan invariant

Arm core'ları, indirect branch'lerin ve return'lerin target'ını, execution level'ları arasında ve SMT core'larda hardware thread'leri arasında paylaşılan, address-indexed ve privilege-tagged olmayan microarchitectural history yapılarından (bir branch-target / branch-history buffer ve bir return stack) predict eder. Architecture, bu predictor'ların biçimini kasıtlı olarak belirtmeden bırakır, dolayısıyla hiçbir şey bir attacker'ı onları eğitmekten alıkoymaz. Congruent virtual address'lerde branch'ler execute ederek attacker bir target prediction'ı hazırlar, böylece victim sonradan bir indirect branch ya da return execute ettiğinde, core attacker'ın seçtiği bir disclosure gadget'ını speculative olarak fetch edip execute eder. Transient olarak execute edilen gadget secret state okur ve onu, architectural state rollback edilse de squash'tan sağ çıkan kalıcı bir microarchitectural ize (tipik olarak bir cache line) encode eder. Aşılan sınır speculation'ın control-flow integrity'sidir: privileged kod, programının dikte ettiği değil, attacker'ın seçtiği bir instruction stream'i çalıştırır.

Walkthrough

Yüksek seviyeden, Arm Cache Speculation Side-channels whitepaper'ından ve Trusted Firmware-A TFV-6 advisory'sinden.

Kavramsal reprodüksiyon
  1. Bir gadget bul. Bir victim indirect branch ya da return'den sonra ulaşılabilen, bir secret load eden ve onu bir probe array'i index'lemek için kullanan kodu bul (Spectre tarzı bir "leak" gadget'ı).
  2. Predictor'ı train et. Attacker context'inden, source address'i victim'in indirect branch'iyle (predictor'ın index'lediği bit'lerde) congruent olan bir branch'i tekrar tekrar execute et ve stored target'ı gadget'a doğru eğ.
  3. Victim'i çağır. Victim'e geçiş yap (syscall, hypercall ya da SMT'de cross-thread). Indirect branch'i gadget'a mispredict eder ve gerçek target resolve olmadan önce onu speculative olarak execute eder.
  4. Recover et. Gadget'ın hangi probe line'a dokunduğunu okumak için bir cache-timing channel kullan (bkz. Flush+Reload / Prime+Probe) ve secret byte'ı decode et.

Detection

Sinyaller dolaylıdır

  • Exposure envanteri: Linux'ta, bir core'un vulnerable raporlanıp raporlanmadığını ve hangi mitigation'ın aktif olduğunu doğrulamak için /sys/devices/system/cpu/vulnerabilities/spectre_v2'yi oku.
  • Firmware/SMCCC probing: beklenmeyen SMCCC_ARCH_WORKAROUND_1 discovery çağrılarını ya da workaround'u yok raporlayan firmware'i izle.
  • Microarchitectural anomaliler: cross-privilege geçişleri veya meşgul sibling SMT thread'leriyle co-located yüksek branch misprediction, flush ve cache-miss patlama oranları (PMU counter'ları) mistraining girişimlerine işaret edebilir, ama spesifik değildir.
  • Tek bir transient leak'in güvenilir bir architectural log'u yoktur; detection istatistikseldir ve en iyi, anormal sıkı syscall/hypercall loop'larını işaretleyen bir EDR ile eşleştirilir.

Mitigation

  • Entry'de branch-predictor invalidation. Etkilenen Cortex-A core'ları (örn. A15, A57, A72, A73, A75 ve birkaç AArch32 core'u), secure-world / privilege entry'sinde branch predictor'ı invalidate eder — core'a bağlı olarak BPIALL, ICIALLU ya da bir MMU disable/enable dizisi aracılığıyla. Firmware bunu SMCCC_ARCH_WORKAROUND_1 SMC çağrısı üzerinden verimli biçimde açar.
  • Software predictor hardening. Compiler/OS'nin trampoline tarzı indirect-branch kısıtlaması (retpoline'a benzer) ve trust boundary'lerinde speculation barrier'ları (CSDB, DSB+ISB) kullanması.
  • SMT ve context hijyeni. Context switch ve VM exit'te predictor state'i flush/partition et; high-assurance workload'lar için SMT'yi devre dışı bırakmayı düşün.
  • CPU firmware'ini, microcode-equivalent update'lerini, hypervisor'ı ve kernel'i güncel tut; aktif mitigation'ı yukarıdaki sysfs file üzerinden doğrula.

References