Исследователи из Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института (MIT CSAIL) создали инновационный метод атак через инъекцию прерываний, позволяющий преодолеть защитные механизмы от уязвимостей класса Spectre v2 на микропроцессорах как AMD, так и Intel. Например, на системах с процессором AMD Zen 2 эксперты смогли получить доступ к произвольной памяти ядра операционной системы Linux и завладеть содержимым файла /etc/shadow, где хранятся хэши пользовательских паролей.
Представленная методика атак носит название TONTOU (Time-of-Neutralization to Time-of-Use) и основывается на особенностях функционирования современных защит от Spectre v2. Защитные механизмы, такие как eIBRS в микропроцессорах Intel и Safe RET в устройствах AMD, разработаны с целью предотвращения манипуляции злоумышленниками системой предсказания переходов, что препятствует направлению спекулятивного исполнения кода по заранее выбранному пути атакующего.
Тем не менее, специалисты выявили незначительный временной интервал между активацией защитного механизма и моментом, когда центральный процессор имеет возможность применить очищенную систему предсказания переходов. При возникновении аппаратного прерывания в этот критический момент, микропроцессор прекращает текущий процесс и переходит на обработку прерывания.
Запуск обработчика прерывания дает возможность изменить параметры системы предсказания переходов после того, как защитный механизм произвел ее очистку или разделение. В результате процессор может начать спекулятивное выполнение инструкций по пути, выбранному нарушителем.
Для реализации этой уязвимости исследователи разработали метод инъекции прерываний: непривилегированное приложение в Linux может с высокой степенью надежности синхронизировать аппаратные прерывания таким образом, чтобы они совпадали с требуемым временным окном.
Полная демонстрация эксплуита была проведена на компьютерной системе с процессором AMD Zen 2, работающей под управлением операционной системы Linux 6.14.0-37-generic с объемом памяти 16 Гбайт. Эксплуит мог извлекать данные из памяти ядра со скоростью 5,47 байта/с при точности 91,97%. В ходе десяти попыток содержимое файла /etc/shadow было успешно найдено и извлечено в пяти случаях, с среднестатистическим временем 18 минут на одну попытку.
Чтобы синхронизировать прерывание с узким временным окном после активации защиты, исследователи применили механизм таймеров и многократно инициировали аппаратные прерывания. Дополнительно, при атаках на микропроцессоры AMD метод инъекции прерываний был объединен с уязвимостью Inception (CVE-2023-20569), которая позволяет воздействовать на возвратный стековый буфер (Return Stack Buffer, RSB) и вызывать неправильное прогнозирование адресов возврата во время спекулятивного исполнения.
Специалисты также провели тестирование атаки на микропроцессорах Intel. Ошибочные прогнозы удалось вызвать на микроархитектурах Arrow Lake и Cascade Lake Refresh, но полномасштабную компрометацию информации там не удалось демонстрировать: для этого требуется подходящий вспомогательный гаджет раскрытия информации в ядре системы. Авторы исследования полагают, что это не является фундаментальной проблемой и успешная атака на Intel также достижима.
Компания AMD подготовила уведомление о безопасности AMD-SB-7061, в котором указывается, что уязвимость воздействует на микропроцессоры поколений Zen 1–Zen 4. AMD связывает эту проблему с реализацией механизма Safe RET в ядре Linux. Исправление было интегрировано в ядро Linux, и соответствующее обновление корректирует состояние регистров после прерывания, не разрешая выполнение инструкции RET при возврате из обработчика прерывания.
Представители Intel, в свою очередь, убеждены, что для защиты от инъекции прерываний не требуются дополнительные защитные меры. По мнению компании, описанная исследователями техника соответствует уже известным сценариям BHI/IMBTI, и подобные уязвимости уже приняты во внимание в действующих руководствах по защите от атак Spectre v2.
