De forma predeterminada, la mayoría de los dispositivos Android se envían con un bootloader bloqueado, lo que significa que los usuarios no pueden escribir en la memoria flash el bootloader ni las particiones del dispositivo. Si es necesario, tú (y los usuarios del dispositivo con las opciones para desarrolladores habilitadas) pueden desbloquear el bootloader para actualizar imágenes nuevas.
Cómo ingresar al bootloader
Para emitir comandos fastboot
, debes estar en el modo de bootloader. Una forma de hacerlo es enviar el comando adb adb reboot bootloader
. Algunos teléfonos también te permiten reiniciar en el bootloader presionando una combinación de teclas (por lo general, bajar volumen) mientras se inicia el dispositivo.
Cómo desbloquear el bootloader
Una vez en el modo bootloader, para desbloquearlo y habilitar las particiones para que se vuelvan a escribir, ejecuta el comando fastboot flashing unlock
en el dispositivo. Después de la configuración, el modo de desbloqueo persiste en los reinicios.
Los dispositivos deben rechazar el comando fastboot flashing unlock
, a menos que get_unlock_ability
esté configurado como 1
. Si se establece en 0
, el usuario debe iniciar en la pantalla principal, abrir el menú Configuración > Sistema > Opciones para desarrolladores y habilitar la opción Desbloqueo para OEM (que establece get_unlock_ability
en 1
). Después de configurarlo, este modo persiste en los reinicios y los restablecimientos de la configuración de fábrica.
Cuando se envía el comando fastboot flashing unlock
, el dispositivo debe solicitar a los usuarios que les avisen que podrían tener problemas con imágenes no oficiales.
Después de que el usuario acepte la advertencia, el dispositivo debe realizar un restablecimiento de la configuración de fábrica para evitar el acceso no autorizado a los datos. El bootloader debería restablecer el dispositivo, incluso si no puede volver a formatearlo correctamente. Solo después de un restablecimiento se puede establecer la marca persistente de modo que se pueda volver a escribir en el dispositivo.
Toda la RAM que aún no se haya reemplazado se debe restablecer durante el proceso de fastboot flashing unlock
. Esta medida evita los ataques que leen el contenido restante de la RAM del inicio anterior. Del mismo modo, los dispositivos desbloqueados deben borrar la RAM en cada inicio (a menos que esto cree una demora inaceptable), pero deben dejar la región utilizada para el ramoops
del kernel.
Cómo bloquear el bootloader
Para bloquear el bootloader y restablecer el dispositivo, ejecuta el comando fastboot flashing lock
en él. Los dispositivos destinados a la venta minorista deben enviarse en estado bloqueado (con get_unlock_ability
mostrando 0
) para garantizar que los atacantes no puedan vulnerar el dispositivo mediante la instalación de una nueva imagen de inicio o sistema.
Cómo establecer propiedades de bloqueo y desbloqueo
La propiedad ro.oem_unlock_supported
se debe establecer en el tiempo de compilación en función de si el dispositivo admite el desbloqueo con escritura en la memoria flash.
- Si el dispositivo admite el desbloqueo con flash, establece
ro.oem_unlock_supported
en1
. - Si el dispositivo no admite el desbloqueo de la actualización, establece
ro.oem_unlock_supported
en0
.
Si el dispositivo admite el desbloqueo de la escritura en la memoria flash, el bootloader debe indicar el estado de bloqueo configurando la variable de línea de comandos del kernel androidboot.flash.locked
en 1
si está bloqueado o en 0
si está desbloqueado. Esta variable se debe establecer en bootconfig en lugar de en la línea de comandos del kernel en Android 12.
En el caso de los dispositivos que admiten dm-verity, usa ro.boot.verifiedbootstate
para establecer el valor de ro.boot.flash.locked
en 0
. De esta manera, se desbloquea el bootloader si el estado de inicio verificado es naranja.
Proteja las secciones críticas
Los dispositivos deben admitir el bloqueo y el desbloqueo de las secciones críticas, que se definen como lo que sea necesario para iniciar el dispositivo en el bootloader. Estas secciones pueden incluir fusibles, particiones virtuales para un concentrador de sensores, un bootloader de primera etapa y mucho más. Para bloquear secciones críticas, debes usar un mecanismo que impida que el código (kernel, imagen de recuperación, código OTA, etcétera) que se ejecuta en el dispositivo modifique deliberadamente cualquier sección crítica. Las actualizaciones OTA no deben actualizar las secciones críticas si el dispositivo está en estado de bloqueo crítico.
La transición del estado bloqueado al desbloqueado debe 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 deben permitir la transición programática de lock critical
a unlock critical
sin interacción física, y los dispositivos no deben enviar el estado unlock critical
.