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 del bootloader ni en 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 nuevas imágenes.
Cómo acceder al bootloader
Para ejecutar comandos de 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.
Desbloquea el bootloader
Una vez que estés en el modo bootloader, para desbloquear el bootloader y permitir que se vuelva a escribir en las particiones, ejecuta el comando fastboot flashing unlock
en el dispositivo. Después de configurarlo, el modo de desbloqueo persiste en los reinicios.
Los dispositivos deben rechazar el comando fastboot flashing unlock
, a menos que get_unlock_ability
esté establecido en 1
. Si se configura como 0
, el usuario debe iniciar el dispositivo 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 la configuración, este modo persiste en los reinicios y 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 adviertan que podrían tener problemas con imágenes no oficiales.
Después de que el usuario confirme la advertencia, el dispositivo debe restablecer la configuración de fábrica para evitar el acceso no autorizado a los datos. El cargador de arranque debe restablecer el dispositivo, incluso si no puede reformatearlo correctamente. Solo después de restablecer el dispositivo, se puede establecer la marca persistente para que se pueda volver a escribir la memoria flash del dispositivo.
Toda la RAM que aún no se haya sobrescrito se debe restablecer durante el proceso de fastboot flashing unlock
. Esta medida evita los ataques que leen el contenido de la RAM restante 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 que se usa 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 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 vulnerar el dispositivo instalando una nueva imagen del sistema o de arranque.
Cómo establecer propiedades de bloqueo y desbloqueo
La propiedad ro.oem_unlock_supported
se debe establecer en el momento de la compilación según si el dispositivo admite el desbloqueo de escritura en la memoria flash.
- Si el dispositivo admite el desbloqueo de escritura en la memoria flash, configura
ro.oem_unlock_supported
como1
. - Si el dispositivo no admite el desbloqueo de instalación, configura
ro.oem_unlock_supported
como0
.
Si el dispositivo admite el desbloqueo de 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.
Para los dispositivos que admiten dm-verity, usa ro.boot.verifiedbootstate
para establecer el valor de ro.boot.flash.locked
en 0
. Esto desbloquea el bootloader si el estado de inicio verificado es naranja.
Protege las secciones críticas
Los dispositivos deben admitir el bloqueo y desbloqueo de secciones críticas, que se definen como todo lo que se necesita para iniciar el dispositivo en el bootloader. Estas secciones pueden incluir fusibles, particiones virtuales para un concentrador de sensores, cargador de arranque 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 de OTA, etc.) que se ejecuta en el dispositivo modifique deliberadamente cualquier sección crítica. Las OTA no deben actualizar las secciones críticas si el dispositivo se encuentra 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 no deben enviarse en el estado unlock critical
.