Скликали рекламу на 23 100 рублей за 8 дней. Как это происходит в реальности?

Меня зовут Максим Кульгин, и моя компания clickfraud занимается защитой от скликивания контекстной рекламы в «Яндекс.Директе» и Google Ads. Летом к нам обратился клиент, который захотел перед тем, как подключить защиту, проверить есть ли у него скликивание рекламы. Всегда ведь любопытно разобраться изнутри, что происходит на своем сайте и сколько там «паразитов». Делимся тем, что нашли.

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

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

Скликали рекламу на 23 100 рублей за 8 дней. Как это происходит в реальности?

Что тут видно? На сайт клиента было сделано 3 захода (визита) с одного IP- адреса (вот этот адрес 178.214.248.145) в один день (8 июня 2021 года). При этом каждый визит пользователя содержал одно действие (Actions, по сути один клик) и длительность первых двух визитов была порядка 6 секунд, третий 22 секунды (все визиты короткие). Источник определялся как город Уфа, оператор связи ufanet.ru. Все эти три визита были сделаны по контекстной рекламе Яндекс.Директ (поле referrername, видны utm метки, частично мы их удалили для конфиденциальности).

Почему именно это привлекло наше внимание и легло в основу публикации? Дело в том, что наша система защиты от скликивания считает «цифровой отпечаток» браузера, с которого был выполнен заход. И в данном случае он одинаковый (поле FingerPrint на изображении выше). Вот он:

48e3923c1519e3ac85e4859b542c13c5

Почему это важно? Если говорить сильно упрощенно, то «цифровой отпечаток» браузера — это механизм, используемый для отслеживания уникальности посетителей. Посетителям присваивается уникальный идентификатор («отпечаток», последовательность цифр и символов). При генерации идентификатора используется много информации о настройках и возможностях браузера посетителя.

Согласно результатам исследований, уникальность «отпечатка» браузера очень высока. Если говорить о статистике, то только раз на ~300 000 случаев случается полное совпадение отпечатков браузеров двух разных пользователей. Исходя из этого, мы можем с очень высокой вероятностью предположить, что по рекламе, в нашем рассматриваемом кейсе, кликал один и тот же пользователь (дальше будем называть его бот, хотя допускаем, что это был человек, которые вручную скликивал рекламу).

Есть ли способы генерировать на каждый визит уникальный «отпечаток» браузера? Да, но существует несколько ограничивающих факторов. Первый — не может быть бесконечное количество уникальных отпечатков даже при их генерации (иными словами всегда будет выборка из некой базы, конечное число), второе — это требует определенных усилий от кликера. Если вы посмотрите как работают программы по скликиванию то заметите, что это далеко не rocket science (ниже видео с youtube, если редакция оставит, то многое станет понятно). Есть расширения для браузеров, которые позволяют подделывать отпечаток, но при их обнаружении можно сразу вывешивать «красный флаг», т.к. 99% обычных пользователей вашего сайта эти расширения не нужны.

Посмотрите статью ниже, где мы как раз проводили анализ уникальности «цифровых отпечатков»:

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

1. Файлы cookie: генерация «отпечатков» браузера не полагается на файлы cookie для создания уникального идентификатора. Таким образом, хотя их отключение может обеспечить некоторую степень конфиденциальности бота, оно не влияет на возможности получения «отпечатков».

2. Режим Инкогнито: этот метод неэффективен для предотвращения получения «отпечатков» браузера, так как доступны другие параметры, помимо истории просмотров, которые могут использоваться для идентификации посетителей. Кому любопытно, может посмотреть вот это исследование, которое демонстрирует возможности определения режима Инкогнито. Согласитесь, очень странно, если вдруг пользователь будет кликать по рекламе и заходить на сайт в режиме Инкогнито!

3. VPN подключение эффективно для сокрытия истории просмотров посетителя или сокрытия реального IP -адреса и геолокации пользователя. Однако это не очень эффективно для предотвращения получения «отпечатков», поскольку многие скрипты для их генерации не используют IP-адрес в качестве основного источника.

Есть несколько механизмов усложнения снятия «отпечатков», но и они не являются надежными. Некоторые браузеры предлагают встроенные функции; например, Firefox дает пользователям возможность блокировать сторонние запросы к сайтам, которые генерируют «отпечатки». Другой возможный способ уменьшить количество доступных источников — полностью отключить функциональные возможности, такие как canvas HTML или аудиоконтент, которые обычно используются для генерации «отпечатков». Однако многие сайты не будут правильно загружаться без этих технологий, и это позволит быстро выявить бота.

