AlterAntiX
Voltar ao blog
Técnico10 min de leitura

WebRTC Leak: o Vazamento que Entrega Seu IP Real com o Proxy Ligado

Proxy ligado não impede o WebRTC de entregar seu IP real — é um comportamento do navegador, não uma falha do proxy. Este artigo explica por que isso acontece, os 5 modos de tratar WebRTC e traz um teste para você ver, agora, se o seu está vazando.

Você configura o proxy, o site mostra o país que você pagou, e o seu IP real sai mesmo assim. Não por um buraco no proxy — por um recurso do navegador funcionando exatamente como foi projetado. Este é o que o WebRTC faz, por que o proxy não tem voz nisso, e os cinco modos de um navegador tratar o assunto.

Por que um proxy bom não impede um vazamento de WebRTC

Proxy configurado no navegador tem um trabalho estreito: pegar as requisições HTTP e HTTPS que o navegador faz e mandar primeiro para outro lugar. Ele faz bem esse trabalho. O mal-entendido é supor que esse trabalho cobre tudo o que o navegador faz em rede, e não cobre.

WebRTC é o padrão que permite dois navegadores trocarem áudio, vídeo e dados diretamente, sem um servidor no meio repassando cada pacote. Videochamada que roda dentro da aba, widget de atendimento ao vivo, sala de reunião pelo navegador — tudo isso é WebRTC. Conexão direta é o propósito inteiro da tecnologia, e conexão direta exige que cada lado saiba onde pode de fato ser alcançado. Então, antes de qualquer chamada começar, o WebRTC sai procurando os endereços que descrevem onde você está na rede.

Essa descoberta não pede autorização à configuração de proxy do navegador e normalmente acontece em UDP, que a maior parte dos proxies HTTP não carrega. O resultado são duas realidades paralelas dentro do mesmo navegador: o tráfego da página chega ao site vindo do proxy, enquanto o WebRTC descobriu e publicou por conta própria o endereço da máquina que está de fato rodando o navegador. As duas coisas são verdade ao mesmo tempo, e um site que lê as duas enxerga a contradição na hora.

O enquadramento que resolve a confusão
Isso não é um defeito e nunca foi. O WebRTC está fazendo precisamente o que existe para fazer. O problema é descasamento de expectativa: você configurou algo que governa requisição de página e assumiu que governava a rede. Entender isso muda a pergunta de "qual proxy eu compro" para "como o meu navegador trata o WebRTC".

O que é WebRTC e por que ele entrega o seu IP real?

Dois computadores atrás de roteadores domésticos não conseguem simplesmente se endereçar. Cada um enxerga um endereço privado na própria rede e não faz ideia do que o mundo vê. O WebRTC resolve isso com um procedimento chamado ICE, que reúne todas as formas plausíveis de chegar até você e oferece a lista para o outro lado, para os dois escolherem um caminho que funcione.

A lista tem três tipos de entrada. Candidatos host são os endereços das suas próprias interfaces de rede, vistos por dentro. Candidatos reflexivos de servidorsão o que um servidor STUN na internet devolve depois que você o contata — na prática, o navegador perguntando a um estranho "de que endereço meu pacote chegou?" e recebendo de volta o seu IP público. Candidatos de relay são endereços num servidor TURN que aceita encaminhar tráfego no seu lugar.

O segundo tipo é onde mora o vazamento. Uma consulta STUN é uma troca pequena em UDP com um servidor público, e a resposta é o endereço que o mundo enxerga para a conexão que o navegador realmente usou — a de verdade, não a do proxy. Essa resposta entra na lista de candidatos, e a lista de candidatos é legível pelo JavaScript. Não há exploração de falha nenhuma. A página simplesmente lê um valor que o navegador já calculou e deixou disponível.

Os dois IPs em jogo, e o que já foi resolvido

A maioria dos testes de vazamento mostra duas coisas, e elas merecem níveis bem diferentes de preocupação.

