Два новых варианта уязвимости 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-ов выполнялось в одном процессе с базовым сайтом, то теперь они будут разделены по разным процессам.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Два новых варианта уязвимости Spectre. Усиление защиты Chrome», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.