Как защитить сервер от уязвимостей Meltdown и Spectre?

4 января 2018 года в дизайне современных процессоров были обнаружены многочисленные уязвимости. Используя определенные аспекты оптимизации производительности процессора, эти уязвимости – Meltdown и Spectre – позволяют злоумышленникам извлекать из приложений контент системной и прикладной памяти. Эти атаки работают путем спекулятивного выполнения команд, что заставляет процессор игнорировать права доступа.

Уязвимости Meltdown присвоен идентификатор CVE-2017-5754. Уязвимость Spectre получила идентификаторы CVE-2017-5753 и CVE-2017-5715

Кто подвержен уязвимостям Meltdown и Spectre?

Meltdown и Spectre затрагивают большинство современных процессоров. Основной конструктивной особенностью большинства уязвимых процессоров, которую используют Meltdown и Spectre, является оптимизация процессора. Это означает, что большинство систем будут уязвимы до установки патчей. К уязвимым машинам относятся настольные компьютеры, серверы и вычислительные машины, работающие в облачных средах.

Патчи для защиты от Meltdown выпускаются вендорами операционной системы. Для Spectre также появились патчи, однако Spectre представляет собой целый класс уязвимостей, поэтому, скорее всего, потребует более интенсивного и продолжительного исправления.

В облачных и виртуализованных средах провайдерам необходимо обновить базовую инфраструктуру для защиты своих гостей. Пользователям необходимо обновить свои серверы, чтобы уменьшить влияние в гостевых операционных системах.

Как устранить уязвимость Meltdown и Spectre?

Полная защита от этого класса уязвимостей, скорее всего, потребует изменений в структуре ЦП.

Сейчас уже есть обновления программного обеспечения, которые могут смягчить последствия эксплойтов – они отключают или изменяют добавленное при оптимизации поведение, которое приводит к этим уязвимостям.

К сожалению, поскольку эти патчи влияют на процедуры оптимизации в процессоре, исправления могут уменьшить производительность сервера. Степень замедления сильно зависит от типа выполняемой работы, больше всего влиянию патчей подвержены процессы ввода-вывода.

Текущий статус патчей уязвимостей

По состоянию на 9 января 2018 года дистрибутивы Linux начали распространять патчи, но ни один дистрибутив пока не получил полного набора патчей.

Вот дистрибутивы, которые получили обновления ядра с частичным смягчением уязвимостей:

  • CentOS 7: ядро 3.10.0-693.11.6
  • CentOS 6: ядро 2.6.32-696.18.7
  • Fedora 27: ядро 4.14.11-300
  • Fedora 26: ядро 4.14.11-200
  • Ubuntu 17.10: ядро 4.13.0-25-generic
  • Ubuntu 16.04: ядро 4.4.0-108-generic
  • Ubuntu 14.04: ядро 3.13.0-139-generic
  • Debian 9: ядро 4.9.0-5-amd64
  • Debian 8: ядро 3.16.0-5-amd64
  • Debian 7: ядро 3.2.0-5-amd64
  • Fedora 27 Atomic: ядро 4.14.11-300.fc27.x86_64
  • CoreOS: ядро 4.14.11-coreos

Если ваше ядро обновлено до одной из перечисленных выше версий, это может смягчить атаку на ваш сервер.

Операционные системы, которые еще не выпустили ядра с патчами:

  • FreeBSD 11.x
  • FreeBSD 10.x

Дистрибутив Ubuntu 17.04, поддержка которого прекращается 13 января 2018 года, не получит патчей. Пользователям настоятельно рекомендуется обновить или изменить дистрибутив.

Важно! Настоятельно рекомендуем вам обновить или сменить любой релиз, поддержка которого прекратилась или скоро прекратится. Эти релизы не получают обновлений безопасности для критических уязвимостей, которые могут подвергнуть опасности всю систему и пользователей.

Эти уязвимости очень серьезны, потому рекомендуем применять обновления по мере их появления, а не ждать полного набора патчей. Это может потребовать нескольких обновлений ядра и перезагрузок сервера в ближайшие дни или недели.

Как применить патчи?