O IP local é o seu endereço na rede de casa ou do escritório, aquele da faixa privada. Ele vazava livremente e era de fato útil para rastrear, porque contava ao site alguma coisa sobre o formato da sua rede. O Chrome fechou isso na versão 76, substituindo endereços privados por um nome mDNS gerado aleatoriamente — uma sequência de caracteres hexadecimais terminada em .local. Ver esse nome num teste hoje não é vazamento. É a mitigação funcionando.

O IP público é o que importa, e é o que continua exposto pela etapa STUN descrita acima. Se um teste de vazamento mostra um IP público que não é o do seu proxy, o achado é esse. Todo o resto da página é secundário.

Leia o teste do jeito certo
Um verificador mostrando um nome terminado em .local ao lado de um IP público que bate com o seu proxy é um resultado limpo, não um resultado pela metade. Muita gente muda uma configuração que estava certa por ler a linha do endereço local como vazamento.

Como o navegador alcança a rede por fora do proxy

Vale ser concreto, porque o mecanismo explica todas as mitigações que vêm depois. Quando a coleta ICE começa, o navegador enumera as interfaces de rede e tenta contatar os servidores STUN configurados. Essas tentativas são datagramas UDP. Um proxy HTTP fala HTTP; não tem mecanismo para carregar um datagrama UDP cru, então o navegador nem tenta mandar por ali. Um proxy SOCKS5 pode carregar UDP em tese, mas essa capacidade muitas vezes não está habilitada pelo fornecedor nem é usada pelo navegador nesse caminho.

O datagrama então sai pela rota padrão — a sua conexão de verdade. O servidor STUN responde honestamente. O navegador registra a resposta como candidato válido, porque do ponto de vista dele acabou de descobrir um caminho funcional até a internet, que é exatamente o que pediram para ele encontrar.

O Chrome expõe uma política para isso que vale conhecer pelo nome, porque é o vocabulário que toda ferramenta pega emprestado: WebRtcIPHandling. Os valores vão de default, que usa toda interface disponível, passando por default_public_interface_only, que impede interfaces privadas de serem oferecidas, até disable_non_proxied_udp, que obriga o WebRTC a usar UDP por um proxy SOCKS ou cair para TCP. Esse último valor é a opção mais forte quando você está deliberadamente forçando tráfego por um proxy — e é o antepassado do quinto modo da próxima seção.

Os cinco modos de tratar WebRTC e o que cada um faz de verdade

As ferramentas anti-detect costumam apresentar os mesmos cinco modos com nomes um pouco diferentes. Abaixo, o que está por trás de cada um, descrito pelo mecanismo e não pelo rótulo.

ModoO que acontece de fatoCusto
BloquearO construtor RTCPeerConnection é removido e a captura de mídia é recusada. O WebRTC não roda de jeito nenhum.Nada vaza, mas um Chrome sem RTCPeerConnection já é uma anomalia, e qualquer site que precise de chamada quebra.
SubstituirO WebRTC continua existindo, mas os servidores STUN saem da configuração e os endereços reais na descrição de sessão viram 0.0.0.0 antes de alguém ler.Melhor equilíbrio para a maioria das contas de trabalho. Mídia que precisa de conexão ponto a ponto não estabelece.
RealNenhuma interferência. O navegador coleta e publica o que encontrar.Só faz sentido quando o perfil não tem proxy e não tem exigência de separação.
EncaminharA configuração é filtrada para sobrar só servidor TURN de relay, então os candidatos vêm do relay em vez da descoberta direta.Mídia continua funcionando. Exige um servidor TURN de verdade, então é a opção com dependência.
Desabilitar UDPA conexão é forçada para transporte só de relay, então nenhum caminho UDP direto é tentado.Fecha a rota de fuga em UDP e mantém a API presente. Também depende de infraestrutura de relay para ser útil.

A distinção que passa batido é entre bloquear e substituir. Bloquear remove a capacidade; substituir mantém a capacidade e higieniza o que ela reporta. Do ponto de vista de detecção, são decisões opostas. Um perfil que diz ser Chrome e não consegue construir um RTCPeerConnection se contradisse, e essa contradição é tão barata de detectar quanto ler o user agent — a mesma classe de problema que descrevemos no artigo sobre ruído em canvas e WebGL: a defesa que remove um sinal muitas vezes cria um mais barulhento.

