Interrupt Injection: точный сброс прерывания обходит защиту от Spectre v2
Исследователи MIT CSAIL Даниэль Трухильо и Менгжиа Ян описали новый класс атак, который они назвали Interrupt Injection. Суть проста и оттого неприятна: непривилегированная программа планирует аппаратное прерывание так, чтобы оно пришлось точно в промежуток между тем, как процессор очищает предсказатель переходов, и тем, как ядро этим предсказателем воспользуется. В этот момент защита уже отработала, но ещё не пригодилась — и предсказатель можно «отравить» заново.
Авторы относят приём к более широкому классу, который называют TONTOU (Time-of-Neutralization to Time-of-Use) — по аналогии с известными в софте гонками TOCTOU. Все существующие меры против Spectre v2 — Intel с eIBRS и очисткой буфера истории переходов, AMD с saferet — исходят из того, что между нейтрализацией и использованием ничего враждебного не выполняется. Прерывания ломают это допущение: они срабатывают почти где угодно, а Linux позволяет любому пользователю планировать их с наносекундной точностью.
Что удалось на практике
На машине с AMD Zen 2 под Linux 6.14, где были включены все штатные меры против Spectre v2, эксплойт вычитывал произвольную память ядра со скоростью 5,47 байта в секунду при точности 91,97%. Этого хватило, чтобы в пяти попытках из десяти найти и прочитать /etc/shadow с хешами паролей. Привилегий не требуется — только локальное выполнение кода, поэтому под ударом прежде всего многопользовательские системы.
Окно на Zen 2 составляет всего две инструкции, шесть байт. Чтобы повысить шансы, исследователи вытесняли эти байты из кэшей L1 и L2 через соседний гиперпоток, а также выбирали системный вызов write, дававший контроль над двумя регистрами. Прерывание попадало в нужное окно в 5–12% случаев. Внутри обработчик сам становился «тренировочным гаджетом», вооружённым уязвимостью Inception (CVE-2023-20569) — той самой, ради борьбы с которой saferet и создавался.
Реакция производителей
Раскрытие состоялось 5 февраля. AMD выпустила бюллетень AMD-SB-7061 «Safe RET Interrupt Vulnerability», назвав уязвимыми процессоры Zen 1 – Zen 4, и отметила, что проблема, по-видимому, связана именно с реализацией Safe RET в Linux. Исправление уже вошло в ядро: коммит инженеров AMD Бориса Петкова и Дэвида Каплана от 2 июня приводит состояние регистров в порядок так, будто последовательность Safe-RET завершилась, и избегает выполнения RET после возврата из прерывания.
При этом ни бюллетень AMD, ни анонс MIT не ссылаются на коммит, а CVE и конкретная версия ядра не названы — администратору приходится ориентироваться по теме коммита. Intel же считает, что отдельная защита не нужна: по мнению компании, эксплуатируемость «зависит от множества факторов». Впрочем, авторы уверены, что сквозная атака возможна и на процессорах Intel — при наличии подходящего гаджета раскрытия в ядре.
Работу представили на Black Hat USA, а доклад ждут на USENIX Security в Балтиморе.
Источник: The Hacker News
Комментарии
Войдите, чтобы комментировать.