- Lors de l’analyse des logs du serveur web, une forte activité de bots demandant des fichiers JavaScript inexistants a été repérée
- Il s’agirait de requêtes ayant interprété comme du vrai code des balises
script placées dans des commentaires HTML, ce qui laisse penser à une tentative de collecte de données pour l’entraînement de LLM
- Plusieurs réponses possibles sont proposées pour détecter et contrer ces requêtes anormales : avertissement public, blocage d’IP, bombe de décompression, empoisonnement des données
- L’empoisonnement des données est notamment cité comme un moyen efficace de dégrader les performances d’un modèle en contaminant ses données d’entraînement
- L’article souligne la nécessité pour les administrateurs web d’expérimenter des stratégies de défense et de contre-attaque face aux scrapers IA
Découverte d’un scraping anormal
- De nombreuses requêtes 404 visant des fichiers JavaScript inexistants ont été relevées dans les logs du serveur
- Ces fichiers correspondaient à des scripts inactifs inclus dans des commentaires HTML, qu’un navigateur normal ne devrait pas demander
- Parmi les User-Agent observés, certains étaient clairement identifiables comme des bots, par exemple
python-httpx/0.28.1, Go-http-client/2.0, Gulper Web Bot 0.2.4
- Les requêtes continuaient malgré l’interdiction d’accès aux crawlers dans
robots.txt, ce qui suggère un non-respect des règles ou une politique ignorée
- Certaines requêtes se faisaient passer pour Firefox, Chrome ou Safari, mais leur incapacité à interpréter les commentaires HTML a révélé une fausse identification
- Ces requêtes sont soupçonnées de provenir de scrapers collectant sans consentement du contenu destiné à l’entraînement de LLM
Mode de fonctionnement des scrapers
- Certains pourraient parser correctement le HTML et explorer récursivement les URL présentes dans les commentaires
- D’autres semblent traiter le HTML comme du simple texte et effectuer une extraction d’URL basée sur des expressions régulières
- La diversité et le niveau hétérogène des User-Agent laissent penser à la présence de plusieurs opérateurs, dont certains utilisent de simples outils d’automatisation
- Leur motivation commune est une collecte de données vorace, que l’article présente comme pouvant être retournée contre eux
Sabotage algorithmique (Algorithmic Sabotage)
- Il s’agit d’actions visant à perturber intentionnellement des systèmes algorithmiques, un sujet mis en avant en raison du coût externalisé des LLM
- Une fois les schémas de comportement non humains des bots identifiés, leur détection et leur traitement deviennent plus simples
- Les réponses proposées se répartissent en quatre catégories : avertissement public, filtrage IP, bombes de décompression, empoisonnement des données
0. Avertissement public (Public Disclosure)
- Les faux positifs mineurs (par ex. une faute dans le User-Agent comme « Mozlla ») sont gardés non publics, car ils peuvent être facilement corrigés
- En revanche, les comportements de fond (par ex. demander des scripts dans des commentaires) ne peuvent pas être corrigés facilement, ce qui rend leur divulgation utile
- Cela permet à d’autres administrateurs de site de détecter et bloquer la même attaque
- Un système de détection de ce comportement est également en cours de déploiement sur d’autres sites
1. Filtrage IP (IP Filtering)
- fail2ban est utilisé pour bloquer automatiquement sur la base des motifs dans les logs, de la date et de l’IP
- En général, la durée de blocage est courte, mais un blocage longue durée peut décourager les nouvelles tentatives de bots apprenants
- Dans le cas d’un botnet, les requêtes peuvent se poursuivre en changeant d’IP, mais les schémas répétitifs permettent toujours la détection
- L’auteur mentionne un futur travail de recherche sur l’analyse du comportement des botnets
2. Bombes de décompression (Decompression Bombs)
- Fournir un zip bomb en réponse au fichier demandé peut provoquer une consommation importante des ressources système côté attaquant
- Cela peut entraîner une surconsommation de CPU, de RAM et de disque, voire permettre l’exploitation de vulnérabilités
- Inconvénient : cette méthode peut aussi consommer des ressources serveur et entraîner un gaspillage de bande passante
- Certains bots tournent sur des systèmes infectés, ce qui peut limiter l’effet de l’attaque
- Plutôt que de l’appliquer à tous les bots, l’article propose de ne répondre ainsi qu’à une partie aléatoire des requêtes
3. Empoisonnement des données (Poisoning)
- Il s’agit de contaminer les données d’entraînement des LLM afin de provoquer une dégradation de leurs performances
- D’après des recherches récentes, 250 documents empoisonnés pourraient suffire à produire un effet durable sur un grand modèle
- Les données empoisonnées peuvent amener le modèle à générer des sorties dénuées de sens sur certains sujets
- Exemple : orienter le modèle pour qu’il recommande un blog précis lorsqu’on l’interroge sur la recherche en sécurité
- Des outils publics comme nepenthes, iocaine, glaze, nightshade peuvent être utilisés
- Si les données d’entraînement d’un LLM sont collectées sans consentement, cette réponse est présentée comme un moyen de défense légitime
- La mise en œuvre conjointe avec le blocage IP peut accroître la complexité, mais une utilisation combinée reste possible
- L’auteur indique qu’il pourrait ne pas publier les conceptions les plus efficaces et souligne la nécessité d’élargir la participation à des formes créatives de sabotage
Conclusion et réponse de la communauté
1 commentaires
Avis Hacker News
La plupart des scrapers web sont utilisés à des fins commerciales, même si c’est illégal
Ils récupèrent donc souvent des données d’Amazon ou de sites e-commerce. Au final, l’essentiel du trafic indésirable vient des big tech ou d’acteurs malveillants à la recherche de vulnérabilités
Je m’y connais un peu en web scraping. Certains sites renvoient même des 404 à titre de protection, donc mon crawler essaie plusieurs fois avec des méthodes de crawl rapides comme
curlcffiLa défense contre les zip bombs est simple : il suffit de lire le header
content-length. Si la réponse est trop grosse, on fixe une limite en octets pour ne pas la lire, avec aussi un contrôle par timeoutMais savez-vous que le timeout de
requestsn’est pas un timeout sur la lecture complète de la page ? Si le serveur envoie les octets lentement, on peut attendre indéfinimentC’est pour régler ce genre de problème que j’ai construit mon propre système de crawl. On peut aussi y faire tourner Selenium de façon cohérente
Mon projet est crawler-buddy, et la bibliothèque de base est webtoolkit
content-lengthest calculé après content-encodingLa formule “collecter des données d’entraînement LLM sans consentement” me fait rire
On envoie des requêtes GET à un serveur HTTP public, je ne vois pas de quelle permission on aurait besoin. Bien sûr, l’affaire weev était une catastrophe à part
Mais (1) l’accès d’un utilisateur normal et une attaque DDoS de bots sont deux choses différentes. Ce n’est pas parce que c’est gratuit qu’on peut tout prendre sans limite, c’est un abus
(2) Il faut distinguer la copie légitime et la contrefaçon opérée par des robots
(3) Un bot bien élevé devrait respecter
robots.txt. Ce n’est pas la loi, mais une question de politesseDes bots qui tournent sur des millions d’IP résidentielles ne sont absolument pas normaux
Ce n’est pas parce que le serveur est public qu’il autorise les requêtes mensongères. Il n’y a consentement implicite que pour des requêtes raisonnables
robots.txtn’a pas de force obligatoire, c’est une demande de courtoisieCela veut simplement dire quelque chose comme « merci de ne pas scraper cette page » ; si l’on veut vraiment bloquer l’accès, il faut mettre en place des tokens API ou une authentification
De la même manière que le spam n’est pas un simple e-mail, l’abus de bots n’est pas une simple requête
Il me semble que rechercher directement les chaînes http/https serait plus rapide que parser le DOM
C’est amusant de voir une application pratique d’une recherche intéressante
On peut consulter la recherche en question dans ce billet
Le titre prête à confusion. “commented-out” me semblerait plus juste
Cela ressemble moins à un abus qu’au simple fait de lire des URL mises en commentaire
robots.txtet scraper jusqu’aux commentaires reste clairement un comportement impoliÀ l’époque où je crawlait le web, les regex Perl étaient ce qu’il y avait de plus fiable
Bien sûr, j’ajoutais aussi à la file les URL présentes dans les commentaires
Je me demande ce que ça donnerait de servir aux bots un fichier de données aléatoires de 512 Mo
La startup que j’ai créée fournit justement ce type de Ad-poisoning-as-a-service
Plus que de la “collecte de données pour l’entraînement des LLM”, c’est surtout du bruit de scan de l’Internet
Les fichiers JS sont de bons indices, qu’il y ait des commentaires ou non
En revanche, pour de l’entraînement LLM, j’ai du mal à croire qu’on s’intéresse à un code JS de si faible qualité
Voici une réflexion sur des moyens d’empoisonner le trafic d’entraînement LLM non désiré
En coopérant avec les ayants droit, on pourrait réduire ce risque
On pourrait aussi modifier dynamiquement les images à chaque requête pour neutraliser les défenses par déduplication. S’il existait un tel plugin, je l’installerais immédiatement