Помимо обновления микрокода, для устранения уязвимости на системах, использующих аттестацию SEV-SNP, также требуется обновление прошивки AMD SEV, которая поставляется в составе обновлений BIOS. Утверждается, что компания AMD передала производителям оборудования изменённую прошивку (ComboAM5PI 1.2.0.3c AGESA), необходимую для устранения проблемы, но доступные потребителям финальные обновления BIOS могут быть выпущены производителям спустя недели или месяцы. Сотрудники AMD также подготовили патч, на уровне ядра Linux блокирующий загрузку неофициальных обновлений микрокода для устранения уязвимости в процессорах AMD Zen 5 (отмечается, что правильные обновления микрокода необходимо установить вместе с 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).
Источник: http://www.opennet.ru/opennews/art.shtml?num=63055