Verrouillage/déverrouillage du chargeur de démarrage

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

Entrer dans le chargeur de démarrage

Pour émettre des commandes fastboot , vous devez être en mode bootloader. Une façon de procéder consiste à envoyer la commande adb adb reboot bootloader . Certains téléphones vous permettent également de redémarrer dans le chargeur de démarrage en appuyant sur une combinaison de touches (généralement vers le bas du volume) lors du démarrage de l'appareil.

Déverrouillage du chargeur de démarrage

Une fois en mode chargeur de démarrage, pour déverrouiller le chargeur de démarrage et permettre le reflasher des partitions, exécutez la commande fastboot flashing unlock sur l'appareil. Après le réglage, le mode de déverrouillage persiste lors des redémarrages.

Les appareils doivent refuser la commande fastboot flashing unlock à moins que get_unlock_ability soit défini sur 1 . S'il est défini sur 0 , l'utilisateur doit démarrer sur l'écran d'accueil, ouvrir le menu Paramètres > Système > Options du développeur et activer l'option de déverrouillage OEM (qui définit get_unlock_ability sur 1 ). Après réglage, ce mode persiste lors des redémarrages et des réinitialisations des données 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 reconnu l'avertissement, l'appareil doit effectuer une réinitialisation des données d'usine pour empêcher tout accès non autorisé aux données. Le chargeur de démarrage doit réinitialiser le périphérique même s'il ne parvient 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'est pas déjà é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 restant du démarrage précédent. De même, les périphériques déverrouillés doivent vider la RAM à chaque démarrage (à moins que cela ne crée un délai inacceptable), mais doivent quitter la région utilisée pour les ramoops du noyau.

Verrouillage du chargeur de démarrage

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

Définition des propriétés de verrouillage/déverrouillage

La propriété ro.oem_unlock_supported doit être définie au moment de la construction selon que l'appareil prend en charge le déverrouillage clignotant.

  • Si l'appareil prend en charge le déverrouillage clignotant, définissez ro.oem_unlock_supported sur 1 .
  • Si l'appareil ne prend pas en charge le déverrouillage clignotant, définissez ro.oem_unlock_supported sur 0 .

Si l'appareil prend en charge le déverrouillage clignotant, le chargeur de démarrage 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 plutôt que dans la ligne de commande du noyau sous Android 12.

Pour les appareils prenant en charge dm-verity , utilisez ro.boot.verifiedbootstate pour définir la valeur de ro.boot.flash.locked sur 0 ; cela déverrouille le chargeur de démarrage si l'état de démarrage vérifié est orange.

Protection des 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 chargeur de démarrage. Ces sections peuvent inclure des fusibles, des partitions virtuelles pour un hub de capteurs, un chargeur de démarrage 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.) exécuté sur l'appareil de modifier délibérément une section critique. Les OTA ne devraient 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é devrait nécessiter une interaction physique avec l'appareil. Cette interaction est similaire 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 permettre la transition par programmation du lock critical au unlock critical sans interaction physique, et les appareils ne doivent pas être livrés dans l’état unlock critical .