Возвращаемся к анализу, что получается? Бот в этот день кликнул три раза на рекламу в Яндекс.Директ, у него был в каждом случае один IP — адрес, один отпечаток браузера и… разные Яндекс.ClientID (поле YandexClientID на изображении выше). Обратите внимание на поле reCaptchaOdd с значением 0.1, мы чуть позже обязательно вернемся к этому, т.к. данное значение на 99% подтверждает наше подозрение, что это бот.

Что такое Яндекс.ClientID?

ClientID — это идентификатор, который Яндекс.Метрика автоматически присваивает каждому уникальному посетителю сайта. Идентификатор создается по сути случайным образом и определяет браузер, в котором посетитель просматривает ваш сайт. Если бот заходил на один и тот же сайт, например, с помощью Google Chrome и Opera, в Яндекс.Метрике будет зафиксировано два разных ClientID.

В нашем случае Яндекс.Метрика выдавала каждый раз разные ClientID одному пользователю-боту. Почему так? Чтобы ответить на этот вопрос, мы провели простой эксперимент и вы можете легко повторить его сами. Наш сотрудник зашел на один и тот же сайт напрямую три раза с одного ПК (рабочий ПК). Первые два раза он зашел с одного браузера с интервалом в один час, третий раз — он открыл сайт с браузером в режиме «Инкогнито».

Скликали рекламу на 23 100 рублей за 8 дней. Как это происходит в реальности?

Яндекс.Метрика корректно определила второй заход (мы специально выждали час, чтобы закрыть сессию) и присвоила одинаковые ClientID. А в третий раз (13.43), из-за режима «Инкогнито», был сгенерирован новый ClientID и для Яндекс.Метрика это по сути новый пользователь.

Возвращаясь к кейсу. С очень высокой вероятностью можно предположить, что скликивание осуществлялось каждый раз с очисткой cookies браузера, чтобы Яндекс.Метрика вновь идентифицировала пользователя как нового и соответственно присваивала новые clientID. Зачем? Чтобы данные клики учитывались как действительные и средства с бюджета Яндекс.Директ клиента списывались. По этому же принципу работают простые программы для скликивания (видео выше).

Давайте посмотрим, как часто пользователь с указанным «цифровым отпечатком» заходил на данный сайт вообще (по рекламе и нет). Посмотрите на изображение ниже. Это данные за один день. Видно, что заходы происходят постоянно.

Скликали рекламу на 23 100 рублей за 8 дней. Как это происходит в реальности?

Какие характеристики у этих визитов? Всегда одно действие (клик), 3-5 секунд на сайте и разные IP- адреса. Обратите внимание, что в некоторых случаях Яндекс не присвоил клиенту ClientID. Это может быть в нескольких случаях. Первый — бот слишком быстро ушел с сайта и счетчик Яндекс.Метрика просто не запустился, второй — Яндекс сам определил визит как бота и посчитал клик «недействительным». К сожалению, таких визитов мало. В основном каждый визит получает новый ClientID, при одинаковом «цифровом отпечатке». Только не пишите в комментариях, что Яндекс сам скликивает рекламу это, простите, полная ерунда. Ровно как и то, что Яндекс не борется с ботами. Просто основная задача Яндекса — продажа рекламы, в не борьба с кликфродом. Если посмотреть на Google то, несмотря на его колоссальные возможности, процветают сторонние сервисы, которые обеспечивают дополнительную защиту.

Как бот менял свой IP- адрес? Скорее всего он использовал прокси- сервера. Мы не будем писать детально что такое прокси, информации масса и я думаю читатель уже знает этот термин. Сейчас важно понимать, что все клики были по рекламе (тип источника campaign, что означает любой «платный источник»). Очевидно, что имеет место быть яростное скликивание рекламы.

Как часто этот бот менял IP- адреса при кликах на рекламу сайта? Мы сделали простую выборку, см. изображение ниже. Видно, что каждый IP- адрес использовался несколько раз (Visitcount) и легко заметить, что некоторые IP- адреса явно брались с одного пула (например 176.222.*.* или 176.214.*.*). Не так уж сложно купить пул адресов.

Скликали рекламу на 23 100 рублей за 8 дней. Как это происходит в реальности?

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

