Skip to content

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
PHT-CA-IP, sol-alt hücredir: cross address space, in-place (aynı virtual address, farklı process).

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.

References