Os dispositivos em uma rede local (LAN) podem ser acessados por qualquer app que tenha a permissão
INTERNET
.
Isso facilita a conexão dos apps com dispositivos locais, mas também tem implicações de privacidade, como a formação de uma impressão digital do usuário e o uso como proxy de localização.
O projeto Proteções de rede local visa proteger a privacidade do usuário restringindo o acesso à rede local com uma nova permissão de execução.
Impacto
No Android 16, essa permissão é um recurso de ativação. Isso significa que apenas os apps que ativarem a opção serão afetados. O objetivo da ativação é que os desenvolvedores de apps entendam quais partes do app dependem do acesso implícito à rede local para que possam se preparar para proteger as permissões em uma versão futura do Android.
Os apps serão afetados se acessarem a rede local do usuário usando:
- Uso direto ou de biblioteca de sockets brutos em endereços de rede local, por exemplo,
Multicast DNS (mDNS)
ouSimple Service Discovery Protocol (SSDP)
. - Uso de classes no nível da estrutura que acessam a rede local, por exemplo,
NsdManager
.
Detalhes do impacto
O tráfego de e para um endereço de rede local exige permissão de acesso à rede local. A tabela a seguir lista alguns casos comuns:
Operação de rede de baixo nível do app | Permissão de rede local necessária |
---|---|
Fazer uma conexão TCP de saída | sim |
Aceitar uma conexão TCP de entrada | sim |
Enviar um unicast, multicast ou broadcast UDP | sim |
Receber um unicast, multicast ou transmissão UDP de entrada | sim |
Essas restrições são implementadas na pilha de rede e, portanto, se aplicam a todas as APIs de rede. Isso inclui sockets criados na plataforma ou em código gerenciado, bibliotecas de rede como Cronet e OkHttp e todas as APIs implementadas sobre elas. Tentar resolver serviços na rede local
que têm um sufixo .local
requer permissão da rede local.
Exceções às regras anteriores:
- Se o servidor DNS de um dispositivo estiver em uma rede local, o tráfego de / para ele (na porta 53) não exigirá permissão de acesso à rede local.
- Os aplicativos que usam o seletor de saída como seletor no app não vão precisar de permissões de rede local. Mais orientações serão fornecidas em uma versão futura.
Orientação
Para ativar as restrições de rede local, faça o seguinte:
- Atualizar o dispositivo para um build com o Android 16 Beta 3 ou mais recente
- Instalar o app a ser testado
Ativar ou desativar a configuração do Appcompat usando o adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
Reinicie o dispositivo.
Agora, o acesso do app à rede local está restrito, e qualquer tentativa de
acessar a rede local vai gerar erros de soquete.
Se você estiver usando APIs que realizam operações de rede local fora do processo do app, como NsdManager
, elas não serão afetadas durante a ativação.
Para restaurar o acesso, conceda ao app permissão para NEARBY_WIFI_DEVICES
.
- Verifique se o app declara a permissão
NEARBY_WIFI_DEVICES
nomanifest
. - Acesse Configurações > Apps > [Nome do aplicativo] > Permissões > Dispositivos por perto > Permitir.
Agora, o acesso do app à rede local deve ser restaurado, e todos os seus cenários vão funcionar como antes de ativar o app. Veja como o tráfego de rede do app será afetado.
Permissão | Solicitação de LAN de saída | Solicitação de Internet de saída/entrada | Solicitação de LAN de entrada |
---|---|---|---|
Concedido | Works | Works | Works |
Não concedido | Falhas | Works | Falhas |
Use o comando a seguir para desativar a configuração do Appcompat
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Erros
Os erros decorrentes dessas restrições serão retornados ao soquete de chamada
sempre que ele invocar send
ou uma variante send
para um endereço de rede local.
Exemplo de erros:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Bugs
Envie bugs e feedback sobre:
- Discrepâncias no acesso à LAN (você acha que um determinado acesso não deve ser considerado "rede local")
- Bugs em que o acesso à LAN deveria estar bloqueado, mas não está
- Bugs em que o acesso à LAN não deveria ser bloqueado, mas é
Os seguintes itens não serão afetados por essa mudança:
- Acesso à Internet
- Rede móvel