Группа исследователей из Амстердамского свободного университета представила новую технику атаки SLAM (Spectre Linear Address Masking), предлагающую новый способ эксплуатации микроархитектурных уязвимостей класса Spectre, в котором утечка данных происходит при трансляции неканонических адресов, а для обхода проверок каноничности привлекаются предоставляемые в новых процессорах расширения для маскировки линейных адресов. Исследователями опубликован инструментарий с реализацией метода и предложена демонстрация, показывающая как можно извлечь из памяти ядра данные, соответствующие определённой маске (показано как за несколько десятков секунд в Ubuntu выделить из памяти ядра строку с хэшем пароля пользователя root).
Атака может быть совершена на системах с процессорами Intel, поддерживающими расширение LAM (Linear Address Masking), процессорами AMD с расширением UAI (Upper Address Ignore) и процессорами ARM с расширением TBI (Top Byte Ignore). Указанные расширения позволяют использовать часть битов 64-разрядных указателей для хранения не связанных с адресацией метаданных (для обычных программ не требуется столько памяти, что могут адресовать 64-разрядные указатели, поэтому верхние биты могут быть задействованы, например, для проверок, связанных с обеспечением безопасности). Интересно, что процессоры Intel, AMD и ARM с поддержкой LAM, UAI и TBI ещё только анонсированы, но массово не производятся, что делает SLAM первой спекулятивной атакой на будущие CPU. Атака также может быть совершена на старых CPU AMD Zen+ и Zen 2, подверженных уязвимости CVE-2020-12965.
По аналогии с эксплуатацией уязвимостей Spectre для осуществления атаки SLAM требуется наличие в ядре определённых последовательностей инструкций (гаджетов), приводящих к спекулятивному выполнению инструкций. Подобные инструкции приводят к спекулятивному чтению данных из памяти в зависимости от внешних условий, на которые может влиять атакующий. После определения ошибочного прогноза результат спекулятивного выполнения отбрасывается, но обработанные данные остаются в кэше и могут затем быть извлечены при помощи анализа по сторонним каналам. Для извлечения осевших в кэше данных исследователями задействован метод Evict+Reload, основанный на создании условий для вытеснения данных из кэша (например, создаётся активность, равномерно заполняющая кэш типовым содержимым) и выполнения операций, время выполнения которых позволяет судить о наличии данных в процессорном кэше.
Для совершения атаки SLAM используются гаджеты на основе кода, в котором контролируемые атакующим данные (ниже переменная “secret”) используются как указатель. Например:
void unmasked_gadget(long **secret) { **secret; }
Отмечается, что подобные шаблоны кода часто используются в программах, например, в ядре Linux выявлены десятки тысяч таких гаджетов, из которых как минимум несколько сотен пригодны для использования в эксплоитах. Утечка может быть блокирована через добавление в подобные гаджеты дополнительных инструкций, блокирующих спекулятивное выполнение. Компания Intel намерена предоставить программный метод блокирования утечки до начала поставки процессоров с поддержкой LAM. Компания AMD рекомендовала использовать существующие методы блокирования атак класса Spectre v2. Разработчики ядра Linux для защиты от атаки решили отключить по умолчанию поддержку LAM до публикации рекомендаций Intel по блокированию уязвимости.