Skip to content

Spectre-BTB cross-address-space in-place

BTB-CA-IP: bir attacker'ın, farklı bir address space'ten, victim'in vulnerable branch'iyle aynı virtual address'te bir "shadow" branch çalıştırarak paylaşılan Branch Target Buffer'ı poison'ladığı Spectre-BTB mistraining stratejisi.

Mechanism

Note

Bu, Canella et al. tarafından sistematize edilen dört Spectre branch-poisoning mistraining stratejisinden biridir. Onu iki bağımsız eksen tanımlar:

  • Address space — cross (CA) vs same (SA). 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." Cross-address-space, eğitimi victim'in değil attacker process'in yaptığı anlamına gelir.
  • Yerleşim — in-place (IP) vs out-of-place (OP). In-place, eğitim branch'inin victim branch'iyle aynı virtual address'te oturduğu anlamına gelir. Predictor branch'in virtual address'iyle indexlendiği için, özdeş address'teki bir branch, victim'in daha sonra danışacağı aynı BTB entry'sine eşlenir — hiçbir address aliasing gerekmez.

BTB-CA-IP bu yüzden şudur: attacker, victim'in indirect branch'inin işgal ettiği aynı virtual address'te bir branch map'ler ve çalıştırır, ama attacker'ın kendi process'inde, paylaşılan, domain-partition edilmemiş BTB'ye bir target kurar. Victim o address'te indirect branch'ini çalıştırınca, attacker'ın kurduğu eşlemeyi okur ve seçilen gadget'a speculatively atlar. Canella et al. buna "Executing a shadow branch in a different process (cross-address-space in-place)" der. Bu, orijinal Spectre-v2 gösteriminin stratejisiydi: Spectre-BTB "was initially demonstrated on Intel, AMD, and ARM CPUs using a cross-address-space in-place mistraining strategy."

Bunun, predictor'ın entry'leri address space'e göre tam tag'lememesini ve attacker'ın eşleşen virtual address'te bir branch yerleştirebilmesini gerektirdiğine dikkat et. Spesifik indexing/tagging bit ayrıntıları microarchitecture'a bağlıdır ve kaynakta tam olarak reverse-engineer edilmemiştir.

Walkthrough

Bu bir stratejidir; uçtan uca sızıntı (BTB'yi poison'la → victim indirect branch mispredict eder → FLUSH+RELOAD) Spectre-BTB'de anlatılır. BTB-CA-IP yalnızca poison'layan branch'in nasıl yerleştirildiğini belirtir:

  1. Victim'in branch address'ini eşle. Attacker process'ini öyle düzenle ki bir branch instruction, victim'in vulnerable indirect branch'iyle aynı virtual address'te bulunsun (örn. aynı executable'ı map'leyerek / gadget'ı branch site'ı çakışacak şekilde hizalayarak).
victim   @ 0x...555000:  call *fnptr          # vulnerable indirect branch
attacker @ 0x...555000:  jmp  disclosure_gadget   # shadow branch, SAME vaddr
  1. Attacker process'ten eğit. Shadow branch'i tekrar tekrar çalıştır ki o virtual address için paylaşılan BTB entry'si gadget'a işaret etsin.

  2. Victim'e yol ver ve tetikle. Victim'in (physical core'u paylaşan) indirect branch'ini çalıştırmasına izin ver; poison'lanmış target'ı miras alır ve gadget'ı transiently yürütür.

  3. Kurtar. Base teknikteki gibi secret'ı FLUSH+RELOAD ile decode et.

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  <-- HERE  congruent branch, other process
                   (same vaddr, other proc) (different/aliasing vaddr)
Aynı adres yerine farklı (congruent) bir address'teki bir branch üzerinden başka bir process'ten eğiten BTB-CA-OP ile karşılaştır.

Mitigation

Attacker ayrı bir address space'ten (farklı process) eğittiği için, process-isolation kontrolü IBPB doğrudan uygulanır: context switch'te BTB'yi flush ederek same-privilege cross-process poisoning'i keser — bu, mistraining'in victim'den değil ayrı bir process'ten geldiği bu senaryonun birincil mitigation'ıdır. Eğer attacker daha az ayrıcalıklı bir domain'deyse (privilege-boundary durumu), IBRS/eIBRS daha az ayrıcalıklı branch'lerin ayrıcalıklı olanları etkilemesini engelleyerek ek izolasyon sağlar. STIBP cross-hyperthread paylaşımını durdurur ve retpoline vulnerable indirect branch'i tamamen kaldırır. Ayrıntılar için bkz. Spectre-BTB.

References