Blocca e sblocca il bootloader

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 su 1.
  • Se il dispositivo non supporta lo sblocco lampeggiante, imposta ro.oem_unlock_supported su 0.

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.