Как ботнеты маскируются под живых пользователей через Fingerprint и WebGL
Давайте поднимем логи и посмотрим правде в глаза: современный бот не палится одним сигналом. Он собирает валидный набор: UA, Canvas, WebGL, AudioContext, timezone, languages, screen metrics — и склеивает это в «человеческий» профиль. Проблема не в одном фингерпринте, а в их согласованности.
Что ломает легенду:
— WebGL vendor/renderer не бьются с UA и ОС
— Canvas стабилен между сессиями, но поведение мыши и тайминги пустые
— timezone не совпадает с IP-географией
— язык браузера один, а Accept-Language и клавиатурные паттерны другие
По WebGL чаще всего видно самое смешное: ботнеты подменяют только строки renderer/vendor, забывая про косвенные признаки. У настоящего клиента совпадают шрифты, DPR, размер viewport, список extensions и характер ошибок рендеринга. У фейка — «идеальная» картинка без микродефектов, словно железо родилось в лаборатории и никогда не обновляло драйверы. Ботнеты эволюционируют, но паттерны их поведения остаются прежними.
Рабочая фильтрация строится не на одном score, а на связке: стабильность fingerprint во времени, энтропия изменений, повторяемость WebGL-отпечатка по множеству IP, аномальная одинаковость canvas hash у разных устройств, плюс несостыковки в event timing. Если один и тот же «пользователь» приходит с разными сетями, но с тем же рендерером и одинаковой скоростью реакций — это не клиент, это скрипт с хорошей мимикрией.
Вот технический разбор того, как именно уплывает ваш рекламный бюджет: собирайте fingerprint не как идентификатор, а как граф согласованности. Один узел врет — это шум. Три узла врут синхронно — это ботнет.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Как ботнеты маскируются под живых пользователей через Fingerprint и WebGL
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.