Détecter les robots d'exploration "furtifs"

107

Quelles sont les options disponibles pour détecter les robots d'exploration qui ne veulent pas être détectés?

(Je sais que les techniques de détection de listes permettront au programmeur intelligent de robots furtifs de créer une meilleure araignée, mais je ne pense pas que nous serons de toute façon capables de bloquer les robots intelligents furtifs, uniquement ceux qui font des erreurs.)

Je ne parle pas des bons robots d'exploration tels que googlebot et Yahoo! Slurp. Je considère un bot sympa s'il:

  1. s'identifie comme bot dans la chaîne de l'agent utilisateur
  2. lit le fichier robots.txt (et y obéit)

Je parle des mauvais robots d'exploration, qui se cachent derrière des agents utilisateurs courants, utilisent ma bande passante et ne me donnent jamais rien en retour.

Il y a quelques trappes qui peuvent être construites avec une liste mise à jour (merci Chris, gs) :

  1. Ajout d'un répertoire répertorié uniquement (marqué comme interdit) dans le fichier robots.txt,
  2. Ajout de liens invisibles (éventuellement marqués comme rel = "nofollow"?),
    • style = "affichage: aucun;" sur le lien ou le conteneur parent
    • placé sous un autre élément avec un z-index plus élevé
  3. détecter qui ne comprend pas la capitalisation,
  4. détecter qui essaie de publier des réponses mais échoue toujours au Captcha.
  5. détecter les requêtes GET vers des ressources POST uniquement
  6. détecter l'intervalle entre les demandes
  7. détecter l'ordre des pages demandées
  8. détecter qui demande (systématiquement) des ressources https via http
  9. détecter qui ne demande pas de fichier image (ceci en combinaison avec une liste d'agents utilisateurs de navigateurs connus capables d'images fonctionne étonnamment bien)

Certains pièges seraient déclenchés à la fois par des «bons» et des «mauvais» robots. vous pouvez les combiner avec une liste blanche:

  1. Ça déclenche un piège
  2. Il demande robots.txt?
  3. Il ne déclenche pas un autre piège parce qu'il a obéi robots.txt

Une autre chose importante ici est la suivante:
veuillez considérer les personnes aveugles utilisant un lecteur d'écran: donnez aux gens un moyen de vous contacter, ou résolvez un Captcha (sans image) pour continuer à naviguer.

Quelles méthodes existe-t-il pour détecter automatiquement les robots d'exploration essayant de se masquer en tant que visiteurs humains normaux?

Mise à jour
La question n'est pas: comment attraper chaque robot. La question est: comment puis-je maximiser les chances de détecter un robot d'exploration.

Certaines araignées sont vraiment bonnes, et analysent et comprennent en fait html, xhtml, css javascript, script VB etc ...
Je ne me fais aucune illusion: je ne pourrai pas les battre.

Vous seriez cependant surpris de la stupidité de certains robots. Avec le meilleur exemple de stupidité (à mon avis) étant: convertir toutes les URL en minuscules avant de les demander.

Et puis il y a tout un tas de robots qui ne sont tout simplement «pas assez bons» pour éviter les différentes trappes.

Jacco
la source

Réponses:

15

Il y a quelque temps, j'ai travaillé avec une petite société d'hébergement pour les aider à mettre en œuvre une solution à ce problème. Le système que j'ai développé a examiné les journaux du serveur Web pour détecter une activité excessive à partir d'une adresse IP donnée et a émis des règles de pare-feu pour bloquer les contrevenants. Il comprenait des listes blanches d'adresses / plages IP basées sur http://www.iplists.com/ , qui étaient ensuite mises à jour automatiquement selon les besoins en vérifiant les chaînes de l'utilisateur-agent revendiquées et, si le client prétendait être une araignée légitime mais pas sur le liste blanche, il a effectué des recherches DNS / DNS inversées pour vérifier que l'adresse IP source correspond au propriétaire déclaré du bot. En tant que sécurité intégrée, ces actions ont été signalées à l'administrateur par e-mail, avec des liens vers l'adresse noire / blanche en cas d'évaluation incorrecte.

Je n'ai pas parlé à ce client depuis environ 6 mois, mais, la dernière fois que j'ai entendu dire, le système fonctionnait assez efficacement.

