«Чипокалипсис»: обзор масштабной уязвимости современных процессоров

логотипы meltdown и spectre

Начало 2018 года ознаменовалось раскрытием серьезного бага, которому подвержено большинство современных процессоров Intel и AMD и чипов на архитектуре ARM. Он позволяет захватить информацию, циркулирующую в памяти ядра. Экспертам удалось раскрыть два метода эксплуатации уязвимости, которые получили кодовые названия Meltdown и Spectre. Разработанные наспех патчи могут замедлять работу компьютера.

  1. Что случилось?
  2. Как это работает?
  3. Meltdown
  4. Spectre
  5. Кто подвержен уязвимости?
  6. Ситуация с браузерами
  7. Чего ожидать?

Что произошло?

В 2017 году команда исследователей из Google Project Zero обнаружила уязвимость в аппаратной архитектуре процессоров, благодаря которой злоумышленники без проблем могли получить все данные из физической памяти компьютеров с чипами компании Intel. Проблему было решено не предавать огласке как минимум до 9 января 2018 года.

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

Дальнейшие исследования показали, что багу подвержены не только CPU производства Intel, но и практически все процессоры с современной логикой, нацеленной на минимальные простои в работе ЦП. В их число входят процессоры AMD и ядра с ARM-архитектурой.

В ответ на это разработчики популярных операционных систем в ускоренном режиме начали выпуск патчей, блокирующих уязвимость. За несколько дней были созданы «заплатки» для Windows, macOS, Linux, iOS и Android. Правда, они оказались не очень эффективными в силу специфики проблемы. Патчи могли:

  • замедлять работу систем вплоть до полного отказа от работы;
  • не работать вообще из-за конфликтов с антивирусами, оптимизированными под стандартную процессорную архитектуру;
  • не устанавливаться.

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

Как это работает?

Исследователям из Google Project Zero удалось открыть три механизма атак, эффективно работающих в различных условиях. У всех одна цель: дать процессу с обычными пользовательскими привилегиями возможность читать данные из защищённых участков памяти ядра, содержащих такую «чувствительную» информацию, как пароли, криптографические ключи шифрования и пр. Тесты показали, что атаки могут успешно осуществляться из виртуальной машины на физическую память размещающего компьютера, а также на другие виртуальные машины, размещённые на этом же устройстве.

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

if (a < arr.Length) {
b = arr[a] + 1;
}

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

Метод Meltdown

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

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

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

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

На этом этапе и проявляется ошибка, которой оперативно пользуется Meltdown с помощью механизма косвенной адресации. Разделённая между процессом и ядром область памяти для ускорения работы CPU позволяет приложению брать необходимые данные из кэша путем обхода запрета на прямой доступ. При возникновении ошибки во время спекулятивной обработки инструкций и последующем сбросе соответствующей ветви, обратившееся к кэшу приложение начинает читать все предыдущие корректные адреса в собственном адресном пространстве, попутно замеряя время на чтение для сравнения значений. А Meltdown уже просто собирает и отображает результаты этих повторных обращений.

Самой большой опасностью уязвимости специалисты называют её практически полную независимость от операционной системы: из-за этого антивирусы не могут обнаружить подобный зловредный код. Также Meltdown не оставляет никаких следов в системе, что усложняет задачу поиска «вредителя», уже успевшего нанести ущерб. Технологии был присвоен собственный идентификатор уязвимости CVE-2017-5754.

Разработчики Meltdown поделились серией коротких видеороликов, демонстрирующих его в действии. Например, с помощью этого механизма можно практически полностью восстановить изображение:

Метод Spectre

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

Эта технология взлома может заставить любой процесс самостоятельно выдать содержимое собственной памяти. Простыми словами, Spectre умеет «залезать» в память другого процесса со схожим набором повторяющихся инструкций, таким образом стирая грань между изолированными приложениями. Экспертами было выявлено два основных типа атак на этом механизме:

  • через «секретный байт»;
  • через гаджеты (последовательность команд в адресном пространстве атакуемой программы, которая может быть использована для атаки).

