Александр Навагин
Пастор секты свидетелей Xiaomi, любитель металла, футбола, рыбалки, истории. Почти инженер и историк по образованию, шут по призванию, чудак по жизни

Meltdown – угроза века или ложная тревога?

Изображение: techcrunch.com
Изображение: techcrunch.com

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

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

В чем суть уязвимости Meltdown

Уязвимость Meltdown является фундаментальным недостатком процессора, вызванным особенностями его архитектуры. Суть бага состоит в том, что в определенных условиях вредоносная программа способна получить доступ к памяти, к которой по умолчанию доступ ей запрещен. Фактически, используя уязвимость, можно узнать содержимое памяти ОЗУ, получив оттуда ценные данные. К таковым относятся, в том числе, ключи и пароли пользователя, если они в это время хранились в ОЗУ.

В обычных условиях каждому процессу на компьютере выделяется свой диапазон памяти, и к другим у него нет доступа. То есть, программа А не может узнать, что же содержится в участке памяти, используемом программой Б. Это обусловлено самой архитектурой процессора, так как за распределение памяти отвечает специальный блок внутри ЦП. Но при использовании уязвимости Meltdown чтение «чужой» памяти становится возможным.

Проблема в том, что для повышения производительности системы у процессора есть возможность внеочередного исполнения операций, минуя блок управления памятью. То есть, если 10 раз подряд задать процессору одну задачу (вроде сложения А и Б), то в 11-й он не будет считать, а «предугадает» уже знакомый результат. Если предсказание верно – все нормально, «работаем дальше». Но если в этот раз должен быть иной результат, процессор повторит расчет, что вызовет некоторую задержку.

Из-за того, что внутри процессора есть кэш-память, хранящая самые используемые данные, есть возможность взлома. Они там остаются, вне зависимости от того, корректны или нет, главное, что была команда. И софтверно кэш ЦП недоступен для программной среды, он принадлежит лишь процессору. В итоге, обращаясь к CPU, вредный код по интервалу реакции может определить значение ячейки. Упрощенно, в виде диалога между двумя людьми (1 и 2), это выглядит примерно следующим образом.

1: Пин-код твоей карточки – 1234?
2 (подумав и вспомнив, что нет): не скажу.
1: Пин-код твоей карточки – 5678?
2 (аналогично): не скажу.
1: Пин-код твоей карточки – 9876?
2 (аналогично): не скажу.
1: Пин-код твоей карточки – 9379?
2 (сразу вспомнив, что да): не скажу ни за что!

В процессоре эта разница заключается во времени отклика на запрос. Атипичный (слишком быстрый) ответ означает, что зловред все угадал, так как значение ответа хранится в кэш-памяти, и отказ будет получен быстрее. Таким образом, проанализировав значения, зловредный код может считать содержимое памяти и выудить важную информацию из ОЗУ.

Кто подвержен уязвимости Meltdown?

Уязвимости подвержено большинство современных процессоров. В основном это Intel серии Core и Atom, вышедшие после 2013 года, но AMD и новые Atom тоже подвержены, хоть и в куда меньшей степени. Также это касается многих ARM. Неуязвимы только древние чипы, вроде Intel 80386 (1985 года) и им подобные, а также многие AMD, в том числе, Ryzen.

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

Кому бояться уязвимости?

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

Простым пользователям тоже стоит бояться, так как теоретически через Meltdown можно украсть какие-то важные пароли, логины, ключи. Для этого достаточно лишь позволить использование вредоносного кода, что не так-то и сложно. Тот же Javascript позволяет это сделать через браузер, когда вы зайдете на вредоносный сайт.

Можно ли исправить уязвимость?

Устранить опасность Meltdown «совсем-совсем», на самом низком уровне, нельзя. Для этого нужно вносить коррективы в архитектуру, что невозможно на готовом чипе. Но устранить «дыру» можно программно, установив обновление ОС. Естественно, это невозможно, как невозможно без переделок заставить работать бензиновый мотор на дизеле.

Устранить уязвимость можно софтверным путем, на уровне ОС. Патчи безопасности уже вышли для Windows, Linix и macOS. После инсталляции обновления можно устранить риск взлома компьютера хакерами через этот бекдор.

Побочные эффекты патчей

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

Больше всего от патча страдают приложения, активно использующие системные вызовы. Некоторые вычисления, а также работающий с SQL софт, показывают падение скорости до 30%. Меньше всего (в рамках погрешности) теряют игры, которые системные вызовы почти не задействуют. То же самое касается простых пользовательских приложений.

Заключение или что же делать

Уязвимость, как видно, серьезная, и надо бороться. Если на компьютере есть ценные данные, а без исполнения всевозможного кода никак, тогда надо ставить патчи. Падение быстродействия – не самая большая цена за безопасность. То же самое касается простых юзеров, которым нужны в основном игры, соцсети, Ютуб да игрушки: ставьте патч и не переживайте, вам большое замедление точно не грозит.

Если же по каким-то причнам патч ставить не хочется/нельзя – тогда обезопасьте компьютер от исполнения постороннего и неизвестного кода, в том числе, через javascript. Обновите браузер, не посещайте подозрительные ресурсы, не запускайте сомнительные программы. Также не держите постоянно включенным в сеть компьютер, на котором хранится ценная информация, вроде ключей и паролей. Не то чтобы это обезопасит вас на 146%, но риск несанкционированного вмешательства в ваш ПК при этом намного снизится.