Meltdown (CVE)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:43, 18 июня 2019.
Meltdown
Meltdown.PNG
CVE identifier(s) CVE-2017-5754
Date discovered January 2018; 1 year ago (2018-01)
Affected hardware микропроцессоры Intel x86, IBM POWER and некоторые микропроцессор на базе ARM
Website meltdownattack.com

Meltdown – это аппаратная уязвимость, затрагивающая микропроцессоры Intel x86, процессоры IBM POWER, [Источник 1] и некоторые микропроцессоры на базе ARM. Косвенно затронуты и продукты других компаний, например NVIDIA. Исключением являются процессоры Intel Itanium и старые версии Intel Atom (до 2013 года), а также процессоры «Байкал», «Эльбрус », MIPS, RISC-V, SPARC. С помощью Meltdown вредоносный код может злоупотреблять реализациями спекулятивного выполнения Intel и ARM, что приведет к утечке информации из других процессов — напрямую из всезнающего ядра операционной системы. В результате Meltdown можно легко использовать для отслеживания других процессов и похищения информации, которая должна быть изолирована ядром, другими программами или другими виртуальными машинами

На момент обнаружения Meltdown опасности подвергались все устройства, работающие на базе iOS, Linux, macOS, или Windows. Соответственно, были затронуты многие серверы и облачные хранилища[Источник 2], потенциально уязвимыми являются почти все компьютеры, ноутбуки (и их потомки нетбуки, хромбуки, ультрабуки), планшеты, смартфоны, NAS или DAS, ТВ-приставки и даже современные smart-телевизоры, а также серверы и т.д. Если рассматривать с чисто программной точки зрения, то влияние уязвимости проявлялось как замедление производительности процессора в пределах 5-30 процентов при некоторых специализированных рабочих нагрузках[Источник 3].

Common Vulnerabilities and Exposures присвоил Meltdown идентификатор CVE-2017-5754, также известный как Rogue Data Cache Load (RDCL), в январе 2018 года. Уязвимость была обнаружена в сочетании с другим эксплойтом Spectre, с которым она имеет несколько общих характеристик. «Meltdown – вероятно, одна из худших найденных уязвимостей процессоров», – сказал Дэниел Грюсс, один из исследователей Грацского технического университета.[Источник 4]. Было опубликовано несколько процедур для защиты домашних компьютеров и связанных с ними устройств от Meltdown и Spectre. Патчи Spectre и Meltdown, как сообщается, значительно снижают производительность, особенно на старых компьютерах; на новых основных платформах восьмого поколения было установлено снижение производительности на 2-14 процента. Тем не менее, согласно Dell: "никаких" реальных " эксплойтов для борьбы с данными уязвимостями не было предложено."[Источник 5] В качестве защиты специалисты рекомендуют: "своевременно обновлять программное обеспечение, избегать подозрительных гиперссылок и веб-сайтов, не загружать файлы или приложения из неизвестных источников ... использовать зашифрованные паролем протоколы ... использовать программное обеспечение для защиты от вредоносных программ."

История

8 мая 1995 года на симпозиуме IEEE по безопасности и конфиденциальности 1995 года была опубликована статья под названием "архитектура процессора Intel 80x86: подводные камни для безопасных систем", в которой содержалось предостережение против наличия скрытого канала синхронизации в буфере CPU "cache and translation lookaside buffer" (TLB).

В июле 2012 года ядро XNU от Apple (используется, в частности, в macOS, iOS и tvOS) приняло рандомизация адресов компонентов ядра (KASLR) с выпуском OS X Mountain Lion 10.8. По сути, база системы, включая расширения ядра (kexts) и зоны памяти, случайным образом перемещается во время процесса загрузки, чтобы уменьшить уязвимость операционной системы к атакам. В марте 2014 года ядро Linux приняло KASLR для уменьшения утечек адресов.[Источник 6]

8 августа 2016 года Андерс Фог и Даниэль Грасс представили на конференции Black Hat 2016 доклад на тему:"Использование недокументированного поведения процессора для просмотра в режиме ядра и разрыва KASLR в процессе".

10 августа 2016 года, Мориц Липп и др. из TU Graz опубликовал "Армагеддон: кэш-атаки на мобильные устройства" на 25-м симпозиуме USENIX security. Несмотря на то, что он был сосредоточен на ARM, он заложил основу для вектора атаки.

