Замечание: оригинал этого документа новее, чем перевод.

Уязвимость GRUB2 UEFI SecureBoot — 'BootHole'

Разработчики Debian и других дистрибутивов сообщества Linux недавно узнали о серьёзной проблеме в загрузчике GRUB2, позволяющей злоумышленнику полностью обойти UEFI Secure Boot. Подробности касательно этой проблемы описаны в in рекомендации по безопасности Debian 4735. Цель настоящего документа состоит в объяснении последствий данной уязвимости, а также того, какие шаги следует предпринять для её исправления.

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

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

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

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

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

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

К сожалению, в коде загрузчика GRUB2 для чтения и грамматического разбора файла настроек (grub.cfg) была обнаружена серьёзная ошибка, которая ломает цепочку доверия. Используя эту ошибку можно выйти из защищённого окружения и загрузить неподписанные программы в ходе ранней загрузки. Эта уязвимость была обнаружены исследователями Eclypsium и получила название BootHole.

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

Полный список проблем можно найти в рекомендации по безопасности Debian 4735.

Обнаружение ошибок Linux

В ходе обсуждения уязвимостей в GRUB2, разработчики говорили и о двух возможностях обхода защиты, которые недавно были обнаружены и исправлены Джейсоном Донефельдом (zx2c4) (1, 2), когда ядро Linux может позволить обойти Secure Boot. Обе уязвимости позволяют суперпользователю заменить таблицы ACPI в заблокированной системе, когда это не должно быть разрешено. Исправления этих проблем уже выпущены.

Необходимость отзыва ключей для исправления цепочки 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 пришлось создать новый ключ/сертификат для подписывания собственных пакетов, поддерживающих Secure Boot. Старый сертификат был помечен как Debian Secure Boot Signer (отпечаток ключа f156d24f5d4e775da0e6a9111f074cfce701939d688c64dba093f97753434f2c); новый сертификат помечен как Debian Secure Boot Signer 2020 (3a91a54f9f46a720fe5bbd2390538ba557da0c2ed5286f5351fe04fff254ec31).

В 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.5. Новые пакеты также находятся в архиве Debian для разрабатываемых версий Debian (нестабильного и тестируемого). Мы надеемся, что исправленные пакеты будут вскоре загружены в buster-backports.

3. Shim

Учитывая механизм управления ключами Secure Boot в Debian, Debian не требуется отзывать существующие и подписанные Microsoft пакеты shim. Тем не менее подписанные версии пакетов shim-helper необходимо собрать заново с использованием нового ключа.

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

4. Fwupdate

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

5. Fwupd

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

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

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

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

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

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