Атака CrossTalk эксплуатирует недокументированный и ранее неизвестный общий буфер, который совместно используют ядра процессоров Intel. Эта первая в мире кросс-ядерная атака на Intel CPU делает бесполезной защиту через отключение гипертрединга и изоляцию задач по разным ядрам
Похоже, архитектурные проблемы процессоров Intel оказались серьёзнее, чем можно было предположить. Уязвимости, связанные со спекулятивным выполнением команд, снова проявили себя. В июне 2020 года опубликованы две новые атаки SGAxe и CrossTalk. Они позволяют извлечь конфиденциальные данные из анклава Software Guard eXtension (SGX), самой защищённой области в процессорах Intel.
Это не первые атаки на анклав SGX в Intel CPU. Он был скомпрометирован ещё в 2018 году атаками Meltdown и Spectre. Полностью исправить архитектурные изъяны по сути невозможно. Но теперь ситуация усугубилась, поскольку предложенные Intel защитные меры (изоляция процессов по разным ядрам и отключение гипертрединга) фактически дискредитированы.
Атака SGAxe
Современные процессоры оснащаются рядом кэшей для ускорения операций между быстрым CPU и медленной памятью. При вызове определённого адреса памяти CPU сначала ищет данные в кэше первого уровня, затем спускается дальше по иерархии, пока не найдёт их. После нахождения данных в кэшах низших уровней данные часто переносятся в кэш высшего уровня.
Иерархия кэшей в процессорах Intel
Чтобы использовать присущий программному коду параллелизм, движок выполнения команд в современных процессорах запускает их на выполнение не по порядку, используя так называемое спекулятивное выполнение и задействуя особые буферы Line Fill Buffers (LFB) в обход стандартных кэшей.
Схематическое представление двух сценариев атаки CacheOut
Новая атака SGAxe построена на базе предыдущей атаки CacheOut, которую описала та же группа исследователей из Мичиганского университета и Аделаидского университета в январе 2020 года. В свою очередь, CacheOut является разновидностью атаки RIDL, раскрытой в мае 2019 года (известна также под названиями Fallout, ZombieLoad и Microarchitectural Data Sampling) для извлечения конфиденциальных данных через считывание буфера LFB. Для RIDL опубликован готовый эксплоит.
CacheOut позволяет обойти защитные меры, которые Intel предложила в 2018 году.
Во время атаки CacheOut злоумышленник сначала вытесняет из кэша данные на свой выбор — в процессорах Intel а такой ситуации данные отправляются в LFB (см. схему выше), где уже в действие вступает стандартная схема атаки RIDL.
В свою очередь, SGAxe описывает новое, более мощное применение CacheOut. Новая атака использует схему разбиения памяти на страницы (paging), чтобы переместить данные анклава в кэш L1, где их содержимое расшифровывается. Оттуда CacheOut перемещает данные в буфер, где они извлекаются с помощью метода RIDL.
Конкретно, целью атаки SGAxe являются криптографические ключи, которые SGX использует для «аттестации» — для подтверждения, что удалённый сервер работает на правильном процессоре Intel, а не является зловредной симуляцией. Эти ключи предъявляются при финансовых транзакциях, для проверки DRM на видеотрансляциях и других защищённых операций.
«Компрометация ключей аттестации позволяет ненадёжному клиентскому получить любые секреты, предоставленные, в то время как все выходные данные, предположительно полученные анклавами, работающими на клиенте, не могут быть проверены на правильность. Это эффективно делает приложения DRM на основе SGX бесполезными, поскольку любой подготовленный секрет может быть тривиально восстановлен. Наконец, возможность полностью пройти дистанционную аттестацию также исключает возможность доверять любым протоколам защищённых удалённых вычислений на основе SGX», — пишут авторы.
Представитель Intel сказал, что исправление микрокода переназначит ключи аттестации с учётом возможности утечки старых. Кроме того, он посоветовал использовать рекомендованный Intel режим связываемой подписи для обнаружения работы эксплоитов.
CrossTalk
Вторая атака CrossTalk на анклав SGX примечательна тем, что она основана на ранее неизвестном недокументированным буфере, который используют все процессорные ядра Intel. Этот «промежуточный буфер» (staging buffer), как назвали его исследователи из Амстердамского свободного университета и ETH Zurich, сохраняет результаты ранее выполненных команд во всех ядрах процессора.
Открытие очень важно по нескольким причинам. Во-первых, промежуточный буфер сохраняет выходные данные от RDRAND и RDSEED — это очень чувствительные инструкции, которые обеспечивают случайные числа для генерации криптоключей.
Получив случайные числа, злоумышленники могут использовать их для вывода ключа. Это открытие позволило исследователям разработать атаку на механизм спекулятивного выполнения. Атака извлекает ключ, основанный на криптографическом алгоритме ECDSA, который генерируется в анклаве SGX.
Обнаружение промежуточного буфера позволило построить первую в мире атаку на механизм спекулятивного выполнения, которая работает на всех ядрах процессора. Все предыдущие атаки работали только тогда, когда атакующий и жертва использовали одно и то же ядро. Многие считали, что разделение доверенного и ненадёжного кода между разными ядрами обеспечит хорошую защиту от таких атак. Появление эксплоита CrossTalk заставит исследователей и инженеров пересмотреть это предположение.
Это подтверждают авторы научной работы: «Многие полагали, что для защиты от большинства известных и будущих атак достаточно отключить гипертрединг Intel SMT. Более того, все атаки до сих пор можно было бы смягчить простым запуском взаимно недоверенного кода на отдельных ядрах. Мы показали, что проблема идёт ещё глубже, и изоляции по ядрам недостаточно».
Суть в том, что RDRAND, RDSEED и SGX EGETKEY реализованы на внутренней микроархитектурной операции SRR (Special Register Reads), а данные, возвращаемые для SRR, оседают в промежуточном буфере. Исследователи показали, что почти тривиально применить эти данные для взлома кода, работающего в защищённых анклавах SGX Intel».
Большинство обычных клиентских процессоров, включая процессоры Xeon E3, уязвимы для CrossTalk.
Компания Intel заявила, что серверная микроархитектура в Xeon E5/E7 не является уязвимой для этой атаки, которую Intel называет Special Register Buffer Data Sampling (SRBDS). Для остальных выпущено обновление микрокода.
Технический отчёт Intel см. здесь.
Обновление микрокода, исправляющее этот баг, блокирует всю шину памяти перед обновлением промежуточного буфера и разблокирует её только после очистки её содержимого. Intel применяет изменения только к определенному числу критически важных для безопасности инструкций, включая RDRAND, RDSEED и EGETKEY. Выходные данные любой другой инструкции, такой как WRMSR, по-прежнему можно прочитать из общего буфера, говорят исследователи.
Можно предположить, что это не последние эксплоиты для процессоров Intel.