Ленивое восстановление состояния FP
Ленивая утечка состояния FPU ( CVE - 2018-3665 ), также называемый Lazy FP State Restore. [1] или LazyFP , [2] [3] — это уязвимость безопасности, затрагивающая процессоры Intel Core . [1] [4] Уязвимость вызвана сочетанием недостатков в технологии спекулятивного выполнения, присутствующих в затронутых процессорах. [1] и как некоторые операционные системы обрабатывают переключение контекста в модуле с плавающей запятой (FPU). [2] Воспользовавшись этой уязвимостью, локальный процесс может утечь содержимое регистров FPU, принадлежащих другому процессу. Эта уязвимость связана с уязвимостями Spectre и Meltdown , которые были публично раскрыты в январе 2018 года.
Об этом объявила Intel 13 июня 2018 года после того, как ее обнаружили сотрудники Amazon , Cyberus Technology и SYSGO . [1] [а]
Помимо использования для арифметики с плавающей запятой , регистры FPU также используются для других целей, в том числе для хранения криптографических данных при использовании набора инструкций AES , присутствующего во многих процессорах Intel. [3] Это означает, что эта уязвимость может привести к ключевого материала . компрометации [3]
Механизм
[ редактировать ]Регистры с плавающей запятой и SIMD большие и не используются каждой задачей (или потоком) в системе. Чтобы ускорить переключение контекста, большинство распространенных микропроцессоров поддерживают отложенное переключение состояний. Вместо того, чтобы сохранять полное состояние во время переключения контекста, операционная система может просто пометить FPU как «недоступный» в надежде, что переключенной задаче он не понадобится. Если операционная система угадала правильно, время экономится. Если предположение неверно, первая инструкция FPU или SIMD вызовет ловушку для операционной системы, которая затем сможет сохранить состояние предыдущей задачи и загрузить правильное состояние для текущей задачи.
В вышедших из строя ЦП состояние «FPU недоступен» не обнаруживается сразу. (На самом деле, это практически невозможно обнаружить сразу, поскольку одновременно может выполняться несколько команд, вызывающих ошибку, и процессор должен обработать первую обнаруженную ошибку, чтобы сохранить иллюзию упорядоченного выполнения. Информация о том, какая из команд первая, недоступна. до этапа вывода из строя по порядку.) Процессор спекулятивно выполняет инструкцию, используя содержимое регистра предыдущей задачи и некоторые последующие инструкции, и только позже обнаруживает состояние недоступности FPU. Хотя все архитектурное состояние возвращается к началу команды, вызвавшей сбой, можно использовать часть состояния FPU в качестве адреса при загрузке памяти, вызывая загрузку в кэш процессора. Затем эксплуатация происходит по той же схеме, что и все уязвимости семейства Spectre: поскольку состояние кэша не является архитектурным состоянием (кэш влияет только на скорость, а не на корректность), загрузка кэша не отменено, и адрес, включая часть состояния регистра предыдущей задачи, может быть позже обнаружен путем измерения времени, затраченного на доступ к различным адресам памяти.
Эту ошибку можно использовать, фактически не вызывая никаких ловушек операционной системы. Поместив доступ к FPU в тень принудительного неправильного прогнозирования перехода (например, с помощью retpoline ), процессор все равно будет спекулятивно выполнять код, но перемотает на неверно предсказанную ветвь и никогда фактически не выполнит ловушку операционной системы. Это позволяет быстро повторить атаку, быстро считывая все состояние регистров FPU и SIMD.
смягчение последствий
[ редактировать ] можно Минимизировать уязвимость на уровне операционной системы и гипервизора , всегда восстанавливая состояние FPU при переключении контекстов процесса. [6] При таком исправлении обновление прошивки не требуется. Некоторые операционные системы уже не выполняли ленивое восстановление регистров FPU по умолчанию, защищая эти операционные системы на затронутых аппаратных платформах, даже если существовала основная проблема с оборудованием. [6] В операционной системе Linux с ядром 3.7 или выше можно заставить ядро быстро восстановить регистры FPU, используя команду eagerfpu=on
параметр ядра. [3] Кроме того, многие системного программного обеспечения поставщики и проекты , включая дистрибутивы Linux , [7] OpenBSD , [8] и Зен [4] выпустили патчи для устранения уязвимости.
Примечания
[ редактировать ]См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с д «Ленивое восстановление состояния FP» . Интел . 13 июня 2018 г. Проверено 18 июня 2018 г.
- ^ Jump up to: а б Стеклина, Джулиан; Прешер, Томас (19 июня 2018 г.). «LazyFP: утечка состояния регистра FPU с использованием побочных микроархитектурных каналов». arXiv : 1806.07480 [ cs.OS ].
- ^ Jump up to: а б с д Прешер, Томас; Стеклина, Джулиан; Галович, Яцек. «Уязвимость Intel LazyFP: использование ленивого переключения состояний FPU» . Технология Киберус . Проверено 18 июня 2018 г.
- ^ Jump up to: а б «Рекомендации по безопасности Xen CVE-2018-3665/XSA-267, версия 3» . 13 июня 2018 г. Проверено 18 июня 2018 г.
- ^ де Раадт, Тео (14 июня 2018 г.). «Воспаление Брайана Кэнтрила» . openbsd-tech (список рассылки) . Получено 18 июня 2018 г. - через marc.info .
- ^ Jump up to: а б «Отложенное сохранение/восстановление FPU (CVE-2018-3665)» . Красная шляпа . 14 июня 2018 г. Проверено 18 июня 2018 г.
- ^ «CVE-2018-3665» . Дебиан . Проверено 17 июня 2018 г.
- ^ «Ошибки OpenBSD 6.3» . OpenBSD . Проверено 18 июня 2018 г.
Внешние ссылки
[ редактировать ]- LazyFP: утечка состояния регистра FPU с использованием микроархитектурного побочного канала, Джулиан Стеклина и Томас Прешер (исследовательская статья)
- Уязвимость Intel LazyFP: использование ленивого переключения состояний FPU, Томас Прешер, Джулиан Стеклина и Яцек Галович (Cyberus Technology)
- Восстановление состояния отложенного FP (рекомендации Intel по безопасности)
- Тео де Раадт из OpenBSD объясняет уязвимость состояния Lazy FPU на YouTube