Point secondaire: Si vous envisagez de créer un système de détection similaire basé sur la limitation du taux de réussite, assurez-vous d'utiliser des totaux d'au moins une minute (et de préférence d'au moins cinq minutes). Je vois beaucoup de gens parler de ce genre de régimes qui veulent bloquer toute personne qui arrive en tête 5-10 coups sûrs en une seconde, ce qui peut générer des faux positifs sur les pages d'images lourdes (sauf si les images sont exclues du décompte) et va générer de faux positif quand quelqu'un comme moi trouve un site intéressant qu'il veut tout lire, alors il ouvre tous les liens dans les onglets pour les charger en arrière-plan pendant qu'il lit le premier.

Dave Sherohman
la source
5
Je trouve que le faux positif dû au blocage du robot d'exploration Web tue absolument le trafic Web. Vous êtes en train de faire chier les 99,8% de votre utilisateur dans une mauvaise tentative d'empêcher les robots d'exploration qui peuvent facilement contourner cette méthode naïve décrite. Jamais une bonne idée de refuser l'accès des utilisateurs ou de l'entraver car cela détruit l'expérience utilisateur avec votre site.
KJW
14

Voir Project Honeypot - ils mettent en place des pièges à bots à grande échelle (et ont DNSRBL avec leurs adresses IP).

Utilisez des URL et du HTML compliqués:

<a href="https://example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

En HTML, vous pouvez utiliser de nombreuses astuces avec des commentaires, des éléments CDATA, des entités, etc.:

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->
Kornel
la source
9

Une solution simple est de créer un lien et de le rendre invisible

<a href="iamabot.script" style="display:none;">Don't click me!</a>

Bien sûr, vous devriez vous attendre à ce que certaines personnes qui regardent le code source suivent ce lien juste pour voir où il mène. Mais vous pouvez présenter à ces utilisateurs un captcha ...

Les robots d'exploration valides suivraient bien sûr également le lien. Mais vous ne devez pas implémenter un rel = nofollow, mais recherchez le signe d'un robot d'exploration valide. (comme l'agent utilisateur)

Georg Schölly
la source
1
Sauf si le bot vérifie les attributs CSS du lien et ne suit pas le lien car il n'est pas visible pour un utilisateur humain ...
Bob Somers
1
Étiqueter le lien "NE CLIQUEZ PAS SUR MOI" serait une meilleure idée. Si quelqu'un a désactivé CSS (ou aucun support CSS), le lien sera visible ..
dbr
Bonne idée. Modifiez peut-être le texte en "." et le style css pour correspondre à l'arrière-plan - le rendant invisible pour la plupart des utilisateurs? Ou exécutez un script pour le masquer après 1 seconde en le laissant uniquement visible par un robot qui ne peut pas lier la commande javascript hide au lien?
Underverse
1
Méfiez-vous de la pénalité du chapeau noir du point de vue du référencement.
Alfred Wallace
6

Une chose que vous n'avez pas listée, qui est couramment utilisée pour détecter les mauvais robots d'exploration.

Vitesse de frappe, les bons robots d'exploration du Web briseront leurs hits pour ne pas submerger un site de requêtes. Les mauvais feront l'une des trois choses suivantes:

  1. frapper les liens séquentiels les uns après les autres
  2. frapper des liens séquentiels dans une séquence parallèle (2 ou plus à la fois).
  3. atteindre des liens séquentiels à un intervalle fixe

En outre, certains programmes de navigation hors ligne accapareront un certain nombre de pages, je ne suis pas sûr du type de seuil que vous souhaitez utiliser pour commencer le blocage par adresse IP.

Cette méthode capturera également les programmes de mise en miroir comme fmirror ou wget.

Si le bot randomise l'intervalle de temps, vous pouvez vérifier si les liens sont traversés de manière séquentielle ou en profondeur, ou vous pouvez voir si le bot traverse une énorme quantité de texte (comme dans les mots à lire) dans un période de temps trop courte. Certains sites limitent également le nombre de demandes par heure.

En fait, j'ai entendu une idée quelque part, je ne me souviens pas où, que si un utilisateur obtient trop de données, en termes de kilo-octets, on peut lui présenter un captcha lui demandant de prouver qu'il n'est pas un robot. Je n'ai jamais vu cela implémenté.