27 декабря 2016 года в 33C3 Клементина Морис и Мориц Липп из TU Graz представили свой доклад "что может пойти не так с <insert x86 instruction here>? Побочные эффекты включают атаки по сторонним каналам и обход ядра ASLR".

1 февраля 2017 года Intel были присвоены номера CVE 2017-5715, 2017-5753 и 2017-5754.

27 февраля 2017 года Bosman et al. из Vrije Universiteit Amsterdam на симпозиуме NDSS опубликовал свои выводы о том, как рандомизация размещения адресного пространства (ASLR) может быть использована для архитектур на основе кэша.

27 марта 2017 года исследователи из австрийского технологического университета Граца разработали концепцию, которая могла бы захватить ключи RSA из анклавов Intel SGX, работающих в той же системе в течение пяти минут, используя определенные инструкции процессора вместо мелкозернистого таймера для использования DRAM кэша сторонних каналов .

В июне 2017 года было обнаружено, что KASLR имеет большой класс новых уязвимостей. Исследования в Технологическом Университете Граца выяснили, как бороться с данными уязвимостями, предотвращая доступ к несанкционированным страницам. Презентация Кайзера была представлена на конгрессе Black Hat в июле 2017 года, но была отклонена организаторами. Тем не менее, благодаря данной работе были изолированы таблицы страниц ядра (KPTI, первоначально известной как KAISER) в 2017 году, что было необходимо для устранения большого класса ошибок безопасности, включая некоторую ограниченную защиту от еще не обнаруженного Meltdown.В июле 2017 года исследование, опубликованное на веб-сайте CyberWTF специалистом по информационной безопасности Андерсом Фогом, описывало использование атаки по времени для чтения кэша данных пространства ядра. Фог наблюдал за результатами спекулятивных операций, обусловленных данными, полученными с недопустимыми привилегиями.

Meltdown была обнаружена независимо Янном Хорном из проекта Google Zero, Вернером Хаасом и Томасом Прешером из Cyberus Technology, а также Даниэлем Груссом, Морицем Липпом, Стефаном Мангардом и Майклом Шварцем из Технологического университета Граца.Те же исследовательские группы, которые обнаружили Meltdown, также обнаружили связанную уязвимость процессора, теперь называемую Spectre.

В октябре 2017 года поддержка ядра ASLR на amd64 была добавлена в NetBSD-current, что сделало NetBSD первой полностью открытой системой BSD для поддержки рандомизации адресов компонентов ядра (KASLR).Однако частично открытый исходный код Apple Darwin, который составляет основу macOS и iOS, основан на FreeBSD.

14 ноября 2017 года специалист по информационной безопасности Алекс Ионеску публично упомянул об изменениях в новой версии Windows 10, которые вызовут некоторое уменьшение скорости работы, не объясняя необходимость изменений, просто ссылаясь на аналогичные изменения в Linux.

После того, как поставщики оборудования и программного обеспечения 28 июля 2017 года были проинформированы о наличии уязвимостей, 3 января 2018 года о них узнала и широкая общественность.

28 января 2018 года сообщалось, что Intel поделилась новостями об уязвимостях Meltdown и Spectre с китайскими технологическими компаниями, прежде чем уведомить правительство США о них.

8 октября 2018 года, корпорация Intel, как сообщается, обновила оборудование и средства защиты новейших процессоров от угрозы уязвимостей Spectre и Meltdown.

Как работает процессор

По сути Meltdown и Spectre — это разновидность атаки по времени. Основная разница между ними состоит в том, как они вызывают кеширование данных из защищенных страниц памяти. Meltdown пользуется задержкой в обработке исключения, а Spectre обманывает блоки предсказания. Чтобы понять эти детали, нужно освежить в памяти базовое устройство процессора. Сама идея внеочередного исполнения инструкций была предложена IBM в 1963 году. Рядовые пользователи столкнулись с ней только в 1995 году, когда появился первый Pentium Pro. С тех пор линейный конвейер канул в Лету, а все современные процессоры используют архитектуру с внеочередным (out-of-order) и одновременно упреждающим (или спекулятивным — speculative) механизмом исполнения команд.

