Intra-mode Branch Target Injection¶
Spectre-v2'nin same-mode (örn. user->user veya kernel->kernel) varyantı: bir indirect branch, aynı privilege domain'indeki başka bir indirect branch tarafından eğitilmiş alias'lanan bir predictor entry'sine mispredict eder.
Mechanism¶
Neden çalışır
Klasik Spectre-v2 / Branch Target Injection (BTI), daha yüksek privilege'lı bir branch'i yönlendirmek için indirect branch predictor'ı daha düşük bir privilege domain'inden eğitir (cross-mode, örn. user'ın bir kernel branch'ini eğitmesi). eIBRS (enhanced IBRS) ve Arm CSV2 gibi hardware savunmaları tam da bunu durdurmak için tasarlandı: branch target state'i privilege mode'ları arasında izole ederler, böylece attacker daha yüksek privilege'lı bir branch'in tüketeceği predictor entry'leri artık inject edemez.
Intra-mode BTI (IMBTI, CVE-2022-0002), bu savunmaların kapsamadığı artık durumdur. Intel'in ifadesiyle, IMBTI "Branch History'den bağımsız olarak, mistraining ve misprediction için kullanılan belirli branch'lerin aynı privilege domain'inde bulunduğu exploit'leri" kapsar. Aynı mode içindeki iki indirect branch, aynı indirect-predictor entry'sine alias yapabilir; birini eğitmek diğerini yönlendirir. Her iki branch de aynı privilege domain'inde yaşadığı için eIBRS/CSV2 mode isolation hiç devreye girmez — uygulanacak bir privilege sınırı yoktur.
Bu, Branch History Injection (BHI / Spectre-BHB, CVE-2022-0001)'in kardeşidir: BHI cross-mode'dur ve predictor'ın bir target entry seçmek için karıştırdığı global branch history'yi poison'layarak çalışır (target state izole olsa bile history paylaşılır). IMBTI ise ailenin same-mode üyesidir. Her ikisi de target-state isolation'ın tek başına suistimal edilebilir bir yüzey bıraktığını gösterir; her ikisi de Spectre-BHB / Spectre-v2 ailesine aittir ve Flush+Reload gibi bir cache covert channel üzerinden recover edilir.
Walkthrough¶
Kavramsal olarak, attacker bir victim indirect branch'i ile aynı domain'de bir indirect branch'i kontrol eder ve predictor aliasing'i öyle ayarlar ki victim speculatif olarak seçilmiş bir gadget'a zıplar:
Same privilege domain (e.g. kernel-to-kernel via an in-kernel interpreter):
1. Locate two indirect branches B_train (attacker-influenced) and
B_victim (security-relevant) that alias to the same predictor entry.
2. Repeatedly execute B_train so it predicts attacker target T (a gadget).
3. Cause B_victim to execute; it speculatively goes to T.
4. T reads a secret and touches probe[secret * 4096].
5. Flush+Reload the probe array -> fastest line == secret byte.
Same-mode durumu için tarihsel olarak önemli bir kolaylaştırıcı, unprivileged bir kullanıcının attacker'ın şekillendirdiği indirect branch'leri kernel address space'inin içine yerleştirmesine olanak tanıyan kernel içi unprivileged eBPF JIT'idir. Onu kontrol edip devre dışı bırakabilirsin:
# Is unprivileged eBPF allowed? (0 = allowed, 1/2 = restricted)
cat /proc/sys/kernel/unprivileged_bpf_disabled
# Disable unprivileged eBPF to shrink the same-mode attack surface:
sudo sysctl kernel.unprivileged_bpf_disabled=1
# Inspect the kernel's Spectre-v2 mitigation view:
cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Raporlanan veriler (Intel)
CVE-2022-0002 Intra-mode BTI (IMBTI) CVSS base 4.7 (Medium)
CVE-2022-0001 Branch History Injection (cross-mode sibling)
Affected: Intel cores from Haswell onward (excl. Atom family);
Arm Cortex-A/Neoverse cores in the BHB family
Isolation gap: eIBRS/CSV2 isolate branch *target* state across modes,
but not within a mode (IMBTI) or the branch *history* (BHI)
Warning
IMBTI, branch history'yi bir privilege sınırı boyunca inject etmeye bağlı değildir — same-mode predictor aliasing yeterlidir. Dolayısıyla yalnızca mode geçişlerinde history'yi temizleyen mitigation'lar (BHI fix'i) tek başlarına intra-mode durumunu ele almaz.
Detection¶
/sys/devices/system/cpu/vulnerabilities/spectre_v2, aktif Spectre-v2 mitigation stratejisini raporlar (eIBRS, retpoline, BHB-clearing, vb.).BHI_NOenumeration'ının (etkilenmeyen CPU'lar) varlığı ile software BHB-clearing arasındaki fark, bir host'ta daha geniş ailenin nasıl ele alındığını gösterir.
Mitigation¶
- Same-mode gadget yüzeyini azalt: unprivileged eBPF'i devre dışı bırak
(
kernel.unprivileged_bpf_disabled=1) ki attacker'lar indirect branch'leri kernel address space'ine inject edemesin. - Retpoline, indirect branch'leri indirect predictor tarafından yönlendirilmeyen return tabanlı bir yapıya çevirerek BTI tarzı attack'leri mitigate eder.
- Privilege geçişlerinde BHB-clearing software dizisi (BHI kardeşi için
birincil fix) artı eIBRS;
BHI_DIS_S/BHI_NOenumerate eden CPU'larda bunun yerine hardware kontrolleri kullanılır. - İlgili OS/kernel güncellemelerini ve microcode'u uygula; Intel aileyi "medium" severity olarak derecelendirir ve bu kontrolleri birleştirmek için rehberlik sunar.