Favicon do site de demonstração - um pequeno ícone .ico de 16 * 16 ou 32 * 32 pixels em uma guia do navegador. Ajuda você a navegar por centenas de guias. O Twitter tem um pássaro azul, o Gmail tem um símbolo de e-mail vermelho, a Wikipedia tem um W. em negrito.
Mas acontece que esses ícones representam uma vulnerabilidade por meio da qual você pode realizar impressões digitais - para identificar o usuário mesmo por VPN e modo anônimo no navegador ( veja a demonstração ).
O programador alemão Jonas Strehle no repositório Github descreve um método para instalar um super cookie não removível por meio de favicons: “Os super cookies atribuem IDs exclusivos aos visitantes do site por meio de favicons. Ao contrário dos métodos tradicionais de rastreamento, esse ID é retido quase para sempre e não pode ser removido pelo usuário usando métodos simples. O método de rastreamento funciona mesmo no modo anônimo. Os super cookies não são excluídos quando você limpa o cache, fecha o navegador ou reinicia o sistema, usa VPN ou bloqueadores de anúncios. ”
Como funciona a impressão digital
Para exibir o ícone, o seguinte atributo é inserido no código da página:
<link rel="icon" href="/favicon.ico" type="image/x-icon">
Os favicons devem ser facilmente acessíveis por meio de um navegador. Portanto, eles são armazenados em cache em um banco de dados local separado, o chamado cache de favicon (F-Cache), onde a URL, o ID do favicon e o tempo de vida são armazenados.
Quando um usuário visita o site, o navegador verifica o F-Cache local em busca de uma entrada contendo a URL do site ativo. Se a entrada for encontrada, o ícone é carregado do cache. Se não houver nenhuma entrada, o navegador enviará uma solicitação GET para baixar o favicon do servidor.
Esse mecanismo permite que o servidor aprenda muito sobre o visitante. Ao combinar o status de favicons entregues e com falha para URLs específicos, o cliente recebe um modelo exclusivo (número de identificação). Em seguida, o ID é salvo:
const N = 4; const ROUTES = ["/a", "/b", "/c", "/d"]; const ID = generateNewID(); // -> 1010 • (select unassigned decimal number, here ten: 10 -> 1010b in binary)
const vector = generateVectorFromID(ID); // -> ["/a", "/c"] • (because [a, b, c, d] where [1, 0, 1, 0] is 1 -> a, c)
Depois de recarregar o site, esse ID pode ser restaurado da lista de solicitações de rede enviadas pelo cliente para os favicons ausentes - e assim identificar o navegador.
const visitedRoutes = []; Webserver.onvisit = (route) => visitedRoutes.push(route); // -> ["/b", "/d"] Webserver.ondone = () => { const ID = getIDFromVector(visitedRoutes) }; // -> 10 • (because "/a" and "/b" are missing -> 1010b)
O autor lançou um site para demonstrar impressões digitais usando favicons. O código-fonte e uma descrição detalhada do mecanismo foram publicados .
A pior parte dessa vulnerabilidade é como é fácil contornar os métodos tradicionais que as pessoas usam para proteger sua privacidade. A impressão digital rompe o modo "privado" do Chrome, Safari, Edge e Firefox, disse Strehle. Limpeza de cache, VPN ou bloqueador de anúncios - nada atrapalha os favicons maliciosos.
As mesmas conclusões foram alcançadas por pesquisadores da Universidade de Illinois no trabalho científico recentemente publicado "Tales of Favicons and Caches: Persistent Tracking in Modern Browsers""Descobrimos que combinar nossa técnica de rastreamento de favicon com impressão digital por meio de atributos imutáveis do navegador permite que o site recupere uma identificação de rastreamento de 32 bits em dois segundos", disse o estudo. - Devido à gravidade da vulnerabilidade, propomos fazer alterações no cache de favicons do navegador para evitar essa forma de rastreamento. Compartilhamos nossas descobertas com desenvolvedores de fornecedores de navegadores que estão explorando opções de mitigação. ”
A impressão digital via favicons atualmente funciona em todos os principais navegadores, incluindo os móveis (sinal de adição):
Navegador |
janelas |
Mac OS |
Linux |
iOS |
Android |
Notas |
|---|---|---|---|---|---|---|
| Chrome (v 87.0) | + | + | + | + | + | ? |
| Safari (v 14.0) | ? | + | ? | + | ? | ? |
| Edge (v 87.0) | + | + | ? | ? | + | ? |
| Firefox (v 85.0) | + | + | ? | ? | ? | Outra impressão digital no modo anônimo |
| Corajoso (v 1.19.92) | + | + | + | ? | ? | ? |
A tabela a seguir mostra o tempo mínimo necessário para realizar um ataque. O valor real também depende de fatores adicionais, como velocidade de conexão à Internet, localização, desempenho do hardware e tipo de navegador.
| Redireciona
(N bits) |
Número de clientes distinguíveis | Tempo de gravação | Tempo de leitura | Escala de ataque |
|---|---|---|---|---|
| 2 | quatro | <300 ms | <300 ms | Um usuário com quatro navegadores |
| 3 | 8 | <300 ms | ~ 300 ms | Número aproximado de Kardashians |
| quatro | 16 | <1 s | ~ 1 s | Um bando de seus vizinhos |
| 8 | 256 | <1 s | ~ 1 s | Todos os seus amigos do Facebook |
| dez | 1024 | <1,2 s | ~ 1 s | Vila muito pequena |
| 20 | 1.048.576 | <1,8 s | <1,5 s | Pequena cidade (San Jose) |
| 24 | 16.777.216 | <2,4 s | <2 s | Toda Holanda |
| 32 | 4 294 967 296 | ~ 3 s | <3 s | Todas as pessoas com acesso à internet |
| 34 | 17 179 869 184 | ~ 4 s | ~ 4 s | 4 |