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 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 en 1.
  • Si el dispositivo no admite el desbloqueo de la actualización, establece ro.oem_unlock_supported en 0.

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.