BHI — новая уязвимость класса Spectre в процессорах Intel и ARM

Группа исследователей из Амстердамского свободного университета выявила новую уязвимость в микроархитектурных структурах процессоров Intel и ARM, представляющую собой расширенный вариант уязвимости Spectre-v2, позволяющий обойти добавленные в процессоры механизмы защиты eIBRS и CSV2. Уязвимость присвоено несколько названий: BHI (Branch History Injection, CVE-2022-0001), BHB (Branch History Buffer, CVE-2022-0002) и Spectre-BHB (CVE-2022-23960), которые описывают разное проявление одной проблемы (BHI — атака, затрагивающая разные уровни привилегий, например, процесс пользователя и ядро, BHB — атака на одном уровне привилегий, например, eBPF JIT и ядро).

Исследователями продемонстрирован рабочий эксплоит, позволяющий из пространства пользователя извлекать произвольные данные из памяти ядра. Например, показано как при помощи подготовленного эксплоита можно извлечь из буферов ядра строку с хэшем пароля пользователя root, загруженную из файла /etc/shadow. В эксплоите демонстрируется возможность использования уязвимости в рамках одного уровня привилегий (атака из уровня ядра на ядро) при помощи загруженной пользователем еBPF-программы. Не исключается также возможность применения вместо eBPF существующих в коде ядра Spectre-гаджетов, последовательностей команд, приводящих к спекулятивному выполнению инструкций.

Уязвимость проявляется в большинстве актуальных процессоров Intel, за исключением процессоров семейства Atom. Из процессоров ARM проблеме подвержены Cortex-A15, Cortex-A57, Cortex-A7*, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, Neoverse V1 и возможно некоторые чипы Cortex-R. По мнению исследований, в процессорах AMD уязвимость не проявляется. Для устранения проблемы предложено несколько программных методов блокирования уязвимости, которые можно использовать до появления аппаратной защиты в будущих моделях CPU.

Для блокирования проведения атак через подсистему eBPF рекомендуется отключить по умолчанию возможность загрузки eBPF-программ непривилегированными пользователями, записав 1 в файл «/proc/sys/kernel/unprivileged_bpf_disabled» или выполнив команду «sysctl -w kernel.unprivileged_bpf_disabled=1». Для блокирования атак через гаджеты рекомендуется использовать инструкцию LFENCE в участках кода, потенциально приводящих к спекулятивному выполнению. Примечательно, что в конфигурации по умолчанию большинства дистрибутивов Linux уже присутствуют необходимые меры защиты, достаточные для блокирования продемонстрированной исследователями атаки через eBPF. Рекомендации Intel по отключению непривилегированного доступа к eBPF также применяются по умолчанию начиная с ядра Linux 5.16 и будут бэкпортированы в более ранние ветки.

Концептуально BHI представляет собой расширенный вариант атаки Spectre-v2, в котором для обхода добавленной защиты (Intel eIBRS и Arm CSV2) и организации утечки данных используется подстановка значений в буфер с глобальной историей переходов (Branch History Buffer), применяемый в CPU для повышения точности предсказания ветвления за счёт учёта истории прошлых переходов. В ходе атаки через манипуляции с историей переходов создаются условия неверного предсказания перехода и спекулятивного выполнения необходимых инструкций, результат которых оседает в кэше.

За исключением использования буфера с историей переходов (Branch History Buffer) вместо буфера предсказания ветвления (Branch Target Buffer) новая атака идентична Spectre-v2. Задача атакующего в создании таких условий, чтобы адрес при выполнении спекулятивной операции был взят из области определяемых данных. После выполнения спекулятивного косвенного перехода, считанный из памяти адрес перехода, остаётся в кэше, после чего для его извлечения может применяться один из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.

Источник: opennet.ru

Добавить комментарий