По умолчанию большинство устройств 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
.