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

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