Indirector¶
Intel'in daha önce yeterince incelenmemiş Indirect Branch Predictor (IBP)'ını reverse-engineer eden ve attacker'ın seçtiği hedefleri IBP/BTB entry'lerine inject etmek için bir iBranch Locator kullanan yüksek hassasiyetli bir Branch Target Injection attack'i; Raptor/Alder Lake üzerinde cross-process ve cross-privilege control-flow hijack ile ASLR break'lerini mümkün kılar.
Mechanism¶
Neden çalışır (aşılan sınır)
Klasik Spectre-v2 çalışması, Branch Target Buffer (BTB) ve Return Stack Buffer'ı hedefler. Indirector (Li, Yavarzadeh, Tullsen; UC San Diego, USENIX Security 2024) ayrı, daha zengin bir yapıyı reverse-engineer eder: Indirect Branch Predictor (IBP) — hedefi runtime'da hesaplanan indirect branch'lerin target'larını tahmin eden birim.
Reverse-engineering, IBP'nin organizasyonunu açığa çıkarır — history indeksli üç table'a (68, 132 ve 388 bitlik global history'ler) sahip bir set-associative predictor, her biri 512 entry'li 2-way associative — ve, en önemlisi, index ve tag hash fonksiyonlarını. Yazarlar, tag'in bir kısmının doğrudan (XOR) program-counter bit'lerinden türetildiğini bulur. Index/tag eşlemesi bir kez bilindiğinde, attacker bir victim'in indirect branch'i ile alias'lanan bir entry'yi deterministik olarak yerleştirebilir.
Suistimal edilen invariant: IBP/BTB, etkilenen core'larda context'ler arası
paylaşılır ve yalnızca zayıf şekilde tag'lenir, böylece victim'in IBP set
ve tag'ini hesaplayabilen bir attacker seçtiği bir target'ı inject edebilir.
Victim indirect branch'ini (veya BTB üzerinden yönlendirilen bir
ret/branch'i) yürüttükten sonra, speculatif olarak attacker'ın target'ına
zıplar — brute-force training'den çok daha yüksek hassasiyetli bir
Spectre-BTB sınıfı transient hijack ve ASLR'yi kırmaya
yetecek kadar adres leakage'ı. Bu, Branch History
Injection ile yakından ilişkilidir ama yalnızca
global history buffer üzerinde değil IBP yapısı üzerinde çalışır.
Walkthrough¶
Kamuya açık proje sayfasından ve USENIX paper'ından kavramsal reprodüksiyon; burada exploit düzeyinde locator kodu veya offset'ler yeniden üretilmez.
- Victim entry'sini bul (iBranch Locator). İki adımlı bir araç, önceden history bilgisi olmadan IBP'deki herhangi bir indirect branch'i bulur:
step 1 (index): eviction-based contention -> which IBP set holds the victim
step 2 (tag): exploit XOR(tag, PC) relationship -> resolve tag aliasing
- Injection primitive'ini seç.
IBP Injection: locate victim entry, inject an arbitrary target via a
multi-target indirect branch you control.
BTB Injection: evict the victim from the IBP so it falls back to the BTB,
then inject a single target into its BTB entry (needs only
the index locator -> cheaper).
- Tetikle + leak et. Victim'i sınırın ötesine sür ki indirect branch'i poison'lanmış predictor'a danışsın ve transient olarak bir disclosure gadget çalıştırsın; secret-dependent cache state'i Flush+Reload ile recover et. Aynı hassasiyet, ASLR'yi çökertmek için target adreslerini sızdırır.
Raporlanan veriler (indirector.cpusec.org / USENIX Security 2024)
Structure: IBP = 3 tables indexed by 68/132/388-bit global history,
2-way, 512 entries/way; tag partly XOR(PC)
Primitives: iBranch Locator; IBP Injection; BTB Injection
Capability: cross-process & cross-privilege BTI; ASLR break
Affected: Intel Raptor Lake and Alder Lake
Disclosure: Intel notified Feb 2024; advisory 2024-07-02
Award: USENIX Security 2024 Distinguished Paper
Detection¶
- Pratik bir real-time host detector yok: attack local user kodudur ve branch-misprediction performance counter'ları injection aktivitesini tek başına ayırt etmek için fazla gürültülüdür.
- Dolaylı sinyaller: bir process'te alışılmadık derecede agresif eviction-set prob etme / IBP contention loop'ları korele olabilir, ama spesifik değildir.
- Uygulanabilir yol posture izlemedir — microcode seviyesini ve IBPB'nin ilgili sınırlarda devrede olduğunu doğrula (bkz. Mitigation).
Mitigation¶
- Domain geçişlerinde IBPB. Paper, Linux'un varsayılan
IBPB: conditional'ının yalnızca sınırlı geçişlerde (örn. SECCOMP / kısıtlanmış indirect branch'ler) tetiklendiğini ve birçok same-core geçişini açıkta bıraktığını belirtir; IBPB kullanımını genişletmek injection'ı kapatır ama overhead taşır (~%50'ye kadar raporlandı). - Retpoline / eIBRS klasik BTI maruziyetini azaltır; buradaki IBP/BTB hassasiyeti history-only varsayımları etrafından dolanabildiği için IBPB ile birleştir.
- Hardware BPU isolation. Yeni Intel tasarımları, SMT core'lar ve privilege seviyeleri arasında aliasing'i önlemek için Core-ID ve Privilege-Level alanları ekler; same-core/same-privilege durumları yine de daha güçlü tagging gerektirir. En güncel microcode'u uygula ve Intel'in 2024-07-02 rehberliğini izle.