Микрокод 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 история длинная, один патч не закрыл всё. Нормально - такова механика закрытия аппаратных уязвимостей через прошивку. Главное сейчас - не наломать дров с нестабильным микрокодом и дождаться нормального исправления.