Per impostazione predefinita, la maggior parte dei dispositivi Android ha un bootloader bloccato, il che significa che gli utenti non possono eseguire il flashing del bootloader o delle partizioni del dispositivo. Se necessario, tu e gli utenti dei dispositivi con le Opzioni sviluppatore abilitate potete sbloccare il bootloader per eseguire il flash di nuove immagini.
Accedi al bootloader
Per inviare comandi fastboot
, devi essere in modalità bootloader. Un
modo per farlo è inviare il comando adb adb reboot bootloader
. Alcuni smartphone consentono anche di riavviare il bootloader premendo una combinazione di tasti (comunemente abbassa il volume) durante l'avvio del dispositivo.
Sblocca il bootloader
In modalità bootloader, per sbloccare il bootloader e abilitare il riflesso delle partizioni, esegui il comando fastboot flashing unlock
sul dispositivo. Dopo
l'impostazione, la modalità di sblocco persiste tra i riavvii.
I dispositivi devono rifiutare il comando fastboot flashing unlock
a meno che
get_unlock_ability
non sia impostato su 1
. Se impostato su 0
, l'utente deve avviare la
schermata Home, aprire il menu Impostazioni > Sistema > Opzioni sviluppatore
e attivare l'opzione Sblocco OEM (che imposta get_unlock_ability
su 1
). Dopo l'impostazione, questa modalità persiste per tutti i riavvii e i ripristini
dei dati di fabbrica.
Quando viene inviato il comando fastboot flashing unlock
, il dispositivo deve avvisare gli utenti che potrebbero riscontrare problemi con immagini non ufficiali.
Dopo che l'utente accetta l'avviso, sul dispositivo deve essere eseguito un ripristino
dei dati di fabbrica per impedire l'accesso non autorizzato ai dati. Il bootloader dovrebbe reimpostare il dispositivo
anche se non è in grado di riformattarlo correttamente. Solo dopo un ripristino è possibile impostare
il flag persistente in modo che sia possibile eseguire di nuovo il flash del dispositivo.
Tutta la RAM che non è già sovrascritta deve essere reimpostata durante il processo fastboot flashing unlock
. Questa misura previene gli attacchi che leggono
i contenuti della RAM residua dall'avvio precedente. Allo stesso modo, i dispositivi sbloccati dovrebbero liberare la RAM a ogni avvio (a meno che ciò crei un ritardo inaccettabile), ma devono lasciare la regione utilizzata per ramoops
del kernel.
Bloccare il bootloader
Per bloccare il bootloader e reimpostare il dispositivo, esegui il comando fastboot flashing lock
sul dispositivo. I dispositivi destinati alla vendita al dettaglio devono essere spediti con
stato bloccato (con get_unlock_ability
che restituisce 0
) per garantire che i malintenzionati non
possano compromettere il dispositivo installando una nuova immagine di sistema o di avvio.
Impostare le proprietà di chiusura e apertura
La proprietà ro.oem_unlock_supported
deve essere impostata al momento della build a seconda che il dispositivo supporti lo sblocco lampeggiante.
- Se il dispositivo supporta lo sblocco lampeggiante, imposta
ro.oem_unlock_supported
su1
. - Se il dispositivo non supporta lo sblocco lampeggiante, imposta
ro.oem_unlock_supported
su0
.
Se il dispositivo supporta lo sblocco lampeggiante, il bootloader dovrebbe indicare lo stato di blocco impostando la variabile della riga di comando del kernel androidboot.flash.locked
su 1
se bloccato o su 0
se sbloccato. Questa variabile deve essere impostata in bootconfig anziché nella riga di comando del kernel in Android 12.
Per i dispositivi che supportano dm-verity,
utilizza ro.boot.verifiedbootstate
per impostare il valore di ro.boot.flash.locked
su
0
. In questo modo il bootloader viene sbloccato se lo stato di avvio verificato è arancione.
Proteggi le sezioni critiche
I dispositivi dovrebbero supportare il blocco e lo sblocco delle sezioni critiche, definite come qualsiasi cosa sia necessaria per avviare il dispositivo nel bootloader. Queste sezioni potrebbero includere fusibili, partizioni virtuali per un hub dei sensori, bootloader di prima fase e altro ancora. Per bloccare le sezioni critiche, devi utilizzare un meccanismo che impedisca al codice (kernel, immagine di ripristino, codice OTA e così via) in esecuzione sul dispositivo di modificare deliberatamente qualsiasi sezione critica. Gli OTA non dovrebbero aggiornare le sezioni critiche se il dispositivo è in stato di blocco critico.
Il passaggio dallo stato bloccato a sbloccato dovrebbe richiedere un'interazione fisica con il dispositivo. Questa interazione è simile agli effetti dell'esecuzione del comando fastboot flashing unlock
, ma richiede all'utente di premere un pulsante fisico sul dispositivo. I dispositivi non devono consentire la transizione programmatica da lock critical
a unlock critical
senza interazione fisica e non devono essere spediti nello stato unlock critical
.