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 installare nuove immagini.
Accedere al bootloader
Per eseguire i 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
(in genere il tasto Volume giù) durante l'avvio del dispositivo.
Sbloccare il bootloader
Una volta in modalità bootloader, per sbloccare il bootloader e consentire il reflashing delle partizioni, esegui il comando fastboot flashing unlock
sul dispositivo. Dopo
l'impostazione, la modalità di sblocco persiste anche 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 il dispositivo
nella 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à viene mantenuta dopo i riavvii e i ripristini dei dati di fabbrica.
Quando viene inviato il comando fastboot flashing unlock
, il dispositivo deve chiedere
agli utenti di avvisarli che potrebbero riscontrare problemi con le immagini non ufficiali.
Dopo che l'utente ha confermato l'avviso, il dispositivo deve eseguire un ripristino dei dati di fabbrica per impedire l'accesso non autorizzato ai dati. Il bootloader dovrebbe ripristinare il
dispositivo anche se non riesce a riformattarlo correttamente. Solo dopo un ripristino è possibile impostare il flag persistente in modo che il dispositivo possa essere riprogrammato.
Tutta la RAM non ancora sovrascritta deve essere reimpostata durante il processo di fastboot flashing unlock
. Questa misura impedisce gli attacchi che leggono
i contenuti della RAM rimanenti dall'avvio precedente. Analogamente, i dispositivi sbloccati devono
cancellare la RAM a ogni avvio (a meno che ciò non crei un ritardo inaccettabile), ma
devono lasciare la regione utilizzata per il
ramoops
.
Bloccare il bootloader
Per bloccare il bootloader e ripristinare il dispositivo, esegui il comando fastboot flashing lock
sul dispositivo. I dispositivi destinati alla vendita al dettaglio devono essere spediti nello stato bloccato (con get_unlock_ability
che restituisce 0
) per garantire che gli autori di attacchi non possano compromettere il dispositivo installando un nuovo sistema o un'immagine di avvio.
Impostare le proprietà di apertura e chiusura
La proprietà ro.oem_unlock_supported
deve essere impostata in fase di compilazione in base
al fatto che il dispositivo supporti lo sblocco del flashing.
- Se il dispositivo supporta lo sblocco lampeggiante, imposta
ro.oem_unlock_supported
su1
. - Se il dispositivo non supporta lo sblocco con lampeggio, imposta
ro.oem_unlock_supported
su0
.
Se il dispositivo supporta lo sblocco del 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 viene sbloccato il bootloader se lo stato di avvio verificato è arancione.
Proteggere le sezioni critiche
I dispositivi devono supportare il blocco e lo sblocco delle sezioni critiche, ovvero tutto ciò che è necessario per avviare il dispositivo nel bootloader. Queste sezioni potrebbero includere fusibili, partizioni virtuali per un hub 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. Gli aggiornamenti OTA non devono aggiornare le sezioni critiche se il dispositivo è in stato critico di blocco.
Il passaggio dallo stato bloccato a quello sbloccato deve 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
.