Блокировка/разблокировка загрузчика

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

Разблокировка загрузчика

Чтобы разблокировать загрузчик и разрешить перепрошивку разделов, запустите на устройстве команду fastboot flashing unlock . После настройки режим разблокировки сохраняется при перезагрузках.

Устройства должны отклонять команду fastboot flashing unlock , если для get_unlock_ability не установлено значение 1 . Если установлено значение 0 , пользователю необходимо загрузиться на домашний экран, открыть меню « Настройки» > «Система» > «Параметры разработчика» и включить параметр разблокировки OEM (который устанавливает для get_unlock_ability значение 1 ). После установки этот режим сохраняется при перезагрузке и сбросе заводских данных.

Когда отправляется команда fastboot flashing unlock , устройство должно предлагать пользователям предупреждать их о том, что они могут столкнуться с проблемами с неофициальными образами. После того, как пользователь подтвердит предупреждение, устройство должно выполнить сброс заводских данных, чтобы предотвратить несанкционированный доступ к данным. Загрузчик должен перезагрузить устройство, даже если он не может правильно отформатировать его. Только после сброса можно установить постоянный флаг, чтобы устройство можно было перепрошить.

Вся оперативная память, которая еще не была перезаписана, должна быть сброшена во время процесса fastboot flashing unlock . Эта мера предотвращает атаки, которые считывают содержимое ОЗУ, оставшееся после предыдущей загрузки. Точно так же разблокированные устройства должны очищать ОЗУ при каждой загрузке (если это не создает неприемлемую задержку), но должны оставлять область, используемую для ramoops ядра.

Блокировка загрузчика

Чтобы заблокировать загрузчик и перезагрузить устройство, запустите на устройстве команду fastboot flashing lock . Устройства, предназначенные для розничной продажи, должны поставляться в заблокированном состоянии (при get_unlock_ability возвращает 0 ), чтобы гарантировать, что злоумышленники не смогут скомпрометировать устройство, установив новую систему или загрузочный образ.

Установка свойств блокировки/разблокировки

Свойство ro.oem_unlock_supported должно быть установлено во время сборки в зависимости от того, поддерживает ли устройство разблокировку с помощью прошивки.

  • Если устройство поддерживает мигающую разблокировку, установите для ro.oem_unlock_supported значение 1 .
  • Если устройство не поддерживает мигающую разблокировку, установите для ro.oem_unlock_supported значение 0 .

Если устройство поддерживает мигающую разблокировку, то загрузчик должен указать статус блокировки, установив для переменной командной строки ядра androidboot.flash.locked значение 1 , если заблокировано, или 0 , если разблокировано. Эта переменная должна быть установлена ​​в bootconfig, а не в командной строке ядра в Android 12.

Для устройств, поддерживающих dm-verity , используйте ro.boot.verifiedbootstate , чтобы установить значение ro.boot.flash.locked 0 ; это разблокирует загрузчик, если проверенное состояние загрузки оранжевое.

Защита критических разделов

Устройства должны поддерживать блокировку и разблокировку критических разделов, которые определяются как необходимые для загрузки устройства в загрузчик. Такие разделы могут включать в себя предохранители, виртуальные разделы для концентратора датчиков, загрузчик первой ступени и многое другое. Для блокировки критических разделов необходимо использовать механизм, предотвращающий преднамеренное изменение любого критического раздела кодом (ядром, образом восстановления, кодом OTA и т. д.), запущенным на устройстве. OTA не должны обновлять критические разделы, если устройство находится в критическом состоянии блокировки.

Переход из заблокированного в разблокированное состояние должен требовать физического взаимодействия с устройством. Это взаимодействие аналогично эффекту выполнения команды fastboot flashing unlock , но требует от пользователя нажатия физической кнопки на устройстве. Устройства не должны допускать программный переход от lock critical unlock critical без физического взаимодействия, а устройства не должны поставляться в unlock critical .