ADG Оставить заявку
Блог Информационная безопасность 4 мин чтения

Микрокод Intel и AMD для Spectre Variant 2: обновляем осторожно

Intel выпустил микрокод для Spectre Variant 2, но патч для Broadwell/Haswell оказался нестабильным. Фиксируем решение подождать revised patch.

Контекст момента

Intel и AMD выпускают обновления микрокода процессоров для Spectre Variant 2 (CVE-2017-5715)

Девять дней прошло с публикации CVE-2017-5753/5715 - и ситуация немного прояснилась, но немного и усложнилась. По Meltdown - всё понятно, патчи ядра выкатили, серверы перезагрузили, живём. По Spectre Variant 2 (CVE-2017-5715, branch target injection) - история длиннее. Эта уязвимость требует не только патчей ядра, но и обновления микрокода процессора. Вот с микрокодом и начались приключения.

Что вообще нужно для Spectre V2

Напомним механику. CVE-2017-5715 эксплуатирует branch predictor - блок предсказания переходов. Атакующий может «натренировать» предиктор так, что спекулятивное выполнение пойдёт в нужную ему сторону и оставит следы в кеше. Закрыть это чисто программно сложно: нужны или новые инструкции от CPU для управления предиктором, или новый микрокод, который добавляет IBRS/IBPB/STIBP-функциональность.

Без микрокода - только retpoline, компиляторный трюк. Он помогает, но не закрывает всё. Микрокод - обязательная часть полного митигейшна.

Схема, как это должно работать вместе:

graph LR
    MC[Microcode update\nIBRS/IBPB support] --> OS[OS kernel\nIBRS при syscall]
    OS --> Retpoline[Retpoline\nкомпилятор/ядро]
    MC --> OS
    Retpoline --> Mitigated[CVE-2017-5715\nзакрыта]
    OS --> Mitigated

Intel выпустил - и сразу же попросил придержать

Intel анонсировал обновления микрокода для широкого списка платформ: Skylake, Kaby Lake, Broadwell, Haswell, Ivy Bridge, Sandy Bridge и ряд других. Патчи пошли через OEM-вендоров - Dell, HP, Lenovo - и через обновления дистрибутивов (пакет intel-microcode в Debian/Ubuntu, аналоги в RHEL).

Проблема обнаружилась быстро: Broadwell и Haswell получили патч с дефектом. Симптомы - внезапные перезагрузки, зависания под нагрузкой, в ряде случаев повреждение данных в памяти при специфических условиях. Intel подтвердил, что это связано именно с обновлением микрокода, и официально рекомендовал OEM-вендорам приостановить распространение для Broadwell/Haswell до выхода исправленной версии.

Broadwell и Haswell - это серверные Xeon серий E5 и E7 в поколениях v3 и v4, которых в production-парках ещё очень много. У нас среди клиентов такого железа примерно треть.

Что мы решили

После того как информация о нестабильности стала официальной, решение было однозначным: не катить микрокод для Broadwell/Haswell до выхода revised patch. Конкретно:

  • Skylake и новее - обновляем, патч для них без известных проблем. Проходим по серверам через Ansible, apt-get install intel-microcode или эквивалент для RHEL.
  • Broadwell и Haswell - блокируем обновление. В Ansible выставляем hold на пакет intel-microcode, чтобы случайное apt-get upgrade не накатило проблемный патч.
  • AMD - отдельная история. AMD выпустил обновление микрокода для части своих процессоров тоже, но AMD изначально заявлял что Spectre V2 у них под существенно меньшей угрозой из-за архитектурных отличий предиктора. Пока ждём больше ясности по AMD, смотрим на документацию и держим руку на пульсе.

Блокировка выглядит примерно так:

# Для Debian/Ubuntu - поставить hold на intel-microcode
apt-mark hold intel-microcode

# Проверить что hold выставлен
apt-mark showhold

На RHEL/CentOS - аналогично через yum versionlock.

Что это значит на практике

Серверы с Broadwell/Haswell остаются без микрокодного митигейшна для Spectre V2. Это не то же самое, что «полностью уязвимы»: retpoline в ядре работает и без микрокода, он закрывает часть векторов. Но полного закрытия без IBRS нет.

С точки зрения приоритетов и рисков: Spectre V2 - сложная атака, требующая возможности исполнять код на целевом хосте. Если контроль выполнения кода на сервере уже потерян - у нас другие проблемы. В managed-инфраструктуре клиентов, где на одном хосте не крутятся задачи разных арендаторов, угроза реальна, но не критична по сравнению с незакрытым Meltdown.

Это не означает что можно расслабиться - это означает что нестабильный патч хуже чем немного подождать. Перезагрузка сервера в production с повреждением данных в памяти - это гарантированный инцидент. Нераскрытая Spectre V2 в нашей модели угроз - риск меньший.

Где следим

Intel обещал revised patch для Broadwell/Haswell. Пока даты нет. Следим через:

  • Security advisories Intel: INTEL-SA-00088 - официальная страница обновлений.
  • Upstream Debian/Ubuntu: как только выйдет исправленная версия intel-microcode, пакет обновится, мы увидим в apt.
  • RHEL/CentOS errata: Red Hat отслеживает это через CVE-tracker.

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

По итогу: Spectre история длинная, один патч не закрыл всё. Нормально - такова механика закрытия аппаратных уязвимостей через прошивку. Главное сейчас - не наломать дров с нестабильным микрокодом и дождаться нормального исправления.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.