Heracles: атака на AMD, которую AMD почти написала сама — осталось лишь нажать...

Тот случай, когда шифрование нужно не для защиты, а для удобного брута.


e4k6pq18d2lqxplcl21rd1eb1v7n2n8p.jpg


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

AMD SEV-SNP (Secure Encrypted Virtualization – Secure Nested Paging) предназначен для конфиденциальных вычислений : он шифрует память гостевых ВМ с привязкой к физическим адресам, обеспечивая изоляцию от гипервизора . Однако Heracles использует три ключевых особенности этой архитектуры: возможность перемещения зашифрованных страниц памяти с помощью доверенных API, факт, что при перемещении данные перешифровываются, и детерминированность самого шифрования. Алгоритм шифрования XEX (XOR-Encrypt-XOR) в SEV-SNP генерирует tweak-значения на основе физического адреса памяти, что делает перешифровку предсказуемой при контроле над размещением данных.

Пользуясь доступными API — SNP_PAGE_MOVE, SNP_PAGE_SWAP_IN/OUT и DMA-движком MPDMA, гипервизор может перемещать страницы гостевой памяти и создавать условия для проведения криптографического анализа . Инъецируя контролируемые данные в память жертвы через стандартные интерфейсы (например, ICMP), злоумышленник строит словарь соответствий между известными открытыми текстами и их шифрованными представлениями. Это позволяет, наблюдая за шифротекстами, извлекать оригинальные данные — даже если они ранее не повторялись и не были известны.

Авторы разработали четыре примитива утечки, включая механизм по байтовому копированию (используемый в memcpy , Bash , Sudo ), утечки на границах блоков (через сдвиги в памяти при обработке данных), а также работу с изменяемыми in-place значениями. Они демонстрируют практическое применение Heracles на пяти реальных приложениях: Linux memcpy, оболочка Bash, sudo, веб-сервер Mongoose и криптобиблиотека mbedtls. В каждом из случаев удалось извлечь пароли, криптографические ключи или сессионные куки.

По словам исследователей, атака эффективна даже против нерепетитивных данных и работает с точностью до одного байта. В худшем случае для извлечения одного байта требуется около 2,5 секунд, но с учетом сужения области поиска (например, если известно, что это ASCII), время значительно снижается. Эксперименты показали, что извлечение 16-символьного пароля sudo занимает всего 6,5 секунд.

Для смягчения угрозы авторы рекомендуют отключать хотя бы одну из двух функций гипервизора: чтение зашифрованной памяти CVM или возможность перемещения страниц. Последнее может быть реализовано через обновление прошивки, и AMD уже анонсировала соответствующую функцию в спецификации SEV-SNP ABI 1.58 (май 2025). Также ожидается внедрение новой функции скрытия ciphertext'ов в процессорах AMD EPYC 5-го поколения (Zen 5), но на момент публикации включение этой опции вызывало ошибки из-за отсутствия поддержки на уровне прошивки и BIOS.

Исследователи подчёркивают, что текущие программные меры защиты, ориентированные на предотвращение атак по сторонним каналам , недостаточны, поскольку Heracles охватывает и пользовательское пространство, и ядро. Аппаратные же меры, вроде генерации новых tweak-значений при каждой записи, могут остановить атаку полностью, но потребуют значительных изменений в архитектуре памяти и приведут к серьёзным накладным расходам.