Verrouiller et déverrouiller le bootloader

Par défaut, la plupart des appareils Android sont livrés 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.

Accéder au bootloader

Pour exécuter 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 le volume bas) lors du démarrage de l'appareil.

Déverrouiller le bootloader

Une fois en mode bootloader, pour déverrouiller le bootloader et permettre le reflashing des partitions, exécutez la commande fastboot flashing unlock sur l'appareil. 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 Paramètres > Système > Options pour les développeurs et activer l'option Déverrouillage OEM (qui définit get_unlock_ability sur 1). Une fois défini, ce mode persiste entre 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 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 pour que l'appareil puisse être reflashed.

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 à partir 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 à l'état verrouillé (avec get_unlock_ability renvoyant 0) pour s'assurer que les pirates ne peuvent 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 avec le déverrouillage du flashing.

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

Si l'appareil est compatible avec le déverrouillage du flashing, le bootloader doit indiquer l'état de verrouillage en définissant la variable de ligne de commande du noyau androidboot.flash.locked sur 1 si elle est verrouillée ou sur 0 si elle est déverrouillée. 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 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 première étape, etc. Pour verrouiller les sections critiques, vous devez utiliser un mécanisme qui empêche le code (noyau, image de restauration, code OTA, etc.) exécuté sur l'appareil de modifier délibérément une section critique. Les OTA doivent échouer à mettre à jour les sections critiques si l'appareil est en état de verrouillage critique.

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 le passage programmatique de lock_critical à unlock_critical sans interaction physique, et ne doivent pas être livrés à l'état unlock_critical.