Атака BadRAM, позволяющая обойти механизм аттестации SEV-SNP в CPU AMD

Группа исследователей из Лёвенского, Любекского и Бирмингемского университетов разработала метод атаки BadRAM (CVE-2024-21944), позволяющий обойти механизм подтверждения подлинности и скомпрометировать окружения, защищённые с использованием расширения SEV-SNP в процессорах AMD. Для совершения атаки злоумышленник, за редким исключением, должен получить физический доступ к модулям памяти, а также иметь возможность выполнения кода на уровне нулевого кольца защиты (ring0) на сервере, выполняющем защищённые гостевые окружения.

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

Механизм AMD SEV-SNP создавался для того, чтобы спецслужбы или персонал датацентров и облачных провайдеров, в которых выполняются защищённые гостевые системы, не могли вклиниться в работу гостевой системы. Предложенный метод атаки BadRAM даёт возможность обойти предоставляемые гарантии через изменение метаданных SPD (Serial Presence Detect) в модулях памяти DDR4 или DDR5. При успешной атаке злоумышленник может перезаписать зашифрованные данные в памяти гостевой системы (на уровне шифротекста, без возможности расшифровки) и обойти механизм аттестации, например, для скрытия внедрения бэкдора в виртуальную машину, защищённую при помощи технологии SEV-SNP.

Атака основана на выставлении в SPD фиктивных параметров модуля памяти, заставляющих процессор обращаться по несуществующим адресам, отражённым на существующие области памяти. Атакующий может откорректировать SPD таким, образом, что модуль памяти вернёт процессору размер, превышающий фактические характеристики модуля. После этого атакующий может осуществить маппинг выдуманной несуществующей памяти на реальную область в DRAM, которая уже используется в зашифрованном виде в защищённых гостевых системах. В итоге возникает ситуация, когда разные адреса указывают на одну и туже физическую память (две области отражены на одну область в чипе DRAM), т.е. по адресу фиктивной отражённой области памяти можно обратиться к уже используемой реальной памяти и обойти механизмы защиты памяти в CPU.


Для совершения атаки достаточно собрать простейший программатор стоимостью около 10 долларов, состоящий из микроконтроллера Raspberry Pi Pico, разъёма для модулей DDR4/DDR5 и источника питания. Используемые для совершения атаки утилиты, модуль ядра и прототипы эксплоитов размещены на GitHub.


Для чипов некоторых производителей, в которых не выполнена блокировка перезаписи SPD, совершение атаки возможно программным путём без физического доступа к серверу. Например, программно можно изменить параметры модулей памяти компании Corsair с RGB-подсветкой.
В случае проведения полностью программной атаки, система может быть скомпрометирована, например, через применение вредоносного обновления BIOS или через диверсию со стороны администраторов серверов в облачных сервисах.


В качестве подтверждения работы метода продемонстрированы две атаки. В первой атаке показана возможность повторного воспроизведения шифротекста – при использовании AMD SEV данные в памяти хранятся в зашифрованном виде и атакующий не может определить содержимое, но имеет возможность прочитать зашифрованные данные и затем подставить их вместо другого зашифрованного содержимого.

Во второй атаке продемонстрирована возможность обхода механизма аттестации SEV-SNP, предоставляющего криптографическое подтверждение целостности виртуальной машины, запущенной в защищённом окружении. Атакующий может перехватить отчёт аттестации корректной виртуальной машины и затем подставить его для скомпрометированной виртуальной машины, например, скрыв следы внедрения бэкдора.

Проблема затрагивает 3 и 4 поколения процессоров AMD серии EPIC, поставляемые под кодовыми именами Milan, Milan-X, Genoa, Bergamo, Genoa-X и Siena. Для блокирования уязвимости компания AMD уже выпустила обновление прошивки SEV, в котором реализована проверка ALIAS_CHECK, не допускающая манипуляции с памятью, свойственные рассматриваемой атаке.

Предлагаемые компанией Intel технологии Scalable SGX и TDX не подвержены атаке, так как в них необходимые проверки присутствуют изначально. Классическая технология Intel SGX, которая в 2021 году была переведена Intel в разряд устаревших, частично подвержена атаке (по аналогии с ранее известной атакой MemBuster, злоумышленник может анализировать обращения к зашифрованной памяти, т.е. возможно только чтение шифротекста, но не его перезапись). Тестирование расширений CCA (Confidential Compute Architecture) в процессорах компании ARM не проводилось.

Дополнительно сообщается об ещё одной уязвимости, связанной с AMD SEV-SNP. Уязвимость выявлена в развиваемом AMD форке эмулятора QEMU, предназначенном для запуска виртуальных машин с SEV-SNP. Проблема позволяет администратору хост-окружения получить root-доступ к гостевым системам через манипуляции с таблицами ACPI. Уязвимость вызвана тем, что при загрузке гостевой системы выполняется проверка целостности ядра Linux, начального RAM-диска и параметров ядра, но не учитываются ACPI-таблицы, через которые гипервизором может быть выставлен специально оформленный код AML (ACPI Machine Language), предназначенный для выполнения в гостевом окружении. Утверждается, что проблема не специфична для QEMU и проявляется в любых гипервизорах и эмуляторах, так как ядро Linux доверяет любым данным ACPI, поступившим от гипервизора.

Release. Ссылка here.