Os dispositivos em uma LAN podem ser acessados por qualquer app que tenha a permissão
INTERNET
.
Isso facilita a conexão de apps a dispositivos locais, mas também traz
implicações de privacidade, como a formação de uma impressão digital do usuário e a
função de proxy para localização.
O objetivo do projeto de proteções de rede local é proteger a privacidade do usuário limitando o acesso à rede local com uma nova permissão de execução.
Impacto
No Android 16, essa permissão é um recurso opcional, o que significa que apenas os apps que ativarem essa permissão serão afetados. O objetivo da ativação é que os desenvolvedores entendam quais partes do app dependem do acesso implícito à rede local para que eles possam se preparar para a proteção de permissão 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 soquetes brutos em endereços de rede local (por exemplo, protocolo de descoberta de serviço mDNS ou SSDP)
- Uso de classes no nível do framework que acessam a rede local (por exemplo, NsdManager)
Detalhes do impacto
O tráfego de e para um endereço de rede local exige a 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 da rede local necessária |
---|---|
Estabelecer uma conexão TCP de saída | sim |
Aceitar uma conexão TCP de entrada | sim |
Como enviar um unicast, multicast ou broadcast UDP | sim |
Receber um unicast, multicast ou broadcast UDP | sim |
Essas restrições são implementadas profundamente na pilha de rede e, portanto, se aplicam a todas as APIs de rede. Isso inclui soquetes criados na plataforma ou no código gerenciado, bibliotecas de rede, como Cronet e OkHttp, e qualquer API implementada em cima delas. Tentar resolver serviços na rede local (ou seja, aqueles com um sufixo .local) vai exigir a permissão de rede local.
Exceções às regras anteriores:
- Se o servidor DNS de um dispositivo estiver em uma rede local, o tráfego para / dele (na porta 53) não vai exigir permissão de acesso à rede local.
- Os aplicativos que usam o Output Switcher como seletor no app não precisam 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>
Reinicializar o dispositivo
Agora o acesso do app à rede local está restrito, e qualquer tentativa de acesso à rede local vai gerar erros de soquete. Se você estiver usando APIs que executam operações de rede local fora do processo do app (por exemplo, NsdManager), elas não serão afetadas durante a ativação.
Para restaurar o acesso, conceda ao app a permissão NEARBY_WIFI_DEVICES
.
- Verifique se o app declara a permissão
NEARBY_WIFI_DEVICES
no manifesto. - Acesse Configurações > Apps > [Nome do aplicativo] > Permissões > Dispositivos por perto > Permitir.
Agora, o acesso do app à rede local será restaurado, e todos os cenários vão funcionar como antes de ativar o app. Confira 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
Erros decorrentes dessas restrições serão retornados ao soquete de chamada
sempre que ele invocar send
ou uma variante de send
para um endereço de rede local.
Exemplos 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ê não acha que um determinado acesso deve ser considerado "rede local")
- Bugs em que o acesso à LAN deveria ser bloqueado, mas não é.
- Bugs em que o acesso à LAN não deveria ser bloqueado, mas é.
As seguintes ações não serão afetadas por essa mudança:
- Acesso à Internet
- Rede móvel