Cómo bloquear y desbloquear el bootloader

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 escribir en la memoria flash nuevas imágenes.

Accede 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 el volumen) mientras inicias el dispositivo.

Cómo desbloquear el bootloader

Una vez que estés en el modo del bootloader, ejecuta el comando fastboot flashing unlock en el dispositivo para desbloquearlo y permitir que se vuelvan a escribir las particiones. Después de la configuración, el modo de desbloqueo persiste después de los reinicios.

Los dispositivos deben rechazar el comando fastboot flashing unlock, a menos que get_unlock_ability esté configurado como 1. Si se configura como 0, el usuario debe iniciar en la pantalla principal, abrir el menú Configuración > Sistema > Opciones para desarrolladores y habilitar la opción Desbloqueo de OEM (que establece get_unlock_ability en 1). Después de la configuración, este modo persiste después de los reinicios y los restablecimientos de los datos 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. Una vez que el usuario acepta la advertencia, se debe restablecer la configuración de fábrica del dispositivo para evitar el acceso no autorizado. 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 reemplazó debe restablecerse durante el proceso fastboot flashing unlock. Esta medida evita ataques que leen el contenido de la RAM restante del inicio anterior. Del mismo modo, los dispositivos desbloqueados deben borrar la memoria RAM en cada inicio (a menos que esto cree un retraso inaceptable), pero deben salir de la región que se usa para el ramoops del kernel.

Bloquea 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.

Configura 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 en 1.
  • Si el dispositivo no admite el desbloqueo con flash, establece ro.oem_unlock_supported en 0.

Si el dispositivo admite el desbloqueo con escritura en la memoria flash, el bootloader debe indicar el estado de bloqueo configurando la variable de la línea de comandos del kernel androidboot.flash.locked como 1 si está bloqueado o en 0 si está desbloqueado. Esta variable debe configurarse 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 las secciones críticas, debes usar un mecanismo que evite que el código (kernel, imagen de recuperación, código inalámbrico, 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 se encuentra en estado crítico de bloqueo.

La transición del estado bloqueado al 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 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.