Вчера Эдуардо Вела Нава, специалист из группы реагирования на безопасность продуктов Google, сообщил о новой уязвимости в ядре Linux 6.2, связанной с принципом работы уязвимости Spectre. О недостатке безопасности средней степени 31 декабря 2022 года специалисты сообщили в первую очередь поставщикам облачных услуг. 27 февраля 2023 года уязвимость уже была исправлена .
“Ядро не могло защитить приложения от Spectre v2, оставляя их открытыми для атак со стороны других процессов, работающих на другом гиперпотоке того же физического ядра”, – поясняют специалисты. Следствием использования уязвимости является потенциальное раскрытие конфиденциальной информации.
Само название ” Spectre ” описывает целый набор уязвимостей, злоупотребляющих “спекулятивным выполнением” или оптимизацией производительности процессора, при которой потенциальные инструкции выполняются заранее для экономии времени.
Позже появилась и новая версия уязвимости, Spectre v2. Этот вариант полагается на временные побочные каналы, чтобы измерить частоту ошибок в предсказании косвенных ветвлений и вычислить содержимое защищенной памяти. Такой подход далеко не оптимальный для облачной среды с общим оборудованием.
Вскоре после первых попыток исправить ошибки Meltdown и Spectre, Intel опубликовала подробности об Indirect Branch Restricted Speculation (IBRS) – механизме ограничения спекуляций непрямых ветвей, которые сообщают процессорам о необходимости начать выполнение инструкций в новом месте.
IBRS предлагает защиту от Spectre v2 , которую Intel называет Branch Target Injection (BTI). Внедрение целевых ветвлений – это метод обучения предсказателей ветвлений спекулятивному выполнению определенных инструкций для вывода данных в кэш-памяти процессора с использованием побочного канала синхронизации.
IBRS поставляется в двух вариантах: базовом (устаревшем) и расширенном. И именно базовый вариант оказался уязвимым с точки зрения безопасности. Багхантеры, выявившие проблему, обнаружили, что процессы пользовательского пространства Linux для защиты от Spectre v2 не работают на виртуальных машинах “по крайней мере одного крупного облачного провайдера”, название которого не уточняется.
Как сообщается в описании уязвимости, при базовой IBRS ядро 6.2 имело логику , которая отказывалась от STIBP (Single Thread Indirect Branch Predictors), защиты от совместного использования прогнозирования ветвлений между логическими процессорами на ядре.
“Бит IBRS неявно защищает от внедрения целевых ветвей между потоками. Однако в устаревшем IBRS бит сбрасывался при возврате в пользовательское пространство из-за соображений производительности, что отключало неявный STIBP и делало потоки пользовательского пространства уязвимыми для внедрения целевых ветвей между потоками, от которых STIBP обычно такую защиту обеспечивает”, – поясняется в отчёте об уязвимости.
Исправление удалило базовые IBR из проверки spectre_v2_in_ibrs_mode(), чтобы сохранить STIBP включенным по умолчанию.