Открыть сервис

Meltdown

Meltdown — это аппаратная уязвимость класса спекулятивного исполнения, обнаруженная в микропроцессорах архитектуры x86/x64, в основном производства компаний Intel, а также некоторых моделях ARM. Уязвимость позволяет непривилегированному процессу (например, пользовательской программе или коду в изолированной среде) читать защищённые данные операционной системы и других процессов, хранящиеся в физической памяти компьютера. Meltdown была публично раскрыта в январе 2018 года одновременно с другой уязвимостью — Spectre. Обе уязвимости стали следствием фундаментальных особенностей работы современных процессоров, направленных на повышение производительности.

История открытия и раскрытия

Уязвимость Meltdown была независимо обнаружена несколькими группами исследователей. В июне 2017 года сотрудники Project Zero компании Google (Ян Хорн, Йоахим Вулф, Томас Дюлльен) и исследователи из австрийского Технологического университета Граца (Мориц Липп, Михаэль Шварц, Дэниел Грусс и др.) практически одновременно нашли одну и ту же проблему. Позднее выяснилось, что к аналогичным выводам пришли специалисты Cyberus Technology и Университета Адама Мицкевича в Познани.

Из-за серьёзности уязвимости, затрагивающей практически все современные компьютеры, серверы и облачные платформы, исследователи координировали свои действия с производителями процессоров и разработчиками операционных систем. Раскрытие информации было запланировано на 9 января 2018 года, однако из-за утечки информации в СМИ 3 января 2018 года дату пришлось перенести на 4 января. В этот день были опубликованы технические отчёты и выпущены экстренные обновления безопасности для ядер Linux, Windows и macOS.

Технические основы

Спекулятивное исполнение и внеочередное выполнение

Современные процессоры для повышения производительности используют технику спекулятивного исполнения (speculative execution). Процессор, встречая условный переход (например, проверку прав доступа), не ждёт завершения проверки, а предсказывает, какой путь будет выбран, и начинает выполнять инструкции заранее. Если предсказание оказалось верным, результат уже готов; если нет — процессор отменяет результаты спекулятивного выполнения, откатывая изменения в регистрах и памяти, и переходит к правильному пути.

Механизм уязвимости

Meltdown эксплуатирует разрыв между проверкой прав доступа и фактическим выполнением инструкции в спекулятивном режиме. В процессорах Intel (и некоторых ARM) инструкция доступа к памяти, которая должна быть запрещена (например, чтение из ядра операционной системы из пользовательского режима), может быть выполнена спекулятивно, до того, как будет проверено, имеет ли программа на это право. Хотя процессор впоследствии отменяет результат и не записывает его в регистры общего назначения, побочные эффекты от выполнения (например, загрузка данных в кэш) остаются.

Атака использует эти побочные эффекты для извлечения информации. Атакующий:

  1. Организует спекулятивное выполнение инструкции, которая пытается прочитать байт из защищённой области памяти по адресу, зависящему от секретного значения (например, пароля или ключа шифрования).
  2. В зависимости от прочитанного байта, процессор загружает в кэш одну из 256 заранее подготовленных ячеек памяти.
  3. После отмены спекулятивного выполнения процессор возвращается в нормальное состояние, но данные в кэше остаются.
  4. Атакующий измеряет время доступа к каждой из 256 ячеек. Быстрый доступ указывает на то, что ячейка была загружена в кэш, а значит, секретный байт имел соответствующее значение.

Таким образом, Meltdown позволяет обойти аппаратную изоляцию между пользовательскими процессами и ядром операционной системы, а также между разными виртуальными машинами на одном физическом сервере.

Влияние и последствия

Область поражения

