Inception¶
Speculative Return Stack Overflow (SRSO): phantom speculation'ı in-transient training ile birleştirerek AMD Zen'in return predictor'ını overflow et, speculative
rethedeflerini 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'ı bircallinstruction'ı 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)
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
retinstruction'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:
- IBPB (Indirect Branch Prediction Barrier) varyantları, privilege
geçişlerinde predictor'ı flush eder;
ibpb-vmexitkorumayı guest->host ile daraltır. - Daha yeni core'lar (örn.
BpSpecReduceözelliğine sahip olanlar) otomatik olarakMitigation: Reduced Speculationraporlar. AMD, Zen 3 / Zen 4 için microcode patch'inin veya onu içeren bir BIOS güncellemesinin uygulanmasını önerir.