Skip to content

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:

  1. 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
  1. Attacker process'ten eğit. Congruent branch'i tekrar tekrar çalıştır ki target'ı aliased BTB slot'una yazılsın.

  2. Yol ver ve tetikle. Victim, aynı physical core'da indirect branch'ini çalıştırır; aliased entry onu transiently gadget'a yönlendirir.

  3. 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)
BTB-CA-IP ile karşılaştır: aynı cross-process eğitim, ama congruent/aliasing bir branch yerine victim'in tam virtual address'indeki bir branch kullanır.

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.

References