Skip to content

Indirect Branch Restricted Speculation

IBRS, daha ayrıcalıklı bir mode'daki indirect branch'lerin, daha az ayrıcalıklı yazılım tarafından eğitilmiş branch prediction'larla kontrol edilmesini engelleyen bir x86 kontrolüdür (IA32_SPEC_CTRL bit 0 set edilir); Spectre v2'yi (Branch Target Injection) mitige eder.

Mechanism

Note

IBRS'nin uyguladığı invariant: IBRS set edildiği sürece, daha yüksek ayrıcalıklı bir predictor mode'unda yürütülen indirect branch'ler, daha düşük ayrıcalıklı bir mode'da çalışan yazılımdan (ya da legacy IBRS'te, IBRS en son set edilmeden önce) öğrenilen tahminlerle kontrol edilmez. OS bunu, IA32_SPEC_CTRL MSR'ına bit 0'ı (IBRS) set eden bir WRMSR ile etkinleştirir. Bu, user-mode (veya guest) kodunun kernel indirect branch'lerini bir Spectre-v2 disclosure gadget'ına yönlendirmek için Branch Target Buffer'ı poison etmesini durdurur.

Kernel Spectre belgelerine göre IBRS, trust sınırlarının çevresinde devreye sokulur, örneğin:

indirect branch restricted speculation is turned on by default before invoking any firmware code to prevent Spectre variant 2 exploits

Legacy vs Enhanced IBRS. Legacy IBRS'in, daha ayrıcalıklı bir mode'a her girişte OS tarafından toggle'lanması (ve dönüşte temizlenmesi) gerekir ki bu maliyetlidir. Enhanced IBRS (eIBRS) IA32_ARCH_CAPABILITIES üzerinden enumerate edilir ve boot'ta bir kez set edilir; hardware bundan sonra predictor entry'lerini privilege mode'ları arasında sürekli izole eder. Bkz. enhanced IBRS.

Warning

IBRS yalnızca mode'lar arası indirect-branch prediction kontrolünü kısıtlar. Tek başına Branch History Buffer'ı izole etmez (BHI'yı geride bırakır) ve bazı eIBRS Intel parçalarında return tabanlı Spectre-BTI'ya (Retbleed) karşı yetersiz olduğu gösterildi; daha sonra Indirect Target Selection eIBRS guest/host isolation'ını daha da zayıflattı.

Walkthrough

Check the reported mitigation
$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: IBRS, IBPB: conditional, RSB filling

Mitigation: IBRS legacy IBRS'i gösterir; Mitigation: Enhanced IBRS (isteğe bağlı + Retpolines) bir kez set edilen hardware varyantını gösterir.

Mode'u kernel command line üzerinden zorla veya seç:

spectre_v2=ibrs            # use (legacy) IBRS
spectre_v2=eibrs           # use enhanced IBRS where supported
spectre_v2=retpoline       # use software retpoline instead
spectre_v2=off             # disable (vulnerable)

CPU/microcode'un feature'ı enumerate ettiğini doğrula:

$ grep -o 'ibrs' /proc/cpuinfo | head -1
ibrs

Detection

spectre_v2 sysfs node'u aktif stratejiyi adlandırır; kernel, eIBRS veya retpoline'ın daha iyi default olduğu parçalarda ibrs istendiğinde uyarır.

Mitigation

IBRS, retpoline ve enhanced IBRS ile birlikte kernel içi birbiriyle değiştirilebilir birkaç Spectre-v2 stratejisinden biridir; tipik olarak context switch'ler boyunca IBPB, SMT için STIBP ve RSB stuffing ile birleştirilir. Etkinliği microcode mitigations'a bağlıdır.

References