Vous voulez faire du web scraping comme les grands groupes (2021)
(incolumitas.com)- Avec seulement AWS Lambda et Headless Chrome, il était possible de collecter plusieurs millions de résultats Google SERP par semaine, mais face à des sites fortement protégés, une architecture de bots basée sur le cloud atteint vite ses limites
- En réinvoquant Lambda et en utilisant plusieurs régions, il était possible d’utiliser simultanément environ
16 * 250 = 4000IP publiques sur 16 régions, ce qui suffisait pour des cibles peu strictes - Des acteurs de l’anti-bot comme DataDome, Akamai et Imperva suivent les incohérences de configuration du navigateur, les traces d’automatisation et les informations de fingerprinting, et le vrai défi consiste moins à détecter qu’à réduire les faux positifs
- Pour une architecture moins détectable, l’auteur propose d’utiliser de vrais appareils Android et des IP mobiles plutôt que Docker ou des serveurs cloud, car les IP 4G/5G/LTE sont partagées par de nombreux utilisateurs légitimes dans les grandes villes et sont donc difficiles à bloquer
- Une ferme de terminaux réelle suppose l’achat des appareils, la location d’espace dans plusieurs villes, de la maintenance sur site et la gestion des pannes matérielles, tandis que les émulateurs Android gardent un risque de détection de l’émulation
Architecture de scraping massif construite avec AWS Lambda
- Lors de l’exploitation passée d’un service de scraping, l’auteur collectait jusqu’à plusieurs millions de Google SERP par semaine, sans utiliser de fournisseurs de proxys comme Brightdata, Packetstream, Oxylabs
- Il jugeait difficile de faire confiance à d’autres clients partageant la même bande passante proxy
- Il distinguait le scraping non-DoS d’informations publiques d’attaques web comme la fraude publicitaire, le spam sur les réseaux sociaux, l’injection SQL automatisée ou le XSS
- Le coût des services de proxy pesait aussi dans la décision
- L’architecture réelle consistait à embarquer Headless Chrome dans AWS Lambda, avec puppeteer-extra et chrome-aws-lambda, pour exécuter un navigateur pendant 300 secondes
- Google ne bloquant pas agressivement les bots sur son propre moteur de recherche et appliquant surtout une limitation de débit par IP, l’auteur estime qu’en se limitant aux Google SERP,
curlaurait peut-être suffi - Sur Lambda, une nouvelle IP publique était obtenue après trois appels de fonction, et 1000 invocations simultanées permettaient d’atteindre environ 250 IP publiques
- Avec 16 régions, cela représentait environ
4000IP publiques utilisables en parallèle - C’étaient des IP de datacenter partagées, mais cela suffisait pour collecter plusieurs millions de Google SERP par semaine
- Avec 16 régions, cela représentait environ
- Google Cloud Platform a aussi été testé, mais Google bloquait plus agressivement le trafic issu de sa propre infrastructure cloud que celui venant d’AWS
- Cette expérience date de 2019 et 2020, et la situation a pu évoluer depuis
Pourquoi les bots cloud se font bloquer
- Une architecture basée sur Lambda peut fonctionner pour des cibles qui tolèrent un certain niveau de scraping, comme Google, Bing ou Amazon, mais elle ne convient pas aux sites appliquant une protection forte
- Des fournisseurs anti-bot comme DataDome, Akamai et Imperva recherchent des empreintes de navigateur, des incohérences de configuration et des traces différentes de celles d’un navigateur manipulé par un humain
- Les exemples de techniques de détection sont nombreux
- Browser Red Pills
- Browser Based Port Scanning
- Google Picasso
- Font Fingerprinting
- TLS Fingerprinting
- Fingerprinting WebGL
- Détection de l’IP réelle via WebRTC
- Behavioral Classification
- Interrogation de l’API gyroscope
- Collecte d’empreintes via en-têtes HTTP, CSS feature query et polices sans JavaScript
- Les méthodes de détection de bots sont très nombreuses, et presque toutes les architectures de bots sont vulnérables à une certaine forme de détection
- Il est plus difficile de concevoir des bots que de les détecter, et le plus grand défi pour les acteurs de l’anti-bot n’est pas tant d’attraper la majorité des bots que de réduire les faux positifs
Une architecture économique facile à détecter
- Les développeurs de bots cherchant à faire du scraping à grande échelle mettent souvent leur navigateur dans un conteneur Docker et l’orchestrent avec Docker Swarm ou Kubernetes
- Ces bots sont souvent hébergés chez des fournisseurs cloud comme Hetzner, AWS ou DigitalOcean
- Cette architecture diffère fortement de l’environnement d’un utilisateur humain
- Il n’est pas naturel qu’un utilisateur légitime navigue sur Instagram depuis un conteneur Docker dans un VPS Hetzner
- Deux règles de scraping efficace sont proposées
- Deuxième règle la plus importante : ne pas mentir sur la configuration du navigateur
- Règle la plus importante : ne mentir sur la configuration du navigateur que lorsqu’on est sûr de ne pas se faire repérer
Une vraie ferme d’appareils Android
- Comme il est difficile de faire de la rétro-ingénierie sur des bibliothèques de fingerprinting anti-bot obfusquées, l’auteur propose d’utiliser de vrais appareils pour le scraping
- L’architecture envisagée consiste à acheter 500 appareils Android d’entrée de gamme, en mélangeant environ 5 fabricants pour diversifier les empreintes
- Les appareils Android low cost commencent à 58 dollars l’unité
- L’auteur pense qu’un achat de 100 unités d’un coup permettrait d’obtenir une forte remise
- Chaque appareil serait associé à un forfait data bon marché et contrôlé via DeviceFarmer/stf
- L’idée est de répartir 100 appareils dans chacune de 5 grandes villes comme London, Paris, Boston, Frankfurt et Los Angeles, en louant des espaces de stockage bon marché à proximité d’antennes cellulaires mobiles
- Les appareils recevraient une installation légère d’Android Go, débarrassée des éléments inutiles, puis seraient branchés en permanence
- En activant puis désactivant le mode avion toutes les 5 minutes, il serait possible d’obtenir une nouvelle IP via le 4G Carrier Grade NAT
- Les adresses IP mobiles étant partagées par potentiellement des centaines de milliers d’utilisateurs légitimes dans une grande ville, elles sont en pratique difficiles à bloquer
- Par exemple, l’auteur estime qu’Instagram ne va pas bloquer 200 000 personnes à Los Angeles à cause de quelques spammeurs
- Il cite un document Ofcom expliquant que le blocage d’une adresse IPv4 dans un CGN peut affecter l’ensemble de la base d’abonnés
- Avec IPv6, l’espace d’adressage est si vaste que la plupart des acteurs anti-bot n’attribuent selon lui que peu ou pas du tout de réputation IP aux adresses IPv6
Points de détection et charge opérationnelle d’une architecture à base de vrais appareils
- Si de vrais appareils restent posés au sol toute la journée, ils ne montrent ni rotation ni mouvement ; il faudrait donc usurper au niveau noyau les événements JavaScript
deviceorientationetdevicemotion- Les sites web peuvent accéder aux données de rotation et d’accélération d’Android sans demander d’autorisation
- En dehors de ce problème, l’auteur ne voit pas clairement comment un système de détection de bots pourrait bloquer cette architecture
- La charge opérationnelle n’est pas négligeable
- Il faut acheter 500 appareils Android
- Il faut louer de l’espace de stockage dans les grandes villes, ce qui a un coût
- Il faut quelqu’un pour corriger les problèmes dans les fermes d’appareils réparties sur 5 villes
- Il faut gérer le matériel, avec des problèmes récurrents possibles
- Une telle architecture devient un gros projet, dont la maintenance peut coûter plusieurs milliers de dollars
Les émulateurs Android comme alternative
- L’auteur estime qu’utiliser des émulateurs Android peut être préférable à de vrais appareils Android
- Le coût peut baisser, mais les fournisseurs anti-bot peuvent détecter un environnement émulé
- Plusieurs méthodes de détection sont possibles
- Des red pills basées navigateur peuvent révéler que le navigateur tourne dans un environnement émulé
- Un scan de ports via le navigateur peut chercher des ports ou des services comme
adbqui n’existent que sur des appareils Android émulés - Google peut définir un ID publicitaire sur l’ensemble de l’appareil mobile ; si cet identifiant manque ou reste toujours identique, cela peut devenir un signal suspect
- Social Media Login Detection permet de vérifier si un compte Gmail ou YouTube est connecté, et l’absence de connexion à un compte Google sur Android peut être considérée comme suspecte
- Il peut exister de nombreuses autres techniques pour détecter un appareil Android émulé
- Les émulateurs Android ont de fortes chances d’être imparfaits, et ces imperfections peuvent apparaître à travers l’immense surface des API JavaScript d’un navigateur mobile
- Malgré cela, l’auteur préfère l’approche par émulation et propose une architecture avec quelques serveurs puissants reliés à des dongles 4G
- proxidize.com fournit des proxys mobiles 4G, mais comme les proxys sont eux-mêmes détectables, l’auteur préfère utiliser directement des dongles 4G depuis des émulateurs Android
- L’architecture finale prend la forme de stations de scraping régionales
- Installer dans chaque zone géographique un serveur de scraping puissant connecté à 50 dongles 4G
- Faire tourner sur chaque serveur 50 à 100 appareils Android émulés
- Déployer ces stations dans 5 grandes villes
- Utiliser un simple serveur de commande et contrôle pour orchestrer les 5 stations de scraping
1 commentaires
Avis sur Hacker News
Dans la plupart des cas, ces données ne sont même pas réellement « les leurs » au sens juridiquement reconnaissable. L’éthique du web scraping, comme les questions juridiques qui l’entourent, n’est donc pas si simple. Un texte que j’ai écrit à ce sujet l’automne dernier avait aussi suscité de l’intérêt ici : https://news.ycombinator.com/item?id=37264676
En fin de compte, ils empêchent les autres d’utiliser les méthodes mêmes qui leur ont permis de grandir
Depuis que les humains communiquent, la conversation n’a-t-elle pas toujours fonctionné ainsi ? Les questions juridiques, en revanche, ressemblent à un tissu fabriqué pour protéger les acteurs établis sous la menace de la violence étatique ; ce n’est ni très nouveau ni très glorieux, mais c’est prévisible. Plus largement, la tentative de présenter cela comme une question de propriété intellectuelle et de l’associer à la protection des artistes et des créateurs est aussi très bancale sur le plan logique, au point d’en être agaçante
Il existe beaucoup de SaaS de web scraping et de services associés, ainsi que des dizaines de fournisseurs de proxys résidentiels. La plupart des mécanismes anti-bots évoluent si vite que, même dans un rôle d’ingénierie logicielle classique, on peut gagner assez correctement sa vie en se consacrant uniquement au contournement des protections anti-bots. À cause de ce rythme d’évolution, il est plus stable de travailler pour une entreprise de web scraping que de faire du web scraping son métier. Les scrapers sont payés au projet, ce qui est instable à long terme ; le scraping avancé nécessite des investissements opérationnels comme des proxys résidentiels et de la location de serveurs ; et les missions bas de gamme sont très mal rémunérées. Le simple fait que Brightdata organise une conférence sur le web scraping montre à quel point la vente de services de scraping à grande échelle peut être rentable
Je me demande si des appareils IoT peu sécurisés ou du matériel grand public infecté par des malwares sont couramment utilisés à cette fin. Obtenir des IP résidentielles en coopérant avec des FAI ne me semble ni rentable ni réellement possible, donc un service de proxys résidentiels ne peut, à mes yeux, fonctionner que de façon assez discrète
Je n’avais pas d’expérience dans ce domaine, mais en recoupant ce dont les entreprises se vantaient, ce n’était pas difficile, et j’avais aussi un objectif pratique : automatiser des paris sportifs. Mon vrai travail était d’ailleurs assez proche de cela, et ça m’a aidé à apprendre rapidement la programmation à la fin de ma vingtaine. Mais presque immédiatement, j’ai été submergé de demandes d’opérateurs chinois de sneaker bots et de personnes écrivant un anglais étrange, comme si ce n’était pas leur langue maternelle. J’ai retiré le code non pas à cause de menaces juridiques, mais parce que je ne voulais pas faire du support client ni travailler sous les ordres de quelqu’un ; la plupart des demandes étaient du genre « si tu travailles, on partagera les bénéfices », et j’avais du mal à croire que quelqu’un accepte ce genre de proposition. Internet étant éternel, il est possible que des morceaux de code imitant Cyberfed-Akamai 0.8 à 2.3 circulent encore. Si du code que j’ai publié moins de trois ans après avoir appris à programmer, au milieu de ma vingtaine, fonctionnait, alors les sociétés de cybersécurité qui facturent cher ce type de produit devraient avoir honte. Je n’avais pas fait de maths depuis la seconde, et à cause de mon TDAH je n’arrivais pas à regarder des vidéos ni à lire longtemps ; tout ce que j’ai appris, je l’ai fait en copiant depuis des services similaires à GitHub jusqu’à ce que ça marche. Il doit probablement se vendre beaucoup de solutions de charlatan dans ce secteur
Des acteurs malveillants utilisent des services comme Cloudflare pour bloquer l’accès à des charges utiles malveillantes. C’est un gros problème pour les clients qui cherchent à repérer et détecter de l’usurpation de marque ou du phishing d’identifiants, mais Cloudflare n’aide absolument pas et s’en moque tout simplement
C’est intéressant de constater qu’on voit très peu de phishing derrière Akamai. Nous travaillons aussi dans ce domaine, donc nous avons tout intérêt à pouvoir continuer à détecter ce type de menace
C’est amusant parce qu’il faut résoudre de vrais problèmes concrets et trouver de nouvelles façons de faire les choses. C’est pareil pour le développement d’exploits. Ces personnes ne sont pas des inadaptés, ce sont des gens normaux qui font ce qui les passionne. La manière de penser selon laquelle « les gens qui font quelque chose que je n’aime pas sont des inadaptés » est, elle, complètement étrange
La procédure est claire, sans risque pour la vie privée ni astuces bizarres, et même en cas d’échec, elle échoue d’une manière qu’une personne peut au moins voir et signaler. C’est mieux que de donner l’impression d’une panne inconnue
Je me demandais comment gérer les refus, et un appareil Android bon marché pourrait peut-être combler cette lacune