В eBPF найдена возможность обхода защиты ядра Linux от атаки Spectre

В ядре Linux найдена уязвимость (CVE-2019-7308), позволяющая обойти защиту от проведения атак класса Spectre v1 через использование подсистемы eBPF. Проблема устранена в выпусках ядра 4.19.19 и 4.20.6, но в дистрибутивах пока остаётся неисправленной (DebianRHELSUSEUbuntu).

Для чтения данных из привилегированных областей памяти при помощи атаки Spectre v1 необходимо наличие в привилегированном коде определённой последовательности команд. Подобные сочетания команд были удалены из ядра Linux, но разработчики не учли то, что подсистема eBPF позволяет инициировать выполнение в контексте ядра произвольных BPF-программ. Через манипуляцией с байткодом BPF атакующий может добиться выполнения JIT-компилятором eBPF необходимого для совершения атаки Spectre v1 сочетания машинных инструкций, приводящих к спекулятивному обращению к внешним областям памяти при совершении операций с указателем.

Дополнительно, можно отметить предложение включить в состав ядра Linux патч, реализующий дополнительный режим для отключения базирующейся на использовании PSTATE-бита SSBS (Speculative Store Bypass Safe) защиты от атак Spectre. Подобная защита ощутимо снижает производительность, поэтому включается на уровне приложения при помощи команды PR_SET_SPECULATION_CTRL в prctl (как правило, атаке подвержены программы с JIT, например, Java). Проблема в том, что при отключении спекулятивных операций, данное состояние наследуется и для дочерних процессов. Для отключения наследования защиты (наследования блокировки спекулятивных операций) при запуске новых процессов предложен флаг PR_SPEC_DISABLE_NOEXEC.

Источник: OpenNET