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:
- Tempo de execução do Android
- Criptografar
- Resolvedor de DNS
- DocumentosUI
- ExtServices
- meios de comunicação
- Módulo Metadados
- Rede
- PermissionController
- Dados de fuso horário
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>
paraACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, o sistema adicionará automaticamente um elemento<uses-permission>
paraACCESS_BACKGROUND_LOCATION
durante a instalação. - Se seu aplicativo solicitar
ACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, o sistema adicionará automaticamenteACCESS_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, definatargetSdkVersion
oucompileSdkVersion
do seu aplicativo como29
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:
- Arquivos no diretório específico do aplicativo, acessados usando
getExternalFilesDir()
. - Fotos, vídeos e clipes de áudio que o aplicativo criou na loja de mídia .
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.
-
Build
-
TelephonyManager
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ãoREAD_PHONE_STATE
. Caso contrário, ocorre umaSecurityException
.
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:
- O método
getConfiguredNetworks()
sempre retorna uma lista vazia. - Cada método de operação de rede que retorna um valor inteiro —
addNetwork()
eupdateNetwork()
— sempre retorna -1. - Cada operação de rede que retorna um valor booleano —
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
econnect(disconnect()
— sempre retornafalse
.