Процессоры Intel выплёвывают приватный ключ, если поиграть с напряжением
Исследователи из трёх европейских университетов раскрыли детали первой известной атаки на SGX.
Набор инструкций SGX (Software Guard eXtensions) позволяет приложению создавать анклавы — области в виртуальном адресном пространстве, защищённые от чтения и записи извне этой области другими процессами, включая ядро операционной системы. Анклавы изолированы на аппаратном и программном уровне: эта память физически отделена от остальной памяти процессора и зашифрована.
Атака Plundervolt (CVE-2019–11157) использует интерфейс ОС для управления напряжением и частотой процессора Intel — тот же интерфейс, который используется для разгона CPU при оверклокинге. Изменяя напряжение CPU, она за несколько минут извлекает данные из анклава, в том числе ключи шифрования.
Код демонстрационного эксплоита опубликован на GitHub. Уязвимые процессоры:
- Intel Core 6, 7, 8, 9 и 10 поколений
- Intel Xeon E3 v5 и v6
- Intel Xeon E-2100 и E-2200
Исследователям удалось объединить концепции двух известных атак:
- Rowhammer: изменение битового значения ячейки памяти DRAM с 1 на 0 и наоборот путём записи данных в соседние ячейки.
- CLKSCREW манипуляции энергопитанием процессора Dynamic Voltage and Frequency Scaling (DVFS).
Plundervolt сочетает в себе принципы, лежащие в основе этих двух атак. Через DVFS она изменяет напряжение в ячейках памяти SGX, что приводит к нежелательным изменениям данных в анклаве.
Работа основана на проведённом ранее реверс-инжиниринге процессоров Intel. Тот выявил, какие регистры MSR (ModelSpecific Register) отвечают за динамическое изменение напряжения CPU после программной команды. Такие регистры есть во всех процессорах Intel.
Схема недокументированного регистра MSR c адресом 0×150
Как выяснилось, в уязвимых процессорах происходит предсказуемая замена бит. Например, в процессоре Core i3–7100U при понижении напряжения на 118 мВ операция 0x80D36 * 0x21 = 0x109b3f6
даёт предсказуемо сбойное значение 0xffffffffe109b417
на частоте 2 ГГц.
Другие примеры сбойных умножений в Core i3–7100U на частоте 2 ГГц:
Эти небольшие изменения не нарушают секретность SGX. Вместо этого они вводят ошибки в операции SGX по обработке данных. Другими словами, Plundervolt не взламывает SGX, а изменяет результат: «Понижение напряжения индуцирует изменение битов в инструкциях процессора, таких как умножение или раунды шифрования AES (AES-NI)», — объясняет Дэвид Освальд, академик из Бирмингемского университета, один из авторов научной работы. — Поскольку SGX шифрует данные только при чтении и записи в память (но не внутри процессора), то защита памяти SGX не предотвращает эти ошибки (так как неисправные значения сами записываются в память)».
Plundervolt позволяет увидеть шифрованные сообщения на выходе из анклава SGX, а затем восстановить секретный ключ, который изначально использовался для шифрования данных.
Исследователи продемонстрировали эффективность атаки, введя ошибки в реализации Intel RSA-CRT и AES-NI, работающие в анклаве SGX. Им удалось восстановить полные криптографические ключи с незначительными вычислительными усилиями.
Код для проверки атаки (репозиторий на GitHub)
Описанная атака не требует радикального повышения напряжения, так что не угрожает физической безопасности чипа. На самом деле этой свойство Plundervolt делает атаку ещё опаснее. Ещё одно опасное свойство — она гораздо быстрее, чем большинство других атак на процессоры Intel, таких как Spectre, Meltdown, Zombieload, RIDL и прочие. В таблице указано количество итераций до появления ошибки умножения (0xAE0000 * 0x18
) на разных значениях пониженного напряжения в I3–7100U на 2 ГГц:
Изменение битов в умножениях AES осуществляются очень быстро. Например, извлечение ключа AES занимает несколько минут, включая вычисление, необходимое для получения ключа из неисправного шифротекста, говорит Освальд.
К сожалению для злоумышленников, атаку Plundervolt трудно провести удалённо. Нельзя заманить пользователя на веб-сайт и запустить JavaScript. Напряжение CPU таким методом не изменяется. Для работы Plundervolt требует наличия на компьютере жертвы приложения на с правами root или admin. Это требует социальной инженерии и применения дополнительных эксплоитов.
Plundervolt не работает в виртуализированных средах, таких как виртуальные машины и службы облачных вычислений, где у гостевой ОС нет доступа к интерфейсу, управляющему напряжением процессора.
Тем не менее, Plundervolt является серьёзной проблемой. Исследовательская группа уведомила Intel об уязвимости в июне 2019 года, и с тех пор производитель CPU работал над патчами. Обновления микрокода и BIOS выпущены 10 декабря 2019 года в рамках рекомендаций по безопасности INTEL-SA-00289. После установки патчей в BIOS можно отключить интерфейс по управлению напряжением и тактовой частотой.
Техническое описание атаки см. в научной статье (pdf), которая выйдет в сборнике Proceedings of the 41st IEEE Symposium on Security and Privacy.