Виявлення веб-сканерів "стелс"


107

Які існують варіанти виявлення веб-сканерів, які не хочуть виявляти?

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

Я не кажу про приємних сканерів, таких як googlebot та Yahoo! Сірка. Я вважаю бота приємним, якщо він:

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

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

Існує декілька трапок, з яких можна скласти оновлений список (спасибі Кріс, гс) :

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

Деякі пастки спрацьовували б як «добрі», так і «погані» боти. ви можете комбінувати їх із білим списком:

  1. Це запускає пастку
  2. Це запит robots.txt?
  3. Це не викликає іншої пастки, оскільки вона підкоряється robots.txt

Ще одна важлива річ тут:
Зауважте, що незрячі користуються пристроями зчитування екрана: дайте людям спосіб зв’язатися з вами або вирішіть Captcha (без зображення), щоб продовжувати перегляд.

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

Оновлення
Питання не в тому, як я можу спіймати кожного сканера. Питання полягає в тому, як я можу максимально збільшити шанс виявлення сканера.

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

Однак ви були б здивовані, наскільки дурні деякі сканери. З найкращим прикладом дурості (на мою думку): передайте всі URL-адреси в малі регістри, перш ніж їх запитувати.

А потім є ціла купа сканерів, які просто "недостатньо хороші", щоб уникнути різних захоплень.

Відповіді:


15

Нещодавно я працював з невеликою хостинговою компанією, щоб допомогти їм реалізувати рішення. Система, яку я розробив, перевіряє журнали веб-серверів на предмет надмірної активності з будь-якої IP-адреси та видає правила брандмауера для блокування порушників. До неї були включені білі списки IP-адрес / діапазонів на основі http://www.iplists.com/ , які потім автоматично оновлювались у міру необхідності, перевіряючи строк заявленого агента користувача та, якщо клієнт претендував на законний павук, але не на у списку білого списку, він здійснив пошук DNS / reverse-DNS, щоб перевірити, чи відповідає IP-адреса джерела заявленому власнику бота. Як помилку, про ці дії було повідомлено адміністратору електронною поштою разом із посиланнями на адресу чорного / білого списку у разі неправильної оцінки.

Я не спілкувався з цим клієнтом протягом 6 місяців або близько того, але, востаннє, я чув, що система працювала досить ефективно.

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


5
Я вважаю, що помилковий позитив через блокування веб-сканера абсолютно вбиває веб-трафік. Ви в основному змушуєте 99,8% свого користувача в недостатній спробі перешкодити сканерам, які можуть легко обійти цей наївний метод, описаний. Ніколи не гарна ідея забороняти користувачеві доступ чи перешкоджати цьому, оскільки це руйнує користувацьку роботу з вашим сайтом.
KJW

14

Дивіться проект Honeypot Project - вони встановлюють ботові пастки у великих масштабах (і мають DNSRBL зі своїми IP-адресами).

Використовуйте складні URL-адреси та HTML:

<a href="https://stackoverflow.com//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

Просте рішення - створити посилання і зробити його невидимим

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

Звичайно, слід очікувати, що деякі люди, які дивляться на вихідний код, переходять за цим посиланням лише для того, щоб побачити, куди він веде. Але ви можете подарувати цим користувачам капчу ...

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


1
Якщо бот не перевіряє атрибути CSS посилання та не слідкує за цим посиланням, оскільки воно не видно користувачеві людини ...
Боб Сомерс

1
Позначка посилання «НЕ тисніть мене» був би найкращою ідея .. Якщо хто - то CSS відключив (чи ні підтримки CSS), посилання буде видно ..
DBR

Гарна ідея. Можливо, змініть текст на "." і стиль css, щоб він відповідав фону - робить його непомітним для більшості користувачів? Або запустіть скрипт, щоб приховати його через 1 секунду, залишивши його видимим лише боту, який не може зв’язати команду приховування javascript до посилання?
Підземний

1
Остерігайтеся штрафу за чорний капелюх з точки зору SEO.
Альфред Уоллес

6

Одне, що ви не перераховували, зазвичай використовується для виявлення поганих сканерів.

Швидкість удару, хороші веб-сканери збільшать свої звернення, щоб вони не занурювали сайт із запитами. Погані зроблять одну з трьох речей:

  1. вдарити послідовні зв’язки одна за одною
  2. потрапляння послідовних посилань у деякій паралельній послідовності (2 або більше одночасно).
  3. потрапляти на послідовні посилання через фіксований інтервал

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

Цей метод також охопить дзеркальні програми, такі як fmirror або wget.

Якщо бот рандомізує часовий інтервал, ви можете перевірити, чи проходять посилання послідовно або на глибині, або ви можете бачити, чи бот пересуває величезну кількість тексту (як слова для читання) у занадто короткий проміжок часу. Деякі сайти також обмежують кількість запитів на годину.

Насправді я десь почув ідею, не пам’ятаю, де, якщо користувач отримує занадто багато даних у перерахунку на кілобайти, їм можна подати капчу з проханням довести, що вони не бот. Я ніколи не бачив цього реалізованого.

Оновлення про приховування посилань

Що стосується приховування посилань, ви можете поставити div під інший, з CSS (розмістивши його першим у порядку малювання) та, можливо, встановивши z-порядок. Бот не міг проігнорувати це, не розбираючи весь ваш JavaScript, щоб побачити, чи це меню. Певною мірою посилання всередині невидимих ​​елементів DIV також не можуть бути ігноровані без бота, який аналізує всі JavaScript.

Здійснюючи цю ідею, незваний javascript, який потенційно може показувати приховані елементи, міг би обдурити підмножину ботів для розбору JavaScript. І, це не дуже багато роботи, щоб здійснити.


