Несколько дней назад а Исследователь группы безопасности Google, освобожден новости, которые я обнаруживаю уязвимость (уже указан в CVE-2023-20593) на процессорах АМД на основе микроархитектуры Zen2, которую можно использовать для обнаружения регистров, когда другие процессы выполняются на том же ядре ЦП.
Эта уязвимость считается важной, поскольку атака может осуществляться с виртуальных машин и изолированных сред. По сути, проблема напоминает классические уязвимости использования после освобождения, вызванные доступом к памяти после ее освобождения.
Проблема возникает с AMD Ryzen 3000, Ryzen PRO 3000, Ryzen Threadripper 3000, Ryzen 4000 с графикой Radeon, Ryzen PRO 4000, Ryzen 5000 с графикой Radeon, Ryzen 7020 с графикой Radeon и серия процессоров ЭПИК 7002.
Об уязвимости упоминается потому, что в процессорах для хранения содержимого регистров используется регистровый файл (RF, Register File), представляющий собой схему, общую для всех задач в одном ядре. Процессор. Таблица размещения записей (RAT) отвечает за присоединение записей с определенными именами к ресурсам файла журнала. В этом случае нулевое значение сохраняется в регистре не за счет сохранения пустого значения в регистровом файле, а путем установки z-битного флага в таблице RAT.
Уязвимость связана с тем, что если бит z установлен во время спекулятивного выполнения инструкций, недостаточно просто сбросить его в случае плохого предсказания ветвления, поскольку пространство в файле журнала может быть перераспределено из-за спекулятивного выполнения.
Выявленный эффект возникает при одновременном переименовании записи, используется инструкция, для которой применяется оптимизация соединения, и спекулятивно выполняется векторная инструкция VZEROUPPER, которая устанавливает бит z и освобождает ресурсы из файла журнала. Если предсказание перехода не удается и спекулятивная операция VZEROUPPER откатывается, содержимое векторных регистров может быть повреждено, поскольку z-бит сбрасывается, но освобожденный ресурс остается неотброшенным.
Манипулируя инструкцией VZEROUPPER, можно добиться управляемой утечки обработанных данных в векторных регистрах YMM, используемых в режимах AVX (Advanced Vector Extensions) и SSE (Streaming SIMD Extensions). Эти регистры активно используются в функциях копирования памяти и обработки строк, например в библиотеке Glibc они используются в функциях memcpy, strcmp и strlen.
Для демонстрации уязвимости под кодовым названием Zenbleed, подготовлен прототип эксплойта который позволяет непривилегированному пользователю определить данные, обрабатываемые в инструкциях AES-NI или REP-MOVS (обычно используемые в функции memcpy), которые могут быть использованы для восстановления ключей шифрования и паролей пользователей, обрабатываемых в других процессах, в том числе привилегированных. Производительность эксплойта по утечке данных составляет примерно 30 КБ в секунду.
Уязвимость исправлено на уровне обновления микрокода. Для Linux подготовлен патч для загрузки исправленного микрокода. Хотя если нет возможности обновить микрокод, есть обходной путь для блокировки уязвимости, что приводит к снижению производительности.
Для этого в ЦП должен быть сконфигурирован управляющий бит DE_CFG[9] и для этого в терминале должна быть введена следующая команда:
Стоит отметить, что отключение режима SMT не блокирует уязвимость, и исправление для блокировки уязвимости было реализовано в обновлениях ядра 6.4.6, 6.1.41, 5.15.122, 5.10.187, 5.4.250 и 4.19.289.
Для заинтересован в отслеживании информации об уязвимостях в разных дистрибутивах это можно сделать на следующих страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Арка, OpenBSD, FreeBSD, NetBSD.
Наконец, если вы заинтересованы в том, чтобы узнать больше об этом, вы можете ознакомиться с подробностями в по следующей ссылке.