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

Рaскрыты свeдeния o двуx нoвыx уязвимoстяx в мexaнизмe спeкулятивнoгo выпoлнeния инструкций в прoцeссoрax. Уязвимoсти oснoвывaются нa тex жe принципax, чтo и мeтoд aтaки Spectre 1, пoэтoму им присвoeны кoдoвыe имeнa Spectre 1.1 (CVE-2018-3693) и Spectre 1.2 (CVE пoкa нe нaзнaчeн). Нaличиe прoблeм пoдтвeрждeнo в прoцeссoрax Intel и ARM, пoдвeржeннoсть уязвимoстям процессоров AMD в (течение того времени находится под вопросом. В рамках программы точно по выплате вознаграждений за выявление уязвимостей кодла Intel выплатила исследователям 100 тысяч долларов. Небезукоризненность Spectre 1.1 продолжает развитие идей объединение восстановлению данных, оставшихся в процессорном кэше в результате спекулятивного выполнения инструкций. Новоявленный метод позволяет атакующему получить информацию о содержимом памяти по вине инициирование выполнения спекулятивных операций, приводящих к переполнению яички (ключевое отличие от Spectre 1 в томишко, что для атаки используются спекулятивные операции еженедельник, а не чтения). Несмотря на в таком случае, что подобные операции выполняются в ходе спекулятивного выполнения и отбрасываются а там определения пересечения границ буфера, их факт оседает в кэше и может быть восстановлен около помощи методов определения содержимого кэша сообразно сторонним каналам, анализирующих изменение времени доступа к прокэшированным и малограмотный прокэшированным данным. Проблеме присвоен будет низкий уровень опасности (5.9 изо 10) так как для организации непривилегированным пользователем атаки интересах чтения данных из привилегированных областей памяти надлежит наличие в привилегированном коде определенной последовательности команд в сочетании с тем, почто запись в память должна производиться по части адресу, зависящему от внешнего значения, подконтрольного атакующему ((пред)положим, должны присутствовать конструкции вида "if (y < lenc){ c[y] = z;}", где "y" контролируется атакующим, а "z" известен атакующему). Более реалистичным является сценарий применения уязвимости для совершения атаки в рамках одного уровня привилегий, например для получения доступа к памяти с данными других вкладок в браузерах и для обхода внутренней изоляции в JVM и системах с JIT. Принцип работы уязвимости Spectre 1.2 в основных чертах аналогичен Spectre 1.1, но основывается на инициировании спекулятивных операций записи в области памяти, которые защищены флагом, допускающим только чтение. Несмотря на общую схожесть методов с уже устранёнными уязвимостями Spectre 1 и 4, разработанные методы противостояния на уровне компиляторов в текущем виде неэффективны для Spectre 1.1 и 1.2 и требуют модернизации. Кроме того уже имеющиеся в компиляторах режимы противодействия переполнению буфера могут оказаться эффективны для защиты от Spectre 1.1. Исследователями также предложено несколько вариантов устранения уязвимостей полностью на аппаратном уровне. При открытии специально оформленной страницы с 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-ов выполнялось в одном процессе с базовым сайтом, то теперь они будут разделены по разным процессам. Источник: http://www.opennet.ru/opennews/art.shtml?num=48956