Aprimoramentos de segurança e privacidade no Android 10

Cada versão do Android inclui dezenas de aprimoramentos de segurança para proteger os usuários. O Android 10 inclui vários aprimoramentos de segurança e privacidade. Consulte as notas de versão do Android 10 para obter uma lista completa de alterações no Android 10.

Segurança

Bounds Sanitizer

O Android 10 implanta o BoundsSanitizer (BoundSan) em Bluetooth e codecs. O BoundSan usa o desinfetante de limites do UBSan. Essa mitigação é habilitada em um nível por módulo. Ele ajuda a manter os componentes críticos do Android seguros e não deve ser desativado. O BoundSan está habilitado nos seguintes codecs:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

Memória somente para execução

Por padrão, as seções de código executável para binários do sistema AArch64 são marcadas como somente execução (não legível) como uma mitigação de proteção contra ataques de reutilização de código just-in-time. O código que mistura dados e código e o código que inspeciona propositalmente essas seções (sem primeiro remapear os segmentos de memória como legíveis) não funciona mais. Aplicativos com um SDK de destino do Android 10 (API de nível 29 ou superior) são afetados se o aplicativo tentar ler seções de código de bibliotecas de sistema habilitadas para memória somente para execução (XOM) na memória sem primeiro marcar a seção como legível.

Acesso estendido

Os agentes de confiança, o mecanismo subjacente usado por mecanismos de autenticação terciários, como o Smart Lock, só podem estender o desbloqueio no Android 10. Os agentes de confiança não podem mais desbloquear um dispositivo bloqueado e só podem manter um dispositivo desbloqueado por no máximo quatro horas.

Autenticação facial

A autenticação facial permite que os usuários desbloqueiem seus dispositivos simplesmente olhando para a frente do dispositivo. O Android 10 adiciona suporte para uma nova pilha de autenticação facial que pode processar com segurança os quadros da câmera, preservando a segurança e a privacidade durante a autenticação facial em hardware compatível. O Android 10 também oferece uma maneira fácil de implementar implementações em conformidade com a segurança para permitir a integração de aplicativos para transações como serviços bancários on-line ou outros serviços.

Sanitização por transbordamento de inteiros

O Android 10 permite a Sanitização por estouro de número inteiro (IntSan) em codecs de software. Certifique-se de que o desempenho de reprodução seja aceitável para qualquer codec que não seja compatível com o hardware do dispositivo. IntSan está habilitado nos seguintes codecs:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

Componentes do sistema modular

O Android 10 modulariza alguns componentes do sistema Android e permite que eles sejam atualizados fora do ciclo normal de lançamento do Android. Alguns módulos incluem:

OEMCrypto

O Android 10 usa a API OEMCrypto versão 15.

Escudo

Scudo é um alocador de memória dinâmico de modo de usuário projetado para ser mais resiliente contra vulnerabilidades relacionadas a heap. Ele fornece as primitivas de alocação e desalocação padrão de C, bem como as primitivas de C++.

ShadowCallStack

ShadowCallStack (SCS) é um modo de instrumentação LLVM que protege contra sobregravações de endereço de retorno (como estouro de buffer de pilha) salvando o endereço de retorno de uma função em uma instância ShadowCallStack alocada separadamente no prólogo da função de funções nonleaf e carregando o endereço de retorno da instância ShadowCallStack em o epílogo da função.

Aberto aprimorado para WPA3 e Wi-Fi

O Android 10 adiciona suporte para os padrões de segurança Wi-Fi Protected Access 3 (WPA3) e Wi-Fi Enhanced Open para fornecer melhor privacidade e robustez contra ataques conhecidos.

Privacidade

Acesso ao aplicativo ao segmentar o Android 9 ou inferior

Se seu aplicativo for executado no Android 10 ou superior, mas for direcionado ao Android 9 (API de nível 28) ou inferior, a plataforma aplicará o seguinte comportamento:

  • Se seu aplicativo declarar um elemento <uses-permission> para ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION , o sistema adicionará automaticamente um elemento <uses-permission> para ACCESS_BACKGROUND_LOCATION durante a instalação.
  • Se seu aplicativo solicitar ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION , o sistema adicionará automaticamente ACCESS_BACKGROUND_LOCATION à solicitação.

Restrições de atividade em segundo plano

A partir do Android 10, o sistema impõe restrições ao início de atividades em segundo plano . Essa mudança de comportamento ajuda a minimizar as interrupções para o usuário e mantém o usuário mais no controle do que é mostrado na tela. Contanto que seu aplicativo inicie atividades como resultado direto da interação do usuário, é provável que seu aplicativo não seja afetado por essas restrições.
Para saber mais sobre a alternativa recomendada para iniciar atividades em segundo plano, consulte o guia sobre como alertar os usuários sobre eventos sensíveis ao tempo em seu aplicativo.

Metadados da câmera

O Android 10 altera a amplitude das informações que o método getCameraCharacteristics() retorna por padrão. Em particular, seu aplicativo deve ter a permissão CAMERA para acessar metadados potencialmente específicos do dispositivo que estão incluídos no valor de retorno desse método.
Para saber mais sobre essas alterações, consulte a seção sobre campos de câmera que exigem permissão .

Dados da área de transferência

A menos que seu aplicativo seja o editor de método de entrada (IME) padrão ou seja o aplicativo que está em foco no momento, seu aplicativo não pode acessar dados da área de transferência no Android 10 ou superior.

Localização do dispositivo

Para oferecer suporte ao controle adicional que os usuários têm sobre o acesso de um aplicativo às informações de localização, o Android 10 apresenta a permissão ACCESS_BACKGROUND_LOCATION .
Ao contrário das permissões ACCESS_FINE_LOCATION e ACCESS_COARSE_LOCATION , a permissão ACCESS_BACKGROUND_LOCATION afeta apenas o acesso de um aplicativo ao local quando ele é executado em segundo plano. Considera-se que um aplicativo está acessando a localização em segundo plano, a menos que uma das seguintes condições seja atendida:

  • Uma atividade pertencente ao aplicativo é visível.
  • O aplicativo está executando um serviço de primeiro plano que declarou umtipo de serviço de primeiro plano de location .
    Para declarar o tipo de serviço em primeiro plano para um serviço em seu aplicativo, defina targetSdkVersion ou compileSdkVersion do seu aplicativo como 29 ou superior. Saiba mais sobre como os serviços em primeiro plano podem continuar as ações iniciadas pelo usuário que exigem acesso à localização.

Armazenamento externo

Por padrão, os aplicativos direcionados ao Android 10 e superior recebem acesso com escopo ao armazenamento externo ou armazenamento com escopo . Esses aplicativos podem ver os seguintes tipos de arquivos em um dispositivo de armazenamento externo sem precisar solicitar nenhuma permissão de usuário relacionada ao armazenamento:

Para saber mais sobre armazenamento com escopo, bem como compartilhar, acessar e modificar arquivos salvos em dispositivos de armazenamento externo, consulte os guias sobre como gerenciar arquivos em armazenamento externo e acessar e modificar arquivos de mídia .

Randomização de endereços MAC

Em dispositivos que executam o Android 10 ou superior, o sistema transmite endereços MAC aleatórios por padrão.
Se seu aplicativo lida com um caso de uso corporativo , a plataforma fornece APIs para várias operações relacionadas a endereços MAC:

  • Obter endereço MAC aleatório : os aplicativos do proprietário do dispositivo e os aplicativos do proprietário do perfil podem recuperar o endereço MAC aleatório atribuído a uma rede específica chamando getRandomizedMacAddress() .
  • Obtenha o endereço MAC real de fábrica: os aplicativos do proprietário do dispositivo podem recuperar o endereço MAC real do hardware de um dispositivo chamando getWifiMacAddress() . Este método é útil para rastrear frotas de dispositivos.

Identificadores de dispositivo não reconfiguráveis

A partir do Android 10, os aplicativos devem ter a permissão privilegiada READ_PRIVILEGED_PHONE_STATE para acessar os identificadores não redefiníveis do dispositivo, que incluem IMEI e número de série.

Se seu aplicativo não tiver a permissão e você tentar solicitar informações sobre identificadores não redefiníveis mesmo assim, a resposta da plataforma varia de acordo com a versão do SDK de destino:

  • Se seu aplicativo for direcionado ao Android 10 ou superior, ocorrerá uma SecurityException .
  • Se seu aplicativo for direcionado ao Android 9 (API de nível 28) ou inferior, o método retornará dados null ou de espaço reservado se o aplicativo tiver a permissão READ_PHONE_STATE . Caso contrário, ocorre uma SecurityException .