Mise à jour sur le masquage des liens

En ce qui concerne le masquage des liens, vous pouvez mettre un div sous un autre, avec CSS (en le plaçant en premier dans l'ordre de dessin) et éventuellement en définissant l'ordre z. Un bot ne pourrait pas ignorer cela, sans analyser tous vos javascript pour voir s'il s'agit d'un menu. Dans une certaine mesure, les liens à l'intérieur des éléments DIV invisibles ne peuvent pas non plus être ignorés sans que le bot analyse tout le javascript.

En prenant cette idée à son terme, un javascript non appelé qui pourrait potentiellement montrer les éléments cachés pourrait tromper un sous-ensemble de robots d'analyse javascript. Et ce n'est pas beaucoup de travail à mettre en œuvre.

Chris
la source
16
Faille majeure avec les méthodes "ignorer JavaScript signifie que vous êtes un bot": Certains d'entre nous utilisent le plugin NoScript. Aucun site n'exécute JavaScript sur moi à moins que je mette le site en liste blanche et je suis presque sûr que je ne suis pas un robot.
Dave Sherohman
2
les bots peuvent exécuter Javascript maintenant ... nous sommes en 2013 pour l'amour du Christ. voilà donc tout l'argument. Qui a dit que les robots d'exploration visitaient les sites par sélections séquentielles? une autre hypothèse énorme.
KJW
1
Le javascript était uniquement pour la présentation d'un lien de pot de miel. L'idée est que les robots vont analyser le javascript qui fera un lien honeypot visible, ce qui les rend plus susceptibles de suivre le lien. Cependant, pour un utilisateur réel, le code qui rend le lien visible ne sera jamais exécuté. Ainsi, les utilisateurs NoScript, ainsi que toute personne qui ne va pas exécuter des fonctions au hasard, conviendrait. Cela dit, je ne sais pas pourquoi / comment un bot exécuterait du code au hasard, et s'il effectuait une analyse statique pour déterminer si un élément pouvait devenir visible, ce serait un bot sophistiqué.
Rick
4

Une méthode simple de détection de bots dont j'ai entendu parler pour les formulaires est la technique de saisie cachée. Si vous essayez de sécuriser un formulaire, mettez une entrée dans le formulaire avec un identifiant qui semble tout à fait légitime. Ensuite, utilisez css dans un fichier externe pour le masquer. Ou si vous êtes vraiment paranoïaque, configurez quelque chose comme jquery pour masquer la zone de saisie lors du chargement de la page. Si vous faites cela correctement, j'imagine que ce serait très difficile à comprendre pour un robot. Vous savez que ces robots ont dans leur nature de tout remplir sur une page, surtout si vous donnez à votre entrée cachée un identifiant comme id = "fname", etc.

Noob agile
la source
2
pas si les bots sont capables d'attendre la fin de la jquery, comme le peut un navigateur ordinaire. Cela aurait bien fonctionné au début des années 00
KJW
3

Il n'est pas si simple de suivre les bonnes chaînes d'agent utilisateur. Les versions de navigateur vont et viennent. Faire une statistique sur les chaînes d'agent utilisateur par différents comportements peut révéler des choses intéressantes.

Je ne sais pas dans quelle mesure cela pourrait être automatisé, mais au moins c'est une chose différenciante.

iny
la source
3

Non testé, mais voici une belle liste d'agents utilisateurs dont vous pourriez créer une expression régulière. Pourrait vous y conduire la plupart du temps:

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:[email protected]|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|PackRat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

Tiré de: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

Brian Armstrong
la source
1

Vous pouvez également vérifier les références. Aucune référence ne peut soulever la suspension du bot. Une mauvaise référence signifie certainement que ce n'est pas un navigateur.

Ajout de liens invisibles (éventuellement marqués comme rel = "nofollow"?),

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

Je ne ferais pas ça. Vous pouvez vous retrouver sur la liste noire de Google pour le référencement black hat :)

Marin danubien
la source
1
Qu'est-ce exactement et pourquoi vous mettrait-il sur la liste noire?
conteh
1