Qual modo usar em cada situação

  • Conta de trabalho em marketplace, plataforma de anúncio ou rede social. Substituir. O site nunca vai precisar de conexão ponto a ponto, e o perfil mantém uma superfície de API completa e de aparência comum.
  • Perfil que precisa fazer ou receber chamadas. Encaminhar, com um servidor TURN que você controla ou assina. É o único modo em que a mídia funciona e ao mesmo tempo fica atrás do seu relay.
  • Perfil endurecido em que nenhum site vai usar mídia. Bloquear é defensável, desde que você aceite que a ausência da API já é um sinal.
  • Perfil sem proxy nenhum, na sua própria conexão. Real. Se não há o que esconder, esconder cria anomalia sem benefício.
  • SOCKS5 no lugar e postura mais rígida possível. Desabilitar UDP, para nada tentar um caminho de datagrama direto por fora do proxy.
Uma decisão por perfil, não uma por máquina
Essas escolhas são de perfil. Um perfil que roda conta de anúncio e um perfil usado para chamadas de atendimento têm respostas certas diferentes, e uma chave global única impõe a errada a alguém.

Vale também ser honesto sobre quanto um vazamento custa, porque o nicho costuma descrever isso como catástrofe instantânea e normalmente não é. Um IP público vazado não fecha uma conta sozinho. O que ele faz é bem mais silencioso: entrega à plataforma um vínculo durável entre contas que deveriam não ter relação. Três perfis em três proxies diferentes que uma vez reportaram o mesmo endereço residencial são três contas que a plataforma consegue agrupar, e esse agrupamento não expira quando você corrige a configuração. O dano é retroativo e permanente, e é exatamente por isso que isso se testa antes de a operação crescer, não depois de dar errado.

Teste agora e leia o seu próprio resultado

Leva menos de um minuto e não exige instalar nada. Abra o teste de vazamento de WebRTC no navegador ou perfil que você usa para trabalhar, com o proxy ligado, e compare quatro linhas.

  • IP público reportado pela requisição da página. Esse tem que ser o do seu proxy. Se não for, o problema está antes do WebRTC e você resolve isso primeiro com a checagem de IP e proxy.
  • IP público descoberto pelo WebRTC. É esse o achado. Igual à linha de cima significa nenhum vazamento. Diferente, e especificamente o seu endereço de casa ou do escritório, significa vazamento.
  • Endereço local. Uma sequência hexadecimal terminada em .local é o resultado esperado e saudável no Chrome atual. Um endereço de faixa privada indica que a mitigação mDNS não está em ação.
  • Se o RTCPeerConnection sequer existe. Se o teste diz que a API está ausente enquanto o seu perfil afirma ser Chrome, você não está vazando — está anunciando que alguma coisa modifica o navegador.

Rode duas vezes: uma no seu navegador normal com o proxy ligado, outra no perfil que você pretende usar. A comparação ensina mais que qualquer um dos resultados sozinho, porque separa duas perguntas que costumam ser confundidas: se o seu proxy está roteando alguma coisa, e se o seu navegador está vazando por fora dele. Navegador comum com proxy configurado tipicamente passa na primeira e reprova na segunda, e ver os dois resultados lado a lado torna a distinção concreta como explicação nenhuma consegue. Para uma varredura de todos os outros sinais na mesma sentada, nosso roteiro de teste de 60 segundos cobre o resto das camadas.

Como o AlterAntiX trata WebRTC por perfil

No AlterAntiX a política de WebRTC é um campo do perfil, escolhido entre os cinco modos acima e aplicado quando o perfil abre, então dois perfis abertos ao mesmo tempo podem estar sob políticas diferentes. Perfis novos nascem no modo de substituição, que é o padrão porque é a resposta certa para a maioria das contas de trabalho, não porque seja o mais rígido.

