Как защитить свой сервер от уязвимостей и обвалов

Что такое Расплавление и Призрак?

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

Обвал был раскрыт в CVE-2017-5754. Призрак был раскрыт в CVE-2017-5753 и https://nvd.nist.gov/vuln/detail/CVE-2017-5715. [CVE-2017-5715].

Для получения более подробной информации просмотрите ссылку: # how-does-meltdown-work [как работает meltdown?] И ссылку: # how-do-specter-work [Как работает specter?] Ниже.

Я подвержен влиянию Meltdown и Spectre?

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

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

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

Как я могу защитить себя?

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

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

Текущий статус исправления

На момент написания статьи (9 января 2018 года) дистрибутивы Linux начали распространять исправления, но ни один из них еще не полностью исправлен.

Распространения, которые выпустили обновления ядра с * частичным смягчением * (исправлено для Meltdown * И * вариант 1 Спектра), включают:

  • CentOS 7: ядро ​​3.10.0-693.11.6

  • CentOS 6: ядро ​​2.6.32-696.18.7

В дистрибутивы, которые выпустили обновления ядра с * частичным смягчением * (исправлено для Meltdown), входят:

  • 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-109-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 использует функции повышения производительности современных процессоров. Комбинация функций процессора, таких как спекулятивное выполнение, проверка привилегий, выполнение не по порядку и кэширование процессора, обеспечивает доступ для чтения к областям памяти, которые должны быть за пределами. В результате непривилегированные программы могут быть принудительно открыты для раскрытия конфиденциальных данных из их памяти или доступа к привилегированной памяти из ядра или других приложений.

Как работает Meltdown?

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

  • Запрос сделан для недопустимого места в памяти.

  • Второй запрос делается для кондиционного считывания действительной ячейки памяти if первый запрос содержал определенное значение.

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

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

Расплавление представляет собой особую уязвимость, которую можно исправить.

Как работает Spectre?

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

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

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

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

Заключение

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

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