Quem o Anubis realmente impede?
(fzakaria.com)- O Anubis, que exige prova de trabalho (Proof-of-Work) antes do acesso HTTP, impõe um custo contínuo maior a usuários comuns, dispositivos de baixo desempenho e clientes sem suporte a JavaScript do que a scrapers de IA
- O anubis-fetch, criado por um LLM, resolve diretamente a prova de trabalho e, se necessário, executa o Chromium, além de imitar a impressão digital TLS/JA3 do Chrome para passar até pelo bloqueio manual da Cloudflare
- Scrapers podem armazenar em cache e reutilizar cookies emitidos, amortizando o custo ao longo de várias requisições, enquanto pessoas precisam arcar com segundos de espera e consumo de bateria a cada visita
- A dificuldade padrão 4 exige, em média, 65.536 hashes; uma implementação nativa em Go leva cerca de 1,3 ms, e JavaScript no navegador cerca de 130 ms, mas o tempo percebido real de espera fica em torno de 1 a 5 segundos
- Assumindo 2 segundos de tempo percebido e 20 J de energia por tentativa, 1 milhão de desafios por dia consomem, por ano, cerca de 23 pessoa-anos·2 MWh, e 100 milhões por dia, cerca de 2.300 pessoa-anos·200 MWh
O Anubis contornado pela IA
- Enquanto trabalhava em um patch para dar suporte a
$ORIGINemPT_INTERPdo interpretador via bpf dobinfmt_miscno kernel Linux, o autor pediu a um LLM que lesse uma thread da lista de e-mails do kernel Linux - O lore.kernel.org havia adotado o Anubis, um proxy HTTP que exige prova de trabalho antes de acessar recursos
- O LLM criou o anubis-fetch para lidar com essa restrição
- Primeiro resolve a prova de trabalho de forma nativa e, se falhar, visita a URL com o Chromium
- Imita a impressão digital TLS/JA3 do Chrome real com
req, passando também pelo bloqueio manual da Cloudflare anubis-fetch <URL>envia o HTML para a saída padrão, e a opção--textimprime texto simples em formato legível
- IAs e bots, que são o alvo do Anubis, conseguem contorná-lo facilmente depois de adicionar suporte à prova de trabalho uma única vez
- Scrapers resolvem o desafio e então armazenam em cache e reutilizam o cookie recebido, amortizando o custo ao longo de várias requisições
- Já pessoas precisam esperar o spinner e gastar bateria a cada visita, sem poder dividir esse custo com outros usuários
- Quanto mais limitado o dispositivo ou o smartphone, maior o ônus; w3m, lynx, leitores de tela e leitores RSS sem JavaScript não conseguem acessar
- Um mecanismo criado para barrar IA acaba sendo facilmente contornado por ela, enquanto continua impondo custos a pessoas e à web aberta, funcionando como um ônus regressivo
Os custos de tempo e energia criados pela prova de trabalho
- A dificuldade
dé o número de caracteres hexadecimais zero à esquerda que o hash deve ter, e o trabalho esperado por solução éW = 16^dhashes- A dificuldade 4, um padrão comum, exige 65.536 hashes
- Implementação nativa em Go a cerca de 50 MH/s: cerca de 1,3 ms
- JavaScript no navegador a cerca de 0,5 MH/s: cerca de 130 ms
- Tempo percebido, incluindo carregamento da página, execução de workers e recarregamento: cerca de 1 a 5 segundos
- A dificuldade 5 exige 1.048.576 hashes
- Implementação nativa em Go: cerca de 20 ms
- JavaScript no navegador: cerca de 2 segundos
- Tempo percebido: cerca de 5 a 15 segundos
- A dificuldade 4, um padrão comum, exige 65.536 hashes
- Assumindo
Ccomo o número diário global de desafios Anubis resolvidos,t = 2 segundoscomo o tempo percebido por tentativa eE = 20 Jcomo a energia do dispositivo, incluindo tela e CPU- O tempo humano anual é calculado como
C × t × 365 / 3,15×10⁷ - A energia anual é calculada como
C × E × 365 / 3,6×10⁶kWh
- O tempo humano anual é calculado como
- Com essas premissas, o custo anual é o seguinte
- 1 milhão por dia: cerca de 23 pessoa-anos, cerca de 2 MWh
- 10 milhões por dia: cerca de 230 pessoa-anos, cerca de 20 MWh
- 100 milhões por dia: cerca de 2.300 pessoa-anos, cerca de 200 MWh
- Todos os números são estimativas aproximadas; como fazendas de bots e ferramentas de IA usam ordens de grandeza mais energia, este cálculo não pretende sustentar um argumento ambiental
- Para robôs, tempo não é uma restrição, mas o tempo das pessoas é finito; por isso, usuários acabam gastando coletivamente uma quantidade considerável de tempo esperando para acessar sites, algo que não existia antes da era da IA
1 comentários
Comentários no Lobste.rs
É difícil concordar com a afirmação de que os alvos do Anubis conseguem neutralizá-lo facilmente. O principal objetivo do Anubis não é bloquear agentes de LLM nem programas criados por vibe coding, mas sim impedir os web scrapers indiscriminados usados por empresas de LLM.
Existem formas de contornar, e também dá para usar agentes ou LLMs, mas a maioria dos scrapers é simples, e seus operadores não se dão ao trabalho de contornar um pequeno número de sites que adotaram o Anubis. O objetivo é mais aumentar ligeiramente o custo de evasão para que a coleta deixe de valer a pena.
Mas, para esse objetivo, o Anubis foi projetado de forma excessiva. Seria possível obter o mesmo efeito de proteção fazendo o usuário clicar uma vez em um botão e emitindo um cookie de acesso; implementei isso no Apache e funciona suficientemente bem sem prova de trabalho complexa.
As ferramentas modernas de scraping que também uso em trabalhos de mineração de dados são boas o bastante para contornar quase todos os obstáculos, e o Anubis também pode ser contornado com facilidade.
Configurações muito específicas podem escapar, mas o objetivo é bloquear adversários preguiçosos, não mal-intencionados.
O Anubis não filtra bots; ele limita a velocidade das requisições do cliente.
O Anubis está mais para uma medida de defesa contra ataques de negação de serviço do que para algo que bloqueie o acesso de agentes de IA, e, na prática, também é difícil identificar e bloquear agentes de IA.
Mas ele também bloqueia usuários como eu, que visitam sites desconhecidos em dispositivos móveis com JavaScript desativado.
Olhando para resultados reais em produção, é difícil concordar com a conclusão do texto. Eu servia o site do meu homelab por meio de um proxy público da fly.io e encaminhamento via Tailscale, e scrapers, inclusive do Facebook, geravam cerca de 20 dólares de custo mensal de banda.
Depois de aplicar o Anubis ao proxy, voltei para a faixa gratuita. Tudo bem se ele puder ser contornado quando necessário; basta bloquear a maior parte do tráfego de coleta em massa de alguns poucos atores maliciosos que ignoram o robots.txt.
Em operações de scraping que usam botnets de dispositivos de baixo desempenho, como smart TVs, a prova de trabalho do Anubis parece poder se tornar um obstáculo real. Esse problema também é abordado um pouco em https://lobste.rs/s/kpaxih/update_on_scraper_situation
O que mais me incomoda no Anubis é o conflito com a web aberta. Meu site é consumido principalmente via feeds RSS; se eu proteger o RSS com Anubis, o feed não funciona, e, se não proteger, todo o conteúdo fica exposto aos scrapers em um formato fácil de ler por máquinas.
Esse tipo de barreira de prova de trabalho é fundamentalmente difícil de conciliar com a web aberta ou a IndieWeb que buscávamos.
Há uma atitude claramente visível de não respeitar as escolhas feitas por outras pessoas.
O mais desagradável é que isso parece ser uma conduta que viola claramente leis como a CFAA, mas, ainda assim, esconde a identidade como outros serviços criminosos de DDoS.
É risível esperar que uma empresa cujo modelo de negócios inteiro depende de roubar o trabalho dos outros e lavar código open source cumpra a lei.
O Anubis normalmente não bloqueia o Dillo, mas pode bloqueá-lo dependendo da configuração do site, o que é muito irritante porque incentiva a ideia de que sem JavaScript você nem merece existir: https://paste.rs/jNgwd.png
Estou pensando se seria possível coletar e manter uma lista de todos os IPs incluídos em proxies residenciais e bloqueá-los por um certo período; talvez o ipset aguente essa escala. Pelos logs, os bots não carregam outros recursos, como CSS ou imagens, mas percorrem todos os arquivos de todos os commits do repositório do Dillo, então são relativamente fáceis de identificar.
Em cada site, mesmo que apareça apenas uma requisição por IP, é provável que o mesmo IP acesse vários sites, então IPs denunciados várias vezes poderiam ser bloqueados. Em vez de simplesmente derrubar a conexão, seria preciso redirecionar para uma página informativa em uma porta separada, explicando o motivo do bloqueio e como resolvê-lo.
Isso também reduziria o incentivo para embutir backdoors de proxy reverso em extensões de navegador ou apps de celular, porque os usuários começariam de fato a ser bloqueados.
É lamentável ter que depender de um sistema de reputação de IP, mas não vejo muitas outras respostas eficazes. Dispositivos vulneráveis, mesmo depois que o servidor de comando e controle da botnet é removido, podem ser comprometidos novamente pelo próximo atacante e incorporados a uma nova botnet.
No texto, a pessoa diz: “claro que estou fazendo isso com a ajuda de uma LLM”; então fico curioso para saber por que não recebeu a tag de vibe coding.
vibecodingfoi removida por pushcx.