O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Práticas recomendadas de segurança de aplicativos

Esta seção contém recomendações para garantir a segurança de aplicativos em dispositivos Android.

Revisão do código fonte

A revisão do código-fonte pode detectar uma ampla variedade de problemas de segurança, incluindo os identificados neste documento. O Android incentiva fortemente a revisão manual e automatizada do código fonte.

  • Siga as orientações abrangentes de segurança ao realizar revisões para garantir a cobertura. Utilize padrões internos ou externos relevantes para garantir revisões consistentes e completas.
  • Execute um linter, como o linter do Android Studio , em todo o código do aplicativo usando o SDK do Android e corrija os problemas identificados.
  • Analise o código nativo usando uma ferramenta automatizada que pode detectar problemas de gerenciamento de memória, como estouros de buffer e erros externos.
  • O sistema de compilação Android suporta muitos dos desinfetantes LLVM, como AddressSanitizer e UndefinedBehaviorSanitizer , que podem ser usados ​​para análise em tempo de execução de problemas relacionados à memória. Combinados com a difusão, suportada no Android por meio do libFuzzer , os desinfetantes podem descobrir casos extremos incomuns que requerem mais investigações.
  • Um avaliador de segurança experiente deve revisar um código de risco mais alto, como criptografia, processamento de pagamento e processamento de PII.

Teste automatizado

O teste automatizado pode ajudar a detectar uma ampla variedade de problemas de segurança e deve ser realizado regularmente.

  • Execute a versão mais recente do CTS regularmente durante todo o processo de desenvolvimento para detectar problemas mais cedo e reduzir o tempo de correção. O Android usa o CTS como parte da integração contínua em nosso processo de criação automatizado, que é criado várias vezes por dia.
  • Automatize testes de segurança de interfaces, incluindo testes com entradas malformadas (teste de fuzz). O sistema de compilação do Android suporta o libFuzzer para escrever testes de fuzz.

Verificação de vulnerabilidades

A verificação de vulnerabilidades pode ajudar a garantir que os aplicativos pré-instalados estejam livres de vulnerabilidades de segurança conhecidas. A detecção avançada pode reduzir o tempo e o custo necessários com o enfrentamento dessas vulnerabilidades e a prevenção de riscos para usuários e dispositivos.

  • Examine todos os aplicativos pré-instalados usando uma ferramenta de verificação de vulnerabilidades de aplicativos reconhecida pelo setor e resolva as vulnerabilidades detectadas.

Aplicações potencialmente prejudiciais

É importante garantir que os aplicativos pré-instalados no seu dispositivo não sejam aplicativos potencialmente prejudiciais (PHAs). Você é responsável pelo comportamento de todos os aplicativos incluídos nos seus dispositivos. Antes do lançamento do dispositivo, verifique todos os aplicativos pré-carregados quanto a vulnerabilidades.

Para obter mais informações sobre PHAs e como o Google os está combatendo na Play Store, consulte a documentação do desenvolvedor do Google Play Protect .

Instalação e permissões de aplicativos

Permissões excessivas para aplicativos pré-instalados podem criar um risco de segurança. Restrinja os aplicativos pré-instalados às permissões mínimas necessárias e verifique se eles não têm acesso a permissões ou privilégios desnecessários. As permissões do aplicativo são descritas no AndroidManifest.xml .

  • Não conceda permissões ou privilégios desnecessários a aplicativos pré-instalados. Revise minuciosamente os aplicativos com privilégios de sistema, pois eles podem ter permissões muito sensíveis.
  • Verifique se todas as permissões solicitadas são relevantes e necessárias para a funcionalidade desse aplicativo específico.
  • Verifique se há divulgação do usuário para todos os aplicativos pré-instalados que usam a permissão INSTALL_PACKAGES .
  • Verifique se o desenvolvedor é contratualmente obrigado a não instalar nenhum aplicativo como UID 0.
  • Avalie as permissões declaradas no manifesto de todos os aplicativos a serem instalados pela rede do desenvolvedor.
  • Verifique se o desenvolvedor é contratualmente obrigado a verificar todos os URLs de download de aplicativos de atualização automática e instalador com a API de Navegação segura do Google antes de veicular aplicativos no dispositivo.