Reconhecimento de atividade física

O Android 10 apresenta a permissão de tempo de execução android.permission.ACTIVITY_RECOGNITION para aplicativos que precisam detectar a contagem de passos do usuário ou classificar a atividade física do usuário, como caminhar, andar de bicicleta ou se mover em um veículo. Isso foi projetado para dar aos usuários visibilidade de como os dados do sensor do dispositivo são usados ​​nas Configurações.
Algumas bibliotecas do Google Play Services, como a API Activity Recognition e a API Google Fit , não fornecem resultados, a menos que o usuário tenha concedido essa permissão ao seu aplicativo.
Os únicos sensores integrados no dispositivo que exigem que você declare essa permissão são os sensores do contador de passos e do detector de passos.
Se seu aplicativo for direcionado ao Android 9 (API de nível 28) ou inferior, o sistema concederá automaticamente a permissão android.permission.ACTIVITY_RECOGNITION ao seu aplicativo, conforme necessário, se ele atender a cada uma das seguintes condições:

  • O arquivo de manifesto inclui a permissão com.google.android.gms.permission.ACTIVITY_RECOGNITION .
  • O arquivo de manifesto não inclui a permissão android.permission.ACTIVITY_RECOGNITION .

Se o sistema automático conceder a permissão android.permission.ACTIVITY_RECOGNITION , seu aplicativo manterá a permissão depois que você atualizar seu aplicativo para o Android 10. No entanto, o usuário poderá revogar essa permissão a qualquer momento nas configurações do sistema.

Restrições do sistema de arquivos /proc/net

Em dispositivos que executam o Android 10 ou superior, os aplicativos não podem acessar /proc/net , que inclui informações sobre o estado da rede de um dispositivo. Os aplicativos que precisam acessar essas informações, como VPNs, devem usar a classe NetworkStatsManager ou ConnectivityManager .

Grupos de permissão removidos da IU

A partir do Android 10, os aplicativos não podem pesquisar como as permissões são agrupadas na interface do usuário.

Remoção de afinidade de contatos

A partir do Android 10, a plataforma não acompanha as informações de afinidade dos contatos. Como resultado, se seu aplicativo realizar uma pesquisa nos contatos do usuário, os resultados não serão ordenados por frequência de interação.
O guia sobre ContactsProvider contém um aviso que descreve os campos e métodos específicos que estão obsoletos em todos os dispositivos a partir do Android 10.

Acesso restrito ao conteúdo da tela

Para proteger o conteúdo da tela dos usuários, o Android 10 impede o acesso silencioso ao conteúdo da tela do dispositivo alterando o escopo das READ_FRAME_BUFFER , CAPTURE_VIDEO_OUTPUT e CAPTURE_SECURE_VIDEO_OUTPUT . A partir do Android 10, essas permissões são apenas de acesso por assinatura .
Os aplicativos que precisam acessar o conteúdo da tela do dispositivo devem usar a API MediaProjection , que exibe um prompt solicitando o consentimento do usuário.

Número de série do dispositivo USB

Se seu app for direcionado ao Android 10 ou superior, ele não poderá ler o número de série até que o usuário conceda permissão ao app para acessar o dispositivo ou acessório USB.
Para saber mais sobre como trabalhar com dispositivos USB, consulte o guia sobre como configurar hosts USB .

Wi-fi

Os apps direcionados ao Android 10 ou superior não podem ativar ou desativar o Wi-Fi. O método WifiManager.setWifiEnabled() sempre retorna false .
Se você precisar solicitar aos usuários que ativem e desativem o Wi-Fi, use um painel de configurações .

Restrições de acesso direto a redes Wi-Fi configuradas

Para proteger a privacidade do usuário, a configuração manual da lista de redes Wi-Fi é restrita aos aplicativos do sistema e controladores de política do dispositivo (DPCs) . Um determinado DPC pode ser o proprietário do dispositivo ou o proprietário do perfil.
Se seu aplicativo for direcionado ao Android 10 ou superior e não for um aplicativo do sistema ou um DPC, os métodos a seguir não retornarão dados úteis: