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 que tengan habilitadas las opciones para desarrolladores) 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.
Desbloquea 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 las 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 para que se vuelva 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. De manera similar, 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 el dispositivo. Los dispositivos destinados a la venta minorista deben enviarse en el estado bloqueado (con get_unlock_ability
que muestra 0
) para garantizar que los atacantes no puedan vulnerar el dispositivo instalando un sistema o una imagen de inicio nuevos.
Cómo establecer propiedades de bloqueo y desbloqueo
La propiedad ro.oem_unlock_supported
se debe establecer en el tiempo de compilación según si el dispositivo admite el desbloqueo con la función de intermitencia.
- Si el dispositivo admite el desbloqueo de escritura en la memoria flash, establece
ro.oem_unlock_supported
en1
. - Si el dispositivo no admite el desbloqueo de la actualizació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.
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
. 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 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 un estado de bloqueo crítico.
La transición del estado bloqueado al estado 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 de lock critical
a unlock critical
de forma programática sin interacción física, y no deben enviarse en el estado unlock critical
.