Assinatura de aplicativo

As assinaturas de aplicativos desempenham um papel importante na segurança do dispositivo e são usadas para verificações de permissões e atualizações de software. Ao selecionar uma chave a ser usada para assinar aplicativos, é importante considerar se um aplicativo estará disponível apenas em um único dispositivo ou comum em vários dispositivos.

  • Verifique se os aplicativos não estão assinados com uma chave conhecida publicamente, como a chave do desenvolvedor do AOSP.
  • Certifique-se de que as chaves usadas para assinar aplicativos sejam gerenciadas de maneira consistente com as práticas padrão do setor para lidar com chaves sensíveis, incluindo um HSM (hardware security module) que fornece acesso limitado e auditável.
  • Verifique se os aplicativos não estão assinados com a chave da plataforma. Isso concede a um aplicativo acesso a permissões de assinatura de plataforma, que são muito poderosas e devem ser usadas apenas por componentes do sistema operacional. Os aplicativos do sistema devem usar permissões privilegiadas.
  • Verifique se os aplicativos com o mesmo nome de pacote não estão assinados com chaves diferentes. Isso geralmente ocorre ao criar um aplicativo para dispositivos diferentes, especialmente ao usar a chave da plataforma. Se o aplicativo for independente do dispositivo, use a mesma chave nos dispositivos. Se o aplicativo for específico do dispositivo, crie nomes de pacotes exclusivos por dispositivo e chave.

Isolando aplicativos e processos

O modelo de área restrita do Android fornece segurança extra em aplicativos e processos quando usado corretamente.

Isolando processos raiz

Os processos raiz são o alvo mais frequente de ataques de escalação de privilégios; reduzir o número de processos raiz reduz o risco de escalação de privilégios.

  • Verifique se os dispositivos executam o código mínimo necessário como root. Sempre que possível, use um processo Android normal em vez de um processo raiz. Se um processo precisar ser executado como root em um dispositivo, documente o processo em uma solicitação de recurso AOSP para que possa ser revisada publicamente.
  • Sempre que possível, o código raiz deve ser isolado dos dados não confiáveis ​​e acessado via comunicação entre processos (IPC). Por exemplo, reduza a funcionalidade raiz a um pequeno Serviço acessível via Fichário e exponha o Serviço com permissão de assinatura a um aplicativo com privilégios baixos ou inexistentes para lidar com o tráfego de rede.
  • Os processos raiz não devem escutar em um soquete de rede.
  • Os processos raiz não devem incluir um tempo de execução de uso geral, como uma Java VM).

Isolando aplicativos do sistema

Em geral, os aplicativos pré-instalados não devem ser executados com o UID (Identificador Único do Sistema Compartilhado). Se for necessário que um aplicativo use o UID compartilhado do sistema ou outro serviço privilegiado (por exemplo, telefone), o aplicativo não deve exportar serviços, receptores de transmissão ou provedores de conteúdo que possam ser acessados ​​por aplicativos de terceiros instalados pelos usuários .

  • Verifique se os dispositivos executam o código mínimo necessário como sistema. Sempre que possível, use um processo Android com seu próprio UID em vez de reutilizar o UID do sistema.
  • Sempre que possível, o código do sistema deve ser isolado de dados não confiáveis ​​e expor o IPC apenas a outros processos confiáveis.
  • Os processos do sistema não devem escutar em um soquete de rede. Este é um requisito CTS.

Isolando processos

A Sandbox de aplicativos Android fornece aos aplicativos uma expectativa de isolamento de outros processos no sistema, incluindo processos raiz e depuradores. A menos que a depuração seja ativada especificamente pelo aplicativo e pelo usuário, nenhum aplicativo deve violar essa expectativa.

  • Verifique se os processos raiz não acessam dados em pastas de dados de aplicativos individuais, a menos que você use um método de depuração documentado do Android.
  • Verifique se os processos raiz não acessam a memória dos aplicativos, a menos que você use um método de depuração documentado do Android.
  • Verifique se os dispositivos não incluem nenhum aplicativo que acesse dados ou memória de outros aplicativos ou processos.