По умолчанию на большинстве устройств Android загрузчик операционной системы заблокирован, то есть пользователи не могут перепрошить его или разделы устройства. При необходимости вы (и пользователи устройств с включенным режимом Для разработчиков) можете разблокировать загрузчик операционной системы, чтобы прошить новые образы.
Как перейти в загрузчик операционной системы
Чтобы использовать команды fastboot, необходимо перейти в режим загрузчика. Один из способов сделать это – отправить команду adb adb reboot bootloader. На некоторых телефонах можно перезагрузить устройство в загрузчик, нажав комбинацию клавиш (обычно уменьшения громкости) во время загрузки.
Как разблокировать загрузчик операционной системы
Чтобы разблокировать загрузчик и разрешить перепрошивку разделов, в режиме загрузчика выполните на устройстве команду fastboot flashing unlock. После настройки режим разблокировки сохраняется при перезагрузке.
Устройства должны отклонять команду fastboot flashing unlock, если только параметр get_unlock_ability не имеет значение 1. Если задано значение 0, пользователю нужно перейти на главный экран, открыть меню Настройки > Система > Для разработчиков и включить параметр Заводская разблокировка (при этом значение 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 (если разблокировано). В Android 12 эту переменную нужно задавать в bootconfig, а не в командной строке ядра.
На устройствах с поддержкой dm-verity используйте ro.boot.verifiedbootstate, чтобы задать для ro.boot.flash.locked значение 0. Это разблокирует загрузчик операционной системы, если статус проверки при запуске оранжевый.
Защита критических разделов
Устройства должны поддерживать блокировку и разблокировку критических разделов, которые определяются как все, что необходимо для загрузки устройства в загрузчик. К таким разделам могут относиться предохранители, виртуальные разделы для концентратора датчиков, загрузчик первого этапа и т. д. Чтобы заблокировать критические разделы, необходимо использовать механизм, который не позволяет коду (ядру, образу для восстановления, коду OTA и т. д.), выполняемому на устройстве, намеренно изменять критические разделы. При критическом состоянии блокировки беспроводное обновление не должно обновлять критические разделы.
Переход из заблокированного состояния в разблокированное должен требовать физического взаимодействия с устройством. Это действие похоже на выполнение команды fastboot flashing unlock, но требует от пользователя нажать физическую кнопку на устройстве. Устройства не должны позволять программно переходить из состояния lock_critical в состояние unlock_critical без физического взаимодействия, а также поставляться в состоянии unlock_critical.