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

Изучая ТГ каналы, посвященным накрутке поведенческих факторов (а большинство ботов используется для этого), пришла в голову мысль, что наверняка же разработчики ботов где-то ошибаются, где-то упираются в невозможность реализовать полноценную эмуляцию параметров настоящих браузеров и поведение реальных посетителей. На основании двух этих гипотез и возникла идея создать 2 нейросети. Первая из них должна определять бота по многочисленным параметрам браузера. А вторая - по поведению на сайте - по тому, как пользователь скроллит, кликает и совершает другие действия.

Сбор базы

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

  1. Скоринг Recapcha V3.

  2. Залогинен ли посетитель в сервисах Google, Yandex, VK.

  3. Уникальность Canvas Hash.

Суть  последнего параметра в том, что на элементе HTML “холст” рисуется картинка, далее вычисляется md5 хэш этого изображения. В зависимости от операционной системы, ее версии, версии браузера, устройства, изображение чуть отличается и хэш получается разным. Боты, как правило, накладывают случайный шум на изображение, чтобы затруднить их детектирование, и в результате у них хэш получается уникальным. У реальных людей уникальных хэшей не бывает. 

Итак, реальный посетитель, если:

  1. Скоринг  Recapcha V3 >=0.9.

  2. Залогинен в Яндексе и в одном из: Google либо VK.

  3. Canvas Hash неуникальный.

Бот, если:

  1. Скоринг  Recapcha V3<=0.3

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

  3. Уникальный Canvas Hash.

Данные брались с трех информационных сайтов за период в 1 месяц. В базу попало чуть больше сорока тысяч визитов, 25% из которых это боты и 75% реальные люди. Что именно собиралось будет описано далее.

Определение бота по параметрам браузера

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

  • ОС, версия ОС, название браузера, версия браузера, модель гаджета, если есть возможность ее получить.

  • Параметры соединения - тип сети, скорость.

  • Разрешение экрана, размер окна отображения, есть ли полоса прокрутки и другие параметры, связанные с отображением.

  • Параметры webGL (модель видеокарты, размер памяти и т.п.).

  • Виды медиа контента, который может воспроизвести браузер.

  • Какие шрифты поддерживает браузер (анализируются 300 самых распространенных шрифтов).

  • Параметры WebRTC.

Получилось несколько десятков параметров

Следующее, что нужно решить - какую архитектуру нейронной сети использовать. Поскольку база несколько не сбалансирована, первое, что пришло в голову - попробовать автокодировщик. Обучить его на реальных людях (их 75%), а выбросы трактовать как ботов. Была использована следующая архитектура:

Результат получился такой:

Суммарная ошибка великовата. Надо попробовать обычный классификатор на полносвязанных слоях. Была подобрана следующая архитектура:

Что получилось:

Результат отличный! И для отсеивания большинства ботов, которые используются для накрутки ПФ, такая нейронка подходит.

Но что если бюджет позволяет использовать ботов не просто на браузерном движке, а на реальном Google Chrome? Это требует значительно больше ресурсов, но технически легко реализуемо. Для такого случая эта нейронная сеть не подойдет. Но можно попробовать проанализировать поведение бота и сравнить с поведением реальных людей.

Определение бота по поведению на сайте

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

  1. Движение мыши.

  2. Прокрутка колесика.

  3. Нажатие на сенсорный экран.

  4. Прокрутка на странице.

Для каждого события соберем следующие параметры:

  1. Длительность.

  2. Изменения по оси X и Y.

  3. Скорость изменения по оси X и Y.

  4. Число элементарных событий, которые получил браузер.

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

А результат следующий:

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

Вывод

Плюсы и минусы каждого метода приведены на картинке:

Что дальше

На данный момент функционал реализован в виде Wordpress плагина и работает в тестовом режиме на одном из сайтов. Его код можно посмотреть здесь.

В дальнейшем планируется все довести до "ума" и запустить в виде сервиса.

Комментарии (13)


  1. kamitora
    06.09.2022 01:31
    +2

    Пользователи с хоть сколько-то нестандартным набором плагинов или железом, или просто с хитрой корпоративной политикой безопасности, режущей/менячющей заголовки, передают вам пламенный привет. Вот еще совет в копилку: обязательно проверяйте WebGL: в лисе старше 100 версии он крашит браузер при использовании GLSL, которая не поддерживается старыми видекартами, во всяком случае на линуксах. Сразу отсеятся нищеброды.


    1. a1konstantin Автор
      06.09.2022 07:39

      Проблема может возникнуть с юзерами на нестандартных мобильных устройствах и только пока таких устройств мало. Как только набирается статистика, Canvas Hash перестает быть уникальным и такие посетители исключаются из базы ботов. На десктопах вариантов Canvas Hash меньше и там вероятность записать реального человека в бота очень мала. Но в любом случае, все зависит от сценария использования. Если на сайте критически важно не отсеить живых людей, можно им просто показать капчу, а не сразу завернуть. Можно показать капчу только в случае, если определяется как бот по параметрам и по поведению и с вероятностью выше 90%. Ну и т.д.


  1. Slav2
    06.09.2022 02:52

    Не понятно в чем проблема этих ботов? Вы заметили увеличение bounce rate и пытаетесь его снизить за счет ограничения доступа ботов к сайту, до того как страница загрузит код трекера? Если трекер увидел посетителя, то ваши действия по ограничению его нахождения на сайте бессмысленны. Выкинув его через 20 секунд с сайта, вы просто увеличите ваш bounce rate. Для трекера такой бот будет выглядеть как посетитель, который пришел, ничего интересного не нашел и закрыл страницу. Если вы все это время не будете показывать трекер, проведете анализ и только потом загрузите трекер, то вы уменьшите ровно на это время длительность каждого визита. И это точно поднимет ваш bounce rate если вообще не приведет к бану за неестественное поведение.

    Для накрутки поведенческих факторов используются реальные люди - исполнители. А боты на вашем сайте делают все что угодно, только не накрутка ПФ. Ну, например, они могут искать формы регистрации для спама на форуме или в комментариях. И я думаю, учитывая массовость этого явления, на ваше ранжирование в поисковиках спамботы влиять не должны.


    1. a1konstantin Автор
      06.09.2022 07:24

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

      Можно резать ботов еще до загрузки HTML. Можно отдавать трекер только реальным людям. Делал и так, и так.

      Для накрутки в основном используются боты)). Есть конечно всякие биржи типа qcomment, но погоды они не делают. Статистику в основном искажают боты на этапе прогрева, реальных людей греть не надо))


  1. cry_san
    06.09.2022 03:11

    Боты давно уже перед парсингом прогреваются


    1. a1konstantin Автор
      06.09.2022 07:11

      Как раз на прогреве они и ходят по информационным сайтам в массовом количестве.


  1. Pest85
    06.09.2022 04:20

    75% из которых это боты и 25% реальные люди.

    на картинке наоборот. кому верить?


    1. a1konstantin Автор
      06.09.2022 07:10

      Да, опечатка. На картинке верно.


  1. Stas911
    06.09.2022 04:20

    А че сразу нейронка? Банальная logistics regression не работает?


    1. a1konstantin Автор
      06.09.2022 07:30

      Честно говоря, обычное ML не пробовал. Задача определения по параметрам наверняка решится. Но основная, с прицелом на будущее, это все-таки детектирование по поведению. А там временные ряды - и сверточные слои, LSTM - первое что приходит в голову))


  1. e0xextazy
    06.09.2022 19:50

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


    1. a1konstantin Автор
      06.09.2022 19:51

      Датасет не планировал выкладывать.


  1. 9ella
    08.09.2022 01:49

    Интересно.