L1TF — три новые уязвимости в механизме спекулятивного выполнения CPU Intel

Компания Intel раскрыла сведения о группе уязвимостей в механизме спекулятивного выполнения CPU, представленных под кодовым именем Foreshadow или L1 Terminal Fault (L1TF).

Уязвимости манипулируют тем, что при доступе к памяти по виртуальному адресу, приводящему к исключению (terminal page fault) из-за отсутствия флага Present в таблице страниц памяти, процессоры Intel спекулятивно рассчитывают физический адрес и загружают данные, если они имеются в L1-кэше. Спекулятивное обращение выполняется до завершения перебора таблицы страниц памяти и независимо от состояния записи в таблице страниц памяти (PTE), т.е. до проверки наличия данных в физической памяти и их доступности для чтения. После завершения проверки доступности памяти, в случае отсутствия флага Present в PTE операция отбрасывается, но данные оседают в кэше и их можно извлечь при помощи методов определения содержимого кэша по сторонним каналам (через анализ изменения времени доступа к прокэшированным и не прокэшированным данным).

L1TF присвоен высокий уровень опасности, так как уязвимость позволяет определить данные по любому физическому адресу в системе, независимо от применяемых механизмов изоляции и виртуализации (например, можно атаковать систему из гостевой системы). Ограничением атаки является то, что для восстановления содержимого L1-кэша код для эксплуатации уязвимости должен выполняться на том же физическом ядре CPU, что и код, вызывающий page fault.

Всего предложено три варианта уязвимости:

  • CVE-2018-3615 - извлечение данных из памяти анклавов Intel Software Guard Extensions (Intel SGX);
  • CVE-2018-3620 - извлечение данных из SMM (System Management Mode) и областей памяти ядра ОС;
  • CVE-2018-3646 - утечка данных из виртуальных машин в системах виртуализации.

Проблемам подвержены только процессоры Intel. Отмечается, что уязвимости уже устранены в прошлом обновлении микрокода. Для исправления первой проблемы достаточно обновления микрокода. Исправление второй и третьей проблемы выпущено в виде патча для ядра Linux и исправления для гипервизора Xen. Обновления уже формируются для дистрибутивов UbuntuOracleRHELSUSEDebian и FreeBSD. Суть добавленной в ядро защиты сводится к использованию в записи PTE с пустым флагом Present ссылки на некэшируемую память (инверсия PTE). Для защиты систем виртуализации задействован сброс L1-кэша при переключении контекста виртуальных машин.

По данным Intel негативное влияние исправления на производительность составляет от 0% (клиентские применения) до 7% (при симуляции нагрузки на web-сервер в виртуальной машине). По тестам Red Hat инверсия PTE не создаёт негативного влияния на производительность, а сброс L1-кэша в большинстве применений замедляет работу не более чем на 2-5%, но в отдельных нагрузках замедление достигает 14% (без обновления микрокода - 27%). Как вариант блокирования уязвимости отмечается и отключение Hyper-Threading, но в этом случае падение производительности может достигать 30-50%.

Источник: OpenNET