Два новых варианта уязвимости Spectre. Усиление защиты Chrome

Раскрыты сведения о двух новых уязвимостях в механизме спекулятивного выполнения инструкций в процессорах. Уязвимости основываются на тех же принципах, что и метод атаки Spectre 1, поэтому им присвоены кодовые имена Spectre 1.1 (CVE-2018-3693) и Spectre 1.2 (CVE пока не назначен). Наличие проблем подтверждено в процессорах Intel и ARM, подверженность уязвимостям процессоров AMD пока находится под вопросом. В рамках программы по выплате вознаграждений за выявление уязвимостей компания Intel выплатила исследователям 100 тысяч долларов.

Уязвимость Spectre 1.1 продолжает развитие идей по восстановлению данных, оставшихся в процессорном кэше в результате спекулятивного выполнения инструкций. Новый метод позволяет атакующему получить информацию о содержимом памяти через инициирование выполнения спекулятивных операций, приводящих к переполнению буфера (ключевое отличие от Spectre 1 в том, что для атаки используются спекулятивные операции записи, а не чтения). Несмотря на то, что подобные операции выполняются в ходе спекулятивного выполнения и отбрасываются после определения пересечения границ буфера, их результат оседает в кэше и может быть восстановлен при помощи методов определения содержимого кэша по сторонним каналам, анализирующих изменение времени доступа к прокэшированным и не прокэшированным данным.

Проблеме присвоен достаточно низкий уровень опасности (5.9 из 10) так как для организации непривилегированным пользователем атаки для чтения данных из привилегированных областей памяти требуется наличие в привилегированном коде определенной последовательности команд в сочетании с тем, что запись в память должна производиться по адресу, зависящему от внешнего значения, подконтрольного атакующему (например, должны присутствовать конструкции вида «if
(y Принцип работы уязвимости Spectre 1.2 в основных чертах аналогичен
Spectre 1.1, но основывается на инициировании спекулятивных операций записи в области памяти, которые защищены флагом, допускающим только чтение. В качестве практического применения Spectre 1.2 называется определение значений указателей и метаданных с целью организации обхода ограничений sandbox-окружений.

Несмотря на общую схожесть методов с уже устранёнными уязвимостями Spectre 1 и 4, разработанные методы противостояния на уровне компиляторов в текущем виде неэффективны для Spectre 1.1 и 1.2 и требуют модернизации. С другой стороны, техника защиты может быть реализована сходным со Spectre 1 способом и базироваться на добавлении в процессе компиляции приложений инструкции LFENCE, уже поставляемой в ранее выпущенном обновлении микрокода Intel. Кроме того уже имеющиеся в компиляторах режимы противодействия переполнению буфера могут оказаться эффективны для защиты от Spectre 1.1. Исследователями также предложено несколько вариантов устранения уязвимостей полностью на аппаратном уровне.

Тем временем, опубликован модифицированный метод эксплуатации уязвимости Spectre 1 в web-бразуерах (прототип эксплоита), позволяющий обойти добавленные ранее в браузеры меры противодействия уязвимостям Spectre. При открытии специально оформленной страницы с JavaScript-кодом, в JIT может быть сформирован необходимый для проявления уязвимости Spectre набор инструкций, позволяющий атакующему прочитать содержимое всего адресного пространства текущего процесса, в котором могут храниться конфиденциальные сведения, связанные с другими вкладками или сохранёнными ключами и паролями.

Показано, что подобные атаки могут быть успешно проведены даже в условиях применения ранее добавленных ограничений точности таймера и блокирования SharedArrayBuffer, которые лишь замедляют атаку, но полностью не исключают её проведение. Предложенный обходной метод атаки оказался работоспособен в Chrome/Chromium, Edge, Safari и прочих браузерах на базе WebKit и Blink (скорость проведения атаки составила примерно 1 бит в секунду), но не сработал в Firefox благодаря существенному снижению точности performance.now(). В качестве эффективных меры защиты называется полная изоляция сайтов в отдельных процессах и применение масок при индексирования массивов в JavaScript (например, применение для каждого индекса элемента операции AND с маской, зависящей от размера массива).

Для повышения эффективности защиты от Spectre компания Google объявила о включении для 99% пользователей Chrome 67 режима строгой изоляции сайтов, при котором страницы разных сайтов всегда размещаются в памяти разных процессов, в каждом из которых применяется свой sandbox. Сообщается, что указанная техника приведёт к увеличению общего потребления памяти браузером на 10-13% из-за увеличения числа работающих процессов. В дальнейшем в Chrome планируется вернуть прежнюю точность таймера и возобновить поддержку SharedArrayBuffer, так как для защиты от Spectre теперь достаточно режима строгой изоляции.

Главным отличием режима строгой изоляции от ранее применяемой многопроцессной модели является то, что теперь разделение осуществляется не по вкладкам, а по доменам, т.е. если раньше содержимое загруженных с других доменов скриптов, iframe и popup-ов выполнялось в одном процессе с базовым сайтом, то теперь они будут разделены по разным процессам.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.