Они есть давно. И, ДА, с их помощью можно творить чудеса с 1995 года. Но только очень локально.
То есть так вот чтобы запустил эксплойт и получил пароли - неа, не выйдет. Но в некоторых случаях можно подглядеть действительно секреную информацию. Только нужно постараться чтобы так повезло, создать условия.
Какова расплата?

О, здесь всё непросто. Так или иначе обе техники полагаются на изъяны в алгоритме спекулятивности, реализованном на уровне процессора. В том числе во внеочередном исполнении команд и в предсказании ветвления. Суть сводится к тому, чтобы конвеер команд исполнял как можно больше инструкций за такт. Только вот принадлежность потока инструкций к тому или иному потоку/приложению не проверяется ибо процессор сам по себе не а курсе, что за инструкции он исполняет. И, соответственно, можно использовать ложное предположение о результате выполнения (целевого) кода в своих целях, например.

Соответственно, на уровне ОС нужно разделить и страницы памяти и сами потоки приложений. Это дополнительные затраты в менеджере процессов и менеджере памяти. Происходят эти расходы при переключении между потоками и между userspace и kernelspace, при исполнении сискола, например. То есть сисколы теперь становятся ещё дороже.

В цифрах падение производительности в районе 20% наблюдается при использовании postgresql. Это в серверном сегменте. А на десктопе - потеря интерактивности. Например, браузер начинает "тупить", анимации перестают быть плавными. То есть система ощущается тормозной, как будто ей не хватает памяти и она немного свопится.

Есть тонкость, для более-менее полноценной нейтрализации недобросовестного использования branch prediction необходимо также обновление микрокода процессоров. Это делается через обновление firmware или "bios" или через заливку и активацию микрокода из userspace.

Есть возможность это безобразие отключить, так как падение производительности в некоторых неудачных случаях достигает 60% и более.

Для Linux-ов нужно прописать опции загрузки ядра

noibrs noibpb nopti

либо можно в debugfs прописать некоторые параметры. Для начала надо убедиться, что она смонтирована (systemd монтирует её автоматом), если вдруг она не смонтирована, то

mount -t debugfs nodev /sys/kernel/debug

И дальше

echo 0 > /sys/kernel/debug/x86/pti_enabled
echo 0 > /sys/kernel/debug/x86/ibpb_enabled
echo 0 > /sys/kernel/debug/x86/ibrs_enabled

Next Post