Skip to content

Inception

Speculative Return Stack Overflow (SRSO): phantom speculation'ı in-transient training ile birleştirerek AMD Zen'in return predictor'ını overflow et, speculative ret hedeflerini ele geçirip keyfi kernel memory'yi sızdır.

Mechanism

Neden çalışır

Inception (Trujillo, Wikner, Razavi; ETH Zurich, CVE-2023-20569), namıdiğer Speculative Return Stack Overflow (SRSO), AMD Zen core'larında iki primitive'i kaynaştırır:

  • Phantom speculation (bkz. ../arch/phantom-speculation.md): branch predictor, hiç branch olmayan bir instruction'da bir transient control-flow window oluşturabilir. Yazarların deyimiyle, "zararsız görünen bir XOR instruction'ı bir call instruction'ı gibi davranabilir" — CPU onu speculatif olarak bir call gibi ele alır.
  • Training In Transient Execution (TTE): bir transient window sırasında yalnızca leak etmek yerine, attack o window'u branch predictor'a yeni prediction'lar eklemek için kullanır. Bu yeni eklenen prediction'lar ardından gelecekteki transient window'ları tetikler — architectural program'da değil, microarchitecture'da recursion.

Bir araya getirildiğinde, CPU bir XOR'un bir recursive call olduğuna inandırılarak kandırılır. Her phantom "call", attacker'ın seçtiği bir hedefi Return Stack Buffer / Return Address Predictor'a push eder ve recursion o stack'i attacker-controlled return hedefleriyle overflow eder. Daha sonra victim'deki (örn. kernel içindeki) legitimate bir ret, attacker'ın hedefine mispredict eder ve speculatif olarak bir disclosure gadget yürütür; kernel data'sını Flush+Reload ile recovery için cache'e encode eder.

Anahtar invariant: return predictor'ın içeriği attacker-controlled non-architectural state'in bir fonksiyonu olur, böylece kernel'in speculatif olarak "döndüğü" yön attacker tarafından seçilir — tüm AMD Zen ailesi boyunca, önceki Spectre-v2 mitigation'ları devredeyken bile.

Walkthrough

Uçtan uca attack bir transient-execution zinciridir; tam gadget offset'leri hedefe özgüdür. Kavramsal olarak unprivileged attacker:

1. Phantom-train:  make the predictor associate an attacker PC (a XOR) with a
                   "call" to an attacker-chosen target T.
2. Overflow (TTE): drive the phantom "recursive call" so the RSB/RAP fills
                   with target T (return-stack overflow).
3. Trigger:        invoke the kernel (syscall) so a kernel RET mispredicts to T.
4. Disclosure:     T is a gadget that loads secret kernel byte and touches
                   probe[secret * 4096]  -> secret encoded in cache.
5. Recover:        Flush+Reload the probe array -> fastest line == secret byte.

Çalışan bir sistemde kernel'in vulnerability ve mitigation görüşünü doğrudan inceleyebilirsin:

# Report the SRSO/Inception status on this CPU.
cat /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow
# e.g.: "Mitigation: Safe RET"
#       "Vulnerable: No microcode"
#       "Not affected"

# Confirm AMD family (0x17 = Zen1/2, 0x19 = Zen3/4 are affected).
grep -m1 -E "vendor_id|cpu family|model name" /proc/cpuinfo
Raporlanan veriler (comsec.ethz.ch / kernel.org'dan)
Leak target:   arbitrary kernel memory, unprivileged attacker
Leak rate:     ~39 bytes/second
Affected:      all AMD Zen CPUs, generations 1-4 (families 0x17, 0x19),
               including Zen 4
Mitigation overhead (branch-predictor flush on context switch):
               Zen 1/1+ ~93.1% , Zen 2 ~216.9%

Warning

Inception, Spectre-v2 için "önceden konuşlandırılmış tüm software ve hardware mitigation'ların varlığında" çalışır — eIBRS/AutoIBRS ve retpoline onu durdurmaz; çünkü leak, klasik indirect-branch injection değil, phantom speculation aracılığıyla return predictor üzerinden gelir.

Detection

  • /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow, çalışan kernel'in CPU'yu etkilenmiş sayıp saymadığını ve hangi mitigation'ın aktif olduğunu raporlar.
  • Kernel mode'da retired ve mispredicted ret instruction'larını karşılaştıran performance-counter analizi (perf), Safe-RET path'inin devrede olup olmadığını doğrulayabilir.

Mitigation

  • Microcode + kernel "Safe-RET" Linux varsayılanıdır: AMD microcode artı, poison'lanmış return prediction'ın kullanılmasını engelleyen bir software dizisi. Başka mode'lar da var (ibpb, ibpb-vmexit, microcode) ve kernel command line'da seçilebilir:
spec_rstack_overflow={off | microcode | safe-ret | ibpb | ibpb-vmexit}
  • IBPB (Indirect Branch Prediction Barrier) varyantları, privilege geçişlerinde predictor'ı flush eder; ibpb-vmexit korumayı guest->host ile daraltır.
  • Daha yeni core'lar (örn. BpSpecReduce özelliğine sahip olanlar) otomatik olarak Mitigation: Reduced Speculation raporlar. AMD, Zen 3 / Zen 4 için microcode patch'inin veya onu içeren bir BIOS güncellemesinin uygulanmasını önerir.

References