В процессорах Intel, AMD и ARM найдена массовая уязвимость, не имеющая патча
Патч к одной из двух уязвимостей, найденных в процессорах Intel, AMD и ARM64, до сих пор не разработан. Патчи к другой уязвимости для разных ОС уже либо выпущены, либо скоро выйдут. Уязвимости позволяют читать через пользовательское приложение память ядра или других приложений. Под угрозой находятся все процессоры Intel, выпущенные с 1995 г.
Meltdown и Spectre
В процессорах Intel, AMD и ARM64 обнаружены две серьезные уязвимости, получившие названия Meltdown и Spectre. Meltdown, предварительная информация о которой появилась вчера, дает возможность пользовательскому приложению получить доступ к памяти ядра, а также к другим областям памяти устройства. Spectre же нарушает изоляцию памяти приложений, благодаря чему через эту уязвимость можно получить доступ к данным чужого приложения.
Как узнали об угрозах
Официальные кодовые названия уязвимостей — CVE-2017-5754 для Meltdown, CVE-2017-5753 и CVE-2017-5715 для Spectre. Meltdown затрагивает процессоры Intel и ARM64, Spectre распространяется в том числе на AMD. Уязвимости были обнаружены одновременно несколькими исследователями безопасности, работавшими независимо друг от друга. В частности, обе угрозы зафиксировал Янн Хорн (Jann Horn), участник Google Project Zero.
Параллельно Meltdown была обнаружена немецкой ИБ-компанией Cyberus Technology и командой исследователей Грацкого технического университета. О Spectre также сообщил известный американский специалист в области криптографии Пол Кочер (Paul Kocher), обнаруживший уязвимость с помощью коллег из Пенсильванского университета, Аделаидского университета, Грацкого технического университета и других организаций. Исследователи сообщили о наличии проблемы производителям процессоров 1 июня 2017 г.
Технические особенности
Meltdown и Spectre эксплуатируют недостатки механизма спекулятивного выполнения инструкций. Чтобы повысить скорость работы, процессоры прогнозируют, выполнение каких инструкций потребуется от них в ближайшее время, и начинают их выполнять досрочно. Если прогноз подтверждается, процессор продолжает выполнять инструкцию. Если же оказывается, что в ее выполнении не было необходимости, все то, что процессор уже успел сделать, откатывается назад. При этом данные прерванного выполнения могут сохраняться в кэше.
Meltdown обращается к памяти ядра как раз в ходе такого преждевременного выполнения инструкции. Потом процессор понимает, что у пользовательского приложения нет права читать эту память. Выполнение инструкции прерывается, состояние системы откатывается назад, однако при этом в кэше оседают данные, прочитанные в памяти ядра. Эти данные можно найти в кэше, проведя атаку через сторонние каналы.
Ни контейнер, ни паравиртуализация не защищают данные от Meltdown, что ставит под удар облачных провайдеров, однако на полную виртуализацию угроза не распространяется. Исследователи отмечают, что эксплуатировать Spectre гораздо труднее, чем Meltdown, однако ее гораздо сложнее и ликвидировать. Для обеих уязвимостей уже созданы эксплойты.
Уязвимые устройства и патчи
Meltdown присутствует во всех процессорах Intel, произведенных с 1995 г. кроме моделей Intel Itanium и Intel Atom до 2013 г. выпуска. Также Meltdown присутствует в процессорах ARM64, а именно в Cortex-A15, A57, A72 и A75.
Spectre распространяется на процессоры Intel и AMD, однако на последние — только в том случае, если в ядре включен расширенный фильтр пакетов eBPF. Уязвимыми также оказались процессоры ARM64, в том числе Cortex-R7 и R8, Cortex-A8, A9, A15, A17, A57, A72, A73 и A75.
Эффективной защиты от Spectre пока что не существует, изменения вносятся на уровне микрокода и различных приложений. Meltdown уже исправлен для ядра Linux, RHEL и Fedora, а Debian, Ubuntu, SUSE, openSUSE, FreeBSD, OpenBSD и NetBSD пока что работают в этом направлении. Уязвимость ликвидирована также в Android и Chrome OS, в ближайшем будущем должны появиться патчи для Windows и macOS.
Команда разработчиков Google Chrome работает над защитой, встроенной в браузер, которая поможет избежать атак через сайты с JavaScript. Mozilla сумела временно затруднить атаку для Firеfox 57 при помощи манипуляций с таймером.