Исследователи Центра Гельмгольца по информационной безопасности (CISPA) опубликовали новый метод атаки CacheWarp, позволяющий скомпрометировать механизм защиты AMD SEV (Secure Encrypted Virtualization), применяемый в системах виртуализации для защиты виртуальных машин от вмешательства со стороны гипервизора или администратора хост системы. Предложенный метод позволяет злоумышленнику, имеющему доступ к гипервизору, добиться выполнения стороннего кода и повышения привилегий в виртуальной машине, защищённой при помощи AMD SEV.
Атака основана на использовании уязвимости (CVE-2023-20592), вызванной некорректной работой с кэшем во время выполнения процессорной инструкции INVD, при помощи которой можно добиться рассогласования данных в памяти и кэше, и обойти механизмы поддержания целостности памяти виртуальных машин, реализованные на базе расширений SEV-ES и SEV-SNP. Уязвимость затрагивает процессоры AMD EPYC с первого по третье поколения.
Для процессоров AMD EPYC третьего поколения (Zen 3) проблема устранена в ноябрьском обновлении микрокода, выпущенном вчера компанией AMD (исправление не приводит к снижению производительности). Для первого и второго поколений AMD EPYC (Zen 1 и Zen 2) защита не предусмотрена, так как в данных CPU отсутствует поддержка расширения SEV-SNP, обеспечивающего контроль целостности виртуальных машин. Четвёртое поколение процессоров AMD AMD EPYC “Genoa” на базе микроархитектуры “Zen 4” уязвимости не подвержено.
Технология AMD SEV применяется для изоляции виртуальных машин такими облачными провайдерами, как Amazon Web Services (AWS), Google Cloud, Microsoft Azure и Oracle Compute Infrastructure (OCI). Защита AMD SEV реализована через шифрование на аппаратном уровне памяти виртуальных машин. Дополнительно при помощи расширения SEV-ES (Encrypted State) осуществляется защита регистров CPU. Доступ к расшифрованным данным имеет только текущая гостевая система, а остальные виртуальные машины и гипервизор при попытке обращения к этой памяти получают зашифрованный набор данных.
В третьем поколении процессоров AMD EPYC было реализовано дополнительное расширение SEV-SNP (Secure Nested Paging), обеспечивающее безопасную работу со вложенными таблицами страниц памяти. В дополнение к общему шифрованию памяти и изоляции регистров, в SEV-SNP реализованы дополнительные средства для защиты целостности памяти, не допускающие внесения изменений в VM со стороны гипервизора.
Управление ключами шифрования производится на стороне встроенного в чип отдельного процессора PSP (Platform Security Processor), реализованного на базе архитектуры ARM.
Суть предложенного метода атаки использовании инструкции INVD для аннулирования блоков (линий) в кэше грязных (dirty) страниц без сброса накопившихся в кэше данных в память (write-back). Таким образом метод позволяет вытеснить изменённые данные из кэша, не меняя состояние памяти. Для совершения атаки предлагается использовать программные исключения (fault injection) для прерывания работы виртуальной машины в двух местах: в первом месте атакующий вызывает инструкцию “wbnoinvd” для сброса всех накопленных в кэше операций записи в память, а во втором месте вызывает инструкцию “invd” для возврата неотражённых в памяти операций записи в старое состояние.
Для проверки своих систем на наличие уязвимости опубликован прототип эксплоита, позволяющий выполнить подстановку исключения в виртуальную машину, защищённую через AMD SEV, и откатить в старое состояние несброшенные в память изменения в VM. Откат изменения может использован для возвращения адреса возврата в стеке для изменения хода выполнения программы или для возвращения значения признака аутентификации для использования старого сеанса, для которого ранее была выполнена аутентификация.
Например, исследователями продемонстрирована возможность применения метода CacheWarp для совершения атаки Bellcore на RSA-CRT, позволяющей восстановить закрытый ключ через подстановку ошибок. Также показано как можно подменить параметры проверки сеанса к OpenSSH при удалённом подключении к гостевой системе, а затем изменить состояние проверки при выполнении утилиты sudo для получения прав root в Ubuntu 20.04. Работа эксплоита проверена на системах с процессорами AMD EPYC 7252, 7313P и 7443.