Spectre-BTB cross-address-space out-of-place¶
BTB-CA-OP: bir attacker'ın, farklı bir address space'ten, predictor'da victim'in branch'iyle alias yapan farklı bir virtual address'te bir congruent branch çalıştırdığı Spectre-BTB mistraining stratejisi.
Mechanism¶
Note
Bu, Canella et al. tarafından sistematize edilen dört Spectre branch-poisoning mistraining stratejisinden biridir ve iki eksenle tanımlanır:
- Address space — cross (CA). Eğitimi victim değil, attacker process yapar. Canella et al.: branch prediction buffer'ları "are commonly indexed based on the virtual address of the branch instruction", bu yüzden "mistraining can happen either within the same address space or from a different attacker-controlled process."
- Yerleşim — out-of-place (OP). Eğitim branch'i, victim'inkinden farklı bir virtual address'te oturur. Strateji çalışır çünkü, Canella et al.'ye göre, "when only a subset of the virtual address is used in the prediction, mistraining can be achieved using a branch instruction at a congruent virtual address." Bir congruent branch, tam address'leri farklı olsa bile address'i predictor'ın index bit'lerinde çakışan branch'tir — yani BTB'de victim'in entry'siyle alias yapar.
BTB-CA-OP bu yüzden şudur: "Executing a congruent branch in a different process (cross-address-space out-of-place)." Attacker'ın victim'in tam address'ine bir branch yerleştirmesi gerekmez (BTB-CA-IP'nin tersine); yalnızca address'i congruent olan — predictor'ın kullandığı index bit'lerinde çakışan — bir branch'e ihtiyaç duyar, böylece kurduğu target, victim'in daha sonra okuduğu aynı BTB slot'una düşer. Bu, kontrol edilmesi daha zor olan stratejidir: BTB'yi hangi address bit'lerinin index'lediğini/tag'lediğini bilmeye bağlıdır.
Warning
Out-of-place BTB poisoning microarchitecture'a bağlıdır. Canella et al. şunu raporlar: "On AMD and ARM, we could not demonstrate out-of-place BTB poisoning. Possibly, these CPUs use an unknown (sub)set of virtual address bits or a function of bits which we were not able to reverse engineer." Hedef CPU'nun predictor'ı reverse-engineer edilmedikçe, herhangi bir spesifik index-bit iddiasını kavramsal olarak ele al.
Walkthrough¶
Bu bir stratejidir; tam sızıntı zinciri (BTB'yi poison'la → victim indirect branch mispredict eder → FLUSH+RELOAD) Spectre-BTB'dedir. BTB-CA-OP yalnızca poison'layan branch'in nasıl yerleştirildiğini belirtir:
- Bir congruent address bul. (Reverse engineering ya da arama ile) predictor index bit'leri victim'in indirect-branch address'iyle çakışan bir virtual address belirle, sonra attacker process'inde oraya bir attacker branch'i yerleştir.
victim @ 0x...41A000: call *fnptr # vulnerable indirect branch
attacker @ 0x...91A000: jmp disclosure_gadget # congruent (aliasing) branch,
# DIFFERENT vaddr, other proc
-
Attacker process'ten eğit. Congruent branch'i tekrar tekrar çalıştır ki target'ı aliased BTB slot'una yazılsın.
-
Yol ver ve tetikle. Victim, aynı physical core'da indirect branch'ini çalıştırır; aliased entry onu transiently gadget'a yönlendirir.
-
Secret'ı FLUSH+RELOAD ile kurtar.
Taksonomide nerede durduğu (Canella et al., Table 2)
in-place (IP) out-of-place (OP)
same-addr (SA) victim branch congruent branch, same process
cross-addr (CA) shadow branch, same vaddr congruent branch <-- HERE
(different/aliasing vaddr, other proc)
Mitigation¶
Bir cross-domain stratejisi olarak, indirect-branch kontrolleriyle kapsanır: IBPB, victim domain'ine girişte BTB'yi flush eder (aliased entry'leri kaldırarak), IBRS/eIBRS daha az ayrıcalıklı etkiyi izole eder, STIBP cross-hyperthread paylaşımını durdurur ve retpoline vulnerable indirect branch'i ortadan kaldırır. Bkz. Spectre-BTB.