Blocco/sblocco del 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 abilitate) potete sbloccare il bootloader per eseguire il flashing di nuove immagini.

Sblocco del bootloader

Per sbloccare il bootloader e abilitare il reflash delle partizioni, esegui il comando fastboot flashing unlock sul dispositivo. Dopo l'impostazione, la modalità di sblocco persiste dopo i riavvii.

I dispositivi dovrebbero 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 iniziale, aprire il menu Impostazioni > Sistema > Opzioni sviluppatore e abilitare l'opzione di sblocco OEM (che imposta get_unlock_ability su 1 ). Dopo l'impostazione, questa modalità persiste anche dopo i riavvii e i ripristini dei dati di fabbrica.

Quando viene inviato il comando fastboot flashing unlock , il dispositivo dovrebbe richiedere agli utenti di avvisarli che potrebbero riscontrare problemi con immagini non ufficiali. Dopo che l'utente ha riconosciuto l'avviso, il dispositivo dovrebbe 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 sia possibile eseguire nuovamente il flashing del dispositivo.

Tutta la RAM non ancora sovrascritta deve essere ripristinata durante il processo fastboot flashing unlock . Questa misura previene gli attacchi che leggono il contenuto della RAM rimanente dall'avvio precedente. Allo stesso modo, i dispositivi sbloccati dovrebbero svuotare la RAM ad ogni avvio (a meno che ciò non crei un ritardo inaccettabile), ma dovrebbero lasciare la regione utilizzata per ramoops del kernel.

Blocco del 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 aggressori non possano compromettere il dispositivo installando un nuovo sistema o un'immagine di avvio.

Impostazione delle proprietà di blocco/sblocco

La proprietà ro.oem_unlock_supported deve essere impostata in fase di compilazione in base al supporto o meno dello sblocco flashing da parte del dispositivo.

  • Se il dispositivo supporta lo sblocco flash, imposta ro.oem_unlock_supported su 1 .
  • Se il dispositivo non supporta lo sblocco flash, imposta ro.oem_unlock_supported su 0 .

Se il dispositivo supporta lo sblocco flash, 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 , utilizzare ro.boot.verifiedbootstate per impostare il valore di ro.boot.flash.locked su 0 ; questo sblocca il bootloader se lo stato di avvio verificato è arancione.

Protezione delle sezioni critiche

I dispositivi dovrebbero supportare il blocco e lo sblocco delle sezioni critiche, che sono definite come tutto ciò che è necessario per avviare il dispositivo nel bootloader. Tali sezioni potrebbero includere fusibili, partizioni virtuali per un hub di sensori, bootloader di primo stadio e altro. Per bloccare le sezioni critiche, è necessario 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 dovrebbero riuscire ad aggiornare le sezioni critiche se il dispositivo è in stato critico di blocco.

La transizione 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 che l'utente prema un pulsante fisico sul dispositivo. I dispositivi non devono consentire la transizione a livello di codice da lock critical a unlock critical senza interazione fisica e i dispositivi non devono essere spediti nello stato unlock critical .