Как же это работает? Для программиста все выглядит просто. Он отправил очередь инструкций на вход и получил ее исполнение на выходе. Однако внутри процессора творится своя магия. Современное процессорное ядро использует многоуровневый конвейер с нелинейными путями. Все входящие инструкции в нем кешируются и декодируются по нескольку штук за такт. Они дробятся на микрооперации, которые переупорядочиваются в собственном буфере (ROB, Re-Order Buffer). Ни одна из них не работает с реальными адресами памяти и физическими регистрами процессора. Блок управления памятью транслирует виртуальные адреса и определяет параметры доступа к ним.

После ROB микрооперации отправляются в станцию резервации, где обрабатываются параллельно на разных исполнительных блоках. Вдобавок современные процессоры используют разные типы кешей для ускорения обработки данных, изначально загружаемых в не слишком быструю оперативную память. Простейший кеш для инструкций применялся еще в 1982 году, а кеш данных используется с 1985 года. Сейчас они оба относятся к базовому кешу первого уровня (L1), помимо которого появились L2 и L3 общего назначения.

Блоковая диаграмма конвейера Intel Skylake / Kaby Lake

Все эти архитектурные новшества создавались для уменьшения времени простоя отдельных исполнительных блоков процессора. Пока один блок ожидает загрузки данных из оперативной памяти для своей инструкции, другой параллельно обрабатывает следующие. В этом ему помогает MMU (Memory Management Unit) и общая архитектура конвейера, который старается работать на упреждение и постоянно подгружает наиболее востребованные данные в кеш.

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

В большей мере задержками в проверке условий и длинным забеганием вперед по ветвям инструкций грешат процессоры Intel с длинным конвейером (кроме Itanium и первых Atom), но AMD и даже ARM это тоже касается — просто в эксплоитах для них потребуется более точный таймер, другие размеры массивов и техники забивания кеша. Если Meltdown для них пока не смогли убедительно воспроизвести, то Spectre — вполне.

Блоковая диаграмма конвейера AMD Zen

Целых 27 лет ведущие разработчики считали, что скорость обработки инструкций важнее безопасности, а все проверки можно делать уже после пробного исполнения команд «на выходе» из конвейера. В том или ином виде внеочередное исполнение сегодня реализовано во всех процессорах. Из-за параллельной работы исполнительных блоков задержка в обработке исключения, лаг MMU и очистки кеша тоже есть всегда, просто в случае микроархитектуры Core они заметнее и ими проще воспользоваться.

Background -современный дизайн процессора

Современные компьютерные процессоры используют различные методы, чтобы получить высокий уровень производительности. Четыре широко используемые функции особенно актуальны для Meltdown:

  • Виртуальная память — метод управления памятью, которая реализуется с использованием аппаратного и программного обеспечения компьютера. Она отображает используемые программами виртуальные адреса в физические адреса в памяти компьютера. Основная память представляется в виде непрерывного адресного пространства или набора смежных непрерывных сегментов. Операционная система осуществляет управление виртуальными адресными пространствами и соотнесением оперативной памяти с виртуальной. Программное обеспечение в операционной системе может расширить эти возможности, чтобы обеспечить виртуальное адресное пространство, которое может превысить объем оперативной памяти и таким образом иметь больше памяти, чем есть в компьютере. Виртуальная память позволяет модифицировать ресурсы памяти, сделать объём оперативной памяти намного больше, для того чтобы пользователь, поместив туда как можно больше программ, реально сэкономил время и повысил эффективность своего труда. “Открытие” виртуальной памяти внесло огромную контрибуцию в развитие современных технологий, облегчило работу как профессионального программиста, так и обычного пользователя, обеспечивая процесс более эффективного решения задач на ЭВМ.
  • Уровни привилегий или домены защиты-предоставляют средства, с помощью которых операционная система может управлять процессами, авторизованными для чтения областей виртуальной памяти. Поскольку виртуальная память позволяет компьютеру ссылаться на гораздо больший объем памяти, чем он когда-либо будет содержать физически, система может быть значительно ускорена путем "отображения" каждого процесса и их используемой памяти – фактически всей памяти всех активных процессов – в виртуальную память каждого процесса. В некоторых системах вся физическая память также отображается для увеличения скорости и производительности. Это обычно считается безопасным, потому что операционная система может полагаться на элементы управления привилегиями, встроенные в сам процессор, чтобы ограничить, к каким областям памяти разрешен доступ для любого данного процесса. Попытка получить доступ к авторизованной памяти будет успешной, а попытка получить доступ к несанкционированной памяти вызовет исключение и аннулирует инструкцию read, которая не будет выполнена. Либо вызывающий процесс, либо операционная система определяют, что произойдет, если будет сделана попытка чтения из несанкционированной памяти – обычно это вызывает условие ошибки, и процесс, который попытался выполнить чтение, будет завершен. Поскольку несанкционированное чтение обычно не является частью обычного выполнения программы, гораздо быстрее использовать этот подход, чем приостанавливать процесс каждый раз, когда он выполняет какую-либо функцию, требующую доступа к привилегированной памяти, чтобы позволить этой памяти быть отображенной в читаемое адресное пространство.
  • Конвейеризация инструкций и спекулятивное выполнение – используется для того, чтобы инструкции выполнялись наиболее эффективным образом, если это необходимо, позволяя им работать по порядку или параллельно между различными процессорами в ЦП – до тех пор, пока конечный результат верен. Современные процессоры обычно содержат множество отдельных блоков выполнения, а планировщик декодирует инструкции и выбирает наиболее эффективный способ их выполнения. Это может включать решение о том, что две инструкции могут выполняться одновременно на разных блоках выполнения (известных как "конвейеризация инструкций"). До тех пор, пока правильный результат все еще достигается, это максимизирует эффективность, сохраняя все исполнительные блоки процессора в работе как можно больше. Некоторые инструкции, такие как условные ветви, приведут к одному из двух разных результатов, в зависимости от условия. Например, если значение равно 0, оно будет выполнять одно действие, а в противном случае-другое. В некоторых случаях CPU может еще не знать, какую ветку взять. Это может быть связано с тем, что значение не кэшируется. Вместо того, чтобы ждать правильный вариант, процессор может приступить к работе немедленно (спекулятивное выполнение). Если это так, он может либо угадать правильный вариант (прогнозирующее выполнение), либо даже взять оба (нетерпеливое выполнение). Если он выполняет неправильную опцию, процессор попытается отбросить все последствия его неправильного предположения.
  • CPU cache-скромный объем памяти внутри процессора, используемый для обеспечения его работы на высокой скорости, для ускорения доступа к памяти и для облегчения "интеллектуального" выполнения инструкций эффективным образом. С точки зрения процессора физическая память компьютера работает медленно. Кроме того, инструкции, выполняемые процессором, очень часто повторяются или многократно обращаются к одной и той же или подобной памяти. Чтобы максимально эффективно использовать ресурсы, современные процессоры часто имеют небольшой объем очень быстрой памяти, известный как "кэш процессора". При доступе к данным или чтении инструкции из физической памяти копия этой информации обычно одновременно сохраняется в кэше ЦП. Если CPU позже снова понадобится та же инструкция или содержимое памяти, он может получить ее с минимальной задержкой из собственного кэша, а не ждать запроса, связанного с физической памятью.

Использование Meltdown

Обычно механизмы, описанные выше, считаются безопасными. Они служат основой для большинства современных операционных систем и процессоров. Meltdown использует способ взаимодействия этих функций, чтобы обойти основные элементы управления привилегиями процессора и получить доступ к привилегированным и конфиденциальным данным из операционной системы и других процессов. Чтобы понять как работает Meltdown, мы рассмотрим данные, отображаемые в виртуальной памяти (к большей части которых процесс не должен иметь доступа), и посмотрим, как процессор реагирует, когда процесс пытается получить доступ к несанкционированной памяти. Процесс выполняется в уязвимой версии Windows, Linux или macOS на 64-разрядном процессоре уязвимого типа. Это очень распространенная комбинация почти на всех стационарных компьютерах, ноутбуках, ноутбуках, серверах и мобильных устройствах.

