Bloqueo/desbloqueo del gestor de arranque

De forma predeterminada, la mayoría de los dispositivos Android se entregan con un gestor de arranque bloqueado, lo que significa que los usuarios no pueden actualizar el gestor de arranque ni las particiones del dispositivo. Si es necesario, usted (y los usuarios del dispositivo con las opciones de desarrollador habilitadas) pueden desbloquear el gestor de arranque para mostrar nuevas imágenes.

Desbloqueo del gestor de arranque

Para desbloquear el cargador de arranque y permitir que las particiones se vuelvan a actualizar, ejecute el comando de desbloqueo de fastboot flashing unlock en el dispositivo. Después de la configuración, el modo de desbloqueo persiste entre reinicios.

Los dispositivos deben denegar el comando fastboot flashing unlock a menos que get_unlock_ability esté configurado en 1 . Si se establece en 0 , el usuario debe iniciar en la pantalla de inicio, abrir el menú Configuración > Sistema > Opciones de desarrollador y habilitar la opción de desbloqueo OEM (que establece get_unlock_ability en 1 ). Después de la configuración, este modo persiste después de reinicios y restablecimientos de datos de fábrica.

Cuando se envía el comando fastboot flashing unlock , el dispositivo debe solicitar a los usuarios que les adviertan que pueden tener problemas con las imágenes no oficiales. Después de que el usuario reconozca la advertencia, el dispositivo debe realizar un restablecimiento de datos de fábrica para evitar el acceso no autorizado a los datos. El gestor de arranque debería restablecer el dispositivo incluso si no puede volver a formatearlo correctamente. Solo después de un reinicio se puede establecer el indicador persistente para que el dispositivo se pueda volver a actualizar.

Toda la RAM que aún no se haya sobrescrito debe restablecerse durante el proceso fastboot flashing unlock . Esta medida previene los ataques que leen los restos de RAM del arranque anterior. De manera similar, los dispositivos desbloqueados deben borrar la memoria RAM en cada arranque (a menos que esto genere un retraso inaceptable), pero deben dejar la región utilizada para los ramoops del kernel.

Bloqueo del gestor de arranque

Para bloquear el gestor de arranque y restablecer el dispositivo, ejecute el comando de fastboot flashing lock en el dispositivo. Los dispositivos destinados a la venta minorista deben enviarse en estado bloqueado (con get_unlock_ability devolviendo 0 ) para garantizar que los atacantes no puedan comprometer el dispositivo instalando un nuevo sistema o imagen de arranque.

Configuración de propiedades de bloqueo/desbloqueo

La propiedad ro.oem_unlock_supported debe establecerse en el momento de la compilación en función de si el dispositivo admite el desbloqueo flash.

  • Si el dispositivo admite el desbloqueo intermitente, establezca ro.oem_unlock_supported en 1 .
  • Si el dispositivo no admite el desbloqueo flash, establezca ro.oem_unlock_supported en 0 .

Si el dispositivo admite el desbloqueo flash, entonces el gestor de arranque debe indicar el estado de bloqueo configurando la variable de línea de comando del kernel androidboot.flash.locked en 1 si está bloqueado o en 0 si está desbloqueado. Esta variable debe configurarse en bootconfig en lugar de en la línea de comandos del kernel en Android 12.

Para dispositivos compatibles con dm-verity , use ro.boot.verifiedbootstate para establecer el valor de ro.boot.flash.locked en 0 ; esto desbloquea el gestor de arranque si el estado de arranque verificado es naranja.

Protección de secciones críticas

Los dispositivos deben admitir el bloqueo y desbloqueo de secciones críticas, que se definen como lo que se necesita para iniciar el dispositivo en el gestor de arranque. Tales secciones pueden incluir fusibles, particiones virtuales para un concentrador de sensores, cargador de arranque de primera etapa y más. Para bloquear secciones críticas, debe usar un mecanismo que evite que el código (kernel, imagen de recuperación, código OTA, etc.) que se ejecuta en el dispositivo modifique deliberadamente cualquier sección crítica. Las OTA no deberían actualizar las secciones críticas si el dispositivo está en estado crítico de bloqueo.

La transición del estado bloqueado al desbloqueado debería requerir una interacción física con el dispositivo. Esta interacción es similar a los efectos de ejecutar el comando de fastboot flashing unlock , pero requiere que el usuario presione un botón físico en el dispositivo. Los dispositivos no deben permitir la transición programática de lock critical a unlock critical sin interacción física, y los dispositivos no deben enviarse en el estado de unlock critical .