Per impostazione predefinita, la maggior parte dei dispositivi Android viene fornita con 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 del dispositivo con le Opzioni sviluppatore attive) potete sbloccare il bootloader per eseguire il flashing di nuove immagini.
Accedi al bootloader
Per emettere comandi fastboot
, devi essere in modalità bootloader. Un
modo per farlo è inviare il comando adb adb reboot bootloader
. Alcuni telefoni consentono inoltre di riavviare il bootloader premendo una combinazione di tasti (in genere il tasto di riduzione del volume) durante l'avvio del dispositivo.
Sbloccare il bootloader
Una volta attivata la modalità bootloader, per sbloccare il bootloader e consentire il riflash delle partizioni, esegui il comando fastboot flashing unlock
sul dispositivo. Una volta impostata, la modalità di sblocco persiste dopo i riavvii.
I dispositivi devono negare 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 dovrebbe chiedere agli utenti di confermare che potrebbero verificarsi problemi con le immagini non ufficiali.
Dopo che l'utente ha accettato l'avviso, il dispositivo deve eseguire un ripristino dei dati di fabbrica per impedire l'accesso non autorizzato ai dati. Il bootloader dovrebbe reimpostare il
dispositivo anche se non riesce a riformatarlo 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 non ancora sovrascritta deve essere reimpostata durante il processofastboot flashing unlock
. Questa misura impedisce gli attacchi che leggono i contenuti rimanenti della RAM dall'avvio precedente. Analogamente, i dispositivi sbloccati dovrebbero cancellare la RAM a ogni avvio (a meno che ciò non crei un ritardo inaccettabile), ma dovrebbero lasciare la regione utilizzata per il 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 blocco e sblocco
La proprietà ro.oem_unlock_supported
deve essere impostata al momento della compilazione in base al fatto che il dispositivo supporti lo sblocco con il flash.
- 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 tramite flashing, il bootloader deve 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 devono supportare il blocco e lo sblocco delle sezioni critiche, che sono definite come tutto ciò che è necessario per avviare il dispositivo nel bootloader. Queste sezioni possono includere fusi, partizioni virtuali per un hub di sensori, bootloader di primo livello 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. Le OTA non devono aggiornare le sezioni critiche se il dispositivo è in stato di blocco critico.
Il passaggio dallo stato bloccato a quello 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 il passaggio programmatico da lock critical
a unlock critical
senza interazione fisica e non devono essere spediti nello stato unlock critical
.