ЦП пытается выполнить инструкцию, ссылающуюся на операнд памяти. Режим адресации требует, чтобы адрес операнда Base+A вычислялся с использованием значения адреса A, запрещенного для процесса системой виртуальной памяти и проверки привилегий. Инструкция запланирована и направлена в исполнительное подразделение. Затем этот блок выполнения планирует проверку привилегий и доступ к памяти. Проверка привилегий сообщает исполнительному блоку, что адрес A, участвующий в доступе, запрещен к процессу (в соответствии с информацией, хранящейся в системе виртуальной памяти), и, следовательно, инструкция должна завершиться ошибкой. Затем блок выполнения должен отбросить последствия считывания памяти. Одним из таких последствий, однако, может быть кэширование данных в Base+A, которое, возможно, было завершено как побочный эффект доступа к памяти до проверки привилегий – и, возможно, не было отменено блоком выполнения (или любой другой частью ЦП). Если это действительно так, сам факт кэширование представляет собой утечку информации. В этот момент вмешивается Meltdown. Процесс выполняет атаку синхронизации, выполняя инструкции, непосредственно ссылающиеся на операнды памяти. Для наибольшей эффективности, операнды этих инструкций должны быть по адресам, которые охватывают возможный адрес, Base+A, операнда отклоненной инструкции. Поскольку данные по адресу, на который ссылается отклоненная инструкция Base+A, были кэшированы, инструкция, ссылающаяся на тот же адрес напрямую, будет выполняться быстрее. Процесс может обнаружить эту разницу во времени и определить адрес, Base+A, который был рассчитан для отклоненной инструкции – и, таким образом, определить значение по адресу запрещенной памяти A. Meltdown использует этот метод в последовательности для чтения каждого интересующего адреса на высокой скорости, и в зависимости от других запущенных процессов результат может содержать пароли, данные шифрования и любую другую конфиденциальную информацию из любого адреса любого процесса, который существует в его карте памяти. На практике, поскольку атаки стороннего канала кэша медленны, быстрее извлекать данные по одному биту за раз (только 2 × 8 = 16 атак кэша, необходимых для чтения байта, а не 256 шагов, если бы он пытался прочитать все 8 бит сразу).

Код атаки

Meltdown, и Spectre — локальные атаки, требующие выполнения вредоносного кода на целевой машине. Это означает, что эти атаки не являются (напрямую) атакой удалённого запуска кода – как были Nimda или Code Red – а значит, системы нельзя атаковать, просто подключившись к сети. Понятно, что они ближе к атакам эскалации привилегий, классу атак, которые помогают глубже проникнуть в систему (к которой у вас уже есть доступ). Однако, исследователи показали, что они могут выполнять атаки на основе Spectre, используя JavaScript, поэтому веб-браузер может запустить вредоносный файл JavaScript, и таким образом позволить атаку.

Это read-only атаки (доступ к информации). Хотя мы и упомянули, что атаки не могут быть проведены удаленно, в случае если Meltdown и Spectre удалось запустить в локальной системе, характер эксплойта заключается в том, что это read-only атаки. То есть, все что они могут – это прочитать информацию из системы. Они не могут напрямую принудительно произвести выполнение кода в ядре ОС, других виртуальных машинах или других программах. И все же атаки раскрытия информации могут быть очень разрушительными в зависимости от того, какая информация получена. Всегда есть риск использования этой информации для проведения успешной атаки уже путем выполнения кода, а значит, угроза все же существует. Но реальный риск заключается именно в использовании этих уязвимостей злоумышленниками для похищения информации, а не для контроля над системой. Суть атаки такова:

  • Сбрасываем кэш процессора
char userspace_array[256*4096];
for (i = 0; i < 256*4096; i++) {
_mm_clflush(&userspace_array[i]);
}
  • Читаем интересную нам переменную из адресного пространства ядра, это вызовет исключение, но оно обработается не сразу.
const char* kernel_space_ptr = 0xBAADF00D;
char tmp = *kernel_space_ptr;
  • Спекулятивно делаем чтение из массива, который располагается в нашем, пользовательском адресном пространстве, на основе значения переменной из пункта 2.
char not_used = userspace_array[tmp * 4096];
  • Последовательно читаем массив и аккуратно замеряем время доступа. Все элементы, кроме одного, будут читаться медленно, а вот элемент, который соответствует значению по недоступному нам адресу — быстро, потому что он уже попал в кэш.
for (i = 0; i < 256; i++) {
if (is_in_cache(userspace_array[i*4096])) {
    // Got it! *kernel_space_ptr == i
}
}

Таким образом, объектом атаки является микроархитектура процессора, и саму атаку в софте не починить.

; rcx = kernel address
; rbx = probe array
retry:
mov al, byte [rcx]
shl rax, 0xc
jz retry
mov rbx, qword [rbx + rax]

