Verified Boot
Verified Boot — это технология проверки целостности и подлинности загрузочного образа операционной системы, реализуемая на этапе загрузки устройства. Она гарантирует, что загрузчик, ядро и системные разделы не были модифицированы или заменены на вредоносные версии, и что устройство загружается только с доверенным, криптографически подписанным программным обеспечением. Verified Boot является ключевым компонентом цепочки доверенной загрузки (secure boot chain) в современных мобильных и встраиваемых системах, особенно на платформе Android.
Принцип работы
Основой Verified Boot является криптографическая верификация. Процесс начинается с неизменяемого аппаратного корня доверия (Hardware Root of Trust), обычно встроенного в загрузочное ПЗУ (ROM) или отдельный чип безопасности (например, Titan M в устройствах Google Pixel). Этот корень доверия содержит открытый ключ производителя устройства.
- Загрузчик (Bootloader): При включении устройства загрузочное ПЗУ проверяет цифровую подпись первого этапа загрузчика (bootloader) с помощью встроенного ключа. Если подпись верна, загрузчик считается доверенным и получает управление.
- Загрузочный раздел (Boot partition): Доверенный загрузчик затем проверяет подпись загрузочного образа (boot.img), который содержит ядро Linux и ramdisk. Для этого используется открытый ключ, хранящийся в самом загрузчике или в специальном разделе (vbmeta).
- Системные разделы: После загрузки ядра, dm-verity (Device Mapper Verity) — драйвер в ядре Linux — проверяет целостность системных разделов (system, vendor, product и т.д.) в реальном времени. dm-verity создаёт хеш-дерево (Merkle tree) для каждого раздела. Корень этого дерева (root hash) подписан и хранится в разделе vbmeta. При каждой операции чтения с системного раздела dm-verity сверяет блок данных с хеш-деревом. Если блок был изменён, операция чтения возвращает ошибку, и система может перейти в аварийный режим или заблокировать загрузку.
История и развитие
Android Verified Boot (AVB)
Технология Verified Boot в Android прошла несколько этапов эволюции.
- Android 4.4 (KitKat) — dm-verity: Впервые появилась поддержка dm-verity для проверки целостности системного раздела. Однако на этом этапе проверка была опциональной и не была обязательной для производителей.
- Android 5.0 (Lollipop) — Verified Boot: Google ввела обязательную верификацию загрузчика и системного раздела для всех устройств, поставляемых с Google Mobile Services. Это стало первым шагом к созданию целостной цепочки доверия.
- Android 7.0 (Nougat) — Android Verified Boot 2.0 (AVB): Была внедрена новая спецификация AVB, которая унифицировала и упростила процесс верификации. AVB 2.0 ввела раздел vbmeta, который содержит подписи для всех остальных разделов (boot, system, vendor и т.д.). Это позволило производителям легко добавлять поддержку Verified Boot на свои устройства.
- Android 10 — AVB на уровне загрузчика: В Android 10 Google перенесла часть логики AVB в загрузчик, что сделало процесс верификации более безопасным и независимым от ядра.
- Android 12 и новее — Virtual A/B и AVB: Внедрение виртуальных разделов A/B (Virtual A/B) потребовало адаптации AVB для работы с динамическими разделами. Verified Boot стал неотъемлемой частью системы обновлений OTA (over-the-air).
Chrome OS и Chromium OS
В Chrome OS Verified Boot реализован по схожему принципу, но с некоторыми особенностями. Система использует два набора разделов (A/B) для обновлений. При загрузке загрузчик проверяет подпись ядра и корневой файловой системы. В отличие от Android, Chrome OS не использует dm-verity для системного раздела, а полагается на проверку подписи всего образа. Если проверка не удалась, устройство переходит в режим восстановления (recovery mode).
Классификация
Verified Boot можно классифицировать по нескольким признакам:
- По степени строгости:
- Полный Verified Boot: Требует проверки всех компонентов от загрузчика до системных разделов. При любой ошибке загрузка блокируется.
- Частичный Verified Boot: Проверяет только загрузчик и ядро, но не системные разделы (например, в некоторых старых версиях Android).
- По реализации:
- Аппаратный Verified Boot: Использует выделенный аппаратный модуль (например, Trusted Platform Module (TPM) или Secure Element) для хранения ключей и выполнения криптографических операций.
- Программный Verified Boot: Реализуется исключительно на уровне загрузчика и ядра, без использования специализированного оборудования.
- По платформе:
- Android Verified Boot (AVB): Специфическая реализация для Android.
- Chrome OS Verified Boot: Реализация для Chrome OS.
- UEFI Secure Boot: Реализация для x86-совместимых ПК, которая является частью спецификации UEFI.
Применение
Verified Boot широко применяется в различных устройствах и системах:
- Мобильные устройства: Смартфоны и планшеты на Android. Verified Boot является обязательным требованием для сертификации Google Mobile Services.
- Ноутбуки и Chromebook: Устройства на Chrome OS и Chromium OS.
- Встраиваемые системы: Промышленные контроллеры, медицинское оборудование, автомобильные информационно-развлекательные системы, где безопасность и целостность ПО критичны.
- Серверы и облачные платформы: Некоторые дистрибутивы Linux (например, Fedora, Ubuntu) поддерживают UEFI Secure Boot, что является аналогом Verified Boot для x86-архитектуры.
Критика и ограничения
Несмотря на свою эффективность, Verified Boot имеет ряд ограничений и подвергается критике:
- Сложность реализации: Требует от производителей тщательной настройки цепочки доверия и управления ключами. Ошибки в реализации могут привести к уязвимостям.
- Зависимость от производителя: Пользователь не может изменить или отключить Verified Boot без потери гарантии или возможности загрузки устройства. Это ограничивает свободу пользователя (например, при установке кастомных прошивок).
- Уязвимости в цепочке доверия: Если злоумышленник получает доступ к аппаратному корню доверия или к закрытому ключу производителя, вся система безопасности рушится.
- Проблемы с обновлениями: В некоторых случаях Verified Boot может блокировать установку неофициальных или модифицированных обновлений, что может быть проблемой для пользователей, желающих продлить срок службы устройства.
- Отсутствие защиты от атак на уровне ядра: Verified Boot проверяет целостность загрузочного образа, но не защищает от уязвимостей в самом ядре или драйверах, которые могут быть использованы после загрузки.
Интересные факты
- В Android Verified Boot используется механизм «rollback protection» (защита от отката), который предотвращает установку более старой, потенциально уязвимой версии прошивки.
- Для разблокировки загрузчика на устройствах Android (что позволяет устанавливать кастомные прошивки) необходимо сбросить устройство до заводских настроек (factory reset). Это делается для предотвращения атак, при которых злоумышленник, получив физический доступ к устройству, мог бы разблокировать загрузчик и установить вредоносное ПО.
- В Chrome OS Verified Boot используется «verified boot with recovery»: если проверка не удалась, устройство автоматически загружается в режим восстановления, где пользователь может восстановить систему с помощью USB-накопителя или сетевого образа.
Источники
- Документация Android Open Source Project (AOSP) по Android Verified Boot (AVB)
- Документация Chromium OS по Verified Boot
- Спецификация UEFI Forum по Secure Boot
- Статьи и исследования в области безопасности мобильных и встраиваемых систем
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →