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:
- 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
-
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.
-
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.
-
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)
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.