Теперь по шагам, как это работает. mov al, byte [rcx] — собственно чтение по интересующему атакующего адресу, заодно вызывает исключение. Важный момент заключается в том, что исключение обрабатывается не в момент чтения, а несколько позже. shl rax, 0xc — зачение умножается на 4096 для того, чтобы избежать сложностей с механизмом загрузки данных в кэш mov rbx, qword [rbx + rax] — "запоминание" прочитанного значения, этой строкой прогревается кэш retry и jz retry нужны из-за того, что обращение к началу массива даёт слишком много шума и, таким образом, извлечение нулевых байтов достаточно проблематично. Честно говоря, я не особо понял, зачем так делать — я бы просто к rax прибавил единичку сразу после чтения, да и всё. Важный момент заключается в том, что этот цикл, на самом деле, не бесконечный. Уже первое чтение вызывает исключение

Затронутое оборудование

Уязвимость Meltdown в первую очередь влияет на микропроцессоры Intel, но также влияет на микропроцессор ARM Cortex-A75. Уязвимость не влияет на микропроцессоры AMD. Intel утверждает, что недостатки затрагивают все процессоры, но AMD отрицает это, говоря: "мы считаем, что процессоры AMD не восприимчивы из-за нашего использования защиты уровня привилегий в архитектуре подкачки".

Исследователи выяснили, что уязвимость Meltdown является эксклюзивной для процессоров Intel, в то время как уязвимость Spectre может повлиять на некоторые процессоры Intel, AMD и ARM. ARM сообщила, что большинство их процессоров не уязвимы, и опубликовала список конкретных процессоров, которые затронуты. Уязвимости Meltdown и Spectre влияют непосредственно на ядро ARM Cortex-A75 , в то время как ядра Cortex-R7, Cortex-R8, Cortex-A8, Cortex-A9, Cortex-A15, Cortex-A17, Cortex-A57, Cortex-A72 и Cortex-A73 затрагиваются только уязвимостью Spectre. В этот список не входят старые ядра ARM без внеочередного исполнения инструкций. Они ожидаемо оказались иммунными к Meltdown и Spectre, поскольку атаки такого рода не работают без внеочередного исполнения команд. Например, это популярные Cortex-A7, Cortex-A53 и семейство ARM 11. На A7 построен популярный одноплатный компьютер Raspberry Pi 2B, а на A53 — его более новая версия 3B.

Большая часть современных телефонов среднего класса Android использует Cortex-A53 или Cortex-A55 и не подвержены уязвимости Meltdown или Spectre. Это включает в себя устройства с Qualcomm Snapdragon 630, Snapdragon 626, Snapdragon 625 и все процессоры Snapdragon 4xx на основе ядер A53 или A55. Кроме того, ни один компьютер Raspberry Pi не уязвим ни для Meltdown, ни для Spectre.

IBM также подтвердила, что ее процессоры питания подвержены обеим атакам ЦП. Red Hat публично объявил, что эксплойты также предназначены для систем IBM System Z, POWER8 и POWER9.

Oracle заявила, что системы SPARC на основе V9 (процессоры T5, M5, M6, S7, M7, M8, M10, M12) не подвержены Meltdown, хотя старые процессоры SPARC, которые больше не поддерживаются, могут быть затронуты.

Предотвращение

Для устранения этой уязвимости требуются изменения в коде ядра операционной системы, в том числе повышенная изоляция памяти ядра от процессов пользовательского режима. Разработчики ядра Linux назвали эту меру изоляцией таблицы страниц ядра(KPTI). Патчи KPTI были разработаны для ядра Linux 4.15 и выпущены в качестве backport в ядрах 4.14.11, 4.9.75. Red Hat выпустила обновления ядра для своих дистрибутивов Red Hat Enterprise Linux версии 6 и версии 7. CentOS также уже выпустили свои обновления ядра для CentOS 6 и CentOS 7.

Apple включила изменения в macOS 10.13.2, iOS 11.2 и tvOS 11.2. Они были выпущены за месяц до публикации уязвимостей. Apple заявила, что watchOS и Apple Watch не затронуты. Дополнительные изменения были включены в обновление Safari, а также дополнительное обновление для macOS 10.13 и iOS 11.2.2.

Патчи для Windows конфликтуют со многими антивирусами и защитными решениями, что приводит к неполадкам в работе системы, BSOD и другим неприятным последствиям. Дело в том, что разработчики ряда антивирусов использовали для работы своих продуктов весьма спорные техники — их можно приравнять к эксплуатации проблем, с которыми и призваны бороться новые патчи. Так, антивирусы различными способами обходят Kernel Patch Protection, внедряют свои гипервизоры для перехвата системных вызовов (syscalls) и строят предположения об адресах ячеек памяти.