Если мы возьмем адрес 178.214.248.145 (см. изображение выше — это адрес бота), то можно легко проверить его на чистоту с помощью любого сервиса. Вы можете сделать это сами, перейдя по ссылке: https://dnschecker.org/ip-blacklist-checker.ph? query=178.214.248.145 (учтите, что через некоторое время адрес может уйти из черных списков, поэтому важно делать проверку оперативно). Данный адрес был найден в нескольких списках.

Что мы делаем еще? Мы проверяем визит с помощью Google reCaptcha v3, чтобы получить дополнительную оценку качества сессии. Если мы вернемся на изображения выше, то увидим, что для всех визитов ботов коэффициент reCapcha был равен 0.1 (очень высоко вероятно это бот в терминологии Google), а визит нашего сотрудника при проверке расчета Яндекс.ClientID дал коэффициент 0.9 (очень высоко вероятно это человек). Следом у нас работает алгоритм машинного обучения (если быть конкретнее, алгоритм К-ближайшее), который кластеризует все визиты, чтобы находить тех ботов, который стараются мимикрировать под обычных пользователей. В статье ниже мы подробно рассказываем про нейронную сеть.

Возвращаясь к поведению данного скликивающего бота. Мы посчитали, сколько раз вообще данный бот менял свое окружение так, что Яндекс.Метрика определяла его каждый раз как нового — 462 раза!

Скликали рекламу на 23 100 рублей за 8 дней. Как это происходит в реальности?

Почему мы решили, что это точно бот, ведь наверняка сказать невозможно? Это так, никогда нет абсолютно точной вероятности, что мы заблокировали именно бота. Но мы можем судить по подмене ClientID, по одинаковому цифровому «отпечатку» Fingerprint (который вкупе с другими данными только подтверждает нашу гипотезу). Такое поведение не похоже на действие реального пользователя. Также, чтобы убедиться, можно дополнительно посмотреть через Вебвизор в Яндекс.Метрика — часто действия ботов отличаются однообразием и линейностью движений мышкой, в то время как у реального пользователя они более хаотичны. Однако не всегда наши клиенты готовы предоставить доступ к данному инструменту нашим аналитикам, поэтому приходится полагаться на те данные, которые мы собираем сами в представленных в этом обзоре таблицах.

Данный клиент подключился к нашей системе 2 июня 2021. За 8 первых дней июня было сделано порядка 462 клика по рекламе. Мы не знаем стоимость одного клика, предложим, что она находится в пределах 50 руб. К сожалению, у нас нет доступа к Яндекс.Метрика/Яндекс.Директ, чтобы точно проверить какое количество кликов было признано Яндексом как недействительные, но из нашего опыта анализа других клиентов знаем, что при наличии Яндекс.ClientID в 80-90% случаев клики засчитываются как действительные и деньги списываются.

Нехитрая математика дает нам оценку потерь: 8 дней, 462 кликов * 50 руб. = 23 100 руб. (не стал делать поправку на 80% вероятности засчитать клики, т.к. предложенная стоимость клика в 50 руб. кажется не очень высокой для сферы деятельности бизнеса).

В заключении хочется чтобы был happy end. Клиент с нами, упомянутый бот был еще несколько дней и после блокировки (отключили ему показ рекламы) не появлялся (разумеется, мы анализируем по «отпечатку»). Но откровенно говоря защита от кликфрода — это как борьба «брони» и «снаряда». Бот, например, мог изменить свое окружение и появится с новым «отпечатком» браузера. В данном кейсе бот «туповат» и скорее всего ботовод не занимался сложными манипуляциями, а просто переключился на контекстную рекламу другой компании.

2525
70 комментариев

Тут интересно другое, яндексу доказали? Деньги вернули?
Если нет, то смысл в этом?

3
Ответить

Яндекс же заинтересован в скликивании :)
Есть страшилка, что в подвалах Яндекса и Гугла есть секретные лаборатории, занимающиеся скликиванием, которое не отличишь от поведения реальных пользователей :-/
Они просто обязаны быть! %)
Как и лаборатории по созданию вирусов в подвалах антивирусных компаний

3
Ответить

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

Ответить

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

2
Ответить

У нас была похожая ситуация, прогер добавил в код поле имя и фамилия но в форме их не отобразил, когда эти поля заполняются ipадрес отправляется в бан и данные не отправляются

4
Ответить

Enterprise recapcha вас спасёт :)

Ответить

Сейчас проще заплатить блогеру, а не Я и G, где рекламная свалка, это вроде того, когда вы не замечаете рекламу на уличных носителях, потому что её перебор

3
Ответить