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

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

Вся оперативная память, которая еще не была перезаписана, должна быть сброшена во время процесса 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 , если устройство разблокировано. В Android 12 эту переменную необходимо устанавливать в bootconfig, а не в командной строке ядра.

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

Защитите критически важные участки.

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

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