Уязвимость в процессорах AMD Zen2, позволяющая определить содержимое регистров в других процессах

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
25-Июл-2023 02:00

Тэвис Орманди (Tavis Ormandy), исследователь безопасности из компании Google, выявил уязвимость (CVE-2023-20593) в процессорах AMD на базе микроархитектуры Zen2, которая может быть использована для отслеживания содержимого регистров во время выполнения других процессов на том же ядре CPU. Среди прочего атака может быть осуществлена из виртуальных машин и изолированных окружений.
Для демонстрации уязвимости, которой присвоено кодовое имя Zenbleed, подготовлен прототип эксплоита, позволяющий непривилегированному пользователю определить данные, обрабатываемые в инструкциях AES-NI или REP-MOVS (обычно применяется в функции memcpy), что может быть использовано для реконструкции ключей шифрования и паролей пользователей, обрабатываемых в других процессах, в том числе привилегированных. Производительность утечки данных при работе эксплоита составляет приблизительно 30КБ в секунду.
Проблема проявляется в сериях процессоров AMD Ryzen 3000, Ryzen PRO 3000, Ryzen Threadripper 3000, Ryzen 4000 с графикой Radeon, Ryzen PRO 4000, Ryzen 5000 с графикой Radeon, Ryzen 7020 с графикой Radeon и EPYC 7002. Уязвимость устранена на уровне обновления микрокода. Для ядра Linux подготовлен патч для загрузки исправленного микрокода. В случае невозможности обновить микрокод имеется обходной способ блокирования уязвимости, приводящий к снижению производительности - необходимо выставить в CPU управляющий бит DE_CFG[9], используя в Linux команду "wrmsr -a 0xc0011029 $(($(rdmsr -c 0xc0011029) | (1<<9)))". Отключение режима SMP не блокирует уязвимость.
По своей сути проблема напоминает классические уязвимости use-after-free, вызванные обращением к памяти после её освобождения. В процессорах для хранения содержимого регистров применяется регистровый файл (RF, Register File), представляющий собой массив, который совместно используется во всех задачах на том же ядре CPU. За прикрепление конкретных именованных регистров к ресурсам из регистрового файла отвечает таблица распределения регистров (RAT, Register Allocation Table). При этом хранение в регистре нулевого значения осуществляется не через сохранение пустого значения в регистровом файле, а через выставление флага z-bit в таблице RAT.
Уязвимость вызвана тем, что если z-bit установлен в ходе спекулятивного выполнения инструкций, недостаточно просто сбросить его в случае неверного предсказания ветвления, так как пространство в регистровом файле может быть перераспределено с момента спекулятивного выполнения. Выявленный эффект возникает при одновременном переименовании регистра, использовании инструкции, для которой применяется оптимизация слияния, и спекулятивном выполнении векторной инструкции VZEROUPPER, которая выставляет z-bit и высвобождает ресурсы из регистрового файла. Если предсказание ветвления не оправдалось и выполнен откат спекулятивной операции VZEROUPPER в исходное состояние, может произойти повреждение содержимого векторных регистров, так как z-bit откатывается, но освобождённый ресурс остаётся не отброшен.
Через манипуляции с инструкцией VZEROUPPER можно добиться управляемой утечки данных, обрабатываемых в векторных регистрах YMM, используемых в режимах AVX (Advanced Vector Extensions) и SSE (Streaming SIMD Extensions). Указанные регистры активно применяются в функциях копирования памяти и обработки строк, например, в библиотеке Glibc они задействованы в функциях memcpy, strcmp и strlen.
===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_amd, #_cpu
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 15-Май 07:00
Часовой пояс: UTC + 5