Эксперты выявили не менее семи новых вариантов атак на процессоры класса Meltdown/Spectre. Не исключено, что рабочих методов эксплуатации спекулятивного выполнения команд для кражи данных гораздо больше.

Прогнозы и предположения

Исследователи уязвимостей Spectre и Meltdown, чье обнаружение в начале 2018 г. ознаменовало собой так называемый «чипокалипсис», выявили еще семь потенциальных атак спекулятивного выполнения на процессоры разных производителей. Часть из них уже не слишком опасны, поскольку выработанные ранее методики защиты и снижения угрозы эффективны и против «новых» атак. Однако остальные по-прежнему требуют пристального внимания со стороны производителей аппаратного и программного обеспечения.

Напомним две серьезные уязвимости — Meltdown и Spectre — были обнаруженыв январе 2018 г. в процессорах Intel, AMD и ARM64. Meltdown давал возможность пользовательскому приложению получить доступ к памяти ядра, а также к другим областям памяти устройства. Spectre же нарушал изоляцию памяти приложений, благодаря чему через эту уязвимость можно получить доступ к данным чужого приложения. В совокупности эти проблемы и получили название «чипокалипсиса».

Варианты Meltdown, старые...

Комментируя новые обнаруженные уязвимости, эксперты указывают, что спекулятивное выполнение инструкций — это ключевой метод оптимизации производительности современных процессоров. Чтобы повысить скорость работы, процессоры прогнозируют, выполнение каких инструкций потребуется от них в ближайшее время, и начинают их выполнять досрочно. Если прогноз подтверждается, процессор продолжает выполнять инструкцию. Если же оказывается, что в ее выполнении не было необходимости, все то, что процессор уже успел сделать, откатывается назад. При этом данные прерванного выполнения могут сохраняться в кэше.

При «оригинальной» атаке, эксплуатирующей Meltdown, производится обращение к памяти ядра как раз в ходе такого преждевременного выполнения инструкции. Потом процессор понимает, что у пользовательского приложения нет права читать эту память. После этого выполнение инструкции прерывается, состояние системы откатывается назад, однако при этом в кэше оседают данные, прочитанные в памяти ядра. Эти данные можно найти в кэше, проведя атаку через сторонние каналы.

Теперь выясняется, что за время, прошедшее с момента обнаружения уязвимостей и описания первых атак на них, были найдены еще несколько способов атаковать процессоры в том же стиле. Например, попытка считывать системный регистр без соответствующих прав (только с правами пользователя). Процессор заблокирует эту попытку, но из-за спекулятивного выполнения на эту процедуру у него уйдет несколько тактов. Еще один вариант атаки — использование математического сопроцессора (FPU), когда он неактивен (выводится сообщение об ошибке, но после этого операционная система его активирует), и попытки производить запись поверх защищенных от записи данных.

...и новые

В новой работе исследователи указывают на дополнительные варианты Meltdown, при которых используются ключи защиты пользовательского пространства (PKU). Такие ключи были реализованы впервые в процессорах Skylake: они позволяют приложениям маркировать определенные области памяти с помощью четырехбитных ключей. Приложения инструктируют процессор использовать конкретные защитные ключи, и попытка получить доступ к области памяти, отмеченной другими ключами, приведет к ошибке. Однако опять возникает спекулятивный зазор в несколько наносекунд, во время которого существует возможность извлечения защищаемых данных.

Следующий описываемый вариант Meltdown подразумевает злоупотребление расширением для защиты памяти MPX (MemoryProtectioneXtensions). MPX рассчитано на выявление и пресечение попыток обращения к значениям за пределами динамической области памяти. Как и в случае с другими вариантами атаки, злоумышленник может эксплуатировать временной зазор, возникающий между спекулятивным выполнением нелегитимных инструкций и генерацией сообщения об ошибке. Расширение MPX существует только в 64-битных системах, в то время как 32-битные системы — производства и Intel, и AMD — используют более простой метод защиты пределов динамической памяти, и он тоже уязвим перед аналогичной атакой.

Весь спектр вариантов Spectre

Все разновидности атаки Spectre, также как и Meltdown, следуют одному и тому же принципу. Процессоры прогнозируют ветвления команд и на основе этих прогнозов производят спекулятивное их выполнение. Если прогноз оказывается ошибочным, выполнение откатывается, но в кэше остаются определенные данные. Злоумышленник может вынудить процессор выполнить нужные ему прогнозы и использовать это для кражи данных.

Атаки класса Spectre распределились по ряду категорий. Процессоры оснащены сразу несколькими модулями прогнозирования, а прогнозы зависят от адреса ветвления и конечных его точек. Кроме того, процессор предсказывает, где продолжится выполнение команд при возвращении от одной функции к другой — эту операцию также выполняет отдельный модуль прогнозирования.

Существует несколько способов заставить модуль предсказания ветвлений работать нужным злоумышленнику образом. Например, этот модуль можно настроить так, чтобы он неверно предсказывал, какое ветвление подвергнется атаке. Можно с той же целью использовать ветвление, располагающееся по связанному, но все-таки иному адресу в памяти. Spectre также открывает возможность использовать алгоритмы прогнозирования в одном процессе для выдачи неверных прогнозов в другом адресном пространстве или даже в ядре. Неверные прогнозы также могут случаться, когда величина перезаписывается в память, а модули спекулятивного выполнения не замечают этого и производят выполнение команд на основе старого значения.

В общей сложности эксперты описали пять сценариев, при которых может производиться неверное прогнозирование: четыре из них используют предикторы ветвлений, один — некорректную запись в память.

Первые четыре атаки можно использовать против одного и того же адресного пространства или какого-либо другого, а также против одного и того же ветвления или другого, связанного с ним. Таким образом, возникает сразу 16 вариантов атаки. Авторы исследования описывают только несколько комбинаций, включающих эксплуатацию предиктора и атаки на конкретный адрес в памяти или сразу на определенное адресное пространство.

Интересно, что один из этих вариантов Spectre продемонстрировал большую эффективность против новейших процессоров AMD, чем считалось ранее. Он также работает и против процессоров ARM.

Intel и AMD к настоящему времени уже реализовали несколько механизмов, ограничивающих спекулятивное выполнение команд и прогнозирование со стороны процессора, обеспечив разработчиков ПО инструментами для защиты от Spectre. Например, появилась возможность пресекать попытки исполняемого кода, обладающего правами рядового пользователя, воздействовать на спекулятивное выполнение команд на уровне ядра, а также возможность блокировать влияние прогнозов, сделанных на уровне одного логического ядра, на прогнозы других ядер процессора. Кроме того, добавлена возможность сбрасывать некоторые структуры данных, используемых для прогнозирования, чтобы предотвратить злоупотребление предикторами.

«Вполне вероятно, что со временем будут найдены и другие способы эксплуатации архитектурных особенностей процессоров в духе Spectre и Meltdown, — полагает Олег Галушкин, директор по информационной безопасности компании SECConsultServices. — В ближайшем будущем все попытки защититься от этих атак будут носить более или менее локальный характер, поскольку фундаментальный подход потребует пересмотра всей архитектуры современных процессоров».