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.
Entrar en el gestor de arranque
Para emitir comandos fastboot
, debe estar en el modo de cargador de arranque. Una forma de hacerlo es enviar el comando adb adb reboot bootloader
. Algunos teléfonos también le permiten reiniciar en el gestor de arranque presionando una combinación de teclas (comúnmente bajar el volumen) mientras inicia el dispositivo.
Desbloquear el gestor de arranque
Una vez en el modo de cargador de arranque, para desbloquear el cargador 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
en1
. - Si el dispositivo no admite el desbloqueo flash, configure
ro.oem_unlock_supported
en0
.
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
.