Spectre-PHT cross-address-space in-place¶
Spectre-PHT (bounds-check bypass / Variant 1)'in, Pattern History Table'ın victim'in conditional branch'iyle aynı virtual address'te bir shadow branch çalıştırılarak farklı bir attacker process'ten mistrain edildiği hali.
Mechanism¶
Neden çalışır
Spectre-PHT (Spectre Variant 1), bir conditional branch'in direction'ını (taken / not-taken) mispredict ettirmek için Pattern History Table (PHT)'ı poison'lar. Canella et al.'ye göre, "PHT'ye, branch instruction'ın virtual address bit'leri ile aynı physical core'daki son N branch için global davranışı biriktiren gizli bir Branch History Buffer (BHB)'nin kombinasyonuna göre erişilir." "x'in geçerli değerlerini tekrar tekrar sağladıktan sonra, PHT bu branch'in true'ya evaluate olduğunu güvenilir biçimde predict edecektir"; adversary ardından out-of-bounds bir index sağladığında, CPU "mispredict edilmiş bir yol boyunca devam eder ve transient olarak bir out-of-bounds memory access gerçekleştirir."
Mistraining iki eksen boyunca sınıflandırılır (Figure 3):
- Address space — SA vs CA. PHT branch'in virtual-address bit'leriyle index'lendiği için, poisoning ya victim'in kendisinden (same-address-space) ya da "farklı, attacker-controlled bir process"ten (cross-address-space, CA) gelebilir.
- Location — IP vs OP. "Vulnerable branch'in kendisini (in-place)" ya da "congruent bir virtual address'teki bir branch'i (out-of-place)" kullanarak.
PHT-CA-IP, cross-address-space + in-place'tir: ayrı bir attacker process, victim'in conditional branch'iyle aynı virtual address'te bir "shadow branch" çalıştırır, böylece aynı PHT entry'sine map'lenir ve onun direction prediction'ını eğer — victim branch attacker tarafından hiç execute edilmese bile.
Yeni gösterilmiş strateji
Canella et al., önceki Spectre-PHT attack'lerinin "bir same-address-space in-place branch poisoning stratejisine dayandığını" belirtir, ama Intel, ARM ve AMD CPU'larını "dört PHT mistraining stratejisinin tümüne karşı vulnerable" bulmuşlardır; bu da onları "Spectre-PHT tarzı branch misprediction attack'lerini, victim branch'in önceden execute edilmesi olmadan başarıyla gösteren ilkler" yapar. Bu, kısıtlı adversary'ler için önemlidir — örn. "doğrudan user input kabul etmeyen privileged bir daemon process"e saldırmak, ya da yalnızca bir kez çalışabilen remote-attestation şemalı bir SGX enclave'i (in-place eğitmek için victim'i yeniden çalıştırmaya gereksinen attack'leri etkisiz kılarak).
Walkthrough¶
Attacker kendi conditional branch'ini victim'in bounds check'iyle aynı virtual address'e yerleştirir (ASLR'ı yenip mapping'leri hizalayarak), onu always-taken eğitir, sonra victim'i malicious bir index'le çalıştırır:
victim bounds check (vaddr V):
if (x < len(array1)) { y = array2[array1[x] * 4096]; } // Variant 1 gadget
attacker process, branch at the SAME vaddr V:
repeat: if (small_value < BIG) { ... } // always-taken -> PHT[V] biases "taken"
# co-located on the same physical core, attacker poisons PHT entry for V;
# victim then runs with out-of-bounds x -> branch mispredicted "taken"
# -> transient OOB load of array1[x], leaked via array2[...] into a covert channel
Cross-process PHT poisoning mümkündür çünkü PHT entry'si, branch'in virtual address'inin (bir subset'i) artı BHB state tarafından seçilir; attacker bunların ikisini de shadow branch'i eşleşen address'e yerleştirip aynı recent-branch history'sini priming ederek yeniden üretebilir.
Mistraining-strategy matrix (Canella et al., Figure 3)
in-place (IP) out-of-place (OP)
(same branch addr) (congruent branch)
same-addr (SA) victim runs the victim congruent branch in the
(intra-process) branch itself victim process
cross-addr (CA) shadow branch at SAME congruent branch in a
(cross-process) vaddr, other process different process
<-- THIS DOC
Detection¶
- Hassas bir victim branch'iyle aynı virtual address'e map'lenmiş bir conditional branch'i tekrar tekrar execute eden, co-located bir process.
- Aynı physical core'da (SMT sibling veya time-shared) external load altında victim'in bounds check'indeki branch-misprediction counter'larının yükselmesi.
Mitigation¶
Spectre-PHT için kaynak-destekli software fix'i, branch üzerinde bir
speculation barrier'dır: Intel ve AMD "bir branch'in her iki sonucunda da
lfence gibi serializing instruction'lar kullanmayı önerdi." Her branch'i
serialize etmek branch prediction'ı fiilen devre dışı bıraktığından, Intel
yalnızca gereken yerlere lfence eklemek için static analysis önerdi;
Microsoft'un MSVC /Qspectre'ı ve Open Source Security Inc. benzer pattern-based
ekleme kullanır (Kocher böyle analizlerin gadget'ları kaçırdığını gösterdi). ARM,
conditional select/move'larla birleştirilmiş CSDB barrier'ını sunar ve
Speculative Load Hardening (SLH) index'i mask'ler. Şunu not edin: bunlar
victim branch'teki misspeculation/leak'i hedefler ve böylece cross-address-space
training'i de etkisiz kılar; PHT-flush/partition-on-switch savunmaları
same-virtual-address cross-process poisoning'i generic olarak durdurmaz.