Blocca e sblocca il bootloader

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

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.