Два новых варианта уязвимости Spectre. Усиление защиты Chrome
12 июля 2018 года
Раскрыты сведения о двух новых уязвимостях в механизме спекулятивного выполнения инструкций в процессорах. Уязвимости основываются на тех же принципах, что и метод атаки Spectre 1, поэтому им присвоены кодовые имена Spectre 1.1 ( CVE-2018-3693) и Spectre 1.2 (CVE пока не назначен). Наличие проблем подтверждено в процессорах Intel (Архивная копия от 14 июля 2018 на Wayback Machine) и 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-ов выполнялось в одном процессе с базовым сайтом, то теперь они будут разделены по разным процессам.
Источники
править- Главная ссылка к новости (https://01.org/security/adviso...) (Архивная копия от 14 июля 2018 на Wayback Machine)
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.