Уязвимости GRUB2 UEFI SecureBoot — 2021

После анонса в июле 2020 г. о "BootHole", группе ошибок в GRUB2, исследователи безопасности и разработчики Debian, а также других дистрибутивов продолжили поиск других проблем, которые могли бы позволить обойти UEFI Secure Boot. Было обнаружено ещё несколько таких ошибок. Подробности см. в рекомендации по безопасности Debian 4867-1. Цель данного документа состоит в том, чтобы объяснить последствия этих уязвимостей, а также указать, что следует предпринять для того, чтобы исправить их.

Общая информация: что такое UEFI Secure Boot?

UEFI Secure Boot (SB) представляет собой механизм проверки, гарантирующий что запускаемый UEFI-микропрограммой компьютера код является доверенным. Он разработан для защиты системы от вредоносного кода, загружаемого и исполняемого достаточно рано в процессе старта и до загрузки операционной системы.

SB работает с использованием криптографических контрольных сумм и подписей. Каждая программа, загружаемая микропрограммой, содержит подпись и контрольную сумму. Перед тем, как разрешить исполнение, микропрограмма выполняет проверку того, что запускаемая программа является доверенной. Это осуществляется путём проверки контрольной суммы и подписи. Если SB включён в системе, то любая попытка выполнить недоверенную программу будет запрещена. Это позволяет предотвратить запуск непредусмотренного / неавторизованного кода в UEFI-окружении.

Большинство оборудования с архитектурой x86 поставляется с завода с предустановленными ключами Microsoft. Это означает, что микропрограмма в такой системе доверяет двоичным файлам, подписанным Microsoft. Большинство современных систем поставляются с включённым механизмом SB, по умолчанию они не запускают какой-либо неподписанный код. Однако можно изменить настройки микропрограммы и либо отключить SB, либо зарегистрировать дополнительные ключи.

Debian, как и многие другие операционные системы на основе Linux, использует программу, называемую shim, для расширения доверия от микропрограммы до других программ, которые нам требуется обезопасить в ходе ранней загрузки — это загрузчик GRUB2, ядро Linux и инструменты обновления микропрограмм (fwupd и fwupdate).

Обнаружение многочисленных ошибок GRUB2

В модуле acpi для GRUB2 была обнаружена ошибка. Этот модуль разработан для предоставления интерфейса драйверов для ACPI (улучшенного интерфейса для конфигурации и управления электропитанием), довольно распространённой части современного оборудования. К сожалению, модуль ACPI в настоящее время позволяет привилегированному пользователю загружать специально сформированные таблицы ACPI при включённом Secure Boot и выполнять произвольные изменения состояния системы; это позволяет людям легко ломать цепочку Secure Boot. В настоящее время эта уязвимость исправлена.

Как и в случае с BootHole вместо исправления этой одной ошибки разработчики продолжили более глубокий аудит и анализ исходного кода GRUB2. Было бы безответственно исправить одну серьёзную уязвимость без поиска других уязвимостей! Мы обнаружили ещё несколько мест в коде, где выделение внутренней памяти может приводить к переполнению при получении неожиданных входных данных, а также несколько мест, где память может использоваться после её освобождения. Исправления для всех этих ошибок были распространены среди участников сообщества и протестированы.

Полный список обнаруженных ошибок можно найти в рекомендации по безопасности Debian 4867-1.

Необходимость отзыва ключей для исправления цепочки Secure Boot

Очевидно, Debian и другие поставщики операционных систем выпустят исправленные версии GRUB2 и Linux. Тем не менее на этом исправление проблем не завершается. Злоумышленники всё ещё могут быть способны использовать предыдущие уязвимые версии загрузчика и ядра, чтобы обойти Secure Boot.

Для предотвращения этого следующим шагом будет внесение сотрудниками Microsoft небезопасных двоичных файлов в список блокировки, чтобы они не могли быть запущены при включённом SB. Это достигается с помощью списка DBX, который является частью UEFI Secure Boot. Все дистрибутивы Linux, поставляющие подписанные Microsoft копии shim, должны предоставить подробную информацию о двоичных файлах или используемых ключах, чтобы указанные действия были выполнены. Будет обновлён UEFI-файл со списком отозванных ключей, обновление будет содержать предоставленную информацию. Позднее, некоторый момент времени, системы начнут использовать этот обновлённый список и перестанут запускать уязвимые двоичные файлы при использовании Secure Boot.

Точный срок развёртывания этого изменения пока не ясен. В какой-то момент поставщики BIOS/UEFI добавят новый список отозванных ключей в новые сборки микропрограмм для нового оборудования. Microsoft может выпустить обновления для существующих систем через Windows Update. Некоторые дистрибутивы Linux также могут выпустить обновления через свои собственные системы обновления безопасности. Debian пока этого не сделал, но мы собираемся сделать это в будущем.

Каковы последствия отзыва ключей?

Большинство поставщиков с недоверием относятся к автоматическому применению обновлений, которые отзывают ключи, используемые для Secure Boot. Существующие наборы ПО могут неожиданно перестать загружаться при включённом SB, если пользователь также не установил требуемые обновления ПО. Двойная загрузка систем Windows/Linux тоже может неожиданно прекратить загрузку Linux. Конечно же, старые установочные образы и живые тоже перестанут загружаться, что потенциально усложнит восстановление систем.

