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

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

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

Защитите критические разделы

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

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