Voltar ao blog

Fingerprint de Canvas e mitigação: consistência é melhor que aleatorização

O fingerprint de Canvas transforma diferenças de renderização da mesma instrução de desenho em diferentes hardwares e softwares em um identificador e raramente é usado sozinho. Uma resposta adequada não é mudar tudo a cada acesso, mas manter as características do ambiente coerentes entre si.

O princípio do fingerprint de Canvas não é complicado, mas muitas das medidas de proteção que circulam por aí fazem justamente o contrário do que seria útil.

As mesmas instruções geram resultados diferentes em máquinas diferentes

Canvas é um componente de desenho do HTML5 que permite a uma página usar scripts para desenhar formas e texto. As mesmas instruções de desenho podem produzir pequenas diferenças de renderização em dispositivos distintos devido a fatores de baixo nível como sistema operacional, versão do navegador, biblioteca de fontes e driver gráfico. A olho nu, quase não se percebe nada, mas quando o conteúdo do canvas é exportado como dados, essas diferenças se tornam valores comparáveis.

O processo é mais ou menos assim: a página primeiro desenha alguns elementos gráficos e texto e, em seguida, usa toDataURL() para exportar o resultado como uma string Base64. Essa string pode então ser usada como identificador. Dispositivos diferentes geram resultados diferentes e, por isso, em muitos casos o valor é único. Limpar cookies não tem efeito sobre ele, assim como limpar o cache.

Raramente é usado sozinho

Um valor de Canvas isolado tem utilidade limitada e pode mudar quando o navegador é atualizado ou o driver gráfico é alterado. Na prática, Canvas costuma ser combinado com várias outras características para verificação cruzada:

  • Dados gráficos como WebGL, lista de fontes e modelo da placa de vídeo
  • Dados do ambiente como UA, fuso horário, idioma e resolução da tela
  • Dados de sessão como cookies, armazenamento local e saída de rede

O motivo dessa combinação é verificar a consistência. Cada item isoladamente pode parecer normal, mas contradições ficam evidentes quando tudo é analisado em conjunto: o fuso horário está nos Estados Unidos, a lista de idiomas contém apenas chinês e o valor de Canvas corresponde a gráficos integrados, enquanto a UA informa um aparelho novo de alto desempenho. A plataforma não precisa provar quem você é. Basta detectar que esse conjunto de características não parece pertencer a uma máquina real.

Desativar faz o ambiente se destacar

A primeira reação de muita gente é desativar o Canvas, mas isso pode produzir exatamente o efeito oposto.

Quase todos os navegadores de usuários comuns oferecem suporte a Canvas. Um ambiente que claramente não oferece esse suporte é estatisticamente minoritário e acaba anunciando que existe um tratamento especial. Há também um problema prático: muitos sites dependem de Canvas para recorte de imagens, gráficos e renderização de CAPTCHA. Ao desativá-lo, recursos da página podem parar de funcionar e surge mais uma anomalia.

Outra abordagem é trocar os valores por um conjunto aleatório a cada visita. O problema é semelhante: fingerprints de dispositivos reais são estáveis. Um ambiente que muda a cada acesso se comporta de maneira diferente de um usuário normal e pode ficar ainda mais fácil de isolar e marcar. A própria aleatorização pode ser um sinal reconhecível.

O caminho razoável é a coerência interna

É mais próximo do comportamento real manter as características internas do ambiente consistentes e o conjunto sem anormalidades do que fazer tudo mudar a cada visita.

Na prática, os sinais devem se apoiar mutuamente: fuso horário, idioma e localização geográfica do IP de saída precisam fazer sentido juntos. O dispositivo declarado pela UA e a capacidade gráfica indicada por Canvas e WebGL devem estar na mesma faixa. O ambiente usado pela mesma conta deve permanecer estável no longo prazo, sem mudanças evidentes em acessos repetidos. Evite depender de extensões que apenas desativam uma função específica, pois elas costumam criar características ainda mais chamativas. Quando possível, execute menos scripts de terceiros para reduzir a superfície disponível para coleta.

Se vários ambientes precisam se distinguir uns dos outros, isso é uma questão de isolamento de ambientes. Ferramentas como PurpleMark, ao isolar ambientes para várias contas, normalmente atribuem um ambiente fixo a cada conta em vez de fazer os parâmetros mudarem aleatoriamente, porque o que realmente importa para as plataformas é se o conjunto de características permanece estável e coerente.

Resumo

Canvas pode ser usado para rastreamento porque transforma pequenas diferenças de hardware e software em uma string estável e comparável. Uma resposta eficaz não é desativá-lo nem fazê-lo variar sem controle, mas fazê-lo contar a mesma história que as demais características do mesmo ambiente. Parecer comum é mais seguro do que parecer excepcional.