Раскрыты две новые уязвимости механизма спекулятивного выполнения в CPU
Как сообщает opennet.ru компании Intel, ARM и AMD раскрыли информацию о двух новых уязвимостях в механизме спекулятивного выполнения инструкций. Для полного устранения проблем требуется установка обновления микрокода и внесение изменений на стороне операционной системы. Бета-версия обновления микрокода Intel пока предоставлена только OEM-производителям. Для ядра Linux уже предложены необходимые патчи (защита действует только при обновленном микрокоде). Обновления пакетов с ядром сформированы для RHEL и Ubuntu, и ожидаются для Debian и SUSE. По предварительной оценке исправление проблем приведет к снижению производительности на 2-8%.
Нераскрытыми остаются детали о еще 6 уязвимостях (четыре с высоким уровнем опасности, а две со средним), публикация детальной информации по которым ожидается в августе, после истечения эмбарго. Раскрытым уязвимостям присвоен средний уровень опасности. Первая из раскрытых проблем (Spectre 3a, буква добавлена чтобы избежать путаницы, так как вариант 3 может трактоваться как уязвимость Meltdown) позволяет прочитать содержимое системных регистров, а вторая (Spectre 4) дает возможность прочитать данные из закрытых областей памяти. Проблемы не специфичны для архитектуры x86 и кроме процессоров Intel и AMD, также проявляются в CPU ARM и IBM (POWER 8, POWER 9, System z).
Определенную опасность представляет Spectre 4 (CVE-2018-3639, SSB - Speculative Store Bypass) - метод атаки напоминает Spectre 1, но базируется на восстановлении осевших в процессорном кэше данных после отбрасывания результата спекулятивного выполнения операций при обработке чередующихся операций записи и чтения с использованием косвенной адресации. Когда операция чтения следует за операцией записи (например, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), смещение адреса для чтения уже может быть известно из-за выполнения похожих операций (операции чтения выполняются значительно чаще и чтение может быть выполнено из кэша) и процессор может спекулятивно выполнить чтение раньше записи, не дожидаясь пока будет вычислено смещение косвенной адресации для записи. Если после вычисления смещения выявлено пересечение областей памяти для записи и чтения, процессор просто отбросит уже спекулятивно полученный результат чтения и повторит эту операцию.
Данная особенность позволяет инструкции чтения получить доступ к старому значению по некоторому адресу во время пока операция сохранения еще не завершена. После отбрасывания неудачной спекулятивной операции в кэше остаются следы от ее выполнения, после чего для его извлечения может применяться один из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.
Практически атака Spectre 4 осуществима только в рамках привилегий одного уровня, т. е. привилегии атакующего должны допускать доступ к исследуемой памяти. Наиболее опасным применением уязвимости является атака на браузеры и системы совместного изолированного выполнения кода (например, JVM, изоляция кода в sandbox, системы с JIT). В контексте браузера атака позволяет получить доступ к памяти с данными других вкладок при помощи выполнения JavaScript-кода, но возможность проведения атак по восстановлению содержимого кэша уже достаточно эффективно блокируется в актуальных выпусках web-браузеров, благодаря ограничению точности таймера.
Опасность совершения атак в системах массового доступа (серверы хостинга, системы виртуализации и облачные платформы и т. п.) находится под вопросом, так как прототипы совершения атаки подтверждены только в рамках одного уровня привилегий. Чтобы использовать уязвимость для чтения привилегированных областей системной памяти, атакующему необходимо контролировать старое значение по определенному адресу в системной памяти.
Проблема независимо выявлена исследователями Google Project Zero и Microsoft Security Response Center (MSRC). Для защиты на уровне операционной системы для процессоров Intel предложена техника SSBD (Speculative Store Bypass Disable), основывающаяся на применении нового MSR-бита, который будет доступен после обновления микрокода. Так как блокирование проблемы сопряжено с потерей производительности, а тотальная защита от Spectre 4 не всегда целесообразна, в исправлении для ядра Linux предусмотрена опция speculative_store_bypass_disable, позволяющая отключить защиту. В случае активации защиты для приложений предложен новый интерфейс prctl, при помощи которого программы могут определять наличие защиты и выборочно отключать ее для отдельных процессов.
Что касается Spectre 3a (CVE-2018-3640, RSRE - Rogue System Register Read), то уязвимость может привести к чтению содержимого системных регистров с информацией о состоянии оборудования, доступ к которым имеется только у ядра, драйверов и гипервизоров. Проблема выявлена исследователями из компании SYSGO AG.
Дополнительно можно отметить публикацию исследователей из компании Eclypsium, которые показали, что уязвимость Spectre v1 может применяться для атаки на режим системного управления процессора SMM (System Management Mode), более приоритетного, чем режим гипервизора и нулевое кольцо защиты. В ходе эксперимента была продемонстрирована возможность восстановления данных из SMRAM (System Management RAM), области физической памяти в которой сохраняются данные SMM.