Найден метод обхода механизма защиты AMD Secure Encrypted Virtualization
Как сообщает opennet.ru группа исследователей из Общества имени Фраунгофера разработали технику атаки SEVered, позволяющую обойти механизм защиты AMD Secure Encrypted Virtualization (AMD SEV) и получить полный доступ к зашифрованному содержимому памяти виртуальной машины, защищенной при помощи SEV.
Напомним, что технология SEV присутствует в последних поколениях процессоров AMD для серверных систем (AMD Epyc и Ryzen Pro) и позволяет защитить виртуальные машины от компрометации со стороны гипервизора или администратора хост системы. Суть метода защиты в интеграции в архитектуру виртуализации AMD-V возможности для прозрачного шифрования памяти виртуальных машин, при которой доступ к расшифрованным данным имеет только текущая гостевая система, а остальные виртуальные машины и гипервизор при попытке обращения к этой памяти получают зашифрованные данные.
Предложенный исследователями метод атаки позволяет в случае компрометации системы виртуализации и получения контроля за гипервизором извлечь в открытом виде все данные, находящиеся в памяти виртуальных машин, защищенных при помощи AMD SEV. Для совершения атаки не требуется физический доступ к оборудованию или возможность влияния на процессы в атакуемой виртуальной машине. Достаточно наличия виртуальной машины с любым сетевым сервисом (например, HTTP, SSH, FTP или почтовый сервер), отдающим через сетевые соединения данные, присутствующие в зашифрованной памяти виртуальной машины.
В качестве демонстрации приведен пример атаки на web-сервер, отдающий HTML-страницы. При получении атакующими контроля за гипервизором наличие подобного сервиса позволяет полностью восстановить содержимое зашифрованной памяти гостевой системы. Атака состоит из двух стадий:
На первой стадии выполняется идентификация ресурсов - определяются страницы физической памяти (GPA, Guest Physical Address), в которых находятся отдаваемые через сетевой сервис данные. Процесс трансляции адресов в виртуальных машинах напрямую скрыт от гипервизора из-за использования SEV-шифования, но имеются методы определения страниц памяти на основе субъективного сопоставления активности в памяти и сетевом сервисе, которые можно комбинировать для повышения точности определения принадлежности ресурса.
На второй стадии выполняется непосредственно извлечение данных из памяти виртуальных машин. На стороне гипервизора в HPT (Host Page Table) выполняется изменение маппинга GPA (Guest Physical Address) в HPA (Host Physical Address), при котором вместо адреса отдаваемого через сетевой сервис ресурса указываются другие страницы памяти. После изменения отражения страницы памяти сетевой сервис выдает вместо ожидаемого контента (например, буфера с HTML-страницей) содержимое другой области физической памяти (в том числе памяти другой гостевой системы). Повторяя операцию и постепенно проходя по всем страницам памяти можно получить содержимое всей зашифрованной памяти гостевых систем.
Атака стала возможной из-за недоработки в архитектуре SEV, в которой трансляция виртуального адреса гостевой системы (GVA, Guest Virtual Address) в физический адрес гостевой системы (GPA, Guest Physical Address) контролируется исключительно самой виртуальной машиной, скрыто от гипервизора, но гипервизор по-прежнему отвечает за трансляцию SLAT (Second Level Address Translation), т. е может производить маппинг физических адресов гостевой системы (GPA) в физические адреса хост-системы (HPA, Host Physical Address). Подобная особенность дает возможность гипервизору изменять раскладку памяти виртуальной машины.
В качестве полноценной меры для устранения выявленной уязвимости в дополнение к шифрованию требуется интеграция в процессоры системы контроля целостности страниц памяти гостевых систем, по аналогии с тем как это реализовано для анклавов на базе технологии Intel SGX. Так как данный метод защиты оценивается как требующий слишком сильной доработки чипа, при находящейся под вопросом целесообразности внесения таких усложнений для защиты виртуальных машин, предлагается упрощенный обходной путь - добавление проверки хэшей содержимого страниц памяти, привязанных к записям GPA.