Исследователи из Массачусетского технологического института представили технику атаки TONTOU (Time‑of‑Neutralization to Time‑of‑Use). Она предлагает новый способ эксплуатации микроархитектурных уязвимостей класса Spectre v2.

В ходе атаки хакеры получают возможность определить содержимое памяти ядра при выполнении эксплойта в пространстве пользователя.
Исследователями продемонстрирована атака со стороны локального непривилегированного пользователя для определения хэша пароля пользователя root, хранимого в файле /etc/shadow и загруженного в память при выполнении аутентификации в системе. Они добились утечки данных из памяти ядра с производительностью 5.47 байт в секунду и точностью 91.97%.
Из 10 тестовых запусков эксплойта, продолжительность которых в среднем составила 18 минут, в половине случаев удалось успешно определить наличие в памяти файла /etc/shadow и извлечь его содержимое.
Эксплоит показывали на системах с процессорами AMD, он может применяться с CPU AMD семейств Zen 1–4. На системах Intel атаку можно осуществить, но её эксплуатация сложнее.
Для защиты от переполнения стека адресов возврата и блокирования уязвимости SRSO (Speculative Return Stack Overflow) в процессорах AMD применяется механизм защиты Safe‑RET, который очищает буфер предсказания переходов после каждого использования и сужает окно проведения атаки до 2 инструкций, выполняемых несколько десятков наносекунд. Чтобы обойти защиту и для расширения окна совершения атаки реализована техника замедления CPU. Она выполняет подстановку прерывания в нужный момент для перенаправления потока выполнения в ядре и использования обработчика прерывания для искажения записи в буфере предсказания переходов.
Для эксплуатации уязвимости SRSO хакер может создать условия, когда блок предсказания переходов спекулятивно выполнит большое число некорректно предсказанных вызовов CALL, чтобы переполнить стек адресов возврата и перезаписать корректно предсказанные точки возврата, размещённые в начале стека. Начальные элементы стека могут быть перезаписаны на выбранные атакующим значения и применяться при спекулятивном выполнении инструкции RET в контексте другого процесса.
Процессор определит, что предсказание ветвления не оправдалось и откатит операцию в исходное состояние, но обработанные данные появятся в кэше и микроархитектурных буферах. Если ошибочно выполненный блок осуществляет обращение к памяти, то его спекулятивное выполнение приведёт к оседанию в общем кэше и данных, прочитанных из памяти. Для извлечения информации из кэша может применяться один из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.
Для блокировки уязвимости в код ядра Linux 5 уже приняли изменения 5 августа. Их включили в состав выпусков 7.1.7, 6.18.43, 6.12.102, 6.6.149, 6.1.181, 5.15.214 и 5.10.263.
Источник: habr.com