Из исследования, опубликованного в первые дни наступившего года, стало известно, что значительная часть процессоров, выпущенных за последние 20 лет, имеют фундаментальную брешь безопасности, различные варианты которой получили названия Spectre и Meltdown. Уязвимости обусловлены особенностями реализации определенных функций чипов, призванных ускорять их работу.
Что такое Spectre и Meltdown
Spectre и Meltdown — это названия, которые дали разным вариантам одной и той же фундаментальной уязвимости, касающейся почти всех современных процессоров x86-архитектуры. Если ею воспользуются атакующие, они смогут получить доступ к данным, прежде считавшимся защищенными. Исследователи обнаружили сами недоработки в конце 2017 года, а объявили об этом в начале 2018-го. Выявлено три варианта бреши, у каждого свой номер в глобальной базе данных по известным уязвимостям Common Vulnerabilities and Exposures (CVE). Два из них объединены именем Spectre, третий назвали Meltdown.
Все варианты уязвимости позволяют вредоносным программам получать доступ к данным, прав обращаться к которым у них быть не должно. Это возможно за счет использования двух технологий ускорения работы процессоров — упреждающего выполнения (speculative execution) и кэширования.
Упреждающее выполнение — это механизм, при помощи которого процессор «предугадывает будущее» для ускорения работы. Зная, что код программы имеет несколько логических ветвей, чип выполняет вычисления по ним заранее, еще до того, как определится, какой из них передать управление. Допустим, код содержит следующую логику: «Если А истинно, вычислить функцию X, в противном случае вычислить Y». В этом случае процессор может начать параллельно вычислять X и Y еще до того, как станет известно значение A. Таким образом, когда значение A получено, у процессора уже будет готовый ответ для соответствующей ветви кода. Другой пример: выяснив, что программа часто использует некую функцию, процессор может в период неактивности вычислить ее, чтобы заранее приготовить ответ. В целом эти приемы обеспечивают ускорение работы.
Проблема возникает, когда при кэшировании и упреждающем выполнении происходит взаимодействие с защищенной памятью.
Суть защищенной памяти в том, что ни один процесс на компьютере не должен иметь доступа к данным без соответствующих привилегий. Благодаря этому программы могут предотвращать доступ пользователей к некоторым данным, а операционная система не допускает возможности считывания одной программой данных, принадлежащих другой. Для получения доступа к данным процессу необходимо пройти проверку привилегий, в ходе которой выясняется, позволено ли ему видеть запрашиваемые данные.
Однако проверка привилегий может занимать относительно долгое время. Обсуждаемая уязвимость связана прежде всего с тем, что, пока чип ждет выяснения наличия у процесса права на доступ к определенным данным, включается механизм упреждающего выполнения, то есть заранее начинается обработка запрашиваемых данных, еще до получения разрешения на это. При этом теоретически безопасность сохраняется, поскольку результаты упреждающего выполнения защищаются на аппаратном уровне. Процессу не позволено увидеть их до окончания проверки привилегий, а если ее результат отрицательный, данные уничтожаются. Однако защищенные данные сохраняются в кэше процессора, даже если программа не получает разрешения на доступ к ним.
В чем различие между Spectre и Meltdown
И Spectre, и Meltdown могут позволить атакующим получить, не имея соответствующих привилегий, доступ к данным с применением описанных выше методов. Уязвимости различаются по результатам их использования.
Брешь Meltdown («расплавление») получила такое название, поскольку она «расплавляет» защитные границы, реализованные на аппаратном уровне. Используя Meltdown, атакующий может с помощью работающей на компьютере программы получить доступ к данным, которые ей не должны быть доступны, в том числе принадлежащим другим программам, а также к данным, доступ к которым должен быть только у пользователя с правами администратора. Meltdown не требует особых знаний о том, как работает программа, захватываемая атакующим; однако эту уязвимость можно использовать только на процессорах Intel определенных типов. Сама проблема достаточно серьезная, но для нее уже выпускаются исправления.
Посредством вариантов Spectre атакующий может заставить программу выдать часть ее собственных закрытых данных. Эксплуатация бреши требует более детальных знаний внутреннего устройства программы и не дает возможности получить доступ к данным других программ, однако такая атака сработает практически на любом существующем процессоре. Название Spectre («призрак») отчасти происходит от Speculative Execution, отчасти от вероятности широкого круга атак. И хотя на сегодня уже доступны заплаты против данной уязвимости, в дальнейшем, без сомнения, будут обнаружены и другие варианты — «призрак» будет навещать нас снова и снова.
Обе уязвимости создают возможность совершения весьма опасных атак |
В чем опасность
Обе уязвимости создают возможность совершения весьма опасных атак. Например, код JavaScript на сайте может, используя Spectre, заставить браузер выдать имя и пароль пользователя. С помощью Meltdown атакующие могут просматривать данные, принадлежащие другим пользователям и даже другим виртуальным серверам, работающим на том же оборудовании, а это потенциальная катастрофа для операторов платформ облачных вычислений.
Но, помимо самой вероятности конкретных атак, важен тот факт, что бреши присутствуют в большинстве аппаратных платформ, на которых работает ежедневно используемое нами ПО. При этом даже формально защищенный код становится уязвимым, поскольку использованные при его написании предположения о процессах безопасности оказались ложными.
Заплаты против Spectre и Meltdown
Сама уязвимость присутствует на аппаратном уровне, и устранить ее нельзя. Но большинство поставщиков выпускают программные заплаты, позволяющие обойти проблемы. В частности, у заплаты KAISER, разработанной еще в 2017 году для улучшения защищенности Linux, есть «побочный эффект» в виде предотвращения атак Meltdown. Крупнейшие операторы облаков уже установили заплаты на свои серверы. Исправления выпускают Intel, Microsoft, Apple и Google, на очереди и другие.
Учитывая, что одним из наиболее опасных векторов атак Spectre является использование движков JavaScript в браузерах, их особенно важно обновлять до последних версий.
Отметим, что более старые системы, особенно Windows XP, скорее всего, заплат уже не получат. Останутся без них и миллионы недорогих Android-фонов, не получающих обновления безопасности от Google, причем многие из этих аппаратов не такие уж и старые.
По состоянию на 11 января Microsoft выпустила заплаты для большинства версий Windows, начиная с Windows 7, в которых также исправлены браузеры Internet Explorer и Edge. Кроме того, на сайте корпорации приводятся ссылки на обновления микропрограмм от большинства крупнейших производителей оборудования. Однако некоторые компьютеры на процессорах AMD после установки заплат перестали запускаться, поэтому для таких систем распространение заплат пока прекращено.
Apple еще 3 января выпустила исправленные версии macOS, iOS и tvOS, а также браузера Safari.
Google опубликовала список моделей хромбуков, для которых вышли заплаты, а также тех, которые не нуждаются в исправлениях (таких большинство), и тех, для которых заплаты уже не выйдут ввиду окончания срока поддержки.
Принцип действия таких заплат основан на изменении или запрете использования программным обеспечением функций упреждающего выполнения и кэширования. В первых публикациях сообщалось, что снижение производительности может достигнуть 30%, однако тесты показывают, что реальное замедление составляет 5–10%.