Fix spectre meltdown cpu что это
Как в реальности патч от уязвимостей Meltdown и Spectre влияет на производительность
С момента обнародовании информации об уязвимостях Meltdown страсти успели уже поутихнуть. Microsoft успела выпустить патч, огрести с ним проблем, отозвать его и выпустить снова.
Так получилось, что у меня под рукой оказались две близких по характеристикам системы:
i5 7600K + Z270 и i7 3770K + Z77. На обеих системах установлена Windows 10 Pro с последним набором обновлений. Операционная система установлена на SSD, для тестов использовался отдельный NVME SSD, один и тот же в обоих случаях. Графические тесты проводились по принципу «гулять так гулять», на GTX 1080Ti, но, вместе с тем, в реалистичных для такой видеокарты сценариях. То есть никакого понижения настроек графики для выявления чистой незамутнённой процессорозависимости не делалось. На этом железе было решено проверить правдивость заявлений Microsoft о влиянии патчей на производительность современного и старого, но ещё не особо и устаревшего, железа.
Исполнительный вице-президент Microsoft по Windows Терри Маерсон (Terry Myerson) в официальном блоге написал:
Резюмируя текущие результаты исследований, можно сказать следующее:
На компьютерах под управлением Windows 10 на современных процессорах (относящихся к поколениям 2016 года или более новым, то есть Skylake, Kabylake и более новые), тесты продемонстрируют замедление от силы на единицы процентов, которое подавляющее большинство пользователей не сможет заметить, так как в абсолютных величинах разница будет измеряться миллисекундами.
Компьютеры с Windows 10 на относительно старых процессорах (относящихся к поколениям до 2015 года включительно, Haswell и более старые) в некоторых тестах могут показать более значительное падение производительности, возможно некоторые пользователи смогут его заметить.
Производительность систем под управлением Windows Server на любых процессорах заметно пострадает, особенно на приложениях интенсивно использующих ввод-вывод, при активации изоляции недоверенного кода.
Для тестирования различных аспектов производительности систем использовались:
Ожидаемый результат: в соответствии с официальными заявлениями Microsoft, деградация производительности на старом CPU должна быть в разы больше. Исходя из анализа публикаций и заявлений представителей Microsoft, больше всего должен пострадать ввод-вывод.
Поехали!
(небольшая ремарка перед скриншотами с результатами)
Полностью равноценные конфигурации с первого раза протестировать не удалось из-за отсутствия M.2 слота на старой материнской памяти и отсутствием в наличии PCI-E->M.2 рэйзера. Он был заказан на одной всем известной китайской торговой площадке, а я тем временем прогнал тесты на NVME SSD (A-Data XPG SX8000 512GB) на Kaby Lake и на SATA (Silicon Power S55 240GB (Phison) на Ivy Bridge. Результаты получились напрямую несопоставимые, но любопытные.
Хм… результаты получились даже более чем интересные. Производительность самих CPU в сложных расчётах менялась в пределах погрешности. Пострадал больше всего, как и опасались в Microsoft, именно ввод-вывод. А дальше начинаются расхождения с тем, что ожидалось.
Падение производительности ввода-вывода на новом процессоре (Kaby Lake, i5 7600K) после активации патча в худшем случае, в сценарии CrystalMark Write 4K, составило более 70%. Семьдесят два процента! Если так себя введёт IO на новом процессоре, то что будет с откровенно старым?! А на старом i7 3770K 2011 года выпуска падение производительности составило в худшем случае около 6%. Да и абсолютные цифры для таких разных накопителей при активированном патче разнятся не сказать чтобы в разы. Неужели Microsoft и Intel кривят душой? Или мы чего-то не заметили?
Вот результаты прогона тестов:
Сводная таблица результатов:
Плохие новости
Быстрые накопители даже на современных CPU после установки патча теряют до 70% производительности в ряде сценариев.
Отключение фикса Meltdown и Spectre в Windows
На сайте майкрософт размещена информация о том, как можно проверить подвержена ли ОС атакам meltdown. Там же имеется информация, как можно отключить последнее исправление.
Учитывая, что в интернете не утихают слухи о катастрофическом падении производительности и даже появляются сравнительные тесты «до» и «после» информация по отключению данной заплатки может оказаться полезной.
Сразу к делу: отключить можно внесением или корректировкой двух параметров в реестре.
С сайта майкрософт:
Включение или отключение фикса отдельно для CVE-2017-5715 и CVE-2017-5754 (Spectre и Meltdown)
Как включить фикс CVE-2017-5715 и CVE-2017-5754
Как отключить фикс CVE-2017-5715 и CVE-2017-5754
Включение или отключение фикса отдельно для CVE 2017-5715 (Spectre)
Как включить фикс CVE-2017-5715
Как отключить фикс CVE-2017-5715
Примечание * Установка значения 3 для FeatureSettingsOverrideMask является одинаковым для обоих случаев.
Примечание.* Отключение и включение посредством изменения параметров реестра потребует перезагрузки компьютера и права администратора.
Примечание.* Изменять MinVmVersionForCpuBasedMitigations нет необходимости.
Проверка наличия уязвимости в системе при помощи powershell модуля SpeculationControl
Предполагается, что ExecutionPolicy в powershell настроена на нужный уровень (Bypass или Unrestricted).
Установка модуля PowerShell:
На оба вопроса отвечаем «Y».
Результат в случае полной «защищенности» ПК:
После применения изменения настроек и перезагрузки:
А вот вопросы нужно это делать или нет, есть ли смысл или нет и остаются открытыми.
Спектрология: аппаратные уязвимости процессоров в 2019 году
2018-й год для процессоров прошел под знаком аппаратных уязвимостей Spectre и Meltdown. Каким в этом плане обещает быть 2019-й?
На 35-м Chaos Communications Congress, спустя почти год после первой публикации об аппаратных уязвимостях процессоров, получивших названия Meltdown и Spectre, группа исследователей из технологического университета Граца (Австрия) рассказала о том, как сейчас обстоят дела с аппаратными уязвимостями в процессорах. Спойлер: теперь их известно намного, намного больше.
Кратко объясняем суть Meltdown и Spectre
Для начала немного напомним, что это за звери такие — Meltdown и Spectre —и чем они различаются.
Уязвимость Meltdown возникла из-за того, что современные процессоры умеют обрабатывать инструкции вне очереди. Это очень удобно и действительно ускоряет обработку кода, вот только в некоторых случаях процессор успевает обработать тот код, который на самом деле выдает ошибку и который не надо было выполнять. То есть сначала процессор исполняет код, а потом уже выясняется, что эту операцию выполнить невозможно — и такие ситуации случаются именно из-за выполнения инструкций вне очереди.
Конечно, потом результаты этой операции никуда не идут и нигде не используются, но они оставляют следы на микроархитектурном уровне — в кеш-памяти процессора. И их можно оттуда извлечь. Например, это приводит к тому, что из кеша можно достать те данные, к которым не должно быть доступа: скажем, извлечь оставшийся там пароль. Это выглядит так: программа запрашивает доступ к этим данным в памяти — на это она получит вполне резонный ответ от системы, что доступ к ним ей не полагается. Но при этом из-за выполнения операций вне очереди пароль все же будет загружен в кеш, откуда его в результате вполне можно выудить. В общем, Meltdown может возникнуть при попытке выполнить недозволенное действие.
Уязвимость Spectre похожа на Meltdown, но имеет другую причину, впрочем, тоже относящуюся к способам ускорения вычислений в процессоре — она возникла из-за наличия в современных процессорах предсказания ветвлений. По сути, процессор умеет предсказывать с определенной точностью, что после действия A обычно идет действие B, и успевает сделать действие B еще до того, как будут ясны результаты действия A. Если и правда надо было делать B, то все хорошо, ну а если результаты A оказываются такими, что после A нужно было выполнять не B, а C, то процессор забрасывает ту ветвь, где он сделал операцию B, и переходит к другой ветви, где надо делать C.
Поскольку блок предсказания ветвления обучаем, то в большинстве случаев он запоминает закономерности в последовательностях действий — и оказывается, что предсказание ветвлений действительно ускоряет работу (если несколько раз после А надо было делать B, то процессор логично предположит, что и в этот раз после А надо делать именно B). Однако неправильные предсказания тоже случаются (иногда все же надо делать не B, а C, хотя блок предсказания помнит, что после А чаще идет B).
Если долго тренировать систему, показывая ей, что определенная ветвь является правильной и всегда выполняется, а потом поменять параметр так, чтобы она оказалась неверной, то процессор все равно ее сначала выполнит, а затем отменит, поскольку выяснит, что выполняться должна была другая ветвь. Но, как и в случае с Meltdown, результат действия останется, например, в кеш-памяти, и его опять-таки можно будет оттуда извлечь.
Последствия у этой проблемы примерно те же: возможность получить несанкционированный доступ к данным. Spectre может возникнуть только при неправильном предсказании ветвлений — а оно, в свою очередь, возникает просто по теории вероятности.
Год спустя
После обнаружения первых Meltdown и Spectre исследователи стали намного активнее копать в этом направлении и вскоре нашли похожие проблемы, но чуть отличающиеся в деталях. Оказалось, что разработчики процессоров используют и другие оптимизации, которые приводят к появлению Meltdown-подобных или Spectre-подобных уязвимостей. Исследователи из университета Граца упоминают 14 вариаций Meltdown-подобных уязвимостей и 13 Spectre-подобных уязвимостей, итого целых 27 штук разных аппаратных уязвимостей в процессорах — против всего двух из тех же семейств на начало 2018 года.
Классификация найденных за год вариаций Meltdown и Spectre
Более того, хотя раньше, например, AMD заявляла, что ее процессоры не подвержены уязвимостям класса Meltdown, исследователи смогли обнаружить вариант Meltdown (его назвали Meltdown-BR), который очень даже работал на процессорах AMD. То есть на текущий момент процессоры трех крупнейших мировых разработчиков — AMD, ARM и Intel — подвержены как Meltdown, так и Spectre. Ну или как минимум каким-то из вариаций обоих семейств уязвимостей.
По счастью, немалая часть из всех многочисленных найденных вариаций вообще не работает ни на ARM, ни AMD, ни на Intel — по крайней мере исследователям не удалось заставить их работать. Впрочем, большая часть все же работает хоть где-то.
Еще в январе 2018-го компании начали выпускать патчи для микрокода процессоров, операционных систем и отдельных программ, которые в теории должны были закрыть эти уязвимости. Но к сожалению, Spectre и Meltdown — это аппаратные уязвимости, они существуют на уровне компьютерного «железа», и программными заплатками их полностью просто не исправишь.
Например, одна из «заплаток» была реализована в ядре операционной системы Linux, но, поскольку она очень сильно замедляла работу компьютера, через некоторое время ее удалили из кода системы — с обещаниями, что появится более эффективный патч.
Ну и в целом проблема со Spectre состоит в том, что уязвимыми оказываются разные микроархитектурные компоненты, и для каждого нужно изобретать свой патч. А каждый такой патч негативно влияет на производительность, поскольку требует либо отключения каких-то функций, либо выполнения дополнительных действий.
Собственно, во многих случаях патчи влияют на производительность настолько катастрофическим образом, что система с патчами работает медленнее, чем система, в которой вообще отключены уязвимые компоненты процессора.
Радикальный способ решения проблемы — удаление уязвимой части процессора с помощью высверливания в отмеченном месте (на самом деле это шутка)
Будущее Spectre и Meltdown
В октябре 2018-го Intel объявила о том, что в новых процессорах (речь про поколение, которое появится в 2019 году) на аппаратном уровне будет реализована защита от Spectre и Meltdown. Правда, речь шла всего про две «базовые» версии уязвимостей, а их, как мы выяснили выше, куда больше. AMD также собирается залатать одну из вариаций Spectre в новом поколении процессоров с архитектурой Zen 2, которое должно выйти в 2019-м. ARM тоже обещает исправления на аппаратном уровне, заявляя, что «все грядущие процессоры будут защищены от Spectre-подобных атак».
Это все, конечно, хорошо, вот только речь идет именно о новых устройствах. Тем же, кто приобрел компьютер, смартфон или какое-то другое устройство на базе процессоров Intel, AMD или ARM в 2018 году или раньше, остается устанавливать патчи для всего на свете, которые ощутимо снижают производительность. Вероятно, делать это будут далеко не все.
Производители слишком долго игнорировали уязвимости на аппаратном уровне, оптимизируя процессоры исключительно для повышения производительности, но все такие оптимизации оказываются не совсем бесплатными — что-то удалось улучшить, но где-то при этом добавились проблемы. Теперь же устранять эти уязвимости будет довольно тяжело — слишком уж на глубинном уровне они находятся. Впрочем, и эксплуатировать такие уязвимости довольно непросто — и на это вся надежда. По крайней мере до выхода новых поколений процессоров.
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
Почему все так серьезно?
Есть одна известная старая шутка, в которой две новости и обе плохие. В данной ситуации она как никогда уместна. Начнем с того, что обе указанные уязвимости аппаратные, причем связанные не с ошибкой реализации конкретной модели процессора, а с изъянами некоторых положенных в основу современных CPU архитектурных решений. Это означает, что уязвимо все то, что было выпущено в обозримом прошлом, то, что лежит на прилавках и то, что сходит с конвейеров в настоящее время.
Данные уязвимости нельзя закрыть без серьезной переработки многих технологий работы процессора, которые направлены в первую очередь на увеличение производительности. Тем более до сих пор не понятно ограничится ли дело только Meltdown и Spectre, либо будут найдены новые ошибки в аппаратных алгоритмах. Как бы там ни было, первые процессоры с аппаратно исправленными ошибками скорее всего еще находятся в бумагах разработчиков, поэтому нам всем придется принять новую реальность и как-то к ней приспосабливаться.
Коротко о Meltdown
Если говорить проще, то основная опасность Meltdown именно в том, что процесс может прочитать память ядра, это позволяет запустить специальный код внутри виртуальной машины и получить данные хоста или других виртуальных машин. Т.е. теперь, чтобы украсть с VPS ваши данные, пароли, ключи шифрования больше не нужно атаковать, взламывать или заражать систему, достаточно вполне легально купить еще одну виртуальную машину на том же хосте.
Под угрозой Meltdown находятся в первую очередь хостеры и операторы облачных сервисов, а также их клиенты. Причем клиенты тут находятся в заведомо проигрышном положении, так как для закрытия уязвимости исправления должен установить хостер.
Из процессоров уязвимы только Intel и ARM, продукция AMD данной уязвимости не подвержена.
Коротко о Spectre
Обнаружить такие атаки крайне сложно, так как они не изменяют никаких данных, а только читают их, следовательно, не вызывают сбоев или ошибок и вообще не выделяются аномальной активностью. При этом уязвимы практически все современные процессоры: Intel, AMD, ARM, с последними ситуация осложняется тем, что сама ARM процессоров не производит, продавая лицензию и документацию, поэтому разновидностей этого семейства существует великое множество и уязвимы они могут быть в разной степени.
Насколько все плохо?
Ну и никто не отменял классического вредоносного ПО, потому что практика показывает, что если пользователь хочет запустить какой-то файл, то он это сделает, несмотря на все уровни защиты системы и наличие в ней антивирусов. Эпидемии шифровальщиков отличное тому подтверждение.
Также на сегодняшний день не зафиксировано реального использования данных уязвимостей, что связано с высокой сложностью их реализации и крайне высокими требованиями к квалификации. С одной стороны, хорошо, что условный Джон Смит, Вася Пупкин или Чжан Сань не смогут на коленке собрать троян, ворующие пароли к онлайн-банку, но плохо то, что если такое ПО будет реализовано, то его уровень будет гарантированно высоким.
Исправления и производительность
Так как уязвимость аппаратная, то устранить ее без замены процессора невозможно физически, все существующие патчи устраняют возможность эксплуатации уже обнаруженных уязвимостей программным методом. На сегодняшний день выпущены как обновления микрокода CPU, так и программные заплатки для всех актуальных систем и это, вполне ожидаемо, привело к снижению производительности. Общая оценка снижения: от 10 до 30%.
Исполнительный вице-президент Microsoft по Windows Терри Маерсон (Terry Myerson) в официальном блоге привел также различные данные:
Компьютеры с Windows 10 на относительно старых процессорах (относящихся к поколениям до 2015 года включительно, Haswell и более старые) в некоторых тестах могут показать более значительное падение производительности, возможно некоторые пользователи смогут его заметить.
Производительность систем под управлением Windows Server на любых процессорах заметно пострадает, особенно на приложениях, интенсивно использующих ввод-вывод, при активации изоляции недоверенного кода.
В Linux ситуация также обстоит не лучшим образом, исследования показывают падение производительности в пределах 5-30%. Довольно подробные исследования провели специалисты RedHat, их результаты во много перекликаются с предыдущими исследованиями:
Падение производительности на 3-7% отмечается при выполнении аналитических запросов в СУБД, в системах поддержки принятия решений (DSS) и в Java VM, в моменты интенсивного обмена информацией по сети или при обращениях к диску.
Снижение производительности на 2-5% наблюдается в решениях HPC (High Performance Computing) при большой вычислительной нагрузке на CPU.
Как видим, менее всего пострадали обычные рабочие станции и домашние ПК, в большинстве задач их пользователи могут совсем не заметить разницы. Для того, чтобы не быть голословными мы провели тестирование своей настольной системы с включенной и выключенной защитой от Meltdown и Spectre. Как и ожидалось, для процессора 4-го поколения i5-4670 (Haswell) потеря производительности составила около 10%.
При этом различные показатели производительности системы пострадали примерно равномерно, разве что практически не затронуло работу с ОЗУ.
При этом в большинстве повседневных задач такое снижение практически не ощущается, поэтому можно сказать, что большинство пользователей, которые используют ПК для домашних или офисных нужд не должны почувствовать каких-либо ухудшений.
Но этого нельзя сказать про профессиональные применения, на этой же рабочей станции мы обнаружили сильное падение производительности дисковой подсистемы, которая выразилась в сильном увеличении времени отклика и росте очереди при операциях записи большого объема информации (например, при постановке виртуальных машин на паузу) или активном случайном доступе.
Также достаточно сильно страдают операции с СУБД, начиная от внутренней базы 1С и заканчивая PostgreSQL и MS SQL, особенно это заметно на операциях переиндексации и реструктуризации, а также выгрузки-загрузки дампов (где дополнительно сказывается снижение производительности дисковой подсистемы).
Промежуточные выводы
Однозначно что-то советовать в данной ситуации нельзя, следует трезво взвесить все риски и выбрать наиболее оптимальное решение. Однозначно не следует отключать защиту, если вы предоставляете услуги хостинга, либо не контролируете запуск и выполнение стороннего кода на ваших серверах (виртуальные и терминальные среды, в которых работают пользователи).
Рабочие станции находятся в группе риска, однако он невелик, на текущий момент (осень 2018) нет известного вредоносного ПО, которое бы использовало данные уязвимости. Однако если вы не испытываете проблем с производительностью, то мы бы также не советовали отключать защиту.
А вот на серверах приложений и СУБД, а также в тестовых виртуальных средах защиту будет лучше выключить, риски в данном случае близки к нулю, а производительность страдает значительно, особенно если у вас не самое свежее железо.
В любом случае хорошо все обдумайте, а только потом действуйте, также будет неплохо выполнить объективный замер производительности с включенной и выключенной защитой, после чего еще раз оценить принятое решение.
Включаем / выключаем защиту от Meltdown и Spectre в Windows
Сразу хотим обратить ваше внимание, что описанные ниже методы работают только в том случае, если вы установили все требуемые обновления, в противном случае вносимые изменения не дадут никакого результата. Проще говоря, если патчи не стоят, то от правки реестра защита не включится. Полный список необходимых обновлений можно найти в официальной статье.
Для включения отключения защиты следует воспользоваться правкой реестра, официальные рекомендации Microsoft предлагают следующие варианты:
Отключение защиты от Meltdown и Spectre
Включение защиты от Meltdown и Spectre
Отключение защиты только от Spectre (актуально для AMD)
Включение защиты только от Spectre
После применения изменений компьютер следует перезагрузить. Если вы не хотите возиться с реестром, то можно воспользоваться специальной утилитой InSpectre, которая позволяет выяснить статус защиты вашей системы, влияние ее на производительность, а также включать и отключать ее.
Запутаться в ней решительно негде, если какие-то методы защиты недоступны (не установлены патчи) или неприменимы (защита от Meltdown на AMD), то связанные с ними кнопки будут неактивны. После применения изменений также потребуется перезагрузка.
Включаем / выключаем защиту от Meltdown и Spectre в Linux
Прежде всего выясним текущий статус защиты, в системах Debian / Ubuntu для этого можно воспользоваться пакетом spectre-meltdown-checker.
Проще всего владельцам Ubuntu 18.04, для установки пакета им достаточно набрать:
В Debian 9 потребуется сначала подключить репозиторий stretch-backports, для этого выполним команду:
Затем обновим список пакетов и установим нужный нам пакет с прямым указанием репозитория:
Для Ubuntu 16.04 и Debian 8 проще всего будет скачать пакет вручную (первая команда сменит текущую директорию на домашнюю):
И установить его командой:
Теперь запустим проверку, так как выводится достаточно большое количество информации для удобства сразу перенаправим вывод утилите more:
На экране вы должны увидеть примерно следующее:
Как видим, наша система (в данном случае Debian 9.5) защищена от уязвимостей, PTI включен.
Для отключения, негативно влияющего на производительность PTI, необходимо добавить специальную опцию загрузки. Для этого откроем /etc/default/grub и найдем там параметр GRUB_CMDLINE_LINUX_DEFAULT, в кавычках расположены опции данного параметра, в самый их конец, через пробел, добавим nopti, например, в Debian 9 у вас должно получиться:
Сохраним файл и обновим загрузчик:
Перезагрузимся и вновь запустим проверку:
Как видим, система стала уязвима к Meltdown (Variant 3), но осталась защищена от Spectre Variant 1 и 2, потому что для защиты от них используется retpoline, который не вызывает снижения производительности.
Заключение
Надеемся, что после прочтения данной статьи вы будете лучше представлять, что такое Meltdown и Spectre, какие угрозы они несут и как от них можно защититься. Также сможете правильно оценить степень риска именно для вашей системы и принять правильное решение по включению или отключению защиты.
Следует помнить, что любая безопасность имеет свою стоимость и если она оказывается дороже, чем возможный ущерб от ее отсутствия, то такой уровень безопасности явно является чрезмерным. Поэтому любые решения следует принимать на основе объективных показателей и здравого смысла, а не под воздействием медийного шума.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал: