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.
- 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.
-
Sınırı aş (IBPB ile). Bir context switch / privilege değişimi /
suidexec IBPB yayınlar. Etkilenen core'larda T için return prediction invalidate edilmez. -
Victim'de tetikle. Victim, etkilenen core'da hayatta kalan hedef T'ye mispredict eden ve transient olarak bir gadget çalıştıran bir
retyürütür.
- 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.