Meltdown затрагивает практически все процессоры Intel, выпущенные с 1995 года (начиная с архитектуры Pentium Pro), а также некоторые процессоры ARM (например, Cortex-A75). Процессоры AMD, как выяснилось, не подвержены Meltdown из-за иной реализации защиты памяти. Уязвимость считается критической, так как она позволяет локальному атакующему (например, вредоносной программе, запущенной на компьютере) получить доступ ко всей физической памяти системы, включая пароли, ключи шифрования и данные других пользователей.

Исправления и производительность

Основным способом исправления Meltdown стало внедрение так называемой изоляции таблиц страниц ядра (Kernel Page Table Isolation, KPTI) в ядро Linux и аналогичных механизмов в Windows и macOS. Суть исправления заключается в том, что при выполнении кода в пользовательском режиме из адресного пространства процесса удаляются все отображения памяти ядра. Это предотвращает спекулятивное чтение данных ядра, так как процессор просто не видит этих адресов.

Однако это исправление привело к снижению производительности. Наиболее заметное падение (до 30–40%) наблюдалось на операциях, интенсивно использующих системные вызовы (например, работа с базами данных, файловыми системами, сетевой ввод-вывод). Для обычных пользовательских задач (веб-сёрфинг, офисная работа) замедление было менее заметным (обычно 2–5%). На серверах и в облачных средах, где изоляция между виртуальными машинами критична, падение производительности было более существенным.

Критика и последующие уязвимости

Meltdown вызвала широкую критику в адрес производителей процессоров, особенно Intel, за десятилетиями игнорируемую фундаментальную проблему безопасности. Уязвимость показала, что оптимизации, направленные исключительно на производительность, могут создавать серьёзные бреши в защите.

После Meltdown были обнаружены многочисленные вариации и родственные уязвимости, такие как Spectre (другой класс атак на спекулятивное исполнение), Foreshadow, ZombieLoad, RIDL и другие. Многие из них требовали дополнительных, более сложных и дорогих с точки зрения производительности исправлений. Meltdown стала катализатором пересмотра подходов к безопасности на уровне аппаратного обеспечения.

Ключевые отличия от Spectre

Хотя Meltdown и Spectre часто упоминаются вместе, они принципиально различаются:

  • Причина: Meltdown использует нарушение изоляции между пользовательским пространством и ядром (ошибка в проверке прав доступа). Spectre использует обман механизма предсказания переходов, чтобы заставить легитимную программу раскрыть свои данные.
  • Сложность атаки: Meltdown технически проще реализовать, так как она напрямую читает защищённую память. Spectre требует более сложных манипуляций с предсказателем переходов.
  • Исправление: Meltdown можно полностью исправить на уровне операционной системы (KPTI). Spectre требует исправлений как на уровне ОС, так и на уровне микрокода процессора и компиляторов, и полностью устранить её аппаратно-программными методами сложнее.

Интересные факты

  • Название «Meltdown» (расплавление) было выбрано исследователями как отсылка к слову «Meltdown» в контексте ядерного реактора, подчёркивая катастрофический характер утечки данных из защищённого «ядра» системы.
  • Вскоре после раскрытия уязвимости в интернете появились шуточные «мемы», изображающие процессор Intel, который «расплавляется» от стыда.
  • Исправление KPTI было частично реализовано в ядре Linux ещё до публичного раскрытия Meltdown, но как экспериментальная функция для защиты от других типов атак (KAISER). Разработчики не подозревали, что она также закрывает Meltdown.

Источники

  • Lipp, M., Schwarz, M., Gruss, D., et al. (2018). Meltdown: Reading Kernel Memory from User Space. Proceedings of the 27th USENIX Security Symposium.
  • Kocher, P., Horn, J., Fogh, A., et al. (2019). Spectre Attacks: Exploiting Speculative Execution. Communications of the ACM, 62(7), 93-101.
  • Project Zero, Google. (2018). Reading privileged memory with a side-channel.
  • Документация ядра Linux по Kernel Page Table Isolation (KPTI).
  • Официальные бюллетени безопасности Intel (INTEL-SA-00088).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →