Компания AMD включила процессоры на базе микроархитектуры Zen 5 в список продуктов, подверженных уязвимости EntrySign, позволяющей обойти механизм проверки цифровой подписи при обновлении микрокода. Изначально предполагалось, что уязвимость затрагивает только CPU AMD на базе 1-4 поколений микроархитектуры Zen. Таким образом уязвимость оказалась применима к таким процессорам, как Ryzen 9000 (Granite Ridge), EPYC 9005 (Turin), Ryzen AI 300 (Strix Halo, Strix Point, Krackan Point) и Ryzen 9000HX (Fire Range).
Помимо обновления микрокода, для устранения уязвимости на системах, использующих аттестацию SEV-SNP, также требуется обновление прошивки AMD SEV, которая поставляется в составе обновлений BIOS. Утверждается, что компания AMD передала производителям оборудования изменённую прошивку (ComboAM5PI 1.2.0.3c AGESA), необходимую для устранения проблемы, но доступные потребителям финальные обновления BIOS могут быть выпущены производителям спустя недели или месяцы.
Сотрудники AMD также предложили для включения в состав ядра Linux патч, блокирующий загрузку неофициальных обновлений микрокода (отмечается, что корректные обновления микрокода необходимо установить вместе с BIOS от производителя оборудования, но уже появились попытки создания энтузиастами неофициальных исправлений, основанных на фрагментах микрокода, вырезанных из BIOS). Пользователям рекомендовано дождаться официальных обновлений BIOS.
Предоставляемая уязвимостью EntrySign возможность изменения микрокода позволяет скомпрометировать механизм AMD SEV (Secure Encrypted Virtualization), применяемый в системах виртуализации для защиты виртуальных машин от вмешательства со стороны гипервизора или администратора хост-системы. В ходе атаки можно вклиниться в работу гостевых систем, защищённых при помощи расширений AMD SEV (Secure Encrypted Virtualization) и SEV-SNP (Secure Nested Paging), предоставляющих гарантии целостности памяти виртуальных машин, изолирующих процессорные регистры и обеспечивающих безопасную работу со вложенными таблицами страниц памяти.
Уязвимость вызвана использованием в процессе верификации микрокода алгоритма имитовставки CMAC вместо надёжной хэш-функции. Компания AMD использует закрытый ключ RSA для заверения загружаемого в процессор микрокода цифровой подписью, а в составе патча с микрокодом распространяет открытый ключ. Для проверки, что открытый ключ соответствует оригинальной паре RSA-ключей, процессор выполняет сопоставление хэша от открытого ключа AMD, вшитого во время производства в CPU, с хэшем от открытого ключа, указанного в патче.
Проверка подлинности микрокода в патче осуществляется путём сравнения поставляемого с патчем хэша, заверенного цифровой подписью (RSASSA-PKCS1-v1_5), и хэша, вычисленного на основе фактически поставляемого в патче микрокода. Если эталонный и вычисленный хэши совпадают - патч загружается во внутреннюю память CPU. Проблема в том, что вместо использования рекомендованных криптостойких хэш-функций применён алгоритм CMAC, не рассчитанный на подобные операции и не защищённый от подбора коллизий.
CMAC не является хэш-функцией, а реализует имитовставку (Message Authentication Code), зависящую от ключа шифрования. Работа AES-CMAC сводится к использованию криптографического алгоритма AES и объединению результата его применения со следующим блоком данных при помощи операции XOR. Подобная схема гарантирует, что изменение входных данных приведёт к непредсказуемому изменению данных на выходе. При этом CMAC недопустимо использовать в качестве хэш-функции, так как любой кто знает исходный ключ шифрования может узнать промежуточные состояния шифрования и вычислить значения, которые смогут компенсировать изменение во входных данных так, что результат применения CMAC останется неизменным.
AMD применяет для AES-CMAC единый ключ шифрования, поставляемый на всех CPU, начиная с Zen 1. Таким образом, достаточно извлечь данный ключ из любого CPU AMD и он будет применим ко всем остальным CPU. Исследователи обнаружили, что для шифрования AES-CMAC в AMD использован известный ключ, взятый из примера, упомянутого в рекомендациях по использованию блочных шифров NIST SP 800-38B. Так как AES-CMAC используется для хэширования вшитого в патч RSA-ключа и содержимого микрокода, определив ключ шифрования AES-CMAC, появилась возможность подстановки в патч другого открытого RSA-ключа и изменения содержимого микрокода.
Для создания фиктивного патча достаточно сформировать новый открытый ключ, генерирующий тот же хэш, что формировался подлинным открытым ключом AMD, а также подобрать коллизии для цифровой подписи. Коллизии формируются путём прикрепления к микрокоду добавочного блока, выглядящего как набор случайных данных. Подобным образом можно подготовить изменённый патч с микрокодом, соответствующий цифровой подписи, которой был заверен оригинальный патч от AMD. Инструментарий Zentool, включающий утилиты для анализа микрокода и создания патчей для изменения микрокода, доступен под лицензией Apache 2.0. Для замены микрокода необходимо наличие прав для выполнения кода на уровне нулевого кольца защиты (технологии VT-x и AMD-V позволяют гостевой системе выполняться с правами Ring 0).
Источник: https://www.opennet.ru/opennews/art.shtml?num=63055