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

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.