У него нет какой-то универсальной реализации: обнаруженный механизм характеризуется целым спектром вариантов использования, что значительно усложняет выпуск соответствующего программного патча.

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

Обеим технологиям подвержены разные CPU. Так, «жертвами» Meltdown точно являются:

  • все процессоры Intel линеек Core, Xeon, Celeron и Pentium на ядрах семейства Core;
  • процессоры на новейших ядрах ARM Cortex-A75;
  • все устройства на платформе iOS, реализованные на процессорах ARM.

А в «круг интересов» Spectre входят:

  • все процессоры Intel;
  • все новые ядра ARM, поддерживающие спекулятивное выполнение кода;
  • некоторые процессоры AMD.

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

Последними ядрами ARM без спекулятивного кода были Cortex-A7 и Cortex-A53. Cortex-A7 можно встретить во встраиваемых системах (вроде Raspberry Pi 3 и iMX6UL). А Cortex-A53 — более современные ядра. На них построены такие процессоры, как Qualcomm Snapdragon 625, Snapdragon 410, Mediatek MT6752 и т.п.

Уязвимость так или иначе затрагивает почти всех. От атак могут пострадать владельцы:

  • смартфонов на платформах iOS и Android;
  • компьютеров с процессорами, выпущенными как минимум в последнем десятилетии;
  • видеокарт;
  • игровых консолей Xbox 360.

Ситуация с браузерами

Для полноценной эксплуатации уязвимости злоумышленнику необходимо запустить зловредный код на целевом устройстве. Но это ограничение перекрывается тем фактом, что доступ к памяти можно получить даже через JavaScript, встроенный в обычные сайты. Все браузеры на данный момент уязвимы к новому типу атак, для первичной безопасности хотя бы обновитесь до последних версий. Пользователям Chrome нужно предпринять дополнительные шаги.

В Google Chrome версии 63, выпущенной под Windows, macOS и Linux, уже встроена новая экспериментальная технология безопасности Site Isolation. Она в том числе обеспечивает частичную защиту устройств от атак типа Spectre. Пока что активировать эту функцию можно только вручную, что Google настоятельно рекомендует сделать всем пользователям.

Кнопка включения защищённого режима доступна по ссылке: chrome://flags/#enable-site-per-process

Активация функции Site Isolation

Больше защитных функций типа анти-Spectre разработчики обещают добавить в Chrome 64. Приблизительная дата выхода обновления – 21-27 января. Среди оглашённых Google нововведений, касающихся пользовательской безопасности, фигурируют изменения в JS-движке браузера, который будет обновлён до версии 8.

Что дальше?

Жертвой атак может стать практически любой пользователь любой операционки. Наиболее рациональный вариант — дождаться выхода соответствующих обновлений систем и внимательнее относиться к информационным источникам.

Учитывайте, что разработка патчей для столь серьёзных уязвимостей — задача не из простых, и выпущенные впопыхах исправления могут негативно отразиться на производительности многих устройств. Например, выпущенный буквально несколько дней назад патч для Windows был отозван компанией Microsoft из-за поступивших жалоб пользователей на проблемы, связанные с отказом ОС.

Компания IBM пока решила вовсе не торопиться с запуском патчей против Meltdown и Spectre. Это вызвано множеством проблем, связанных с попытками повлиять на привычный ход выполнения инструкций. Разработанные «заплатки» зачастую просто не срабатывают из-за конфликтов с антивирусами в ОС Windows. А установка патчей на ряд серверов Red Hat Enterprise Linux не приводит даже к их перезагрузке, что вызывает у экспертов подозрения насчёт корректности работы исправлений.

Однако есть и более удачные попытки: Apple все-таки удалось выпустить набор обновлений для всех своих устройств с защитой от атак через механизм Spectre.

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

Ещё интересное для вас:
Тест: какой язык программирования вам стоит выбрать для изучения?
Тест: как хорошо вы разбираетесь в Data Science?
Соревнования и бесплатная онлайн-школа для программистов