Обнаружение "стелс" веб-сканеров - PullRequest
106 голосов
/ 24 октября 2008

Какие есть варианты для обнаружения веб-сканеров, которые не хотят быть обнаруженными?

(Я знаю, что перечисление методов обнаружения позволит умному программисту-невидимке сделать лучшего паука, но я не думаю, что мы когда-либо сможем блокировать умных невидимок, в любом случае, только тех, которые допускают ошибки. )

Я не говорю о хороших сканерах, таких как googlebot и Yahoo! Slurp. Я считаю, что бот хорош, если он:

  1. идентифицирует себя как бот в строке агента пользователя
  2. читает robots.txt (и подчиняется ему)

Я говорю о плохих сканерах, которые прячутся за обычными пользовательскими агентами, используют мою пропускную способность и никогда не дают мне ничего взамен.

Есть несколько люков, которые можно построить Обновлен список (спасибо Крис, gs) :

  1. Добавление каталога, указанного в списке (помеченного как запрещенный), только в файле robots.txt,
  2. Добавление невидимых ссылок (возможно помеченных как rel = "nofollow"?),
    • style = "display: none;" по ссылке или родительскому контейнеру
    • расположен под другим элементом с более высоким z-индексом
  3. определить, кто не понимает заглавных букв,
  4. определяет, кто пытается публиковать ответы, но всегда пропускает капчу.
  5. обнаружение запросов GET к ресурсам, доступным только для POST
  6. обнаружение интервала между запросами
  7. определить порядок запрашиваемых страниц
  8. определить, кто (последовательно) запрашивает ресурсы https через http
  9. определяет, кто не запрашивает файл изображения (это в сочетании со списком пользовательских агентов известных браузеров с поддержкой изображений работает на удивление приятно)

Некоторые ловушки будут срабатывать как «хорошими», так и «плохими» ботами. Вы можете объединить их с белым списком:

  1. срабатывает ловушка
  2. Это запрос robots.txt?
  3. Это не вызывает другую ловушку, потому что она повиновалась robots.txt

Еще одна важная вещь здесь:
Пожалуйста, рассмотрите слепых людей, использующих программы для чтения с экрана: дайте людям способ связаться с вами, или решите (не изображения) капчу, чтобы продолжить просмотр.

Какие существуют способы автоматического обнаружения сканеров, пытающихся замаскировать себя как обычных посетителей-людей.

Обновление
Вопрос не в том: Как мне поймать каждого гусеничного устройства. Вопрос: Как максимально повысить вероятность обнаружения гусеничного механизма.

Некоторые пауки действительно хороши, и на самом деле разбирают и понимают html, xhtml, css javascript, VB script и т. Д. ...
У меня нет иллюзий: я не смогу победить их.

Однако вы удивитесь, насколько глупы некоторые сканеры. Лучший пример глупости (на мой взгляд): приведите все URL-адреса в нижний регистр, прежде чем запрашивать их.

А потом есть целая куча сканеров, которые просто «недостаточно хороши», чтобы избежать различных люков.

Ответы [ 11 ]

15 голосов
/ 22 ноября 2008

Некоторое время назад я работал с небольшой хостинговой компанией, чтобы помочь им реализовать решение этой проблемы. Разработанная мной система проверила журналы веб-сервера на предмет чрезмерной активности с любого данного IP-адреса и выпустила правила брандмауэра для блокировки нарушителей. Он включал белые списки IP-адресов / диапазонов на основе http://www.iplists.com/,, которые затем автоматически обновлялись по мере необходимости путем проверки заявленных строк агента пользователя и, если клиент утверждал, что он является законным пауком, но не в белом списке, он выполнял DNS / Обратный поиск DNS, чтобы проверить, что IP-адрес источника соответствует заявленному владельцу бота. В качестве отказоустойчивого, об этих действиях сообщалось администратору по электронной почте вместе со ссылками на черный / белый список адресов в случае неправильной оценки.

Я не разговаривал с этим клиентом около 6 месяцев или около того, но, как я слышал, система работала довольно эффективно.

Побочный эффект: если вы думаете о создании аналогичной системы обнаружения, основанной на ограничении скорости попадания, обязательно используйте итоговые значения не менее одной минуты (и предпочтительно не менее пяти минут). Я вижу много людей, говорящих об этих схемах, которые хотят блокировать любого, кто достигает 5-10 попаданий в секунду, что может привести к ложным срабатываниям на страницах с большим количеством изображений (если изображения не исключены из подсчета) и будет генерировать ложные срабатывания, когда кто-то вроде меня найдет интересный сайт, который он хочет прочитать, поэтому он открывает все ссылки на вкладках для загрузки в фоновом режиме, пока читает первую.

14 голосов
/ 22 ноября 2008

См. Project Honeypot - они устанавливают ловушки для ботов в большом масштабе (и имеют DNSRBL со своими IP-адресами).

Используйте хитрые URL и HTML:

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

В HTML вы можете использовать множество трюков с комментариями, элементами CDATA, сущностями и т. Д .:

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->
9 голосов
/ 24 октября 2008

Простое решение - создать ссылку и сделать ее невидимой

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

Конечно, вы должны ожидать, что некоторые люди, которые просматривают исходный код, переходят по этой ссылке, чтобы посмотреть, к чему это приведет. Но вы можете подарить этим пользователям капчу ...

Действительные сканеры, разумеется, также перейдут по ссылке. Но вам не следует реализовывать rel = nofollow, а ищите знак действительного сканера. (как пользовательский агент)

6 голосов
/ 24 октября 2008