В итоге разработчики Microsoft решили проблему интересным способом — обязали производителей антивирусного ПО добавлять в реестр запись, которая даст Windows Update понять, что «все чисто» и проблем не возникнет:

Key="HKEY_LOCAL_MACHINE" Subkey="SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat" Value="cadca5fe-87d3-4b96-b7fb-a231484277cc" Type="REG_DWORD"

Сначала эта запись в реестре стала обязательной только при установке патчей для Meltdown и Spectre, но потом инженеры Microsoft решили, что стоит «завернуть гайки» еще туже. Так, если записи нет в реестре, Windows не будет устанавливать не только патчи для Meltdown и Spectre, но и никакие обновления вообще. В сущности, теперь пользователям придется решать, что им нужнее: обновления для ОС или сомнительный антивирус.

Сообщалось, что внедрение KPTI может привести к снижению производительности процессора, при этом некоторые исследователи утверждают, что может быть до 30% потери производительности, в зависимости от использования, хотя Intel считает это преувеличением. Было сообщено, что поколения процессоров Intel, которые поддерживают идентификаторы контекста процесса (PCID), функция, введенная с Westmere и доступная на всех чипах от архитектуры Haswell и далее, были не так восприимчивы к потерям производительности при КПТИ, как более старые поколения, которым этого не хватает. Это связано с тем, что выборочная очистка буфера lookaside (TLB), включенная PCID (также называемая номером адресного пространства или ASN в Альфа – архитектуре).

В заявлении Intel говорится, что"любое влияние на производительность зависит от рабочей нагрузки и для среднего пользователя компьютера не должно быть значительным и будет изменено с течением времени". Phoronix сравнил несколько популярных компьютерных игр в системе Linux с установленным процессором Intel Coffee Lake Core i7-8700K и патчами KPTI и обнаружил, что никакого влияния на производительность практически не существует.Совсем недавно сообщалось о связанных тестированиях с участием процессоров AMD FX и Intel Sandybridge и Ivybridge.В других тестах, включая синтетические тесты ввода-вывода и базы данных, такие как PostgreSQL и Redis, было обнаружено измеримое влияние на производительность.

Проверка наличия уязвимости на компьютере

Если у вас Windows, то можно скачать и запустить утилиту InSpectre. Она почти мгновенно протестирует систему и скажет, есть ли уязвимости, а также сообщит о возможном снижении производительности (об этом позже). YES означает, что проблем нет. NO! означает, что проблема есть.

  • Защита от Meltdown есть, от Spectre нет. Производительность в норме
Meltdown3.png
  • Защита от Meltdown есть, от Spectre нет. Производительность может быть пониженной
Meltdown4.png
  • Защита от Meltdown и Spectre есть. Производительность в норме
Meltdown5.png

Источники

  1. Potential Impact on Processors in the POWER Family// IBM PSIRT Blog.[2018—] URL: https://www.ibm.com/blogs/psirt/potential-impact-processors-power-family/ (дата обращения: 15.04.2019)
  2. CERT: “Meltdown and Spectre” CPU Security Flaw Can Only Be Fixed by Hardware Replacement//WinBuzzer News.[2018—] URL: https://winbuzzer.com/2018/01/04/cert-warns-way-fix-intel-kernel-security-flaw-replace-cpu-xcxwbn/ (дата обращения: 17.04.2019)
  3. Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign//The Register.[2018—] URL: https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/ (дата обращения: 17.04.2019)
  4. Spectre and Meltdown Attacks against Microprocessors//Schneier on Security.[2018—] URL: https://www.schneier.com/blog/archives/2018/01/spectre_and_mel_1.html (дата обращения: 17.04.2019)
  5. Microprocessor Side-Channel Vulnerabilities (CVE-2017-5715, CVE-2017-5753, CVE-2017-5754): Impact on Dell products//Dell .[2018—] URL: https://www.dell.com/support/article/us/en/04/sln308587/microprocessor-side-channel-vulnerabilities-cve-2017-5715-cve-2017-5753-cve-2017-5754-impact-on-dell-products?lang=en (дата обращения: 17.04.2019)
  6. Kernel address space randomization//KernelNewbies: Linux_3.14 .[2017—] URL: https://kernelnewbies.org/Linux_3.14#Kernel_address_space_randomization (дата обращения: 17.04.2019)