Permissão de rede local

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:

  1. Atualizar o dispositivo para um build com o Android 16 Beta 3 ou mais recente
  2. Instalar o app a ser testado
  3. Ativar ou desativar a configuração do Appcompat usando o adb

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. 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