Impressão digital do navegador: o que os sites realmente leem

Um passeio campo a campo pelos valores que um site coleta, de canvas e WebGL a áudio, fontes, tela e fuso horário, e por que uma identidade coerente vale mais do que uma aleatória.
A impressão digital do navegador (browser fingerprinting) é a prática de identificar um navegador pelos valores que ele informa, e não por algo que ele armazena. Não é preciso nenhum cookie. O navegador simplesmente responde às perguntas que qualquer página web pode fazer, e as respostas, em conjunto, são distintivas o bastante para serem reconhecidas de novo.
Os valores coletados
A maioria dos scripts de fingerprinting lê das mesmas poucas superfícies.
Os óbvios
- O user agent traz o nome, a versão e a plataforma do navegador, e é enviado em toda requisição.
- A tela informa largura, altura, profundidade de cor, proporção de pixels e a área de trabalho disponível.
- Idioma e fuso horário abrangem a localidade que o navegador informa e o deslocamento que ele calcula.
- As dicas de hardware informam o número de processadores reportado e, em alguns navegadores, um valor aproximado de memória.
Os de renderização
São os valores a que as pessoas se referem quando falam de fingerprinting, porque são indiretos. Uma página pede ao navegador que desenhe algo e depois lê exatamente o que foi desenhado.
- O trabalho com canvas renderiza texto e formas num canvas fora da tela e calcula o hash deles. O resultado varia conforme a pilha gráfica, as fontes e o anti-aliasing.
- O WebGL expõe as strings de fabricante e de renderizador do adaptador gráfico, além de um hash de uma cena renderizada.
- O áudio passa um oscilador pelo grafo de processamento de áudio e calcula o hash da saída. O comportamento de ponto flutuante difere ligeiramente entre pilhas.
- A detecção de fontes mede texto em fontes candidatas e infere quais estão instaladas a partir de quais medições diferem.
Os de rede
- O endereço de onde a requisição chega e o que um banco de dados de geolocalização diz sobre ele.
- O WebRTC, que pode revelar endereços que a conexão de outro modo não exporia.
- A ordem e o conteúdo dos campos do handshake TLS e HTTP, que variam conforme o cliente.
Por que randomizar todos os campos é o instinto errado
A defesa intuitiva é mudar tudo a cada visita. Ela sai pela culatra, por dois motivos.
O primeiro é a contradição. Campos randomizados não sabem uns dos outros. Um user agent que afirma Windows ao lado de uma string de renderizador WebGL que só existe em hardware Apple é um sinal mais forte do que qualquer um dos valores jamais seria sozinho. Máquinas reais são internamente consistentes; só as sintéticas discordam de si mesmas.
O segundo é a instabilidade. Uma conta que informa um dispositivo diferente a cada visita está descrevendo algo que nenhuma pessoa real possui. Consistência ao longo do tempo é a aparência de um usuário comum.
O que a identidade de um perfil cobre
| Superfície | Tratada por |
|---|---|
| User agent e plataforma | Gerados juntos, de modo que a plataforma declarada combina com os valores ao redor |
| Tela e proporção de pixels | Fixos por perfil, tirados de tamanhos que telas reais de fato informam |
| Fuso horário e localidade | Definidos por perfil e conferidos com a rota de rede que ele usa |
| Canvas, WebGL e áudio | Recebem um tratamento estável por perfil, idêntico a cada abertura |
| Fontes | Um conjunto por perfil, consistente com a plataforma que o perfil declara |
| WebRTC | Restringido para não contradizer a rota de rede do perfil |
Conferindo o seu próprio trabalho
Abra um perfil e visite uma página de teste de fingerprinting. Várias publicam, de graça, os valores que leem. As duas coisas que vale a pena conferir não são as que você poderia esperar:
- Os valores concordam entre si? Plataforma, fontes, strings gráficas e fuso horário devem descrever uma única máquina plausível.
- São os mesmos da última vez? Feche o perfil, abra-o de novo e recarregue o teste. Um perfil cujos valores mudam entre aberturas não é estável, e a estabilidade é a propriedade que importa.
Uma pontuação de raridade numa página de teste é o número menos útil de todos. Ela mede você em relação aos visitantes daquela página, que são, em sua esmagadora maioria, pessoas testando navegadores antidetect.


