Введение
Корпорация Майкрософт узнала об уязвимости диспетчера загрузки Windows, которая позволяет злоумышленнику обойти безопасную загрузку. Проблема в диспетчере загрузки была исправлена и выпущена в качестве обновления для системы безопасности. Оставшаяся уязвимость заключается в том, что злоумышленник с правами администратора или физическим доступом к устройству может откатить диспетчер загрузки до версии без исправления безопасности. Эта уязвимость отката используется вредоносными программами BlackLotus для обхода безопасной загрузки, описанной в CVE-2023-24932. Чтобы устранить эту проблему, мы отменим уязвимые диспетчеры загрузки.
Из-за большого количества диспетчеров загрузки, которые должны быть заблокированы, мы используем альтернативный способ блокировки диспетчеров загрузки. Это влияет на операционные системы, отличные от Windows, так как в этих системах необходимо будет предоставить исправление, чтобы заблокировать использование диспетчеров загрузки Windows в качестве вектора атаки в операционных системах, отличных от Windows.
Дополнительные сведения
Одним из способов блокировки загрузки двоичных файлов уязвимых приложений EFI с помощью встроенного ПО является добавление хэшей уязвимых приложений в список запрещенных UEFI (DBX). Список DBX хранится в управляемой флэш-памяти устройств. Ограничением этого метода блокировки является ограниченная флэш-память встроенного ПО, доступная для хранения DBX. Из-за этого ограничения и большого количества диспетчеров загрузки, которые должны быть заблокированы (диспетчеры загрузки Windows за последние 10 лет), полностью полагаться на DBX для этой проблемы невозможно.
Для этой проблемы мы выбрали гибридный метод блокировки уязвимых диспетчеров загрузки. Только несколько диспетчеров загрузки, выпущенных в более ранних версиях Windows, будут добавлены в DBX. Для Windows 10 и более поздних версий будет использоваться политика Защитник Windows управления приложениями (WDAC), которая блокирует уязвимые диспетчеры загрузки Windows. Когда политика применяется к системе Windows, диспетчер загрузки "заблокирует" политику для системы, добавив переменную в встроенное ПО UEFI. Диспетчеры загрузки Windows будут учитывать политику и блокировку UEFI. Если блокировка UEFI настроена и политика удалена, диспетчер загрузки Windows не запустится. Если политика на месте, диспетчер загрузки не запустится, если она заблокирована политикой.
Руководство по блокировке уязвимых диспетчеров загрузки Windows
ПРИМЕЧАНИЕ Пользователям должна быть предоставлена возможность применить переменную, чтобы они могли контролировать, когда они защищены.
Включение блокировки UEFI приведет к остановке загрузки существующего загрузочного носителя Windows до тех пор, пока носитель не будет обновлен с помощью обновлений Windows, выпущенных 9 мая 2023 г. или позже. Рекомендации по обновлению носителя см. в статье KB5025885: управление отзывами диспетчера загрузки Windows для изменений безопасной загрузки, связанных с CVE-2023-24932.
-
Для систем с поддержкой безопасной загрузки, которые загружают только операционные системы
, отличные от Windows Для систем, которые запускают только операционные системы, отличные от Windows, и никогда не запускают Windows, эти меры по устранению рисков можно применить к системе немедленно. -
Для систем с двойной загрузкой Windows и другой операционной системы
Для систем, запускающих Windows, устранение рисков, отличных от Windows, следует применять только после обновления операционной системы Windows до обновлений Windows, выпущенных 9 мая 2023 г. или позже.
Создание блокировки UEFI
Блокировка UEFI содержит две переменные, необходимые для предотвращения атак отката в диспетчере загрузки Windows. Ниже перечислены следующие переменные:
-
Атрибуты SiPolicy SKU
Эта политика имеет следующие атрибуты:
-
Идентификатор типа политики:
{976d12c8-cb9f-4730-be52-54600843238e}
-
Имя файла "SkuSiPolicy.p7b"
-
Конкретное физическое расположение EFI\Microsoft\Boot
Как и все подписанные политики WDAC, политика SKU со знаком защищена двумя переменными UEFI:
-
SKU_POLICY_VERSION_NAME: "SkuSiPolicyVersion"
-
SKU_POLICY_UPDATE_POLICY_SIGNERS_NAME: "SkuSiPolicyUpdateSigners"
-
-
SKU SiPolicy Variables
Эта политика использует две переменные UEFI, хранящиеся в пространстве имен EFI или поставщике
. GUID(SECUREBOOT_EFI_NAMESPACE_GUID):#define SECUREBOOT_EFI_NAMESPACE_GUID \
{0x77fa9abd, 0x0359, 0x4d32, \
{0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b}};
-
SkuSiPolicyVersion
-
имеет тип ULONGLONG/UInt64 во время выполнения.
-
определяется <VersionEx>2.0.0.2</VersionEx> в XML-коде политики в виде (MAJOR. НЕЗНАЧИТЕЛЬНЫЕ. REVISION. BUILDNUMBER)
-
Оно переводится в ULONGLONG как
((major##ULL << 48) + (minor##ULL << 32) + (revision##ULL << 16) + buildnumber)
Каждый номер версии содержит 16 бит, поэтому он имеет в общей сложности 64 бита.
-
Версия новой политики должна быть равна или больше версии, хранящейся в переменной UEFI во время выполнения.
-
Описание. Задайте версию политики загрузки целостности кода.
-
Атрибуты:
(EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)
-
Guid пространства имен:
77fa9abd-0359-4d32-bd60-28f4e78f784b
-
Тип данных:
uint8_t[8]
-
Данных:
uint8_t SkuSiPolicyVersion[8] = { 0x2,0x0,0x0,0x0,0x0,0x0,0x2,0x0 };
-
-
SkuSiPolicyUpdateSigners
-
Должен быть подписывателем Windows.
-
Описание: сведения о подписывшем политике.
-
Атрибуты:
(EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)
-
Guid пространства имен:
77fa9abd-0359-4d32-bd60-28f4e78f784bd
-
Тип данных:
uint8_t[131]
-
Данных:
uint8_tSkuSiPolicyUpdateSigners[131] =
{ 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
0x0b, 0x00, 0x00, 0x00, 0xd0, 0x91, 0x73, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
0x00, 0x00, 0x00, 0x00, 0x54, 0xa6, 0x78, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
0x00, 0x00, 0x00, 0x00, 0x5c, 0xa6, 0x78, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
0x00, 0x00, 0x00, 0x00, 0x64, 0xa6, 0x78, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x0a, 0x2b, 0x06, 0x01,
0x04, 0x01, 0x82, 0x37, 0x0a, 0x03, 0x06, 0x00,
0x00, 0x00, 0x00};
-
-
Применение DBX
Мы выпустили файл DbxUpdate.bin для этой проблемы на UEFI.org. Эти хэши включают все отозванные диспетчеры загрузки Windows, выпущенные между Windows 8 и первоначальным выпуском Windows 10, которые не учитывают политику целостности кода.
Крайне важно, чтобы они применялись с осторожностью из-за риска того, что они могут нарушить работу двойной загрузочной системы, которая использует несколько операционных систем и один из этих диспетчеров загрузки. В краткосрочной перспективе рекомендуется применять эти хэши для любой системы при необходимости.