- PVSM.RU - https://www.pvsm.ru -

Как отключить защиту от Spectre: в ядро Linux добавили новый параметр

В ядре Linux появился [1] флаг, который отключает защиту от уязвимости Spectre v4 во всех дочерних процессах, запущенных на сервере. Подробнее о новом параметре — под катом.

Как отключить защиту от Spectre: в ядро Linux добавили новый параметр - 1 [2]
/ Flickr / Rie H [3] / CC BY [4] / Фото изменено

Зачем вообще понадобилось отключать защиту

О группе уязвимостей процессоров Spectre впервые стало известно в начале 2018 года, и на протяжении следующих месяцев это семейство пополнялось новыми «дырами» в безопасности. Уязвимости связаны с работой систем, повышающих производительность процессоров — спекулятивным выполнением [5] записи и чтения и предсказанием переходов [6] — и позволяют [7] злоумышленникам обходить механизмы изоляции памяти в процессорах от Intel и AMD.

Для закрытия уязвимостей разработчики операционных систем выпускают патчи, однако их установка часто приводит к снижению скорости работы серверов. Например, на Linux-машинах некоторые патчи от Spectre снижают [8] производительность на 30–50%.

Проблемой оказались недовольны системные администраторы, особенно в крупных дата-центрах. Они начали просить разработчиков ядра Linux дать возможность выборочно отключать защиту от Spectre. Некоторые из обнаруженных уязвимостей носят лишь теоретический характер, а в ряде систем они в принципе не могут нанести вреда. К примеру, рендер-фермы и офлайн-суперкомпьютеры отключены от интернета, поэтому им не страшны [1] инъекции вредоносного кода.

Команда Linux пошла навстречу пользователям и представила несколько функций, отключающих защиту от уязвимостей Spectre v1, v2 (подробнее о них мы расскажем дальше) и v4. Последнюю из них представили в начале февраля для всех актуальных версий ядра — это новый флаг PR_SPEC_DISABLE_NOEXEC.

Что и зачем отключает функция

Уязвимость Spectre v4 называется Speculative Store Bypass. Она позволяет вредоносным программам получить доступ к результатам спекулятивного вычисления, которые процессор ранее отбросил как ненужные.

Такая ситуация происходит, когда CPU по очереди выполняет операции чтения и записи с использованием косвенной адресации. Чтение происходит чаще записи, и процессор может использовать данные из памяти для определения адреса чтения, не дожидаясь вычисления смещения косвенной адресации. Если после вычисления смещения обнаруживается пересечение областей памяти для записи и чтения (то есть чтение было выполнено не из той области), то вторая операция выполняется заново, а спекулятивный результат отбрасывается.

В теории получается, что если злоумышленнику известны адреса и структура ячеек памяти, он может извлечь из них данные, например ключи шифрования.

Патч для Spectre v4 появился в ядре Linux спустя несколько дней после публикации информации об уязвимости — он по умолчанию отключал [9] функцию memory disambiguation [10], которая разрешала внеочередное выполнение команд. Но это замедлило [11] операции ввода-вывода процессора на 10–40%.

Как отключить защиту от Spectre: в ядро Linux добавили новый параметр - 2
/ Flickr / Rie H [12] / CC BY-SA [13]

А в начале июня 2018 года в релизе ядра 4.17 появилась возможность отключить эту защиту. Оставалась одна проблема: параметр не передавался от родительского процесса к дочерним. Для них защиту приходилось отключать вручную, что доставляло системным администраторам неудобства. Но в начале февраля разработчики ядра реализовали флаг PR_SPEC_DISABLE_NOEXEC. Он дополняет предыдущую функцию и копирует режим работы патча от Spectre v4 из родительского процесса в дочерние. PR_SPEC_DISABLE_NOEXEC является частью prctl, и включить её можно при запуске любого нового процесса.

Что говорят эксперты

В рассылке для разработчиков ядра Linux о введении нового флага написал [14] Уэйман Лонг (Waiman Long) из Red Hat. По его словам, защита от Spectre v4 значительно влияет на производительность приложений, которые выполняют много операций записи, например баз данных. PR_SPEC_DISABLE_NOEXEC поможет автоматизировать проверку на отключение патча и ускорить серверы с большим числом одновременно запущенных процессов.

При этом участники ИТ-сообщества отмечают, что в определенных ситуациях неосторожное обращение с новым флагом может привести [15] к неприятным последствиям.

«Стоит обратить внимание, что в некоторых средах отключать защиту от Spectre v4 небезопасно, — отмечает начальник отдела развития IaaS-провайдера 1cloud.ru [16] Сергей Белкин. — К ним относятся, например, веб-сервисы, использующие Java и JavaScript. Раскрытие управляемым кодом содержимого управляющего процесса может быть фатальным для безопасности приложения».

О других Spectre-патчах в ядре Linux

Помимо флага PR_SPEC_DISABLE_NOEXEC в ядре Linux есть и другие параметры, отключающие защиты от Spectre.

