Недавно стало известно, что выявлены две уязвимости в ядре Linux, что разрешить использовать подсистема eBPF для обхода защиты от атаки Spectre 4 (SSB, Обход спекулятивного магазина). Отмечается, что с помощью непривилегированной программы BPF злоумышленник может создать условия для спекулятивного выполнения определенных операций и определить содержимое произвольных областей памяти ядра.
Метод атаки Spectre 4 полагается на восстановление данных, захваченных в кеш-память процессора после отбрасывания результата спекулятивного выполнения операций при обработке чередующихся операций чтения и записи с использованием косвенной адресации.
Когда операция чтения следует за операцией записи, смещение направления чтения может быть уже известно из-за аналогичных операций (операции чтения выполняются намного чаще, и чтение может выполняться из кеша), и процессор может теоретически читать перед записью, не дожидаясь вычисления смещения направления косвенной записи.
Если после вычисления смещения обнаруживается пересечение областей памяти для записи и чтения, процессор просто отбрасывает результат чтения, уже полученный предположительно, и повторяет эту операцию. Эта функция позволяет инструкции чтения обращаться к предыдущему значению в некотором направлении, пока операция сохранения еще не завершена.
После исключения неудачной спекулятивной сделки, в кеше остаются следы его выполнения, после чего один из методов определения содержимого кеша может быть использован для его извлечения на основе анализа изменений времени доступа к кеш-памяти и кешируемых данных.
Обратите внимание, что каждой темой можно злоупотреблять независимо от другой, полагаясь на в ошибках, которые не перекрываются.
PoC были переданы в частном порядке разработчикам подсистемы BPF, чтобы помощь в развитии аранжировки.
Первая уязвимость CVE-2021-35477: это вызвано ошибкой в механизме проверки программы BPF.. Чтобы защититься от атаки Spectre 4, программа проверки добавляет дополнительную инструкцию после потенциально проблемных операций сохранения в памяти, сохраняя нулевое значение для смещения следов предыдущей операции.
Предполагалось, что операция нулевой записи будет очень быстрой и заблокирует спекулятивное выполнение, поскольку она зависит только от указателя кадра стека BPF. Но на самом деле можно было создать условия, при которых инструкция, ведущая к спекулятивному выполнению, успевает исполниться до операции превентивного сохранения.
Вторая уязвимость CVE-2021-3455: связано с тем, что, когда средство проверки BPF обнаруживает потенциально опасные операции сохранения в памяти, неинициализированные области стека BPF, первая операция записи, в которой он не защищен, игнорируются.
Эта функция приводит к возможности выполнения операции спекулятивного чтения в зависимости от неинициализированной области памяти перед выполнением инструкции сохранения. Новая память для стека BPF выделяется без проверки содержимого, которое уже находится в выделенной памяти, и на этапе перед запуском программы BPF есть способ управлять содержимым области памяти, которая затем будет выделена для стек БПФ.
Доступное решение повторно реализует методы смягчения последствий, чтобы продолжить рекомендовано поставщиками ЦП и доступно в основном ядре репозиторий git.
Наконец, упоминается, что разработчики подсистем eBPF в ядре получили доступ к прототипу эксплойта, который демонстрирует возможность проведения атак на практике.
Проблемы исправлены в виде патчей, которые будут включены в следующее обновление ядра Linux, поэтому обновления для различных дистрибутивов начнут поступать в течение следующих нескольких дней.
источник: https://www.openwall.com/