Marcador de VPN no dispositivo ou endereço de saída: qual prova o quê?
Um marcador de rede lido no dispositivo e um endereço observado por um servidor são provas diferentes. Decida qual a sua pergunta precisa.
O aplicativo do telefone e o servidor remoto partem de fatos diferentes, e nenhum pode tomar emprestados os do outro. O aplicativo pode perguntar ao sistema operacional sobre a rede que usa, enquanto o servidor só sabe o que chega pela conexão. Executar o seu próprio ponto de saída reescreve o segundo e deixa o primeiro intacto. Qual dos dois responde à sua pergunta depende da própria pergunta.
Dois pontos de observação, dois tipos de prova
A prova local descreve o dispositivo. Abrange a interface que transporta o tráfego, o transporte que a plataforma informa e aquilo que o aplicativo que chama pode consultar. A prova remota descreve a conexão: endereço de origem, protocolo, tempos e tudo o que o aplicativo decidir enviar. Nenhum ponto de observação é um superconjunto do outro.
Misturar os dois produz afirmações que soam exatas e não podem ser verificadas. Um marcador prova algo sobre um objeto de rede no dispositivo, não sobre como um serviço remoto classifica a solicitação.
Antes de discutir detecção, anote a qual ponto a pergunta se refere. A questão é se um aplicativo específico consegue perceber que um túnel está ativo, ou se um serviço consegue inferir de onde veio a solicitação? São investigações separadas, e a resposta a uma não diz nada sobre a outra.
O que uma interface local de plataforma pode informar
O Android oferece um marcador específico. O objeto NetworkCapabilities pode informar TRANSPORT_VPN, e hasTransport testa se esse transporte está presente no objeto. O aplicativo obtém o objeto do serviço de conectividade e o lê, sujeito à permissão de estado da rede.
O resultado é informação local da plataforma, não uma consulta às faixas de endereços de um provedor. Descreve a rede que o aplicativo que chama está usando.
Dois limites importam. Uma regra de túnel dividido que exclui um aplicativo pode dar no mesmo telefone uma resposta diferente da que um colega vê, porque o aplicativo pode estar vinculado a outro lugar. O marcador também existe porque o sistema operacional modela interfaces VPN, não porque um aplicativo específico o colete. Se um aplicativo lê o campo, encaminha-o ou ignora-o é uma propriedade desse aplicativo. O manifesto e a documentação dele são as únicas fontes confiáveis para essa pergunta.
adb shell dumpsys connectivity | grep -i -m5 vpn
O que um serviço remoto pode ver
Um servidor vê o endereço de origem da conexão, o transporte e os tempos, e pode enriquecer o endereço com dados de registro ou de roteamento. Também pode receber tudo o que o aplicativo enviar, incluindo a localização quando o aplicativo a pede e o usuário concorda. Esses canais são separados, e apenas um se parece com uma consulta de endereço.
Um endereço registrado em um provedor de hospedagem sugere um túnel, enquanto um registrado em uma rede residencial sugere uma conexão doméstica. Ambos são indícios estatísticos, não fatos sobre o dispositivo.
Um endereço residencial não coloca a pessoa naquele endereço, e um endereço de hospedagem não nomeia o operador nem o país. Um serviço que trata a inferência como certeza às vezes errará sem conseguir detectar isso. Se o requisito é confiabilidade e não uma heurística, os dados de endereço não podem fornecê-la, e um projeto que diz isso é mais honesto do que um que esconde a suposição.
| Prova | A que responde | O que não pode mostrar |
|---|---|---|
| Marcador local de transporte | Se este objeto de rede é uma VPN | Quem opera a saída ou onde está o dispositivo |
| Endereço de origem remoto | Qual endereço chegou ao serviço | Se o dispositivo também carrega um túnel |
| Carga útil do aplicativo | O que o aplicativo escolheu enviar | Tudo o que o aplicativo não enviou |
Por que uma saída auto-hospedada muda apenas um lado
Executar o seu próprio ponto de saída muda o endereço de origem que um serviço remoto observa, o que pode movê-lo para fora das faixas que esse serviço associa a provedores comerciais. Não muda nada no modelo de rede local, porque o túnel continua sendo um túnel e o sistema operacional ainda o informa.
Um lado da prova se move; o outro fica fixo. A lacuna entre eles é onde as expectativas se quebram.
Um navegador é um terceiro caso com suas próprias interfaces e restrições. O conteúdo web não pode ler um objeto nativo de capacidades, e tratar um recurso do sistema operacional móvel como disponível para uma página web é um erro de categoria. Se a pergunta diz respeito a um site, estude o que um site realmente pode obter em vez de transliterar uma API de plataforma.
Decida com a pergunta que você faz
Se a pergunta é se um aplicativo específico pode observar o estado do túnel, a interface de plataforma é o lugar certo para olhar, e a resposta está no código e nas permissões desse aplicativo. Se a pergunta é o que um serviço pode inferir, os metadados da conexão são a prova. Uma questão legal ou contratual não é resolvida por nenhum dos dois.
Nomeie a pergunta em uma frase antes de coletar qualquer coisa. Essa frase decide qual ponto de observação importa e impede que a investigação derive para outra discussão.
Rotule cada observação pela sua fonte quando a relatar, porque uma afirmação sem rótulo não pode ser revisada. Um marcador local e uma inferência de endereço são ambos úteis e nenhum é conclusivo, e por isso fundi-los em um único veredito é um erro.
Quando um serviço rejeita uma conexão autorizada, use a via de revisão suportada por ele em vez de mudar uma configuração local para esconder um sinal. Remover uma observação nunca prova que as outras desapareceram.