Opções seguras para desenvolvedores

De acordo com o Documento de definição de compatibilidade do Android, os OEMs precisam oferecer uma maneira de ativar o desenvolvimento de apps. No entanto, oferecer opções para desenvolvedores semelhantes às de dispositivos móveis em carros os deixa vulneráveis a ataques. O acesso às opções de desenvolvedor agora pode ser bloqueado por um OEM usando um mecanismo de token criptográfico autenticado. Mais especificamente, um OEM pode:

  • Defina as restrições padrão desejadas antes da primeira inicialização.
  • Autorizar desenvolvedores com segurança usando tokens criptográficos, se preferir.
  • Aplique as mudanças de restrição quando um desenvolvedor for autenticado e autorizado.

Este artigo descreve uma implementação de referência que consiste em um app de controle de restrição de depuração e um endpoint de emissor de token remoto.

Terminologia

Além da Terminologia, estes termos são usados neste artigo:

  • JSON Web Signature (JWS), definida na RFC 7515
  • Instituto Nacional de Padrões e Tecnologia (NIST)

Design

Os OEMs podem autorizar desenvolvedores com tokens de assinatura da Web JSON (JWS, na sigla em inglês) (RFC7515). Na implementação de referência, os tokens de acesso são emitidos por OEMs e consumidos pelo app de controle de restrição. Eles são projetados para resistir a ataques de repetição e tokens forjados.

Figura 1. Design

Integração e configuração

Os OEMs precisam especificar as restrições padrão desejadas na primeira inicialização. Isso é feito com várias sobreposições de recursos estáticos para substituir os padrões no framework do AOSP.

As restrições padrão para o usuário do sistema sem cabeça podem ser configuradas com a string config_defaultFirstUserRestrictions em frameworks/base/core/res/res/values/config.xml, por exemplo:

<!-- User restrictions set when the first user is created.
         Note: Also update appropriate overlay files. -->
    <string-array translatable="false" name="config_defaultFirstUserRestrictions">
        <item>no_debugging_features</item>
    </string-array>

As restrições padrão para motoristas, passageiros e convidados podem ser configuradas em frameworks/base/core/res/res/xml/config_user_types.xml. Um OEM pode sobrepor| essas strings para definir as restrições padrão em cada tipo de usuário, respectivamente, por exemplo:

<user-types>
    <full-type name="android.os.usertype.full.SECONDARY" >
        <default-restrictions no_debugging_features="true"/>
    </full-type>
    <full-type name="android.os.usertype.full.GUEST" >
        <default-restrictions no_debugging_features="true"/>
    </full-type>
</user-types>

Uma implementação de referência é fornecida no seguinte local no AOSP:

packages/apps/Car/DebuggingRestrictionController

Teste

O Google recomenda que os OEMs comecem com a implementação de referência e desenvolvam a partir daí.

  1. Depois de configurar as restrições desejadas nos arquivos de sobreposição, compile o AAOS e valide os fluxos definidos. Use o app de referência e o serviço local com JWS ativado para verificar as configurações de acesso.
  2. Configure o sistema para usar o serviço de nuvem habilitado para JWS (opcional). Verifique se você está observando o fluxo desejado no serviço de back-end.