Как ботнеты прячутся под живых: fingerprinting и WebGL — разбор без иллюзий
Давайте поднимем логи и посмотрим правде в глаза: современный фрод редко палится пустым User-Agent. Он подменяет отпечаток на уровне JS-стека, Canvas, WebGL, аудио-API и шрифтов, собирая профиль, похожий на реальный десктоп/мобайл. Бот не обязан быть быстрым — ему достаточно быть консистентным.
Ключевой трюк — не «идеальный» fingerprint, а правдоподобная связка сигналов. Подделка одного параметра почти ничего не даёт, если рядом торчат несостыковки:
— WebGL renderer не совпадает с платформой и размерами экрана;
— Canvas шумит, но шум не стабилен между сессиями;
— timezone, locale и Accept-Language живут в разных мирах;
— pointer events идут с механической дискретизацией, хотя профиль якобы с тач-устройства.
В WebGL фроде часто палится не сам vendor, а поведение контекста: список extensions, precision, потеря/восстановление context, частота рендера, задержки при readPixels. Ботнеты эмулируют GPU, но забывают про латентность, thermal-throttling-следы и связку с navigator.hardwareConcurrency. Ботнеты эволюционируют, но паттерны их поведения остаются прежними.
Защита строится не на одном «супер-детекторе», а на корреляции: храните hash отпечатка, но отдельно — сырые признаки. Смотрите на дрейф fingerprint между кликами, на невозможные комбинации WebGL/UA/экран/ввод, на повторяемость ошибок рендера и на одинаковые тайминги в цепочке загрузки. Если отпечаток меняется чаще, чем сессия, перед вами не пользователь, а маскировка.
Вот технический разбор того, как именно уплывает ваш рекламный бюджет: бот может имитировать лицо, но не может долго скрывать физику устройства. Снимайте не «похожесть», а внутреннюю согласованность профиля — там фрод ломается быстрее всего.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Как ботнеты прячутся под живых: fingerprinting и WebGL — разбор без иллюзий
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.