Por padrão, a maioria dos dispositivos Android vem com um bootloader bloqueado, o que significa que os usuários não podem atualizar o bootloader ou as partições do dispositivo. Se necessário, você (e usuários de dispositivos com opções de desenvolvedor habilitadas) podem desbloquear o bootloader para atualizar novas imagens.
Entrando no bootloader
Para emitir comandos fastboot
, você deve estar no modo bootloader. Uma maneira de fazer isso é enviar o comando adb adb reboot bootloader
. Alguns telefones também permitem que você reinicie no bootloader pressionando uma combinação de teclas (geralmente diminuir o volume) enquanto inicializa o dispositivo.
Desbloqueando o bootloader
Uma vez no modo bootloader, para desbloquear o bootloader e permitir que as partições sejam atualizadas, execute o comando fastboot flashing unlock
no dispositivo. Após a configuração, o modo de desbloqueio persiste durante as reinicializações.
Os dispositivos devem negar o comando fastboot flashing unlock
a menos que get_unlock_ability
esteja definido como 1
. Se definido como 0
, o usuário precisa inicializar na tela inicial, abrir o menu Configurações > Sistema > Opções do desenvolvedor e ativar a opção de desbloqueio OEM (que define get_unlock_ability
como 1
). Após a configuração, esse modo persiste durante reinicializações e redefinições de dados de fábrica.
Quando o comando fastboot flashing unlock
é enviado, o dispositivo deve solicitar aos usuários que os avisem de que podem encontrar problemas com imagens não oficiais. Depois que o usuário reconhecer o aviso, o dispositivo deverá realizar uma redefinição dos dados de fábrica para evitar o acesso não autorizado aos dados. O bootloader deve redefinir o dispositivo mesmo que não consiga reformatá-lo corretamente. Somente após uma redefinição o sinalizador persistente pode ser definido para que o dispositivo possa ser atualizado novamente.
Toda a RAM ainda não substituída deve ser redefinida durante o processo fastboot flashing unlock
. Esta medida evita ataques que leem o conteúdo restante da RAM da inicialização anterior. Da mesma forma, dispositivos desbloqueados devem limpar a RAM a cada inicialização (a menos que isso crie um atraso inaceitável), mas devem deixar a região usada para o ramoops
do kernel.
Bloqueando o bootloader
Para bloquear o bootloader e redefinir o dispositivo, execute o comando fastboot flashing lock
no dispositivo. Os dispositivos destinados ao varejo devem ser enviados no estado bloqueado (com get_unlock_ability
retornando 0
) para garantir que os invasores não possam comprometer o dispositivo instalando um novo sistema ou imagem de inicialização.
Configurando propriedades de bloqueio/desbloqueio
A propriedade ro.oem_unlock_supported
deve ser definida no momento da compilação com base no fato de o dispositivo oferecer suporte ao desbloqueio intermitente.
- Se o dispositivo suportar desbloqueio intermitente, defina
ro.oem_unlock_supported
como1
. - Se o dispositivo não suportar desbloqueio intermitente, defina
ro.oem_unlock_supported
como0
.
Se o dispositivo suportar desbloqueio intermitente, o carregador de inicialização deverá indicar o status do bloqueio definindo a variável de linha de comando do kernel androidboot.flash.locked
como 1
se estiver bloqueado ou 0
se estiver desbloqueado. Esta variável deve ser definida no bootconfig em vez de na linha de comando do kernel no Android 12.
Para dispositivos que suportam dm-verity , use ro.boot.verifiedbootstate
para definir o valor de ro.boot.flash.locked
como 0
; isso desbloqueia o bootloader se o estado de inicialização verificado for laranja.
Protegendo seções críticas
Os dispositivos devem suportar o bloqueio e desbloqueio de seções críticas, que são definidas como tudo o que é necessário para inicializar o dispositivo no bootloader. Essas seções podem incluir fusíveis, partições virtuais para um hub de sensor, bootloader de primeiro estágio e muito mais. Para bloquear seções críticas, você deve usar um mecanismo que evite que o código (kernel, imagem de recuperação, código OTA, etc.) em execução no dispositivo modifique deliberadamente qualquer seção crítica. Os OTAs não deverão atualizar seções críticas se o dispositivo estiver em estado crítico de bloqueio.
A transição do estado bloqueado para o desbloqueado deve exigir uma interação física com o dispositivo. Essa interação é semelhante aos efeitos da execução do comando fastboot flashing unlock
, mas exige que o usuário pressione um botão físico no dispositivo. Os dispositivos não devem permitir a transição programada de lock critical
para unlock critical
sem interação física, e os dispositivos não devem ser enviados no estado unlock critical
.