Уязвимость в CPU AMD, приводящая к переполнению микроархитектурного стека

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3258
Зарегистрирован: 20.08.2022

#

Уязвимость в CPU AMD, приводящая к переполнению микроархитектурного стека
Дата публикации:Wed, 09 Aug 2023 16:36:24 +0300




Группа исследователей из Швейцарской высшей технической школы Цюриха выявила новую уязвимость (CVE-2023-20569) в реализации микроархитектурных структур процессоров AMD, получившую кодовое имя Inception. Уязвимость позволяет локальному непривилегированному пользователю определить содержимое памяти процессов других пользователей. При использовании систем виртуализации уязвимость даёт возможность извлечь информацию из других гостевых систем.





Исследователями подготовлен рабочий прототип эксплоита и продемонстрирована возможность его использования локальным непривилегированным пользователем для определения хэша пароля пользователя root, хранимого в файле /etc/shadow и загруженного в память при выполнении аутентификации в системе. Атака продемонстрирована на полностью обновлённой системе Ubuntu 22.04 с ядром 5.19 на компьютере с процессором семейства AMD Zen 4. Производительность утечки данных при работе эксплоита составляет 39 байт в секунду. Содержимое /etc/shadow успешно было определено в 6 из 10 попыток эксплуатации уязвимости. На проведение каждой попытки было затрачено приблизительно 40 минут.



Уязвимость позволяет вызвать переполнение стека адресов возврата (RAS, Return Address Stack), микроархитектурной структуры, которая обновляется в спекулятивном режиме на стадии, когда процессор лишь прогнозирует потенциальный вызов инструкции CALL. Стек RAS имеет фиксированный размер и является кольцевым, т.е. зациклен и после последнего элемента осуществляется переключение на начало. Атакующий может создать условия, когда блок предсказания переходов спекулятивно выполнит большое число некорректно предсказанных вызовов CALL, достаточное для того чтобы переполнить стек RAS и перезаписать корректно предсказанные точки возврата, размещённые в начале стека.



В итоге, начальные элементы стека могут быть перезаписаны на выбранные атакующим значения, что в дальнейшем приведёт к использованию этих заменённых значений при спекулятивном выполнении инструкции RET в контексте другого процесса (т.е. будет выполнен целенаправленный спекулятивный переход на блок кода, не предусмотренный логикой выполнения программы). После этого процессор определит, что предсказание ветвления не оправдалось и откатит операцию в исходное состояние, но обработанные в процессе спекулятивного выполнения данные осядут в кэше и микроархитектурных буферах. Если ошибочно выполненный блок осуществляет обращение к памяти, то его спекулятивное выполнение приведёт к оседанию в общем кэше и данных, прочитанных из памяти.




Для "отравления" предсказания переходов используется выявленная теми же исследователями уязвимость Phantom (CVE-2022-23825), которая позволяет создать условия для предсказания фиктивного перехода без инструкций ветвления и влиять на буфер предсказания переходов без инструкции "ret". Для инициирования ошибочного предсказания и переполнения стека RAS используется обычная инструкция XOR, влияние которой на буфер предсказания переходов при проведении атаки Phantom напоминает рекурсивный вызов инструкция CALL. Для управляемой подстановки необходимого значения в начало стека RAS предложен метод TTE (Training in Transient Execution), позволяющий повлиять на будущее предсказание переходов из предыдущих ошибочных предсказаний.






Уязвимость специфична для процессоров AMD и затрагивает все актуальные семейства процессоров EPYC и Ryzen на базе микроархитектур Zen1, Zen2, Zen3 и Zen4. Для процессоров на базе микроархитектур Zen1 и Zen2 для блокирования проявления уязвимости может применяться защита на основе инструкции IBPB (Indirect Branch Prediction Barriers), уже применяемой для защиты от атак Spectre (суть защиты в сбросе состояния блока предсказания переходов при каждом переключении контекста, что приводит к снижению производительности от 93.1% до 216.9%). Для процессоров семейств Zen3 и Zen4 обходные пути защиты отсутствуют и для блокирования уязвимости в них необходима установка обновления микрокода (влияние на производительность защиты, реализованной в новой версии микрокода, пока не протестировано).
Изображение





Исправления для защиты от уязвимости и обновление микрокода включены в состав выпусков ядра Linux 6.4.9, 6.1.44, 5.15.125, 5.10.189, 5.4.252, 4.19.290, 4.14.321. В ядре Linux уязвимость блокирована через исключение кода, который может привести к спекулятивному переходу инструкции RET на контролируемое атакующим значение. После выхода обновлений ядра дополнительно предложен более эффективный переработанный вариант патчей, который ещё не принят в состав ядра. Проследить за появлением защиты от уязвимости в дистрибутивах можно на следующих страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch, OpenBSD, FreeBSD, NetBSD.





Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=59574

Жизнь за Нер'зула!

Ответить