Уязвимость Spectre: 4 года с момента обнаружения

Существует ли практическая угроза аппаратных уязвимостей для бизнеса?

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

Множество вариантов Spectre

В оригинальном анонсе группы исследователей в августе 2018 года было показано три уязвимости: Spectre v1 и v2, а также Meltdown. Их эксплуатация, как правило, предполагает выполнение вредоносного кода на уязвимой системе, пусть и с низкими привилегиями. Самый опасный вариант — атака из браузера при посещении зараженной веб-страницы. Можно определить общие черты этих уязвимостей:

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

Последний аргумент — это как раз то, что вызвало особый интерес к, казалось бы, теоретической научной работе. Во всех случаях эксплуатируются особенности системы предсказания переходов, или branch prediction. Данный механизм был внедрен больше 20 лет назад, он позволяет ускорить быстродействие за счет выполнения набора инструкций еще до явного запроса на их выполнение в программе. Если предсказание было верным, ресурсы процессора будут использованы более эффективно, исключается ожидание выполнения части инструкций. Если предсказание ошибочное, вычисления отбрасываются.

В случае Spectre v1 была показана возможность манипуляции branch prediction так, что выполняется чтение данных, к которым программа не имеет доступа. Эти данные сохраняются в кэш-памяти и затем извлекаются оттуда по сторонним каналам. Предельно простое объяснение проблемы следующее: для процессора нормально выполнять код, не ожидая явной команды на выполнение. Этот механизм считался безопасным, так как считалось, что ошибочно прочитанный секрет не передавался программе. Но исследователи нашли способы непрямого чтения секретных данных.

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

Как можно бороться со Spectre

В теории затруднить атаку с использованием аппаратной уязвимости процессора можно тремя путями: выпустить обновленный микрокод для существующих процессоров, модифицировать вновь выпускаемые CPU или решить проблему программно. Часто требуется комбинация из обновления микрокода и ПО. Микрокод, закрывающий часть уязвимостей, доступен для процессоров Intel начиная с поколения Haswell 2013 года. Аппаратные решения впервые были внедрены в восьмом поколении процессоров Intel, а также в CPU AMD поколения Zen 2.

Существующие программные решения можно оценить на примере модификаций в ядре Linux против Spectre v1 и v2. В зависимости от целей и задач конкретной системы, предлагаются различные меры, вплоть до полного отключения спекулятивного выполнения кода с серьезными последствиями для производительности.

Для большинства организаций, чья бизнес-модель так или иначе зависит от производительности большого парка серверов (собственных или арендуемых), именно снижение производительности будет наиболее заметным последствием мер против атак типа Spectre. В относительно свежем бенчмарке на сайте Phoronix, исследующем работу различных серверных приложений, показано снижение производительности в среднем на четверть, если все меры предосторожности в ОС Linux включены.

Практические атаки и proof of concept

Несмотря на большое количество типов атак, угроза кражи данных с использованием Spectre пока остается теоретической. Хотя каждая исследовательская работа содержит какой-то код, демонстрирующий утечку секретов, это не значит, что данный код можно применить против реальной системы. Типичные ограничения этих демонстраций, или proof of concept, следующие:

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

Наиболее впечатляющей теоретической работой (по масштабу возможных последствий) является атака NetSpectre. Исследователям удалось показать утечку данных не локально, а удаленно, со скоростью от 15 до 60 бит в час. Ограничения атаки понятны: низкая скорость эксфильтрации данных, сопровождаемая огромным объемом мусорного трафика, плюс необходимость присутствия уязвимого кода на атакуемом сервере в нужном месте.

Две практические атаки, максимально приближенные к «боевым» условиям, были показаны в прошлом году. В марте специалисты Google показали концепт leaky.page, веб-страницу, способную извлечь данные из оперативной памяти, принадлежащей браузеру. В сентябре была продемонстрирована атака Spook.js на браузер Google Chrome последней (на момент исследования) версии 92 с защитой от Spectre (методом изоляции веб-страниц в отдельных процессах браузера). Здесь уже была показана реальная кража данных: пароля от соцсети, данных менеджера паролей, изображения, загружаемого пользователем в приватное облако. Во всех случаях атака требует открытия зараженной страницы, расположенной на том же домене, данные для которого требуется украсть. Например, кража пароля от сервиса Tumblr предполагает загрузку вредоносного кода на Javascript на персональную страницу в этой же соцсети.

Варианты угроз

Атака Spook.js была нейтрализована следующим патчем для браузера Google Chrome. На данный момент нет непосредственной угрозы эксплуатации уязвимостей Spectre в реальных условиях: известные атаки чрезвычайно сложны и требуют высочайшей квалификации на стороне злоумышленника.

Даже реалистичные proof of concept закрываются патчем, да и без него требуют совпадения целого набора условий. Сообщения СМИ о реальных spectre-эксплойтах пока не подтверждаются, но поставщики защитного ПО на всякий случай добавляют средства определения известных механизмов эксплуатации.

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

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

Советы