Необходимо обновить системное программное обеспечение, как только для вашего дистрибутива появятся патчи. Вы можете обновить дистрибутив, запустив обычный менеждер пакетов – для этого нужно загрузить последнюю версию ядра, а затем перезагрузить сервер, чтобы перейти на исправленный код.

Обновить системное программное обеспечение серверов Ubuntu и Debian можно так:

sudo apt-get update
sudo apt-get dist-upgrade

Чтобы обновить сервер CentOS, введите:

sudo yum update

На серверах Fedora используйте инструмент dnf:

sudo dnf update

Независимо от операционной системы, после применения обновлений перезагрузите сервер, чтобы переключиться на новое ядро:

sudo reboot

После того, как сервер снова подключится к сети, войдите в систему и убедитесь, что используемое ядро входит в указанный выше список. Регулярно проверяйте наличие новых обновлений, чтобы получить дополнительные патчи по мере их выхода.

Дополнительные сведения

Семейство уязвимостей Meltdown и Spectre использует возможности повышения производительности в современных процессорах. Комбинация функций процессора – спекулятивное выполнение, проверка привилегий, исполнение команд с изменением последовательности и кэширование CPU – позволяют злоумышленнику получить право на чтение привилегированной памяти. В результате отдельные программы можно использовать для получения конфиденциальных данных из их памяти или для доступа к привилегированной памяти из ядра или других приложений.

Как работает уязвимость Meltdown?

Уязвимость Meltdown обманывает процессор и дает доступ к памяти, используя недостаток в оптимизации процессора, который называется спекулятивным выполнением. Общий принцип уязвимости таков:

  • Первый запрос отправляется нелегальному адресу ячейки памяти.
  • Второй запрос делается для условного считывания действительной ячейки памяти, если первый запрос содержит определенное значение.
  • Используя спекулятивное выполнение команд, процессор завершает обработку обоих запросов в фоновом режиме, прежде чем проверить валидность первого запроса. Как только процессор понимает, что запросы включают внешнюю память, он отклоняет оба запроса. Хотя процессор не возвращает результаты после проверки привилегий (так как в доступе будет отказано), оба доступных адреса остаются в кэше процессора.
  • Теперь отправляется новый запрос на правильный адрес ячейки памяти. Если он быстро вернется, то адрес ячейки уже находится в кэше CPU, а это указывает на то, что ранее был выполнен условный запрос.

В целом уязвимость Meltdown может быть исправлена.

Как работает уязвимость Spectre?

Spectre также обманывает процессор и пользуется спекулятивным выполнением команд, чтобы читать привилегированные значения. Существует два варианта использования уязвимости Spectre с различными уровнями сложности и воздействия.

В варианте 1 процессор обрабатывает спекулятивное выполнение операции чтения до проверки границ. Сначала злоумышленник заставляет процессор спекулятивно достигнуть ячейки памяти за пределами допустимых границ. Затем, как в Meltdown, используется дополнительная команда, которая загружает адрес ячейки в кэш на основе значения вне границ. По тому, сколько времени необходимо для получения адреса, можно понять, загружен ли он в кэш. Это, в свою очередь, может показать значение ячейки памяти вне границ.

Вариант 2 сложнее использовать и смягчить.

Процессоры часто спекулятивно выполняют инструкции, даже если они сталкиваются с условным выражением, которое еще нельзя оценить. Они делают это, угадывая наиболее вероятный результат условного использования механизма, это называется прогнозированием ветвлений.

Прогнозирование ветвлений использует историю предыдущих прогонов, чтобы выбрать путь для спекулятивного выполнения. С помощью этого злоумышленник может заставить процессор принять неправильное решение. Поскольку история ветвления не хранит абсолютных ссылок на решения, процессор можно заставить выбрать неправильную ветку. Это можно использовать для выявления значений памяти за пределами допустимого диапазона.

Заключение

Spectre и Meltdown – серьезные уязвимости безопасности; весь потенциал их возможного воздействия до сих пор не изучен полностью.

Чтобы защитить себя, отслеживайте обновления программного обеспечения вашей операционной системы, так как на данный момент никто не может предоставить полный набор патчей для защиты от уязвимостей Meltdown и Spectre.

Tags: ,