Как ботнеты прячутся под “живых”: fingerprinting и WebGL-имитация без магии
Давайте поднимем логи и посмотрим правде в глаза: современный бот не обязан выглядеть как curl с пустым UA. Он собирает связку сигналов — canvas, WebGL vendor/renderer, AudioContext, timezone, screen metrics, fonts, media devices — и подгоняет их под ожидаемый профиль. Если брать только один признак, фрод проходит; если смотреть корреляции, начинается рваный синтетический шум.
Типовые маскировки:
— подмена WebGL renderer на популярные GPU-строки, но с несовместимыми шейдерами и precision;
— “человеческий” canvas-отпечаток, где шум одинаковый на сотнях сессий;
— стабильный fingerprint при меняющемся IP/ASN и наоборот;
— фальшивые timezone/locale, не бьющиеся с Accept-Language и географией сети.
Вот технический разбор того, как именно уплывает ваш рекламный бюджет: ботнеты эволюционируют, но паттерны их поведения остаются прежними. Настоящий браузер держит внутреннюю согласованность. У него WebGL-ответы, размер окна, DPI, набор шрифтов и поведение event loop складываются в один профиль. У скриптов-эмуляторов часто течёт одно и то же место: слишком идеальная энтропия, одинаковые паузы, нереалистичный порядок инициализации API.
Что фильтровать в первую очередь:
• несовпадение WebGL vendor/UA/OS;
• повтор fingerprint у разных IP в коротком окне;
• пустые или фиктивные mediaDevices при “полноценном” десктопе;
• аномалии в последовательности запросов к tracker: click → load → view без нормальной задержки.
Практика одна: не верьте одиночному отпечатку, стройте граф согласованности. Когда fingerprint, сетевой слой и тайминги начинают спорить между собой, это не “нестабильный пользователь”. Это бот, который переоделся в человека чуть лучше, чем ему позволил автор скрипта.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Как ботнеты прячутся под “живых”: fingerprinting и WebGL-имитация без магии
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.