Первый из них — nospectre_v2. Функция отключает защиту от Spectre v2, которая даёт злоумышленникам возможность использовать [17] блок предсказания переходов [6] для того, чтобы «заставить» процессор спекулятивно выполнить операцию в конкретном модуле памяти. Для защиты патч отключает [18] функцию косвенного прогнозирования переходов и запрещает перенос полученной информации между потоками в одном ядре CPU.

Отключение защиты приводит к повышению производительности процессоров на 30% — именно настолько она упала [19] после установки патча от Spectre v2. Новую функцию поддержал даже создатель Linux Линус Торвальдс (Linus Torvalds). По его словам [20], уязвимость угрожает только процессорам с функцией SMT [21], в этом конкретном случае будет выгоднее отключить её.

Второй параметр — nospectre_v1 — отключает защиту от первого варианта Spectre. Хакеры с помощью вредоносов способны заставить процессор неверно предсказать результат условного перехода и отбросить результаты спекулятивных вычислений в нужную хакерам область памяти. Хотя патч от v1 незначительно влияет на производительность (по некоторым данным [22], снижением скорости процессора можно вовсе пренебречь), разработчики попросили [23] добавить в ядро возможность отключить и эту защиту. Это позволило упростить структуру изолированных от внешнего доступа сетей.

Сообщество разработчиков ядра Linux остаётся верным идее свободного выбора, которую в самом начале заложил [24] Линус Торвальдс: пользователи сами ответственны за баланс безопасности и производительности Linux-систем. Поэтому стоит ожидать, что и при обнаружении новых похожих на Spectre уязвимостей в ядре появится как патч, так и возможность отключить его.

Посты из нашего корпоративного блога:

Автор: 1cloud

Источник [28]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/310206

Ссылки в тексте:

[1] появился: https://www.zdnet.com/article/linux-kernel-gets-another-option-to-disable-spectre-mitigations/

[2] Image: https://habr.com/ru/company/1cloud/blog/442140/

[3] Rie H: https://www.flickr.com/photos/rieorie/5116642491/

[4] CC BY: https://creativecommons.org/licenses/by/2.0/

[5] спекулятивным выполнением: https://en.wikipedia.org/wiki/Speculative_execution

[6] предсказанием переходов: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%B2

[7] позволяют: https://1cloud.ru/blog/uyazvimost-meltdown-spectre?utm_source=habrahabr&utm_medium=spectre&utm_campaign=linuxbug&utm_content=blog

[8] снижают: https://searchsecurity.techtarget.com/news/252453574/Spectre-v2-mitigation-causes-significant-slowdown-on-Linux-420

[9] отключал: https://www.suse.com/support/kb/doc/?id=7022937

[10] memory disambiguation: https://en.wikipedia.org/wiki/Memory_disambiguation

[11] замедлило: https://www.phoronix.com/scan.php?page=article&item=spectre4-amd-initial&num=2

[12] Rie H: https://www.flickr.com/photos/jeanmartin/4883127242/

[13] CC BY-SA: https://creativecommons.org/licenses/by-sa/2.0/

[14] написал: https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1914903.html

[15] может привести: https://www.redhat.com/en/blog/speculative-store-bypass-explained-what-it-how-it-works

[16] IaaS-провайдера 1cloud.ru: https://1cloud.ru/?utm_source=habrahabr&utm_medium=spectre&utm_campaign=linuxbug&utm_content=site

[17] использовать: https://access.redhat.com/security/vulnerabilities/speculativeexecution

[18] отключает: https://software.intel.com/security-software-guidance/insights/deep-dive-single-thread-indirect-branch-predictors

[19] упала: https://www.extremetech.com/computing/280857-spectre-patches-whack-intel-performance-hard-with-linux-4-20-kernel

[20] словам: https://www.zdnet.com/article/linus-torvalds-after-big-linux-performance-hit-spectre-v2-patch-needs-curbs/

[21] SMT: https://ru.wikipedia.org/wiki/%D0%9E%D0%B4%D0%BD%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C

[22] данным: https://www.cyberciti.biz/faq/check-linux-server-for-spectre-meltdown-vulnerability/

[23] попросили: http://linuxppc.10917.n7.nabble.com/Re-RFC-PATCH-powerpc-fsl-Add-barrier-nospec-implementation-for-NXP-PowerPC-Book-E-td137978.html

[24] заложил: https://www.techrepublic.com/article/linux-creator-linus-torvalds-doesnt-really-care-about-open-source/

[25] Meltdown и Spectre: новогодняя процессорная уязвимость: https://1cloud.ru/blog/uyazvimost-meltdown-spectre%20https://1cloud.ru/?utm_source=habrahabr&utm_medium=spectre&utm_campaign=linuxbug&utm_content=blog

[26] Резервное копирование файлов: как подстраховаться от потери данных: https://1cloud.ru/blog/rezervnoe-kopirovanie-failov?utm_source=habrahabr&utm_medium=spectre&utm_campaign=linuxbug&utm_content=blog

[27] Эволюция архитектуры облака 1cloud: https://1cloud.ru/blog/our-system-architecture-evolution?utm_source=habrahabr&utm_medium=spectre&utm_campaign=linuxbug&utm_content=blog

[28] Источник: https://habr.com/ru/post/442140/?utm_campaign=442140