Пару лет назад, как и многие другие владельцы сайтов в рунете, я столкнулся с резким ростом посетителей из социальных сетей. Поначалу это радовало, пока дело не дошло до детального изучения поведения таких “пользователей” - оказалось что это боты. Мало того, они еще и сильно портили поведенческие факторы, которые критически важны для хорошего ранжирования в Яндексе, да и в Гугле.
Изучая ТГ каналы, посвященным накрутке поведенческих факторов (а большинство ботов используется для этого), пришла в голову мысль, что наверняка же разработчики ботов где-то ошибаются, где-то упираются в невозможность реализовать полноценную эмуляцию параметров настоящих браузеров и поведение реальных посетителей. На основании двух этих гипотез и возникла идея создать 2 нейросети. Первая из них должна определять бота по многочисленным параметрам браузера. А вторая - по поведению на сайте - по тому, как пользователь скроллит, кликает и совершает другие действия.
Сбор базы
Первое, что нужно для обучения нейронной сети - достаточное количество обучающих примеров - визитов, о которых мы достоверно знаем, что это боты и визитов, о которых точно известно, что это реальные люди. Для такого отбора было использовано три параметра:
Скоринг Recapcha V3.
Залогинен ли посетитель в сервисах Google, Yandex, VK.
Уникальность Canvas Hash.
Суть последнего параметра в том, что на элементе HTML “холст” рисуется картинка, далее вычисляется md5 хэш этого изображения. В зависимости от операционной системы, ее версии, версии браузера, устройства, изображение чуть отличается и хэш получается разным. Боты, как правило, накладывают случайный шум на изображение, чтобы затруднить их детектирование, и в результате у них хэш получается уникальным. У реальных людей уникальных хэшей не бывает.
Итак, реальный посетитель, если:
Скоринг Recapcha V3 >=0.9.
Залогинен в Яндексе и в одном из: Google либо VK.
Canvas Hash неуникальный.
Бот, если:
Скоринг Recapcha V3<=0.3
Нигде не залогинен, либо залогинен только в Яндекс. Боты для накрутки поведенческих факторов очень часто ходят под профилем Яндекса.
Уникальный Canvas Hash.
Данные брались с трех информационных сайтов за период в 1 месяц. В базу попало чуть больше сорока тысяч визитов, 75% из которых это боты и 25% реальные люди. Что именно собиралось будет описано далее.
Определение бота по параметрам браузера
Хотя боты и работают на браузерных движках, но это далеко не полноценный Google Chrome, за который они себя хотят выдать. Многие параметры им приходится эмулировать, чтобы выглядеть как настоящий пользовательский браузер. Вот и попробуем обучить нейронную сеть находить несоответствия эмулированных параметров реальным. Для этого соберем максимальное количество информации о браузере, а именно:
ОС, версия ОС, название браузера, версия браузера, модель гаджета, если есть возможность ее получить.
Параметры соединения - тип сети, скорость.
Разрешение экрана, размер окна отображения, есть ли полоса прокрутки и другие параметры, связанные с отображением.
Параметры webGL (модель видеокарты, размер памяти и т.п.).
Виды медиа контента, который может воспроизвести браузер.
Какие шрифты поддерживает браузер (анализируются 300 самых распространенных шрифтов).
Параметры WebRTC.
Получилось несколько десятков параметров
Следующее, что нужно решить - какую архитектуру нейронной сети использовать. Поскольку база несколько не сбалансирована, первое, что пришло в голову - попробовать автокодировщик. Обучить его на ботах(их 75%), а выбросы трактовать как реальных людей. Была использована следующая архитектура:
Результат получился такой:
Суммарная ошибка великовата. Надо попробовать обычный классифиукатор на полносвязанных слоях. Была подобрана следующая архитектура:
Что получилось:
Результат отличный! И для отсеивания большинства ботов, которые используются для накрутки ПФ, такая нейронка подходит.
Но что если бюджет позволяет использовать ботов не просто на браузерном движке, а на реальном Google Chrome? Это требует значительно больше ресурсов, но технически легко реализуемо. Для такого случая эта нейронная сеть не подойдет. Но можно попробовать проанализировать поведение бота и сравнить с поведением реальных людей.
Определение бота по поведению на сайте
Хорошие боты эмулируют поведение реального человека - они кликают, скроллят, двигают мышкой по траектории, похожей на человеческую и т.п. Но наверняка где-то ошибаются - может быть у них немного другое распределение событий, другие задержки, места клика и т.д. Попробуем собрать как можно больше данных о поведении посетителей. Для этого проанализируем следующие события:
Движение мыши.
Прокрутка колесика.
Нажатие на сенсорный экран.
Прокрутка на странице.
Для каждого события соберем следующие параметры:
Длительность.
Изменения по оси X и Y.
Скорость изменения по оси X и Y.
Число элементарных событий, которые получил браузер.
События укладываются во временной ряд, а значит имеет смысл использовать одномерные сверточные сети. Оптимальной получилась такая архитектура:
А результат следующий:
Результат тоже вполне хороший. К минусам можно отнести то, что требуется не меньше 20-ти секунд нахождения на странице, чтобы произошло достаточное количество действий. Поэтому нельзя применять для фильтрации траффика на этапе загрузки.
Вывод
Плюсы и минусы каждого метода приведены на картинке:
Что дальше
На данный момент функционал реализован в виде Wordpress плагина и работает в тестовом режиме на одном из сайтов. Его код можно посмотреть здесь.
В дальнейшем планируется все довести до "ума" и запустить в виде сервиса.