Статус ядра Linux, Meltdown и Spectre

Все знают, что что-то «крупное» ожидается от компьютерной безопасности. И когда даже Daily Mail публикует статьи о уязвимостях Meltdown и Spectre, вы знаете, ситуация настораживает…

В любом случае я не собираюсь вдаваться в подробности публикуемых Daily Mail проблем, но укажу на замечательно написанный материал Project Zero, посвященный обсуждаемым вопросам. Им нужно выдать премию Pwnie-2018 прямо сейчас.

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

Вот еще хорошая сводка со множеством постов, которые содержат анонсы от разных поставщиков.

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

Что можно сделать прямо сейчас

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

Однако существует множество систем, которые по разным причинам не используют «обычные» дистрибутивы Linux (ходят слухи, что количество нетрадиционных дистрибутивов намного больше, чем «традиционных» корпоративных). Эти системы полагаются на обновления ядра LTS, на стабильные обновления ядра или на внутренние ядра franken. Для этих людей я пишу статус того, что происходит в отношении всего этого беспорядка в апстриме, который вы можете использовать.

Meltdown — x86

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

Тем не менее в настоящее время дерево Linus находится на уровне 4.15-rc6 + несколько патчей. 4.15-rc7 с исправлениями для решения некоторых проблем должен выйти завтра, но большинство людей не используют ядро -rc в «нормальной» среде.

Разработчики ядра x86 справились с разработкой кода изоляции таблицы страниц так, что backport к последнему стабильному ядру 4.14 для меня был почти тривиальным. Это означает, что вы должны запускать последнюю версию 4.14 (на данный момент это 4.14.12). Через несколько дней выйдет 4.14.13 с дополнительными исправлениями, которые необходимы для систем, у которых есть проблемы с загрузкой с 4.14.12.

Я хочу поблагодарить Andy Lutomirski, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, Peter Zijlstra, Josh Poimboeuf, Juergen Gross и Linus Torvalds. Они разработали и объединили исправления для более легкого использования и создания стабильных релизов. Даже думать не хочу, что могло бы случиться без их усилий.

В работе с более зрелыми долгосрочными стабильными ядрами (LTS) я полагался на опыт Hugh Dickins, Dave Hansen, Jiri Kosina и Borislav Petkov, чтобы обеспечить ту же функциональность для стабильных деревьев ядра 4,4 и 4,9. Guenter Roeck, Kees Cook, Jamie Iles и многие другие помогли мне в отслеживании неприятных ошибок и недостающих патчей. Также я хочу отметить David Woodhouse, Eduardo Valentin, Laura Abbott и Rik van Riel — их помощь была необходима в поддержке и интеграции.

Ядра LTS также имеют параметр CONFIG_PAGE_TABLE_ISOLATION, который должен быть включен для получения полной защиты.

Backport сильно отличается от версии mainline, поэтому в версиях 4.14 и 4.15 имеются ошибки. Мы знаем о некоторых проблемах VDSO, над которыми работают разработчики ядра, а виртуальные машины сообщают о немногочисленных ошибках. Но вы не должны отказываться от обновления. Если возникли проблемы с этими выпусками, пожалуйста, сообщите об этом в списке рассылки стабильного ядра.

Если вы полагаетесь на любое другое дерево ядра, кроме 4.4, 4.9 или 4.14, и у вас нет поддерживаемого дистрибутива, вам не повезло. Отсутствие исправлений для решения проблемы Meltdown незначительно по сравнению с сотнями известных эксплойтов и ошибок, которые в настоящее время содержит ваша версия ядра. Именно об этом нужно беспокоиться сейчас больше всего, поэтому сначала обновите системы.

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

Meltdown — ARM64

Сейчас ARM64-набор патчей для Meltdown не слилися с деревом Linus, но готов к слиянию в 4.16-rc1, как только 4.15 будет выпущен. Поскольку эти патчи еще не находятся в выпущенном ядре от Linus, я не могу их перенаправить в стабильные версии ядра (у нас есть правила).

Из-за отсутствия патчей в выпущенном ядре, если вы полагаетесь на ARM64 для своих систем (т. е. Android), я советую дерево Android Common. Все исправления ARM64 были объединены в ветвях 3.18, 4.4 и 4.9.

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

4.4 и 4.9 LTS-ядра, вероятно, не будут объединены из-за большого количества исправлений, которых требуют патчи. Все исправления давно были протестированы в ядрах Android, поэтому лучше полагаться на ветви ядра вместо выпуска LTS для систем ARM.

Кроме того, все обновления ядра LTS я объединяю в ветви на следующий же день после релиза. Нужно следить за ветвями, чтобы ваши ARM-системы были актуальными и безопасными.

Spectre

Становится «интереснее»…

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

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

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

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

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

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

Другие архитектуры

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

Заключение

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

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