Уязвимость в загрузчике микрокода в CPU AMD, позволяющая обойти изоляцию SEV-SNP

Исследователи безопасности из компании Google опубликовали информацию об уязвимости (CVE-2024-56161) в процессорах AMD, затрагивающей загрузчик микрокода и позволяющей обойти механизм проверки цифровой подписи при обновлений микрокода. Загрузка модифицированного микрокода позволяет скомпрометировать механизм AMD SEV (Secure Encrypted Virtualization), применяемый в системах виртуализации для защиты виртуальных машин от вмешательства со стороны гипервизора или администратора хост-системы.

Уязвимость вызвана использованием небезопасной хэш-функции в коде, выполняющем проверку цифровой подписи после загрузки микрокода в CPU.
Для совершения атаки необходимо наличие прав администратора в локальной системе (возможности выполнить код на уровне нулевого кольца защиты (ring0), находясь не в виртуальной машине).

В ходе атаки можно вклиниться в работу гостевых систем, защищённых при помощи расширений AMD SEV (Secure Encrypted Virtualization) и SEV-SNP (Secure Nested Paging), предоставляющих гарантии целостности памяти виртуальных машин, изолирующих процессорные регистры и обеспечивающих безопасную работу со вложенными таблицами страниц памяти. Механизм AMD SEV создавался для того, чтобы персонал датацентров и облачных провайдеров не мог изменить или проанализировать содержимое памяти защищённых гостевых систем, а также исказить вычисления.

Исследователями подготовлен прототип эксплоита, позволяющий загрузить произвольный микрокод в CPU, не заверенный цифровой подписью. Для демонстрации опасности уязвимости предложено обновление микрокода, меняющее логику работы инструкции RDRAND, применяемой в качестве одного из источников энтропии в генераторах псевдослучайных чисел, используемых в процессе формирования ключей, при выполнении криптографических операций и для генерации случайных идентификаторов.

Изменение приводит к возвращению инструкцией RDRAND только числа 4, вместо случайной последовательности. Для предотвращения совершения реальных атак на системы конфиденциальных вычислений изменённый микрокод обнуляет флаг CF (carry flag), т.е. помечает выдаваемое значение ошибочным. Дополнительные детали и инструменты для генерации изменённого микрокода планируют опубликовать 5 марта, чтобы дать пользователям время на установку исправления на своих системах. Успешный пример атаки продемонстрирован для серверов с процессорами AMD EPYC 7B13 (Milan) и AMD Ryzen 9 7940HS (Phoenix).

В отчёте компании AMD указано, что уязвимость проявляется в процессорах AMD на базе 1-4 поколений микроархитектуры Zen. Обновление микрокода с устранением уязвимости было выпущено 13 декабря 2024 года для процессоров серий AMD EPYC 7001, 7002 и 7003 (Naples, Rome, Milan и Milan-X), а 16 декабря для процессоров серии AMD EPYC 9004 (Genoa, Genoa-X и Bergamo/Siena). Для устранения уязвимости на системах, в которых используется аттестация SEV-SNP, дополнительно требуется обновление прошивки AMD SEV (поставляется вместе с обновлениями BIOS от производителей оборудования).

Дополнительно сообщается об ещё одной уязвимости в процессорах AMD, допускающей проведение атаки по сторонним каналам для извлечения информации о вычислниях в гостевых системах, защищённых с использованием механизма AMD SEV. Проблема затрагивает 1-4 поколения процессов AMD EPYC и связана с возможностью извлечения из процессорного кэша данных, оседающих в процессе работы защищённых гостевых систем. Для анализа содержимого кэша может использоваться метод Prime+Probe, подразумевающий заполнение кэша эталонным набором значений и определение изменений через измерение времени доступа к ним при повторном заполнении. Отмечается, что для блокирования атаки подходят методы, ранее предложенные для защиты от атак класса Spectre.

Release. Ссылка here.