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 d'appareils ayant activé les options pour les développeurs) pouvez déverrouiller le bootloader pour flasher de nouvelles images.

Entrez dans le 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 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 elle est définie sur 0, l'utilisateur doit démarrer à partir de 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 Unlock (Déverrouillage OEM), qui définit get_unlock_ability sur 1. Une fois défini, ce mode persiste lors des redémarrages et des réinitialisations de la configuration d'usine.

Lorsque la commande fastboot flashing unlock est envoyée, l'appareil doit inviter les utilisateurs à les avertir qu'ils pourraient rencontrer des problèmes avec des images non officielles. Une fois que l'utilisateur a pris connaissance de 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 afin que l'appareil puisse être reflashé.

Toute la RAM qui n'a pas encore été écrasée doit être réinitialisée lors du processus fastboot flashing unlock. Cette mesure empêche les attaques qui lisent le contenu de la RAM restante lors 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 doivent être expédiés à l'état verrouillé (get_unlock_ability renvoyant 0) afin que les pirates informatiques ne puissent pas compromettre l'appareil en installant un nouveau système ou une nouvelle image de démarrage.

Définir les 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 selon que l'appareil est compatible ou non avec le déverrouillage par flash.

  • Si l'appareil est compatible avec le déverrouillage par flash, définissez ro.oem_unlock_supported sur 1.
  • Si l'appareil n'est pas compatible avec le déverrouillage par flash, 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 du verrouillage en définissant la variable de ligne de commande du noyau androidboot.flash.locked sur 1 s'il est verrouillé ou sur 0 s'il est déverrouillé. Cette variable doit être définie dans bootconfig et non dans la ligne de commande du noyau sous 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 de démarrage validé est orange.

Protéger les sections critiques

Les appareils doivent être compatibles avec 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 étage, 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.) en cours d'exécution sur l'appareil de modifier délibérément une section critique. Les OTA ne doivent pas mettre à jour les sections critiques si l'appareil est dans un état critique de verrouillage.

Le passage de l'état verrouillé à l'état déverrouillé doit nécessiter une interaction physique avec l'appareil. Cette interaction est semblable aux effets de l'exécution de la commande fastboot flashing unlock, mais nécessite que l'utilisateur appuie sur un bouton physique de l'appareil. Les appareils ne doivent pas autoriser la transition programmatique de lock critical vers unlock critical sans interaction physique, et ils ne doivent pas être livrés à l'état unlock critical.