Skip to content

Indirect Branch Predictor Barrier bypass (Post-Barrier Spectre, Intel cross-process)

Bazı Intel core'ları, flush etmesi gereken bir IBPB'den sonra return prediction'larını korur; böylece attacker, return predictor'ı barrier'dan önce mistrain edip barrier'dan sonra hâlâ speculative return'leri ele geçirebilir — IBPB'nin uygulamayı amaçladığı process/privilege isolation'ı kırar (CVE-2023-38575).

Mechanism

Neden çalışır (kırılan invariant)

Indirect Branch Prediction Barrier (IBPB), kernel'in bir security sınırında güvendiği architectural vaattir: IBPB'den sonra önceki context'in eğittiği branch prediction'lar yeni context'te artık speculation'ı yönlendiremez. Mitigation kodu, tam da barrier öncesi training'in bir victim domain'ine taşınamaması için context switch / VM exit / privilege değişiminde IBPB yayınlar.

"Breaking the Barrier" araştırması (Wikner et al., ETH Zurich), bu vaadin etkilenen Intel microarchitecture'larında eksik olduğunu gösterir: IBPB indirect-branch hedeflerini flush eder ama bazı return prediction'larını ihmal eder, ki bunlar barrier boyunca persist eder (Intel: "context'ler arasında return predictor hedeflerinin non-transparent paylaşımı", CVE-2023-38575 / INTEL-SA-00706). IBPB'nin prediction state'ini tamamen sıfırladığı invariant'ı bu yüzden return'ler için yanlıştır.

Attack sonucu: attacker, IBPB yayınlamadan/aşmadan önce return predictor'ı mistrain eder, ardından — barrier'dan sonra, privileged veya cross-process victim'in içinde — bir ret bayatlamış, attacker'ın şekillendirdiği prediction'a danışır ve speculatif olarak bir disclosure gadget'a zıplar. Leak path'i RSB-poisoning / Spectre-RSB ile aynıdır, ama yenilik, savunmacıların güvendiği barrier'ın ta kendisinden sağ çıkmasıdır. (Paper'ın AMD varyantı "PB-Inception", AMD'nin IBPB'sinin return prediction'larını ihmal etmesini suistimal eder; SRSO ailesi için AMD inception girdisine bak.)

Walkthrough

Kamuya açık ETH writeup'ından ve Intel advisory'sinden kavramsal reprodüksiyon; gadget/offset ayrıntıları atlanmıştır.

  1. Barrier'dan önce return'leri mistrain et. Attacker context'inde, return predictor'ı attacker'ın seçtiği bir hedef T'ye doğru sür.
pre-barrier:  train return-predictor entry -> T   (attacker context)
  1. Sınırı aş (IBPB ile). Bir context switch / privilege değişimi / suid exec IBPB yayınlar. Etkilenen core'larda T için return prediction invalidate edilmez.

  2. Victim'de tetikle. Victim, etkilenen core'da hayatta kalan hedef T'ye mispredict eden ve transient olarak bir gadget çalıştıran bir ret yürütür.

post-barrier (victim):  ret  --mispredict-->  T  --> probe[secret*STRIDE]
  1. Recover et. Secret-dependent cache footprint'i Flush+Reload ile geri oku.
Raporlanan veriler (ETH 'Breaking the Barrier' / Intel SA)
Intel CVE:   CVE-2023-38575 (INTEL-SA-00706)
Effect:      return predictions survive an IBPB that should flush them
Affected:    Intel Golden Cove / Raptor Cove cores
             (12th-14th gen Core; 5th-6th gen Xeon)
Demonstrated: end-to-end cross-process leak of a root password hash from a
              SUID process on Linux
AMD variant: "PB-Inception" (AMD IBPB neglects return predictions)

Detection

  • Detection detektif değil önleyicidir: attack, alışılmadık syscall'u olmayan local koddur; branch-misprediction counter'ları onu güvenilir şekilde işaretlemek için fazlasıyla gürültülüdür.
  • Pratik sinyal posture kontrolleridir: IBPB'nin return prediction'larını da flush etmesini sağlayan fix'e karşı microcode revision'ı doğrula ve kernel'in IBPB mode'unun (/sys/devices/system/cpu/vulnerabilities/spectre_v2) sınırlarda (context switch / SUID / VM exit) amaçlanan barrier kapsamasını yansıttığını teyit et.

Mitigation

  • IBPB'nin return prediction'larını invalidate etmesini sağlayan Intel microcode güncellemesi (firmware/intel-microcode); Intel CVE-2023-38575 için fix yayınladı.
  • Post-barrier durumu için IBPB kullanımını ayarlayan Linux kernel güncellemelerini uygula; IBPB'nin, boşluk bırakacağı performance-minimizing "conditional" varsayılan yerine ilgili sınırlarda gerçekten yayınlandığından emin ol.
  • SUID/cross-process isolation önemli olduğunda, privileged/SUID process'lere geçişlerde IBPB'yi zorla (bazı sertleştirilmiş kernel'ler bunu varsayılan olarak etkinleştirir).
  • AMD sistemleri: PB-Inception return-prediction boşluğunu ele alan kernel/microcode güncellemelerini uygula.

References