Inception / SRSO (CVE-2023-20569)¶
Speculative Return Stack Overflow: phantom speculation'ı Training in Transient Execution ile birleştiren unprivileged bir attacker, AMD Zen'in return predictor'ını overflow eder ve bir victim
ret'in speculative hedefini ele geçirir; tüm önceki Spectre-v2 savunmalarına rağmen keyfi kernel memory'yi sızdırır.
Mechanism¶
Neden çalışır (bug sınıfı / invariant)
Inception (Trujillo, Wikner, Razavi; ETH Zurich) CVE-2023-20569 / AMD-SB-7005 altında kataloglanmıştır ve Speculative Return Stack Overflow (SRSO) olarak adlandırılır. User→kernel sınırını, eIBRS/AutoIBRS ve retpoline'in korumak için yapıldığı indirect-branch predictor'ı değil, CPU'nun return address predictor'ını bozarak aşar.
İki primitive birleşir:
- Phantom speculation: AMD Zen'in predictor'ı, architectural olarak bir
branch olmayan bir instruction'da bir transient window açabilir — benign
bir instruction speculatif olarak bir
callgibi ele alınır. - Training in Transient Execution (TTE): bir transient window sırasında yalnızca leak etmek yerine, attack o window'u branch predictor'lara yeni prediction'lar eklemek için kullanır. Bu eklenen prediction'lar ardından daha fazla transient window açar — architectural program yerine microarchitecture'da recursion.
Bunları zincirleyerek CPU, bir instruction'ı bir recursive call olarak ele
almaya kandırılır. Her phantom "call", attacker'ın seçtiği bir hedefi return
stack'e push eder ve recursion return predictor'ı attacker-controlled
hedeflerle overflow eder. Daha sonra kernel'deki legitimate bir ret,
attacker'ın hedefine mispredict eder ve Flush+Reload
recovery için bir secret byte'ı cache'e encode eden bir disclosure
gadget speculatif olarak çalıştırır.
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 Zen ailesi boyunca. Bu, Retbleed'in AMD kardeşidir ve AMD inception girdisi aynı aileyi kapsar; SRSO, RSB-poisoning fikrinin tam bir predictor overflow'una itilmiş halidir.
Walkthrough¶
Kamuya açık ETH writeup'ından ve kernel/AMD advisory'lerinden kavramsal zincir; gadget offset'leri hedefe özgüdür ve kasıtlı olarak atlanmıştır.
1. Phantom-train: associate an attacker PC with a speculative "call" to target T.
2. Overflow (TTE): drive the phantom recursive call so the return predictor
fills with target T (the "return stack overflow").
3. Trigger: enter the kernel (syscall) so a kernel RET mispredicts to T.
4. Disclosure: T loads a secret kernel byte and touches probe[secret*STRIDE].
5. Recover: Flush+Reload the probe array; the fast line == secret byte.
Çalışan bir Linux host'unda kernel kendi değerlendirmesini açar:
# SRSO/Inception status and active mitigation
cat /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow
# e.g. "Mitigation: Safe RET" / "Vulnerable: No microcode" / "Not affected"
# Affected AMD families: 0x17 (Zen1/2), 0x19 (Zen3/4)
grep -m1 -E "vendor_id|cpu family|model name" /proc/cpuinfo
Raporlanan veriler (comsec.ethz.ch / kernel.org / AMD-SB-7005)
Warning
SRSO, 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'i karşılaştıranperfanalizi, Safe-RET path'inin devrede olup olmadığını gösterebilir; branch-misprediction counter'ları gürültülüdür ve tek başlarına güvenilir bir real-time detector değildir. - Posture izleme: microcode revision'ının ve kernel mitigation string'inin CPU ailesi için vendor rehberliğiyle eşleştiğini doğrula.
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. Mode'lar kernel command line'da seçilebilir:
- IBPB varyantları, privilege geçişlerinde predictor'ları flush eder;
ibpb-vmexitkorumayı guest→host sınırıyla daraltır (Xen:spec-ctrl=ibpb-entry). BpSpecReduceraporlayan daha yeni core'larMitigation: Reduced Speculationgösterir. AMD, Zen 3 / Zen 4 için microcode patch'ini veya onu içeren bir BIOS güncellemesini önerir; mitigation'ların çalışması için en güncel microcode'un yüklü olması gerekir.