Имеются два очевидных способа исправления незагружающейся системы:

Оба пути могут вначале показаться простыми, однако каждый из них потребует некоторого количества времени, особенно от пользователей нескольких систем. Кроме того, помните, что для включения или отключения Secure Boot требуется непосредственный доступ к машине. Обычно нельзя изменить эту настройку извне системы настройки микропрограммы компьютера. Удалённые серверные машины могут потребовать специального обращения по этой самой причине.

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

Обновлённые пакеты

ВНИМАНИЕ: системы, использующие Debian 9 (stretch) и более ранние выпуски необязательно получат соответствующие обновления, поскольку Debian 10 (buster) является первым выпуском Debian, включающим поддержку UEFI Secure Boot.

В Debian имеются пять пакетов с исходным кодом, которые будут обновлены из-за описанных здесь изменений UEFI Secure Boot:

1. GRUB2

Обновлённые версии Debian-пакетов GRUB2 доступны уже сейчас в архиве debian-security для стабильного выпуска Debian 10 (buster). Исправленные версии очень скоро появятся в обычном архиве Debian для разрабатываемых версий Debian (нестабильного и тестируемого).

2. Linux

Обновлённые версии Debian-пакетов linux будут доступны в скором времени через buster-proposed-updates для стабильного выпуска Debian 10 (buster) и будут включены в готовящуюся редакцию 10.10. Новые пакеты также скоро появятся в архиве Debian для разрабатываемых версий Debian (нестабильного и тестируемого). Мы надеемся, что исправленные пакеты будут вскоре загружены в buster-backports.

3. Shim и SBAT

Обнаружение серии ошибок BootHole было первым случаем, когда в экосистеме UEFI Secure Boot потребовалось отозвать ключи. Это показало досадную ошибку проектирования в механизме отзыва ключей SB: большое количество разных дистрибутивов Linux и разных двоичных файлов UEFI приводят к тому, что список отзыва ключей растёт очень быстро. Многие компьютерные системы имеют лишь ограниченный объём места для хранения данных об отзыве ключей, отзыв большого числа ключей может быстро заполнить этот объём и привести к различным поломкам систем.

Для борьбы с этой проблемой разработчики shim разработали более эффективный в плане места для хранения метод блокировки в будущем небезопасных двоичных файлов UEFI. Он называется SBAT (Secure Boot Advanced Targeting). Он работает путём отслеживания номеров поколения подписанных программ. Вместо отзыва отдельных подписей при обнаружении проблем используются счётчики для определения старых версий программ, которые более не считаются безопасными. Отзыв старых серий двоичных файлов GRUB2 (например) теперь потребует обновления переменной UEFI, содержащей номер поколения для GRUB2; любые версии GRUB2 с более старым номером более не будут считаться безопасными. За дополнительной информацией о SBAT обращайтесь к shim документации по SBAT.

К сожалению, новая разработка shim SBAT ещё не совсем готова. Разработчики собирались сейчас выпустить новую версию shim, содержащую эту новую возможность, но они столкнулись с неожиданными проблемами. Разработка ещё продолжается. Мы ожидаем, что сообщество Linux очень скоро обновиться до этой новой версии shim. До того, как эта разработка будет готова, мы все продолжим использовать наши существующие подписанные двоичные файлы shim.

Обновлённые версии Debian-пакетов shim будут доступны сразу же, как только работа будет завершена. О них будет объявлено здесь и в других местах. Кроме того, мы опубликуем новую редакцию Debian, 10.10, а также выпустим новые пакеты shim для разрабатываемых версий Debian (нестабильного и тестируемого).

4. Fwupdate

Обновлённые версии Debian-пакетов fwupdate будут доступны в скором времени через buster-proposed-updates для стабильного выпуска Debian 10 (buster) и будут включены в готовящуюся редакцию 10.10. Пакет fwupdate уже был удалён из нестабильного и тестируемого выпусков в связи с его заменой на пакет fwupd.

5. Fwupd

Обновлённые версии Debian-пакетов fwupd будут доступны в скором времени через buster-proposed-updates для стабильного выпуска Debian 10 (buster) и будут включены в готовящуюся редакцию 10.10. Новые пакеты также находятся в архиве Debian для разрабатываемых версий Debian (нестабильного и тестируемого).

6. Ключи

Разработчики Debian создали новые ключи для подписывания и сертификаты для своих пакетов Secure Boot. Ранее мы использовали один сертификат для всех наших пакетов:

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

Редакция Debian 10.10 (buster) обновлённые установочные носители и живые образы

Все описанные здесь обновления планируется включить в редакцию Debian 10.10 (buster), который будет выпущен в скором времени. Таким образом, пользователям, которым нужны установочные и живые образы Debian следует выбирать 10.10. В будущем более ранние образы могут не работать с Secure Boot, так как будет выполнен отзыв ключей.

Дополнительная информация

Дополнительную информацию о настройке UEFI Secure Boot в Debian можно найти в вики Debian по адресу https://wiki.debian.org/SecureBoot.

Другие ресурсы по данной теме: