Bloquear/desbloquear el gestor de arranque

De forma predeterminada, la mayoría de los dispositivos Android se envían 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 de dispositivos con las opciones de desarrollador habilitadas) pueden desbloquear el gestor de arranque para mostrar nuevas imágenes.

Desbloquear el gestor de arranque

Para desbloquear el gestor de arranque y permitir que las particiones se actualicen, ejecute el comando fastboot flashing unlock en el dispositivo. Después de la configuración, el modo de desbloqueo persiste durante los 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 durante los reinicios y los restablecimientos de datos de fábrica.

Cuando se envía el comando fastboot flashing unlock , el dispositivo debería solicitar a los usuarios que les adviertan que pueden encontrar problemas con imágenes no oficiales. Después de que el usuario reconoce 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 formatearlo correctamente. Solo después de un reinicio se puede configurar el indicador persistente para que el dispositivo pueda actualizarse.

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

Bloquear el gestor de arranque

Para bloquear el gestor de arranque y restablecer el dispositivo, ejecute el comando fastboot flashing lock en el dispositivo. Los dispositivos destinados al comercio 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 configurarse en el momento de la compilación en función de si el dispositivo admite el desbloqueo flash.

  • Si el dispositivo admite el desbloqueo flash, configure ro.oem_unlock_supported en 1 .
  • Si el dispositivo no admite el desbloqueo flash, configure 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 comando del kernel en Android 12.

Para dispositivos que admiten 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.

Protegiendo secciones críticas

Los dispositivos deben admitir el bloqueo y desbloqueo de secciones críticas, que se definen como todo lo necesario para iniciar el dispositivo en el gestor de arranque. Dichas secciones pueden incluir fusibles, particiones virtuales para un concentrador de sensores, un gestor de arranque de primera etapa y más. Para bloquear secciones críticas, debe utilizar un mecanismo que impida 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 estado desbloqueado debería requerir una interacción física con el dispositivo. Esta interacción es similar a los efectos de ejecutar el comando fastboot flashing unlock , pero requiere que el usuario presione un botón físico en el dispositivo. Los dispositivos no deberían permitir la transición mediante programación de lock critical a unlock critical sin interacción física, y los dispositivos no deberían enviarse en el estado unlock critical .