Je travaille actuellement pour une entreprise qui scanne des sites Web afin de les classer. Nous recherchons également des logiciels malveillants sur les sites.

D'après mon expérience, les bloqueurs numéro un de notre robot d'exploration (qui utilise bien sûr un IE ou Firefox UA et n'obéit pas à robots.txt. Duh.) Sont des sites hébergeant intentionnellement des logiciels malveillants. C'est pénible car le site revient alors à un humain qui doit charger manuellement le site, le classer et le rechercher pour les logiciels malveillants.

Je dis juste qu'en bloquant les robots d'exploration, vous vous mettez en mauvaise compagnie.

Bien sûr, s'ils sont horriblement impolis et absorbent des tonnes de bande passante, c'est une autre histoire car alors vous avez une bonne raison.

Zan Lynx
la source
15
Je suis désolé, mais si vous exécutez un robot qui n'obéit pas au fichier robots.txt, vous n'obéissez pas aux règles. En n'obéissant pas aux règles, vous vous mettez vous-même en très mauvaise compagnie. En suggérant que l'application des règles définies par le propriétaire du site Web (dans le fichier robots.txt) est une mauvaise pratique, vous inversez à tort le problème. Vous déclarez essentiellement que vous ne comprenez pas qui est le véritable propriétaire du contenu.
Jacco
11
@Jacco: Si un robot à la recherche de logiciels malveillants obéissait aux règles, il n'en trouverait jamais. Allez parler aux auteurs de logiciels malveillants.
Zan Lynx
5
@Jacco: Pourcentage de sites légitimes qui tentent de bloquer les robots d'exploration non conformes? Moins de 1%. Les sites malveillants qui essaient? Plus de 60%. Alors oui, c'est suspect.
Zan Lynx
4
@Jacco en fait non, il n'y a aucun propriétaire d'un contenu sur le Web s'il est public. Quelqu'un qui fait cela sans copier et coller manuellement devrait recevoir une récompense et non une punition. Tout ce concept de droit d'auteur doit être aboli sur Internet. Seules l'innovation créative et la confiance peuvent créer de la valeur et mériter l'attention des gens, et non par une menace de voile juridique opaque.
KJW
Tout cela indique que la personne qui gère le site a consacré beaucoup de temps et de réflexion au site, et qu'elle a un certain degré de compétence technique. Alors bien sûr, cela exclut la plupart de la courbe en cloche.
Tir parthe
1

Les gens continuent de s'adresser aux robots d'exploration larges, mais pas aux robots d'exploration spécialisés pour votre site Web.

J'écris des robots d'exploration furtifs et s'ils sont construits individuellement, aucune quantité de pots de miel ou de liens cachés n'aura aucun effet - le seul véritable moyen de détecter les robots d'exploration spécialisés est d'inspecter les modèles de connexion.

Les meilleurs systèmes utilisent l'IA (par exemple Linkedin) utilisent l'IA pour résoudre ce problème.
La solution la plus simple consiste à écrire des analyseurs de journaux qui analysent les connexions IP et mettent simplement ces adresses IP en liste noire ou servent du captcha, au moins temporaire.

par exemple
si IP X est vu toutes les 2 secondes se connecter à foo.com/cars/*.htmlmais pas à d'autres pages, il s'agit probablement d'un bot ou d'un utilisateur expérimenté affamé.

Alternativement, il existe divers défis javascript qui agissent comme une protection (par exemple le système anti-bot de Cloudflare), mais ceux-ci sont facilement résolus, vous pouvez écrire quelque chose de personnalisé et qui pourrait être suffisamment dissuasif pour que cela ne vaille pas l'effort du robot d'exploration.

Cependant, vous devez poser une question si vous êtes prêt à fausser les utilisateurs légitimes positifs et à leur présenter des inconvénients pour empêcher le trafic de robots. La protection des données publiques est un paradoxe impossible.

Granitosaurus
la source
-1

réponse courte: si un programmeur de niveau intermédiaire sait ce qu'il fait, vous ne pourrez pas détecter un robot sans affecter l'utilisateur réel. Avoir vos informations publiquement, vous ne pourrez pas les défendre contre un robot d'exploration ... c'est comme le premier amendement à droite :)

Alex MAN
la source