Защита гостевых виртуальных машин от уязвимости CVE-2017-5715 (внедрение ответвления цели)

На этой странице приведены дополнительные сведения о защите виртуальных машин на узлах Hyper-V от уязвимости CVE-2017-5715 (внедрение ответвления цели). Общие инструкции по Windows Server см. на этой странице.

Для обеспечения защиты виртуальных машин необходимо выполнить следующее действия.

  1. Обновите операционную систему узла.
  2. Убедитесь, что на узле виртуализации установлено встроенное ПО, которое содержит обновления для защиты от CVE-2017-5715.
  3. Убедитесь, что платформа Hyper-V предоставляет новые возможности процессора гостевым виртуальным машинам Hyper-V.
  4. Обновите гостевую операционную систему при необходимости.
  5. Выполните холодную перезагрузку гостевых виртуальных машин.

Обновление операционной системы узла

Установить обновления операционной системы Windows на узле виртуализации. Сведения о том, как включить это обновление, см. в статье базы знаний Майкрософт 4072699.

Убедитесь, что на узле виртуализации установлено встроенное ПО, которое содержит обновления для защиты от CVE-2017-5715

Обновления встроенного ПО от изготовителя оборудования могут содержать новые возможности процессора, которые можно использовать для защиты от уязвимости CVE-2017-5715 (IBRS, STIBP, IBPB). После подтверждения обновления встроенного ПО узла виртуализации низкоуровневая оболочка может предоставить эти дополнительные возможности гостевым виртуальным машинам после выполнения следующих действий.

Убедитесь, что платформа Hyper-V предоставляет новые возможности процессора гостевым виртуальным машинам Hyper-V

Убедитесь, что Hyper-V настроен для предоставления новых возможностей процессора гостевым виртуальным машинам. Эта конфигурация зависит от версии VM гостевых виртуальных машин.

Если версия VM всех виртуальных машин на узле — 8.0 или более поздняя, настройка не требуется. Эти виртуальные машины смогут обнаружить новые возможности процессора после холодной перезагрузки.

Если версия каких-либо виртуальных машин меньше 8.0, необходимо настроить определенное значение реестра в операционной системе узла. Таким образом платформа Hyper-V предоставит новые возможности процессора гостевым виртуальным машинам с более ранними версиями VM.

Значение реестра равно MinVmVersionForCpuBasedMitigations в разделе HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization. В этом значении следует указать минимальную версию VM, которой требуется доступ к возможностям обновленного встроенного ПО в формате "основной_номер.дополнительный_номер". Чтобы предоставить встроенного ПО всем виртуальны машинам на узле (т. е. версиям 1.0 и более поздним версиям), выполните следующую команду на узле:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d "1.0" /f

Виртуальная машина версии 8.0 была представлена с Windows Server 2016 и юбилейным обновлением Windows 10. Узлы, работающие Windows Server 2012 R2 и ниже, должны задать значение реестра*

Динамическая миграция завершится сбоем между узлами с обновленным встроенным ПО и узлами без обновленного встроенного ПО. Операция запуска завершится ошибкой из сохраненного состояния. Дополнительные сведения см. в разделе Часто задаваемые вопросы в нижней части этой статьи.

Необязательно. Настройка систем Intel , предшествующих Skylake , для использования Retpoline

Настройка виртуальных машин на узлах Intel, предшествующих Skylake, для Retpoline приведет к блокировке динамической миграции на более новые узлы (например, Skylake и за ее пределами).

По умолчанию виртуальные машины, работающие в системах, предшествующих Skylake, не могут использовать retpoline. Чтобы разрешить этим системам использовать меры по устранению рисков на основе retpoline, задайте в RetsPredictedFromRsbOnly параметре HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization значение 1.

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v RetsPredictedFromRsbOnly /t REG_DWORD /d 1 /f

Чтобы отменить эту конфигурацию (т. е. запретить виртуальным машинам использовать retpoline), задайте для значение RetsPredictedFromRsbOnly0.

Обновление гостевой операционной системы

Для завершения настройки средств защиты от уязвимости CVE-2017-5715 на этих виртуальных машинах необходимо обновить и настроить гостевую операционную систему, чтобы воспользоваться преимуществами новых возможностей. Для операционных систем Майкрософт во время обновления следуйте инструкциям, приведенным в этой статье.

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

Холодная перезагрузка гостевой виртуальной машины

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

Вопросы и ответы

Как это влияет на динамическую миграцию?

Динамическая миграция виртуальной машины с новыми возможностями процессора завершится ошибкой при переходе на узлы Hyper-V без обновленного встроенное ПО. Чтобы реализовать динамическую миграцию на узле без обновленного встроенного ПО, остановите предоставление новых возможностей процессора этой гостевой виртуальной машине. Самый простой способ это сделать — изменить MinVmVersionForCpuBasedMitigations до версии VM, которая больше версии, необходимой для переноса, и выполнить холодную перезагрузку виртуальной машины.

Миграция виртуальных машин без новых возможностей процессора будет выполнена успешно при переходе на узлы Hyper-V с обновленным встроенным ПО. Однако чтобы эти гостевые системы обнаружили обновленные возможности встроенного ПО, необходима холодная перезагрузка.

Виртуальные машины, настроенные для использования Retpoline в системах Intel, предшествующих Skylake, не смогут перейти на более новые семейства процессоров (например, Skylake и более новые).

Как насчет динамической миграции виртуальных машин версии 5.0 между Windows Server 2012 R2 и Windows Server 2016?

Для успешного выполнения этого сценария необходимо настроить значение реестра и в Windows Server 2012 R2, и в Windows Server 2016. После перехода на Windows Server 2016 версия виртуальной машины останется равной 5.0, таким образом раздел реестра должен предоставлять новые возможности процессора виртуальной машине.

Эти инструкции применяются к виртуальным машинам, работающим на VMWare?

Нет, эти инструкции относятся к виртуальным машинам, работающим на узлах Hyper-V.

Эти инструкции применяются к Hyper-V в Windows 10?

Да, те же действия относятся к виртуальным машинам, работающими под управлением Windows Server и клиента Windows.

Требуется ли установить обновления встроенного ПО перед выполнением холодной перезагрузки виртуальных машин?

Да, необходимо обновить встроенное ПО и операционную систему узла перед холодной перезагрузки виртуальных машин.

Что можно сделать, если поставщик оборудования еще не предоставил обновленное встроенное ПО?

См. раздел Альтернативные средства защиты узлов Hyper-V под управлением Windows Server 2016 от уязвимостей спекулятивного выполнения бокового канала

Как проверить версию VM моих виртуальных машин?

Выполните следующие команды PowerShell на узле Hyper-V:

Get-VM * | Format-Table Name, Version  

Нужно ли сделать что-то еще для защиты виртуальных машин, работающих в режиме совместимости процессора?

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

Что делать, если только часть компьютеров в моем кластере получили обновление встроенного ПО?

Это повлияет на динамическую миграцию в кластере. Виртуальные машины с новыми возможностями процессора невозможно перенести динамически на узлы без обновленного встроенного ПО.

Как убедиться, что у гостевой виртуальной машины есть доступ к новым возможностям процессора?

Используйте модуль или сценарий PowerShell "speculation control". Подробные инструкции см. на этой странице.

Как это влияет на операцию запуска на виртуальной машине с состоянием сохранения?

Операция запуска завершится ошибкой. Самый простой способ это сделать — изменить MinVmVersionForCpuBasedMitigations до версии VM, которая больше версии, необходимой для переноса, и выполнить холодную перезагрузку виртуальной машины.