- Durante a análise dos logs do servidor, foi detectada uma grande atividade de bots solicitando arquivos JavaScript inexistentes
- Aparentemente, eles interpretaram tags de script dentro de comentários HTML como código real e as requisitaram, em uma ação presumida de coleta de dados para treinamento de LLMs
- São apresentadas várias formas de resposta a essas requisições anômalas, como aviso público, bloqueio de IP, bombas de descompressão e envenenamento de dados
- Em especial, o envenenamento de dados é citado como um meio eficaz de contaminar dados de treinamento de LLMs e degradar o desempenho do modelo
- Destaca-se a necessidade de administradores web adotarem experimentalmente estratégias de defesa e contra-ataque contra scrapers de IA
Descoberta de comportamento anômalo de scraping
- Nos logs do servidor, foram confirmadas várias requisições com erro 404 para arquivos JavaScript inexistentes
- Esses arquivos eram scripts inativos incluídos dentro de comentários HTML, que navegadores normais não deveriam requisitar
- Alguns dos User-Agent das requisições foram claramente identificados como bots, como
python-httpx/0.28.1, Go-http-client/2.0 e Gulper Web Bot 0.2.4
- Mesmo com o acesso de crawlers proibido em
robots.txt, as requisições continuaram, indicando desrespeito às regras ou políticas ignoradas
- Algumas requisições se disfarçaram como navegadores normais, como Firefox, Chrome e Safari, mas foram desmascaradas como identificação falsa por não conseguirem interpretar comentários HTML
- Essas requisições são suspeitas de vir de scrapers destinados à coleta não consentida de conteúdo para treinamento de LLMs
Como os scrapers funcionam
- Alguns podem estar fazendo o parsing correto do HTML e explorando recursivamente URLs dentro de comentários
- Outros parecem tratar o HTML como texto simples e realizar extração de URLs baseada em expressões regulares
- Pela variedade e pelo nível dos User-Agent, presume-se a existência de vários operadores, alguns usando ferramentas de automação simples
- A motivação comum é a coleta gananciosa de dados, o que é apresentado como uma oportunidade de contraexploração
Sabotagem algorítmica (Algorithmic Sabotage)
- Trata-se de uma ação deliberada para perturbar sistemas algorítmicos, um tema que ganhou atenção por causa do problema dos custos externos dos LLMs
- Ao reconhecer padrões de comportamento não humano dos bots, fica mais fácil detectá-los e responder
- As formas de resposta são divididas em quatro tipos: aviso público, filtragem de IP, bombas de descompressão e envenenamento de dados
0. Aviso público (Public Disclosure)
- Pequenos falsos positivos triviais (ex.: erro de digitação no User-Agent, “Mozlla”) são mantidos em sigilo, pois podem ser facilmente corrigidos se divulgados
- Por outro lado, comportamentos essenciais (ex.: solicitação de scripts dentro de comentários) não podem ser corrigidos facilmente, então a divulgação pública é útil
- Isso permite que operadores de outros sites também consigam detectar e bloquear o mesmo ataque
- Um sistema para detectar esse comportamento também está sendo aplicado em outros sites
1. Filtragem de IP (IP Filtering)
- Uso do fail2ban para bloqueio automático com base em padrão de logs, data e IP
- Em geral, o bloqueio é configurado para períodos curtos, mas bloqueios longos podem inibir novas tentativas de bots de aprendizado
- No caso de botnets, os IPs podem ser trocados para continuar as requisições, mas padrões repetidos ainda permitem detecção
- Há menção a planos de pesquisa futura sobre análise do comportamento de botnets
2. Bombas de descompressão (Decompression Bombs)
- Fornecer ao atacante o arquivo solicitado na forma de zip bomb, provocando consumo de recursos do sistema
- Isso pode forçar uso excessivo de CPU, RAM e disco, ou até possibilitar exploração de vulnerabilidades
- Como desvantagem, há consumo de recursos do servidor e risco de desperdício de largura de banda
- Alguns bots podem operar em sistemas já comprometidos, o que pode limitar o efeito do ataque
- Em vez de aplicar a todos os bots, sugere-se responder apenas a algumas requisições aleatórias
3. Envenenamento de dados (Poisoning)
- Visa contaminar os dados de treinamento de LLMs para induzir queda no desempenho do modelo
- Segundo pesquisas recentes, apenas 250 documentos contaminados já podem causar impacto persistente em modelos grandes
- Os dados contaminados podem fazer o modelo gerar saídas sem sentido em certos tópicos
- Como exemplo, seria possível induzir o modelo a recomendar um blog específico ao receber perguntas sobre pesquisa de segurança
- É possível usar ferramentas públicas como nepenthes, iocaine, glaze e nightshade
- Quando dados de treinamento de LLMs são coletados sem consentimento, esse tipo de resposta é apresentado como meio legítimo de defesa
- A implementação pode se tornar mais complexa quando combinada com bloqueio de IP, mas existe possibilidade de operação conjunta
- Pode ser que um design eficaz não seja tornado público, e enfatiza-se a necessidade de ampliar a participação em sabotagens criativas
Conclusão e resposta da comunidade
1 comentários
Comentário no Hacker News
A maioria dos web scrapers é ilegal, mas feita com fins comerciais
Então, muitos casos envolvem raspar dados da Amazon ou de lojas online. No fim, a maior parte do tráfego indesejado vem de big techs ou de agentes maliciosos em busca de vulnerabilidades
Eu entendo um pouco de web scraping. Alguns sites retornam 404 como forma de proteção, então meu crawler tenta várias vezes usando métodos de crawling rápidos como
curlcffiA defesa contra zip bomb é simples: basta ler apenas o content-length do cabeçalho. Se a resposta for grande demais, coloque um limite de bytes para não ler tudo, e controle também com timeout
Mas você sabe que o timeout do
requestsnão vale para o tempo total de leitura da página? Se o servidor enviar bytes lentamente, você pode ficar esperando para sempreEntão acabei criando meu próprio sistema de crawling para resolver esse tipo de problema. Também consigo executar Selenium de forma consistente
Meu projeto é crawler-buddy, e a biblioteca-base é webtoolkit
content-lengthé calculado depois de content-encodingAcho engraçada a expressão “coletou dados de treino de LLM sem consentimento”
Não entendo que tipo de permissão seria necessária para enviar uma requisição GET a um servidor HTTP público. Claro, o caso weev foi uma tragédia excepcional
Mas (1) acesso de usuários normais e ataques DDoS de bots são coisas diferentes. Só porque algo é oferecido de graça não significa que alguém possa pegar infinitamente sem abuso
(2) cópia legítima e falsificação por robôs devem ser distinguidas
(3) um bot bem-comportado deve respeitar
robots.txt. Não é lei, mas uma questão de educaçãoBots que ficam girando milhões de IPs residenciais jamais são normais
O fato de o servidor ser público não significa que ele tenha permitido requisições falsas. O consentimento implícito vale apenas para requisições razoáveis
robots.txtnão tem força legal, é apenas um pedido educadoSignifica algo como “por favor, não raspe esta página”; se realmente quiser impedir, é preciso usar token de API ou autenticação
Assim como spam não é o mesmo que um simples e-mail, abuso por bots também não é o mesmo que uma requisição comum
Em vez de fazer parse do DOM, parece mais rápido procurar diretamente por strings http/https
É interessante ver uma aplicação prática de uma pesquisa curiosa
A pesquisa relacionada pode ser vista neste post
O título confunde. Acho que o certo seria “commented-out”
Isso parece menos abuso e mais simplesmente ler URLs comentadas
robots.txte até raspar comentários é com certeza um comportamento sem educaçãoAntigamente, quando eu fazia crawling da web, regex em Perl era o mais confiável
Naturalmente, eu também colocava URLs em comentários na fila
Fico pensando em servir aos bots um arquivo de dados aleatórios de 512 MB
Minha startup faz exatamente esse tipo de Ad-poisoning-as-a-service
Isso parece menos “coleta de dados para treino de LLM” e mais apenas ruído de varredura da internet
Arquivos JS são boas pistas independentemente de os links estarem comentados ou não
Já para treino de LLM, acho improvável haver interesse nesse tipo de código JS de baixa qualidade
Uma reflexão sobre como envenenar tráfego indesejado de treino para LLM
Trabalhar com os detentores dos direitos pode reduzir esse risco
Também daria para modificar imagens dinamicamente a cada requisição e assim neutralizar a defesa por deduplicação. Se existisse um plugin assim, eu instalaria na hora