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 ayant activé les options pour les développeurs) 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 le bouton 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 reflashage des partitions. Une fois le mode de déverrouillage défini, il 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 définie sur 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 ce paramètre 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 les 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 reflashé.

Toute la RAM qui n'a pas encore été écrasée doit être réinitialisée pendant le processus fastboot flashing unlock. Cette mesure empêche les attaques qui lisent le contenu de la RAM restante 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 informatiques ne peuvent pas compromettre l'appareil en installant une nouvelle image système ou 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 en fonction de la compatibilité de l'appareil avec le déverrouillage du flashage.

  • 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 clignotement, 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 l'appareil est verrouillé ou sur 0 s'il est déverrouillé. Cette variable doit être définie dans bootconfig au lieu de l'être dans 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 permettre de verrouiller et de déverrouiller les 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 récupération, code OTA, etc.) s'exécutant 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.

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 elle nécessite que l'utilisateur appuie 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 ne doivent pas être expédiés dans l'état unlock critical.