O modo de substituição faz duas coisas juntas. Esvazia a lista de servidores ICE, para o navegador nunca perguntar a um STUN qual é o seu endereço público. E intercepta a descrição de sessão e o fluxo de candidatos, reescrevendo para 0.0.0.0 qualquer endereço real que apareça antes de a página ler — deixando em paz o loopback e o endereço não especificado, já que reescrever esses dois seria por si só uma anomalia. O modo de encaminhamento, em vez disso, filtra a lista de servidores para deixar só entradas TURN, e o modo de desabilitar UDP força a conexão para transporte só de relay.

Vale ser claro sobre o limite. Tratar WebRTC direito fecha um buraco específico. Não faz nada pelo fingerprint do navegador, e nada pelo handshake TLS que sai antes de tudo isso — um perfil pode passar num teste de WebRTC com nota máxima e ainda ser identificado por um JA3 ou JA4 que contradiz o próprio user agent. As camadas são independentes, e é por isso que a gente trata as duas como um trabalho só, não como uma opção. O AlterAntiX é download gratuito para desktop em Windows e Linux; a versão de macOS ainda não existe.

Leve isto daqui
  • Proxy encaminha requisição de página. O WebRTC descobre caminhos de rede por conta própria, normalmente em UDP, e nunca consulta essa configuração.
  • O vazamento vem da etapa STUN, que pergunta a um servidor público qual é o seu endereço real e publica a resposta para o JavaScript.
  • Endereço local já está resolvido: o Chrome troca por um nome mDNS .local. Não leia essa linha como vazamento.
  • Bloquear o WebRTC para o vazamento e cria outro sinal. Substituir os endereços mantém a API presente e é o padrão melhor.
  • A escolha pertence ao perfil, não à máquina — um perfil de atendimento e um perfil de conta de anúncio precisam de modos diferentes.

Perguntas frequentes

WebRTC leak é uma falha do meu proxy?

Não. O proxy está fazendo exatamente o que foi contratado para fazer: encaminhar o tráfego HTTP e HTTPS do navegador. O WebRTC abre um caminho de rede próprio, normalmente em UDP, que não passa por esse encaminhamento. Trocar de fornecedor de proxy não resolve; o que resolve é mudar como o navegador trata o WebRTC.

Desligar o WebRTC completamente é a opção mais segura?

É a mais segura contra vazamento e a pior contra detecção. Chrome real tem RTCPeerConnection; um navegador que diz ser Chrome e não tem esse objeto está declarando uma incompatibilidade que qualquer script confere em uma linha. Bloquear serve para operação onde nenhum site vai usar chamada de voz ou vídeo e o risco de vazamento supera o de parecer estranho.

Meu IP local aparecendo no teste é problema?

Hoje, quase sempre não. Desde o Chrome 76 o navegador substitui endereços privados por um nome mDNS aleatório terminado em .local, e ver esse nome é comportamento normal. O que importa é se o IP público que aparece é o do proxy ou o da sua casa.

Uma VPN resolve o vazamento de WebRTC?

Resolve por acidente, e só em parte. Como a VPN muda a rota de todo o sistema, o IP público que o WebRTC descobre já é o da VPN. Mas isso vale para todos os perfis ao mesmo tempo: cada perfil aberto na máquina passa a compartilhar o mesmo IP, que é justamente o oposto do que uma operação multiconta precisa.

Qual modo devo usar no dia a dia?

Para a maioria das operações de conta de trabalho, o modo que substitui os endereços mantendo o objeto WebRTC presente é o melhor equilíbrio: nenhum IP real sai e o navegador continua parecendo um navegador. Encaminhar é a escolha quando o site precisa de mídia funcionando de verdade e existe um servidor TURN disponível.

Preciso reconfigurar isso a cada perfil?

No AlterAntiX a política de WebRTC é uma propriedade do perfil, então cada perfil carrega a sua e não existe configuração global que sobreponha. Perfis novos são criados no modo de substituição, e você troca perfil a perfil quando alguma operação específica exigir.

Fingerprint e TLS alinhados, de verdade

O AlterAntiX casa o fingerprint do navegador com o TLS na mesma versão de Chrome. Baixe e teste você mesmo.

Baixar o AlterAntiX