Skip to content

SRSO mitigation (Speculative Return Stack Overflow)

SRSO / "Inception" (CVE-2023-20569), non-architectural bir CALL'un bir Return Address Predictor entry'si ekmesine ve sonraki bir RET'i saldırganın seçtiği bir gadget'a yönlendirmesine izin verir; Linux mitigation'ı her kernel RET'ini kontrollü bir "safe return"e speculate etmeye zorlar.

Mechanism

Note

Kavramsal: NEDEN işe yarar, invariant/teori.

AMD CPU'ları (Zen 1–4, family'ler 0x17 ve 0x19) bir RET'in target'ını bir Return Address Predictor (RAP) kullanarak tahmin eder — esasen Return Stack Buffer / Return Address Stack. Normalde bir CALL return target'ını bu yapıya push eder ve eşleşen RET onu pop eder.

SRSO flaw'ı şudur: bir non-architectural CALL — front end'in, architectural path üzerinde gerçekte bir CALL olmamasına rağmen CALL olduğunu predict ettiği bir instruction — RAP'te bir entry yaratabilir. Sonraki bir RET de o attacker-influenced entry'ye predict edilebilir. Branch Target Buffer (BTB) poisoning ile birleştiğinde, host üzerinde code çalıştırabilen bir saldırgan bir kernel RET'ini bir disclosure gadget'ına speculatively atlatabilir ve privileged memory'yi bir microarchitectural side channel üzerinden sızdırabilir. Saldırı local scope'tur (ağ üzerinden uzaktan yürütülemez); ancak bir unprivileged local process ya da bir VM guest'i, host kernel'ini — bir hypervisor host'u dahil — hedef alabilir. Target layout'u ve gadget offset'leri hakkında ayrıntılı bilgi gerektirir.

Linux mitigation'ı şu invariant'ı yeniden tesis eder: her kernel return'ü, attacker-poisoned bir prediction yerine kontrollü, güvenli bir konuma speculate eder. Bunu, return'leri __x86_return_thunk üzerinden yönlendirerek yapar; bu da CPU'yu her function return'ünü bilinen bir "safe return" sekansına mispredict etmeye zorlar (ruhen Retbleed için kullanılan return-thunk yaklaşımına benzer). Zen 3/4'te implementation, bir "untrain" routine'i (srso_alias_untrain_ret()) ile bir "safe return" routine'i (srso_alias_safe_ret()) arasında kasıtlı BTB aliasing kullanır; böylece poisoned herhangi bir RAP/BTB entry'si, gerçek bir return onu tüketmeden önce evict edilir.

Birkaç policy noktası güvenliği maliyete karşı dengeler:

  • microcode — yalnızca extended-IBPB microcode'unu uygula (hardware-seviyesi yardım, return thunk yok).
  • safe-ret (default) — yukarıdaki gibi software return-thunk mitigation'ı.
  • ibpb — privilege transition'larında bir Indirect Branch Prediction Barrier çıkar.
  • ibpb-vmexit — IBPB'yi yalnızca VM exit'lerinde çıkar (host'u guest'lerden koru).
  • off — mitigation'ı devre dışı bırak.

Walkthrough

Çalışan CPU'nun etkilenip etkilenmediğini ve nasıl mitigate edildiğini kontrol et:

cat /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow

Örnek çıktılar:

Mitigation: Safe RET
Vulnerable: Safe RET not enabled
Not affected

Boot policy'sini spec_rstack_overflow= kernel command line parametresi üzerinden incele / ayarla:

grep -o 'spec_rstack_overflow=[a-z-]*' /proc/cmdline

Geçerli değerler:

spec_rstack_overflow=microcode
spec_rstack_overflow=safe-ret      # default
spec_rstack_overflow=ibpb
spec_rstack_overflow=ibpb-vmexit
spec_rstack_overflow=off

CPU family/model'inin etkilenen aralıkta olduğunu doğrula (Zen 1–4 ⇒ family 0x17 veya 0x19):

grep -m1 -E 'cpu family|model name' /proc/cpuinfo

Örnek:

cpu family  : 25
model name  : AMD EPYC ... 

(family 25 == 0x19 == Zen 3/Zen 4.)

Etkilenen bir kernel'de Safe RET'i implement eden return-thunk symbol'lerini gözlemlemek için:

sudo grep -E 'srso_(alias_)?(untrain|safe)_ret|__x86_return_thunk' /proc/kallsyms

(Gerçek adresleri göstermek için kptr_restrict=0 gerekir — bkz. kptr-restrict.)

Detection

  • /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow yetkili status string'idir.
  • Vulnerable veya Vulnerable: Safe RET not enabled değeri, mitigation'ın eksik ya da devre dışı olduğunu gösterir.

Mitigation

  • Etkilenen AMD Zen 1–4 hardware'inde spec_rstack_overflow=safe-ret'i (default) koru ve extended IBPB için AMD microcode update'ini uygula.
  • Hypervisor host'larında, host'u guest'lerden tam IBPB'den daha düşük maliyetle korumak için ibpb-vmexit'i düşün.
  • İlgili return/branch speculation savunmaları: retbleed-return-thunk, indirect-branch-prediction-barrier, retpoline.

References