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

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

Войдите в загрузчик

Для выполнения команд fastboot вы должны находиться в режиме загрузчика. Один из способов сделать это — отправить команду adb adb reboot bootloader . Некоторые телефоны также позволяют перезагрузиться в режим загрузчика, нажав комбинацию клавиш (обычно громкость вниз) во время загрузки устройства.

Разблокируйте загрузчик

После перехода в режим загрузчика, чтобы разблокировать загрузчик и разрешить перепрошивку разделов, выполните команду 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 .