Как отключить защиту от Spectre: в ядро Linux добавили новый параметр
В ядре Linux появился флаг, который отключает защиту от уязвимости Spectre v4 во всех дочерних процессах, запущенных на сервере. Подробнее о новом параметре — под катом.
/ Flickr / Rie H / CC BY / Фото изменено
Зачем вообще понадобилось отключать защиту
О группе уязвимостей процессоров Spectre впервые стало известно в начале 2018 года, и на протяжении следующих месяцев это семейство пополнялось новыми «дырами» в безопасности. Уязвимости связаны с работой систем, повышающих производительность процессоров — спекулятивным выполнением записи и чтения и предсказанием переходов — и позволяют злоумышленникам обходить механизмы изоляции памяти в процессорах от Intel и AMD.
Для закрытия уязвимостей разработчики операционных систем выпускают патчи, однако их установка часто приводит к снижению скорости работы серверов. Например, на Linux-машинах некоторые патчи от Spectre снижают производительность на 30–50%.
Проблемой оказались недовольны системные администраторы, особенно в крупных дата-центрах. Они начали просить разработчиков ядра Linux дать возможность выборочно отключать защиту от Spectre. Некоторые из обнаруженных уязвимостей носят лишь теоретический характер, а в ряде систем они в принципе не могут нанести вреда. К примеру, рендер-фермы и офлайн-суперкомпьютеры отключены от интернета, поэтому им не страшны инъекции вредоносного кода.
Команда Linux пошла навстречу пользователям и представила несколько функций, отключающих защиту от уязвимостей Spectre v1, v2 (подробнее о них мы расскажем дальше) и v4. Последнюю из них представили в начале февраля для всех актуальных версий ядра — это новый флаг PR_SPEC_DISABLE_NOEXEC.
Что и зачем отключает функция
Уязвимость Spectre v4 называется Speculative Store Bypass. Она позволяет вредоносным программам получить доступ к результатам спекулятивного вычисления, которые процессор ранее отбросил как ненужные.
Такая ситуация происходит, когда CPU по очереди выполняет операции чтения и записи с использованием косвенной адресации. Чтение происходит чаще записи, и процессор может использовать данные из памяти для определения адреса чтения, не дожидаясь вычисления смещения косвенной адресации. Если после вычисления смещения обнаруживается пересечение областей памяти для записи и чтения (то есть чтение было выполнено не из той области), то вторая операция выполняется заново, а спекулятивный результат отбрасывается.
В теории получается, что если злоумышленнику известны адреса и структура ячеек памяти, он может извлечь из них данные, например ключи шифрования.
Патч для Spectre v4 появился в ядре Linux спустя несколько дней после публикации информации об уязвимости — он по умолчанию отключал функцию memory disambiguation, которая разрешала внеочередное выполнение команд. Но это замедлило операции ввода-вывода процессора на 10–40%.
/ Flickr / Rie H / CC BY-SA
А в начале июня 2018 года в релизе ядра 4.17 появилась возможность отключить эту защиту. Оставалась одна проблема: параметр не передавался от родительского процесса к дочерним. Для них защиту приходилось отключать вручную, что доставляло системным администраторам неудобства. Но в начале февраля разработчики ядра реализовали флаг PR_SPEC_DISABLE_NOEXEC. Он дополняет предыдущую функцию и копирует режим работы патча от Spectre v4 из родительского процесса в дочерние. PR_SPEC_DISABLE_NOEXEC является частью prctl, и включить её можно при запуске любого нового процесса.
Что говорят эксперты
В рассылке для разработчиков ядра Linux о введении нового флага написал Уэйман Лонг (Waiman Long) из Red Hat. По его словам, защита от Spectre v4 значительно влияет на производительность приложений, которые выполняют много операций записи, например баз данных. PR_SPEC_DISABLE_NOEXEC поможет автоматизировать проверку на отключение патча и ускорить серверы с большим числом одновременно запущенных процессов.
При этом участники ИТ-сообщества отмечают, что в определенных ситуациях неосторожное обращение с новым флагом может привести к неприятным последствиям.
«Стоит обратить внимание, что в некоторых средах отключать защиту от Spectre v4 небезопасно, — отмечает начальник отдела развития IaaS-провайдера 1cloud.ru Сергей Белкин. — К ним относятся, например, веб-сервисы, использующие Java и JavaScript. Раскрытие управляемым кодом содержимого управляющего процесса может быть фатальным для безопасности приложения».
О других Spectre-патчах в ядре Linux
Помимо флага PR_SPEC_DISABLE_NOEXEC в ядре Linux есть и другие параметры, отключающие защиты от Spectre.
Первый из них — nospectre_v2. Функция отключает защиту от Spectre v2, которая даёт злоумышленникам возможность использовать блок предсказания переходов для того, чтобы «заставить» процессор спекулятивно выполнить операцию в конкретном модуле памяти. Для защиты патч отключает функцию косвенного прогнозирования переходов и запрещает перенос полученной информации между потоками в одном ядре CPU.
Отключение защиты приводит к повышению производительности процессоров на 30% — именно настолько она упала после установки патча от Spectre v2. Новую функцию поддержал даже создатель Linux Линус Торвальдс (Linus Torvalds). По его словам, уязвимость угрожает только процессорам с функцией SMT, в этом конкретном случае будет выгоднее отключить её.
Второй параметр — nospectre_v1 — отключает защиту от первого варианта Spectre. Хакеры с помощью вредоносов способны заставить процессор неверно предсказать результат условного перехода и отбросить результаты спекулятивных вычислений в нужную хакерам область памяти. Хотя патч от v1 незначительно влияет на производительность (по некоторым данным, снижением скорости процессора можно вовсе пренебречь), разработчики попросили добавить в ядро возможность отключить и эту защиту. Это позволило упростить структуру изолированных от внешнего доступа сетей.
Сообщество разработчиков ядра Linux остаётся верным идее свободного выбора, которую в самом начале заложил Линус Торвальдс: пользователи сами ответственны за баланс безопасности и производительности Linux-систем. Поэтому стоит ожидать, что и при обнаружении новых похожих на Spectre уязвимостей в ядре появится как патч, так и возможность отключить его.
Источник
Arch Linux отключить патчи на Meltdown & Co.
Все это время жил без патчей, обновлял систему без обновления ядра.
Появился новый ЖД, планирую переустановку. Но патчи влияющие на скорость работы мне по прежнему нужно держать отключенными.
Статья Kernel на Arch Wiki не помогла. Гугл выявляет только следы страха, секьюрити фричество и успокаивающих друг друга голубков.
Единственное что нашел: set kernel boot options:
spectre_v1 тоже можно выключить? Это все что нужно будет прописать в boot options? И где вообще эти kernel boot options?
Или проще поставить старое ядро? У меня сейчас стоит: 14.4.8-1.
Вот тебе весь список параметров для отключения всех заплаток:
И где вообще эти kernel boot options?
Это просто в конце прописать?
Нет. Это нужно прописывать в GRUB_CMDLINE_LINUX_DEFAULT и после этого обновлять конфигураци GRUB:
Понял. Там еще quiet есть:
как я понимаю, вот так?
Да, система работает, если ты это имеешь ввиду.
Если что, проверить с какими параметрами запущено ядро можно так:
Хорошо, понял, буду знать.
И сколько попугаев это экономит на какой-нибудь компиляции ядра?
На глаз +- одинаково. Не знаю, по поводу чего тут ноют. Собирал бледнуюлуну и с заплатками, и без. Время +- 45 мин.
Кибернетизировался и периодически жалуется в lkml на проприетарные импланты.
Не сравнивал. В любом случае, мне эти заплатки на десктопе не нужны, поэтому отключаю.
Нет, он имеет в виду, что ядро Linux версии «14.4.8-1» при сохранении текущей схемы версионирования выйдет примерно через 33 года. Вот он и спрашивает — как там, в будущем? Линус ещё не умер?
Спасибо, теперь дошло : )
плевать на безопасность — скорость важнее! поддался соблазну и тоже отключил, как теперь поймать улучшение производительности? на глаз не заметно, в 7z b никакой разницы, где можно увидеть реальный прирост? а то пугали тормозами — хотелось бы пронаблюдать это! может отключать вовсе и необязательно и заплатки ничего не тормозят?
Разница заметна только на суперкомпьютерах.
да не уже ли? пугали 30% потерей производительности!
и так и этак — нифига быстрее не стало, даже задачи типа
Если не заметно разницы, то зачем шевелится, тем более понижая безопасность в теории?
Не слушай его, делай так:
он в Амстердаме, творческий отпуск. С девочками расслабляется
Тут кто-то говорил, что патчи полностью отключить не льзя.
Попробуй на древнем допатчевом ведре.
Я отключил эти заплатки сразу после того как они появились. Разница вполне может быть, просто я не сравнивал. Судя по бенчмаркам на phoronix, разница есть, особенно с KPTI.
Ну ты побенчь какую-нибудь бд (самое простое и наглядное) с включенными заплатками и с выключенными, вот там разницу и увидишь.
Ну так «у меня десктоп» и сервер бд не очень сочитаются. Также именно десктоп обычно исполняет чужой код (браузер как минимум), а сервер (если твой личный) только доверенный. Так что заплатки и нужнее, и незаметнее как раз на десктопе, указанном в ОП.
при сохранении текущей схемы версионирования
Ты чё куришь? Никакой схемы нет.
Ну ок, если тебе принципиально именно на десктопных задачах тнстить, то можно и десктопные найти, но я самое простое и наглядное предложил.
Зачем? С ними же быстрее работает, да и безопасней как ни крути (тем же веб-браузерам).
Вы все хотите производительность в два раза, совет от создаеля OS 4.0. Выключить журналирование, оно было включено что бы отловить ошибки, щас ошибки отловлены, система пересобрана и нету нужды. Сам я как создатель нуждаюсь в ПК которого нет. Будет вываливаться креш в басибокс стандартная команда fsck -y dev/sda(ваш намек)
Без журнала проседают иопсы и производительность, маня. Причём можешь сразу на минус 3 порядка рассчитывать.
Сам я как создатель нуждаюсь в ПК которого нет.
ПРОХВЕССИОНАЛЫ В ТРЕДЕ.
А ничё, что на ноутах нагрузка на систему охлаждения без патчей увеличивается в простое на 15-20 градусов? НЕТ? Тогда пиши ещё!
Фороникс тестировал, эти защиты неплохо оптимизировали, просадка действительно небольшая. Слава Линусу.
Опять ты? noblock_validity пробовал?
где ты ПРОХВЕССИОНАЛОВ с ноутбуками видел? все ПРОХВЕССИОНАЛЫ блоками пользуются! но и в блоках есть температурные датчики — сейчас проверю твою теорию и обязательно отпишу.
познавательный файлик, спасибо
где можно увидеть реальный прирост?
На многоядерных процессорах с включенным SMT.
система видит в железе 9 температурных датчиков — не будем вдаваться в подробности что конкретно каждый из них контролирует, факт в том что при отключении патчей температуры не меняются ни в простое ни в нагрузках
е будем вдаваться в подробности что конкретно каждый из них контролирует, факт в том что при отключении патчей температуры не меняются ни в простое ни в нагрузках
Давай без «давай». У мен даже тема создана по данному вопросу. Чтобы было для «образованных» понятно: система охлаждения на Thinkpad x260 включалась при 50+ градусов.
Без патчей я мог делать всё, что не относится к нагрузке на intel HD.
После патчей любое телодвижение вызывало нагрузку на проц, что включало систему охлаждения (даже видео в youtube 360р).
Дело прошлое, дело решенное. НО ты пиши, пиши.
так у тебя вся доказуха по одному устройству?
система охлаждения на Thinkpad x260 включалась при 50+ градусов
вообще то на человеческом железе это в биосе настроить можно, но для этого биос иметь надо — я так понимаю в твоем устройстве он жутко кастрирован и сплошное уефи
а чего тут писать — говно твой тинкпад, впарили тебе барыги лажу, +50 у меня так третьи пни грелись
Я могу запинать и 286ым. Тоже мне, папка. Тебе пишут, что нагружает нехило, а без них — всё норм. Ты мне ещё приведи спектрум.
Ну да ладно, ты прав, я нет. Хули прохвессионалу что-то писать.
Свинорыл печка твоя греется и патчи тут не при чем. Не вводит людей в заблуждение, олень.
Источник