16
Основна вада методів "ігнорування JavaScript означає, що ви бот". Деякі з нас використовують плагін NoScript. Жоден сайт не працює на мені JavaScript, якщо я не додаю його в білий список, і я впевнений, що я не бот.
Дейв Шерохман

2
боти можуть виконувати Javascript зараз ... це 2013 для Різдва. тому йде весь аргумент. хто каже, що веб-сканери відвідують сайти послідовно? ще одне величезне припущення.
KJW

1
Javascript був лише для показу посилання на медоносі. Ідея полягає в тому , що боти будуть розбирати JavaScript , який зробить посилання Ханіпота видно, що робить їх більш імовірно, перейшовши за посиланням. Однак для реального користувача код, який робить посилання видимим, ніколи не буде виконуватися. Таким чином, користувачі NoScript разом з усіма, хто не виконує функції випадковим чином, буде добре. Це означає, що я не впевнений, чому / як бот випадковим чином виконує код, і якщо він робив статичний аналіз, щоб визначити, чи може елемент стати видимим, це був би один фантастичний бот.
Рік

4

Один простий метод виявлення бота, який я чув для форм, - це прихована техніка введення. Якщо ви намагаєтеся захистити форму, покладіть у форму вхід з ідентифікатором, який виглядає повністю законним. Потім використовуйте css у зовнішньому файлі, щоб приховати його. Або якщо ви справді параноїк, встановіть щось на кшталт jquery, щоб приховати поле введення під час завантаження сторінки. Якщо ви зробите це правильно, я думаю, що боту було б дуже важко розібратися. Ви знаєте, що у цих ботів є природа, щоб заповнити все на сторінці, особливо якщо ви надаєте прихованому вводу ідентифікатор чогось типу id = "fname" тощо.


2
не якщо боти зможуть чекати завершення jquery, як звичайний браузер. Це було б добре на початку 00-х
KJW

3

Насправді не так просто йти в ногу з хорошими рядками агентів користувача. Версії браузера приходять і йдуть. Здійснення статистики щодо рядків користувацьких агентів за різними формами поведінки може виявити цікаві речі.

Я не знаю, наскільки це може бути автоматизовано, але, принаймні, це одна різнича річ.


3

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

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/


1

Ви також можете перевірити реферали. Жоден реферал не міг підвищити почуття бота. Поганий реферал означає, що це точно не браузер.

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

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

Я б цього не робив. Ви можете потрапити в чорний список Google за чорну шапку SEO :)


1
Що саме і чому це зробить вас чорними списками?
змагатись

1

Зараз я працюю в компанії, яка сканує веб-сайти, щоб класифікувати їх. Ми також перевіряємо сайти на наявність шкідливих програм.

На мій досвід, блокатори номер один у нашому веб-сканері (який, звичайно, використовує IE або Firefox UA і не підкоряється robots.txt. Duh.) - це сайти, які навмисно розміщують зловмисне програмне забезпечення. Це біль, тому що сайт потім повертається до людини, якій доводиться вручну завантажувати сайт, класифікувати його та перевіряти на наявність шкідливих програм.

Я просто кажу, блокуючи веб-сканери, ви ставите себе в якусь погану компанію.

Звичайно, якщо вони жахливо грубі та висмоктують тонни вашої пропускної здатності, це вже інша історія, тому що тоді у вас є вагомі причини.


15
Вибачте, але якщо ви запускаєте сканер, який не підкоряється robots.txt, ви не дотримуєтесь правил. Не дотримуючись правил, ви самі ставите себе в якусь справді погану компанію. Припускаючи, що застосовувати правила, встановлені власником веб-сайту (в robots.txt), є поганою практикою, ви помилково перевертаєте проблему догори дном. Ви в основному заявляєте, що не розумієте, хто є правильним власником вмісту.
Жако

11
@Jacco: Якщо сканер, який шукає зловмисне програмне забезпечення, дотримувався правил, він ніколи не знайде жодного. Переговори з авторами шкідливих програм.
Zan Lynx

5
@Jacco: Відсоток легітимних сайтів, які намагаються заблокувати невідповідні сканери? Під 1%. Сайти зловмисних програм, які намагаються? Понад 60%. Так що так, це підозріло.
Зан Лінкс

4
@Jacco насправді ні, у Інтернеті немає власників вмісту, якщо він є загальнодоступним. Той, хто робить це без копіювання та вставки вручну, повинен отримувати нагороду, а не покарання. Цілу концепцію авторських прав потрібно скасувати в Інтернеті. Тільки творчі інновації та довіра здатні створити цінність і гідну уваги людей, а не загрози непрозорої юридичної завіси.
KJW

Все це свідчить про те, що людина, яка керує сайтом, вкладає багато часу і думки на сайт, і вони мають певний ступінь технічної майстерності. Так , звичайно , що виключає велику частину колоколообразной кривої.
Парфянський розстріл

1

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

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

Найкращі системи, що використовують AI (наприклад, Linkedin), використовують AI для вирішення цього питання.
Найпростіше рішення - це аналізатори журналів запису, які аналізують IP-з'єднання та просто в чорному списку ці IP-адреси або подають капчу, принаймні тимчасову.

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

Крім того, існують різні виклики javascript, які виступають захистом (наприклад, система боротьби з ботами Cloudflare), але вони легко вирішуються, ви можете написати щось на замовлення, і це може бути достатньо стримувальним фактором, щоб не варто витрачати зусиль на сканер.

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


-1

коротка відповідь: якщо програміст середнього рівня знає, що він робить, ви не зможете виявити сканера, не вплинувши на реального користувача. Опублікувавши вашу інформацію публічно, ви не зможете захистити її від сканера ... це як перша поправка :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.