Одна вещь, которую вы не перечислили, которая обычно используется для обнаружения плохих сканеров.

Скорость хитов, хорошие веб-сканеры будут ломать свои хиты, чтобы они не наводнили сайт запросами. Плохие будут делать одно из трех:

  1. переходить по последовательным ссылкам одна за другой
  2. попадание в последовательные ссылки в некоторой последовательности паралелей (по 2 и более одновременно).
  3. попадание в последовательные ссылки с фиксированным интервалом

Кроме того, некоторые программы просмотра в автономном режиме будут отбрасывать количество страниц, я не уверен, какой порог вы хотите использовать, чтобы начать блокировку по IP-адресу.

Этот метод также перехватывает программы зеркалирования, такие как fmirror или wget.

Если бот рандомизирует временной интервал, вы можете проверить, просматриваются ли ссылки последовательным способом или методом глубины, или вы можете увидеть, пересекает ли бот огромное количество текста (например, в словах для чтения в слишком короткий промежуток времени. Некоторые сайты также ограничивают количество запросов в час.

На самом деле, я где-то слышал идею, я не помню, где, если пользователь получает слишком много данных, в килобайтах, ему может быть представлена ​​капча с просьбой доказать, что он не бот. Хотя я никогда не видел, чтобы это было реализовано.

Обновление о скрытых ссылках

Что касается скрытия ссылок, вы можете поместить div под другой, с помощью CSS (поместив его первым в порядке прорисовки) и, возможно, установив z-порядок. Бот не может игнорировать это, не анализируя весь ваш javascript, чтобы увидеть, является ли это меню. В некоторой степени ссылки внутри невидимых DIV-элементов также нельзя игнорировать, если бот не анализирует весь JavaScript.

Если довести эту идею до конца, непроверенный javascript, который потенциально мог бы показать скрытые элементы, мог бы обмануть подмножество ботов для разбора javascript. И это не так много работы для реализации.

4 голосов
/ 08 апреля 2009

Один простой метод обнаружения ботов, о котором я слышал для форм, - это метод скрытого ввода. Если вы пытаетесь защитить форму, поместите в нее входные данные с идентификатором, который выглядит абсолютно корректно. Затем используйте CSS во внешнем файле, чтобы скрыть его. Или, если вы действительно параноик, установите что-то вроде jquery, чтобы скрыть поле ввода при загрузке страницы. Если вы сделаете это правильно, я думаю, что боту будет очень трудно это понять. Вы знаете, что эти боты имеют естественную природу для заполнения всего на странице, особенно если вы даете скрытому вводу идентификатор что-то вроде id = "fname" и т. Д.

3 голосов
/ 26 июня 2010

Не проверено, но вот хороший список пользовательских агентов, из которых вы могли бы сделать регулярное выражение. Мог бы получить большую часть пути туда:

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:craftbot@yahoo.com|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]

Взято из: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

2 голосов
/ 24 октября 2008

На самом деле не так-то просто идти в ногу с хорошими строками пользовательского агента. Версии браузера приходят и уходят. Создание статистики о строках пользовательского агента по различным поведением может выявить интересные вещи.

Я не знаю, насколько это можно автоматизировать, но, по крайней мере, это одна из отличительных черт.

1 голос
/ 14 сентября 2018

Люди обращаются к широким сканерам, но не к сканерам, специализирующимся на вашем сайте.

Я пишу стелс-сканеры, и если они построены по отдельности, никакое количество медовых баков или скрытых ссылок не окажет никакого влияния - единственный реальный способ обнаружить специализированные сканеры - это проверить шаблоны соединений.

Лучшие системы используют ИИ (например, Linkedin), используют ИИ для решения этой проблемы.
Самым простым решением является запись парсеров журнала, которые анализируют IP-соединения и просто помещают их в черный список или обслуживают капчу, по крайней мере, временно.

, например
если IP X появляется каждые 2 секунды при подключении к foo.com/cars/*.html, но не к каким-либо другим страницам - это, скорее всего, бот или голодный опытный пользователь.

В качестве альтернативы существуют различные вызовы javascript, которые выступают в качестве защиты (например, анти-бот-система Cloudflare), но они легко решаемы, вы можете написать что-то нестандартное, и этого может быть достаточно, чтобы сделать это не стоящим усилий для сканера.

Однако вы должны задать вопрос о том, готовы ли вы лживо-положительным законным пользователям и создать им неудобства для предотвращения трафика ботов. Защита публичных данных - это невозможный парадокс.

1 голос
/ 03 февраля 2011

Вы также можете проверить рефералов. Ни одно направление не может вызвать подозрения у ботов. Плохое направление означает, конечно, это не браузер.

Добавление невидимых ссылок (возможно помеченных как rel = "nofollow"?),

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

Я бы этого не делал. Вы можете попасть в черный список Google для черной шляпы SEO:)

1 голос
/ 26 июня 2010

В настоящее время я работаю в компании, которая сканирует веб-сайты, чтобы классифицировать их. Мы также проверяем сайты на наличие вредоносных программ.

По моему опыту, блокировщики номер один нашего веб-сканера (который, конечно, использует IE или Firefox UA и не подчиняется robots.txt. Дух.) - это сайты, намеренно размещающие вредоносные программы. Это боль, потому что сайт возвращается к человеку, который должен вручную загрузить сайт, классифицировать его и проверить на наличие вредоносных программ.

Я просто говорю, , блокируя веб-сканеры, вы попадаете в какую-то плохую компанию.

Конечно, если они ужасно грубые и поглощают тонны вашей пропускной способности, это другая история, потому что тогда у вас есть веская причина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...