Spectre-BTB same-address-space out-of-place¶
Spectre-BTB (branch target injection / Variant 2)'nin, vulnerable branch'in kendisi yerine farklı (aliasing) bir virtual address'teki congruent bir branch çalıştırılarak victim'in kendi address space'i içinde mistrain edildiği hali.
Mechanism¶
Neden çalışır
Spectre-BTB (Spectre Variant 2), transient execution'ı mispredict edilmiş bir branch target'ına yönlendirmek için Branch Target Buffer (BTB)'ı poison'lar. Canella et al. mistraining'i iki eksen boyunca sınıflandırır (makalenin Figure 3'ü):
- Address space — SA vs CA. Branch-prediction buffer'ları "yaygın olarak branch instruction'ın virtual address'ine göre index'lenir," dolayısıyla poisoning ya victim'in kendi process'i içinde (same-address-space, SA) ya da ayrı bir attacker process'ten (cross-address-space, CA) kaynaklanabilir.
- Location — IP vs OP. Predictor'ı eğitmek için ya "vulnerable branch'in kendisi (in-place)" ya da "congruent bir virtual address'teki bir branch (out-of-place)" execute edilir.
BTB-SA-OP, same-address-space'i out-of-place ile birleştirir: aynı process içinde başka bir yerde bulunan farklı bir branch instruction, vulnerable branch'in sonradan başvuracağı BTB entry'sini eğitir. Bu tam olarak işler çünkü BTB, entry'leri yalnızca virtual-address bit'lerinin bir subset'iyle index'ler/tag'ler — dolayısıyla address'i o bit'leri paylaşan "congruent" bir branch, aynı predictor entry'sine alias'lanır. Canella et al.'nin deyimiyle, "prediction'da virtual address'in yalnızca bir subset'i kullanıldığında, mistraining congruent bir virtual address'teki bir branch instruction kullanılarak elde edilebilir."
Aliasing microarchitecture'a özgüdür
Bir BTB entry'sini seçen tam address bit'leri (veya bit'lerin fonksiyonu) kamuya açık şekilde belirtilmemiştir. Canella et al. out-of-place BTB poisoning'i Intel üzerinde tekrarladı ama test ettikleri AMD ve ARM CPU'larında "out-of-place BTB poisoning'i gösteremedi"; "reverse engineer edemedikleri, bilinmeyen bir virtual address bit (alt)kümesi veya bir bit fonksiyonundan" şüphelendiler. Herhangi spesifik bir aliasing-bit sayısını, hedef parçanız üzerinde ölçülmediği sürece kavramsal kabul edin.
Walkthrough¶
Attacker (victim'in address space'i içinde kod çalıştıran, örn. JIT-emitted ya da sandbox'lı kod, veya enclave için bir branch eğiten bir SGX host'u), kontrol edilebilir bir indirect branch'i victim'in vulnerable branch'iyle congruent bir virtual address'e yerleştirir, sonra onu tekrar tekrar seçilen gadget'a jump ettirir:
victim vulnerable branch: vaddr V = 0x........XXXX
attacker shadow branch: vaddr S congruent to V (shares the indexing bits)
repeat:
set jump target of S -> &gadget # train the shared BTB entry
execute branch at S # BTB now predicts &gadget
# later, victim executes branch at V:
# BTB (aliased entry) predicts &gadget -> transient execution of gadget
Bu, SGXPectre (Chen et al.) tarafından kullanıldı; Canella et al. bunu, "ya bir cross-address-space in-place ya da same-address-space out-of-place BTB poisoning stratejisi kullanarak Intel SGX enclave'lerinden secret çıkardığı" şeklinde alıntılar — host process, enclave'in indirect branch'ini poison'lamak için congruent bir branch eğitir.
Mistraining-strategy matrix (Canella et al., Figure 3)
BTB-SA-OP, sağ-üst hücredir: aynı address space, out-of-place.Detection¶
- Farklı bir in-process call site sıcakken victim branch'te indirect-branch misprediction counter'larının yükselmesi, aliasing-based training'in bir imzasıdır.
- Enclave'ler için: untrusted host kodunun, bir enclave branch'iyle congruent bir address'teki bir indirect branch'i tekrar tekrar çalıştırması.
Mitigation¶
- retpoline — korunan indirect branch'te BTB target prediction'ı tümüyle kaldırır, böylece congruent bir aliasing entry onu yönlendiremez.
- IBRS / enhanced IBRS — eIBRS, daha yeni Intel CPU'larındaki hardware Spectre-BTB kontrolüdür.
- IBPB — domain entry'sinde BTB'yi flush'lar; yalnızca poisoning branch barrier'dan önce execute olursa etkilidir (aynı domain içinde entry'den sonra oluşan training'i durdurmaz).
- STIBP — cross-SMT BTB paylaşımını engeller (in-process aliasing'e diktir).
Trainer ve victim bir address space'i paylaştığı için, domain geçişlerine göre ayarlanmış BTB flush/partition savunmaları, congruent branch barrier'dan sonra çalışırsa bypass edilebilir.