Verrouiller et déverrouiller le bootloader

Par défaut, la plupart des appareils Android sont fournis avec un bootloader verrouillé, ce qui signifie que les utilisateurs ne peuvent pas flasher le bootloader ni les partitions de l'appareil. Si nécessaire, vous (et les utilisateurs de l'appareil dont les options pour les développeurs sont activées) pouvez déverrouiller le bootloader pour flasher de nouvelles images.

Accéder au bootloader

Pour émettre des commandes fastboot, vous devez être en mode bootloader. Pour ce faire, vous pouvez envoyer la commande adb adb reboot bootloader. Certains téléphones vous permettent également de redémarrer dans le bootloader en appuyant sur une combinaison de touches (généralement la touche volume -) lors du démarrage de l'appareil.

Déverrouiller le bootloader

Une fois en mode bootloader, exécutez la commande fastboot flashing unlock sur l'appareil pour déverrouiller le bootloader et permettre le rafraîchissement des partitions. Une fois défini, le mode de déverrouillage persiste entre les redémarrages.

Les appareils doivent refuser la commande fastboot flashing unlock, sauf si get_unlock_ability est défini sur 1. Si la valeur est 0, l'utilisateur doit démarrer sur l'écran d'accueil, ouvrir le menu Settings > System > Developer options (Paramètres > Système > Options pour les développeurs) et activer l'option OEM unlocking (Déverrouillage OEM), ce qui définit get_unlock_ability sur 1. Une fois défini, ce mode persiste après les redémarrages et les rétablissements de la configuration d'usine.

Lorsque la commande fastboot flashing unlock est envoyée, l'appareil doit inviter les utilisateurs à les avertir qu'ils peuvent rencontrer des problèmes avec des images non officielles. Une fois que l'utilisateur a confirmé l'avertissement, l'appareil doit rétablir la configuration d'usine pour empêcher tout accès non autorisé aux données. Le bootloader doit réinitialiser l'appareil même s'il ne peut pas le reformater correctement. Ce n'est qu'après une réinitialisation que l'indicateur persistant peut être défini pour que l'appareil puisse être flashé à nouveau.

Toute RAM qui n'a pas déjà été écrasée doit être réinitialisée pendant le processus fastboot flashing unlock. Cette mesure empêche les attaques qui lisent les restes de contenu de la RAM du démarrage précédent. De même, les appareils déverrouillés doivent effacer la RAM à chaque démarrage (sauf si cela crée un délai inacceptable), mais doivent laisser la région utilisée pour le ramoops du noyau.

Verrouiller le bootloader

Pour verrouiller le bootloader et réinitialiser l'appareil, exécutez la commande fastboot flashing lock sur l'appareil. Les appareils destinés à la vente au détail doivent être expédiés dans un état verrouillé (avec get_unlock_ability renvoyant 0) pour s'assurer que les pirates informatiques ne peuvent pas compromettre l'appareil en installant un nouveau système ou une nouvelle image de démarrage.

Définir des propriétés de verrouillage et de déverrouillage

La propriété ro.oem_unlock_supported doit être définie au moment de la compilation en fonction de la compatibilité de l'appareil avec le déverrouillage par clignotement.

  • Si l'appareil est compatible avec le déverrouillage par clignotement, définissez ro.oem_unlock_supported sur 1.
  • Si l'appareil n'est pas compatible avec le déverrouillage par clignotement, définissez ro.oem_unlock_supported sur 0.

Si l'appareil est compatible avec le déverrouillage par flash, le bootloader doit indiquer l'état de verrouillage en définissant la variable de ligne de commande du kernel androidboot.flash.locked sur 1 si l'appareil est verrouillé ou sur 0 s'il est déverrouillé. Cette variable doit être définie dans bootconfig au lieu de la ligne de commande du noyau dans Android 12.

Pour les appareils compatibles avec dm-verity, utilisez ro.boot.verifiedbootstate pour définir la valeur de ro.boot.flash.locked sur 0. Cela déverrouille le bootloader si l'état du démarrage validé est orange.

Protéger les sections critiques

Les appareils doivent prendre en charge le verrouillage et le déverrouillage des sections critiques, qui sont définies comme tout ce qui est nécessaire pour démarrer l'appareil dans le bootloader. Ces sections peuvent inclure des fusibles, des partitions virtuelles pour un hub de capteurs, un bootloader de premier niveau, etc. Pour verrouiller les sections critiques, vous devez utiliser un mécanisme qui empêche le code (noyau, image de récupération, code OTA, etc.) exécuté sur l'appareil de modifier délibérément une section critique. Les mises à jour OTA ne doivent pas mettre à jour les sections critiques si l'appareil est dans un état critique de verrouillage.

La transition de l'état verrouillé à l'état déverrouillé doit nécessiter une interaction physique avec l'appareil. Cette interaction est semblable à celle de l'exécution de la commande fastboot flashing unlock, mais l'utilisateur doit appuyer sur un bouton physique de l'appareil. Les appareils ne doivent pas permettre de passer de lock critical à unlock critical de manière programmatique sans interaction physique, et ils ne doivent pas être expédiés dans l'état unlock critical.