Bloqueando/Desbloqueando o Bootloader

Por padrão, a maioria dos dispositivos Android vem com um bootloader bloqueado, o que significa que os usuários não podem fazer o flash do bootloader ou das partições do dispositivo. Se necessário, você (e os usuários do dispositivo com as opções do desenvolvedor habilitadas) podem desbloquear o carregador de inicialização para exibir novas imagens.

Desbloqueando o bootloader

Para desbloquear o carregador de inicialização 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 nas 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 habilitar a opção de desbloqueio OEM (que define o get_unlock_ability como 1 ). Após a configuração, esse modo persiste nas reinicializações e nas 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. Após o usuário reconhecer o aviso, o dispositivo deve realizar uma redefinição de 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 reinicialização, o sinalizador persistente pode ser definido para que o dispositivo possa ser atualizado.

Toda a RAM ainda não substituída deve ser redefinida durante o processo de fastboot flashing unlock de inicialização rápida. Essa medida evita ataques que lêem o conteúdo restante da RAM da inicialização anterior. Da mesma forma, os 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 carregador de inicialização 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 comprometam 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 como 1 .
  • Se o dispositivo não suportar o desbloqueio intermitente, defina ro.oem_unlock_supported como 0 .

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 bloqueado ou 0 se desbloqueado. Essa variável deve ser definida em 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 o que for necessário para inicializar o dispositivo no carregador de inicialização. Essas seções podem incluir fusíveis, partições virtuais para um hub de sensor, carregador de inicialização de primeiro estágio e muito mais. Para bloquear seções críticas, você deve usar um mecanismo que impeça o código (kernel, imagem de recuperação, código OTA, etc.) em execução no dispositivo de modificar deliberadamente qualquer seção crítica. As OTAs não devem atualizar as seções críticas se o dispositivo estiver em estado crítico de bloqueio.

A transição do estado bloqueado para 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 programática do lock critical para unlock critical sem interação física, e os dispositivos não devem ser enviados no estado unlock critical .