🧪 Модульные тесты детектора ботов

Каждый параметр - отдельный тест. Кластеризация по категориям.

На основе реального кода Яндекса (analytics.*.js)

11
Кластеров
55
Тестов
100%
Покрытие
33
Параметров

🖱️ Кластер 1: Клики (40% веса)

Анализ скорости, регулярности и точности кликов мышью

🖱️ Кластер 2: Движения мыши (25% веса)

Анализ траекторий, количества движений и паттернов мыши

📜 Кластер 3: Скроллинг (15% веса)

Анализ плавности, скорости и паттернов скроллинга

📱 Кластер 4: Touch события (20% веса, только мобильные)

Проверка свайпов, мультитач жестов и характеристик касаний

⌨️ Кластер 5: Клавиатура (10% веса)

Анализ скорости печати, ошибок и паттернов ввода

🌐 Кластер 6: Браузер и окружение (19% веса)

Проверка User-Agent, WebDriver, Canvas/WebGL fingerprints
🔍
User-Agent ✅ РЕАЛЬНЫЙ
Проверка на bot UA. Python/Scrapy/Selenium = +15% к score
UA Check Вес: 15%
🍎
Browser/OS Detection ✅ РЕАЛЬНЫЙ
Детальное определение браузера (Safari, Chrome) и ОС (iOS, Android, macOS). Проверка соответствия параметров
Safari/iOS Вес: 5%
🎭
WebDriver флаг ✅ РЕАЛЬНЫЙ
navigator.webdriver. true = Selenium/Puppeteer. +10% к score
WebDriver Вес: 10%
🎨
Canvas Fingerprint ✅ РЕАЛЬНЫЙ
Уникальность отпечатка. Одинаковый = бот. +10% к score
Canvas Hash Вес: 10%
🎮
WebGL Renderer ✅ РЕАЛЬНЫЙ
GPU модель. SwiftShader = headless. +10% к score
WebGL Вес: 10%
🔌
Plugins & Languages ✅ РЕАЛЬНЫЙ
navigator.plugins.length. 0 = подозрительно. +5% к score
Plugins Вес: 5%
👻
Headless детектор ✅ РЕАЛЬНЫЙ
Комплекс проверок на headless Chrome/Firefox
Headless Вес: 15%
🔋
Battery API ⚠️ ПРЕДПОЛОЖЕНИЕ
Проверка наличия Battery API. Мобильный UA без Battery API = подозрительно
getBattery Вес: 3%
🔐
Permissions API ✅ РЕАЛЬНЫЙ
Проверка доступности Permissions API. Headless браузеры часто не поддерживают
Permissions Вес: 5%
🔊
AudioContext API ✅ РЕАЛЬНЫЙ
Проверка наличия AudioContext. Headless браузеры часто не поддерживают Web Audio API
AudioContext Вес: 5%
🎵
Audio Fingerprint ✅ РЕАЛЬНЫЙ
Генерация уникального Audio fingerprint через Web Audio API. Одинаковый = бот
FingerprintJS Вес: 10%
🔍
Assistive/Language/Fonts ⚠️ ПРЕДПОЛОЖЕНИЕ
Проверка assistive technologies, языковых настроек и доступных системных шрифтов для fingerprinting
Accessibility Вес: 3%
🍪
Storage Availability ✅ РЕАЛЬНЫЙ
Проверка доступности Cookie, LocalStorage, SessionStorage и согласованности данных (yandexuid)
Cookies/Storage Вес: 8%
⚙️
CPU Factor ✅ РЕАЛЬНЫЙ
Проверка CPU характеристик (hardwareConcurrency, deviceMemory). Параметр cpf в Metrika
CPU Вес: 4%

⏰ Кластер 7: Временные паттерны (10% веса)

Анализ idle времени, длительности сессии и ритма действий

🏠 Кластер 8: Realty Tools ⭐ НОВОЕ

Новые инструменты детекции, найденные на Яндекс.Недвижимость

🔐 Кластер 10: SmartCaptcha Tools ⭐ НОВОЕ

Новые инструменты детекции, найденные при анализе Yandex SmartCaptcha

📊 Кластер 11: Monitoring System Tools ⭐ НОВОЕ

Инструменты мониторинга и детекции из системы static-mon.yandex.net

🎯 Дополнительные тесты

Комплексные и специализированные проверки

🎓 Комплексные тесты

Полные сценарии проверки всех параметров сразу

📚 Справка: Серверные механизмы детекции

Эти механизмы работают на стороне сервера и не могут быть протестированы в браузере. Но важно понимать, как они работают для полной картины детекции ботов. Описаны 4 серверных механизма: IP Type Detection, ML Features Analysis, Blocked Resources Analysis, Network Fingerprinting.

🌐 IP Type Detection (Определение типа IP-адреса)

Как это работает: Яндекс анализирует IP-адрес пользователя и определяет его тип через:

1. WHOIS база данных

Проверяется организация-владелец IP:

  • Residential IP - домашний провайдер (Ростелеком, МТС) → ✅ Без риска
  • Datacenter IP - хостинг (Hetzner, DigitalOcean) → ⚠️ +30% к suspicion score
  • VPN IP - VPN провайдер (NordVPN, ExpressVPN) → 🔶 +20% к suspicion score
  • Proxy IP - прокси сервис (Bright Data, Oxylabs) → 🚨 +50% к suspicion score
  • Tor IP - выходной узел Tor → 🚨 +80% к suspicion score

2. HTTP заголовки

Проверяются заголовки, указывающие на прокси:

X-Forwarded-For: реальный IP клиента
X-Real-IP: реальный IP
Via: прокси-цепочка

3. Blacklist базы данных

Проверка IP в черных списках (Spamhaus, AbuseIPDB, Tor Exit Nodes)

4. Поведенческий анализ

Анализ паттернов использования IP:

  • • Количество уникальных пользователей с одного IP
  • • Количество запросов за час
  • • История блокировок этого IP

Действия системы:

  • Residential IP: нормальная работа, 60 req/min
  • Datacenter/VPN: строгий rate limit (10 req/min), CAPTCHA при suspicion > 0.7
  • Proxy/Tor: очень строгий лимит (5 req/min), часто блокировка

⚠️ Почему нет клиентского теста: Проверка IP происходит на сервере через базы данных WHOIS и blacklist. Браузер не имеет доступа к информации о типе IP-адреса.

🤖 ML Features Analysis (Машинное обучение для анализа паттернов)

Как это работает: Яндекс использует ML-модель, которая анализирует более 100 параметров и сравнивает поведение с известными паттернами ботов и людей.

1. Поведенческие паттерны

ML анализирует комбинации параметров:

// Человек
behaviorPattern: "human-like"
- Неравномерные интервалы между действиями
- Естественные траектории мыши
- Присутствуют ошибки и исправления

// Бот
behaviorPattern: "bot-like"
- Идеально регулярные интервалы
- Прямые линии движения мыши
- Нет ошибок, идеальная точность

2. Статистические метрики

Вычисляются статистические характеристики:

  • Mean (среднее): среднее значение параметров
  • Variance (дисперсия): разброс значений
  • Distribution (распределение): закон распределения данных

Пример: У человека интервалы между кликами: [850ms, 1200ms, 980ms] - большая дисперсия ✅
У бота: [500ms, 500ms, 500ms] - нулевая дисперсия 🚨

3. Сравнение с базой данных

ML сравнивает поведение с известными примерами:

similarity: {
  toKnownBots: 0.15,      // 15% похоже на известных ботов
  toKnownHumans: 0.85     // 85% похоже на людей ✅
}

Если похожесть на ботов > 0.7 → подозрительно
Если похожесть на людей > 0.8 → безопасно

4. Обнаружение аномалий

ML находит необычные комбинации параметров:

  • • Мобильный User-Agent + Desktop разрешение экрана
  • • Много кликов + нет движений мыши
  • • Идеально ровные интервалы + отсутствие ошибок

Результат анализа:

  • 85% пользователей проходят автоматически (без капчи)
  • 15% пользователей видят капчу для дополнительной проверки
  • Точность детекции: >95%

⚠️ Почему нет клиентского теста: ML-модель работает на сервере Яндекса. Она анализирует комбинации всех параметров и сравнивает с обученной моделью. Клиент не может воспроизвести эту логику.

🛡️ Blocked Resources Analysis (Анализ заблокированных ресурсов)

Как это работает: Monitoring System (static-mon.yandex.net) обнаруживает блокировщики рекламы и анализирует, какие ресурсы были заблокированы. Это помогает косвенно определить ботов.

1. Детекция блокировщиков

Система определяет установленные блокировщики рекламы:

AdBlock
AdGuard
uBlock Origin
Ghostery

Всего поддерживается 12+ блокировщиков, включая Brave Browser, Firefox Tracking Protection, Kaspersky.

2. Типы заблокированных ресурсов

  • ELEMENT (0): Заблокированные DOM элементы
    HTML элементы, CSS стили, Style Sheets
  • NETWORK (1): Заблокированные сетевые запросы
    URL, HTTP метод, статус, время загрузки
  • IN_IFRAME (2): Заблокированные iframe
    URL iframe, размер, видимость
  • INSTANT (3): Мгновенная детекция
    Обнаружено через специфичные признаки

3. Как это используется для детекции ботов

Система анализирует паттерны блокировки:

  • Аномальные паттерны: Боты могут использовать специфичные блокировщики
  • Несоответствие устройства: Мобильный UA + блокировщик для десктопа
  • Паттерны использования: Всегда блокируются одни и те же ресурсы

4. Структура данных

Отправляется на сервер в виде события:

{
  "blocker": "ADBLOCK",
  "element": "network resource (GET) https://example.com",
  "blockedResource": {
    "type": "NETWORK",
    "url": "https://example.com",
    "status": 0,
    "method": "GET"
  },
  "labels": {
    "browser": "Chrome",
    "device": "desktop",
    "blocker": "ADBLOCK"
  }
}

Косвенная детекция ботов:

Blocked Resources Analysis НЕ является прямым механизмом детекции ботов, но используется косвенно:

  • • Анализ аномальных паттернов блокировки
  • • Несоответствие технических параметров (UA vs блокировщик)
  • • Детекция специфичных блокировщиков для автоматизации

⚠️ Почему нет клиентского теста: Это косвенная серверная аналитика. Система собирает данные о заблокированных ресурсах и анализирует паттерны на сервере. Отдельный клиентский тест не требуется, так как детекция блокировщиков уже покрыта в других тестах.

🌐 Network Fingerprinting (Сетевой отпечаток)

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

1. TCP/IP Fingerprinting

Анализ параметров TCP/IP стека, уникальных для каждой ОС:

  • TCP Window Size: размер окна передачи
  • TCP Options: порядок и набор опций TCP
  • Initial Sequence Number: алгоритм генерации ISN
  • Timestamp: использование временных меток
  • MSS (Maximum Segment Size): максимальный размер сегмента
// Пример TCP fingerprint
{
  windowSize: 65535,
  mss: 1460,
  options: ["MSS", "SACK", "Timestamp", "Window Scale"],
  ttl: 64,
  flags: "SYN",
  os: "Linux/Windows/macOS/iOS"  // Определяется по комбинации параметров
}

2. TLS Fingerprinting

Анализ параметров TLS handshake для идентификации клиента:

  • Cipher Suites: порядок поддерживаемых шифров
  • TLS Extensions: набор и порядок расширений
  • TLS Version: поддерживаемые версии TLS/SSL
  • SNI (Server Name Indication): имя сервера
  • Elliptic Curves: поддерживаемые кривые
// Пример TLS fingerprint
{
  tlsVersion: "1.3",
  cipherSuites: ["TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256"],
  extensions: ["server_name", "supported_groups", "key_share"],
  browser: "Chrome 120 / Firefox 121 / Safari 17"  // Определяется по комбинации
}

3. HTTP/2 Fingerprinting

Анализ параметров HTTP/2 соединения:

  • SETTINGS Frame: параметры соединения
  • WINDOW_UPDATE: размер окна потока
  • HEADERS: порядок и формат заголовков
  • Priority: приоритеты потоков

4. Network Timing Patterns

Анализ временных характеристик сетевого трафика:

  • RTT (Round Trip Time): время отклика
  • Jitter: вариация задержки
  • Packet Timing: интервалы между пакетами
  • Connection Patterns: паттерны установки соединений

Пример: Боты из датацентров часто имеют стабильный низкий RTT (5-20ms), в то время как домашние пользователи имеют более высокий и переменный RTT (30-200ms).

5. Как используется для детекции ботов

Network fingerprinting помогает определить:

  • Эмуляторы: необычные комбинации TCP/TLS параметров
  • VPN/Proxy: несоответствие TLS fingerprint и IP геолокации
  • Автоматизация: одинаковый fingerprint от разных IP (ферма ботов)
  • Headless браузеры: отсутствие специфичных TLS расширений

Применимость для детекции:

Network fingerprinting используется на сервере для дополнительной проверки:

  • • Комбинация TCP/TLS fingerprint + IP Type Detection → более точная детекция
  • • Анализ timing patterns → выявление автоматизации
  • • Одинаковый fingerprint от разных IP → вероятна ферма ботов
  • • Несоответствие fingerprint и User-Agent → подозрительно

⚠️ Почему нет клиентского теста: Network fingerprinting анализируется на сервере при установке соединения. Браузер не имеет доступа к информации о TCP/IP параметрах или TLS handshake на уровне, достаточном для полного анализа. Некоторые параметры (RTT, Connection Type через Network Information API) доступны клиенту и уже покрыты тестом test-connection-type.html.

💡 Вывод:

Все четыре механизма (IP Type Detection, ML Features Analysis, Blocked Resources Analysis, Network Fingerprinting) работают на стороне сервера и интегрируются с клиентскими данными. Они дополняют клиентские тесты, но сами не могут быть протестированы в браузере, так как требуют серверных баз данных, ML-моделей и аналитики.

Все клиентские параметры, которые собираются для этих механизмов, уже покрыты существующими тестами (например, RTT и Connection Type через test-connection-type.html).

📊 Общая статистика

20%
Клики
25%
Мышь
15%
Скролл
20%
Touch
10%
Клавиатура
15%
Браузер
10%
Время

Всего: 56 модульных теста (28 базовых + 5 Realty + 1 Battery + 6 Browser/OS/Permissions/Audio/AudioFingerprint/Mouse/CPU + 4 Search + 2 SmartCaptcha + 4 Monitoring System + 5 новых: Request Chain, Calibration, Assistive, CPU Factor, Device Sensors)

Создано на основе анализа систем Яндекса

6 декабря 2024

📊 Рейтинг кластеров по важности в детекции ботов

Общий вес каждого кластера в системе детекции (на основе суммы весов всех тестов внутри кластера)
Место Кластер 💻 Десктоп 📱 Мобильный Тестов Описание Приоритет
🥇 1 📱 Кластер 4: Touch события 16.7% 5 Только мобильные устройства (нет мыши, используется touchmove вместо mousemove) КРИТИЧЕСКИЙ
🥈 2 🖱️ Кластер 1: Клики 28.4% 25.0% 4 Скорость, регулярность кликов (мышь на десктопе, touch на мобильных) КРИТИЧЕСКИЙ
🥉 3 🖱️ Кластер 2: Движения мыши 17.7% 5 Только десктоп (на мобильных нет мыши - используется touchmove) ВЫСОКИЙ
4 📜 Кластер 3: Скроллинг 10.6% 12.5% 2 Плавность и паттерны скроллинга СРЕДНИЙ
5 🌐 Кластер 6: Браузер 10.6% 12.5% 13 Окружение, WebDriver, Canvas, WebGL, Plugins, Storage ВЫСОКИЙ
6 ⌨️ Кластер 5: Клавиатура 7.1% 8.3% 3 Скорость набора, ошибки, интервалы СРЕДНИЙ
7 ⏰ Кластер 7: Временные паттерны 7.1% 8.3% 3 Idle время, время на странице, ритм СРЕДНИЙ
8 🏠 Кластер 8: Realty Tools 7.1% 6.7% 5 Connection Type, Network Fingerprint, WebView ВЫСОКИЙ
9 🔍 Кластер 9: Search Tools 5.7% 5.0% 6 Element Coordinates, Viewport, Timing, Calibration СРЕДНИЙ
10 🔐 Кластер 10: SmartCaptcha 3.5% 3.3% 2 Interval Regularity, CAPTCHA Solve Time СРЕДНИЙ
11 📊 Кластер 11: Monitoring System 2.1% 1.7% 4 Pixel Ratio, Online Status, Iframe, Smart TV НИЗКИЙ
ИТОГО (нормализовано) 100.0% 100.0% 54 *Проценты нормализованы до 100% для каждого типа устройства

📌 Методика расчёта:

  • 💻 Десктоп: базовые веса кластеров 1,2,3,5,6,7 (40%+25%+15%+10%+15%+10% = 115%) + кластеры 8-11 (10%+8%+5%+3% = 26%) = 141% → нормализовано до 100% (коэффициент 0.709). Кластер 2 (Движения мыши) применяется, Кластер 4 (Touch) исключён.
  • 📱 Мобильный: базовые веса кластеров 1,3,4,5,6,7 (30%+15%+20%+10%+15%+10% = 100%) + кластеры 8-11 (8%+6%+4%+2% = 20%) = 120% → нормализовано до 100% (коэффициент 0.833). Кластер 2 (Движения мыши) ИСКЛЮЧЁН (нет мыши на мобильных - движения фиксируются через touchmove в Кластере 4), Кластер 1 (Клики) = 30%→25.0% (touch-клики через touchstart/touchend), Кластер 4 (Touch) = 20%→16.7% (включает touchmove вместо mousemove).
  • ⚠️ Важно: На мобильных устройствах нет мыши, поэтому кластер "Движения мыши" не применим. Вместо этого критически важен кластер "Touch события" (touchmove, touchstart, touchend). Движения пальца фиксируются через touchmove, а не mousemove.
  • Кластеры 8-11: веса оценены на основе суммы весов тестов внутри каждого кластера (стр. 786-1041 index.html) и пропорционально распределены в общей нормализации
  • Формула нормализации: нормализованный_вес = исходный_вес × (100 / сумма_всех_весов)

📚 Источники данных о весах кластеров:

JS Файл / Документ URL / Страница Вес / Описание
browser-light.browser.core_marketfront_CaptchaService.*.js market.yandex.ru Формула suspicionScore с весами: клики 20%, регулярность 15%, мышь 15%, скролл 10%, UA 15%, JS 10%, idle 10%, IP 5%
browser-light.browser.analytics.*.js market.yandex.ru Baobab аналитика: структура событий, пороги детекции, веса поведенческих параметров
default.index.client.*.js realty.yandex.ru Gate API Event Logger: веса для Connection Type (cn), WebView (wv), Screen Keyboard (sk), Network Fingerprint
static-mon.yandex.net/static/main.js translate.yandex.ru, pogoda.yandex.ru, images.yandex.ru Monitoring System: веса для Pixel Ratio, Online Status, Iframe Detection, Smart TV, ad blocker detection
mc.yandex.ru/metrika/watch.js ya.ru/search, dzen.ru Yandex Metrika: веса для Element Coordinates, Viewport Consistency, Timing Analysis, Color Scheme, Calibration System
smartcaptcha.yandexcloud.net/demo smartcaptcha.yandexcloud.net SmartCaptcha: веса для Interval Regularity (stdDev), CAPTCHA Solve Time, поведенческие параметры решения капчи
index.html Заголовки кластеров (строки 224-718) Базовые веса кластеров: Кластер 1 (40%), Кластер 2 (25%), Кластер 3 (15%), Кластер 4 (20%), Кластер 5 (10%), Кластер 6 (15%), Кластер 7 (10%)
bot-vs-human-detection-table.md Строки 5-16, 310-322 Формула расчёта suspicionScore с указанием весов отдельных параметров (20%, 15%, 15%, 10%, 15%, 10%, 10%, 5%)
MODULAR-TESTS-STRUCTURE.md Строки 592-601 Сводная таблица кластеров с указанием общего веса: Кластер 1 (40%), Кластер 2 (25%), Кластер 3 (15%), Кластер 4 (20%), Кластер 5 (10%), Кластер 6 (15%), Кластер 7 (10%)
QUICK-bot-detection-cheatsheet.md Строки 58-94 Формула быстрого расчёта с коэффициентами для различных параметров детекции

📌 Примечание: Все JS файлы были проанализированы через DevTools Network Inspector, декомпиляцию минифицированного кода и поиск по содержимому. Подробная информация о методах анализа и найденных фрагментах кода находится в файле JS-FILES-SOURCES.md.

📌 Важные замечания:

  • 💻 Десктоп: Кластер 1 (Клики) - самый критичный (28.4%), Кластер 2 (Движения мыши) - второй по важности (17.7%). Кластер 4 (Touch) не применяется - на десктопе нет touch-событий.
  • 📱 Мобильный: Кластер 1 (Клики) - самый критичный (25.0%), Кластер 4 (Touch события) - второй по важности (16.7%). Кластер 2 (Движения мыши) исключён полностью - на мобильных нет мыши, движения пальца отслеживаются через touchmove в Кластере 4.
  • ⚠️ Ключевое различие: На мобильных устройствах события mousemove НЕ генерируются (нет мыши). Вместо этого движения пальца фиксируются через touchmove событие, которое входит в Кластер 4 (Touch события). Поэтому Кластер 2 (Движения мыши) не применим на мобильных и исключён из рейтинга.
  • Кластер 6 (Браузер) - имеет наибольшее количество тестов (13), проверяет множество параметров окружения, одинаково важен на обоих типах устройств
  • Кластеры 8-11 - новые инструменты, найденные при анализе реальных сервисов Яндекса (Realty, Search, SmartCaptcha, Monitoring)
  • Проценты нормализованы до 100% для каждого типа устройства отдельно, учитывая применимость кластеров (мышь только на десктопе, touch только на мобильных)

🔒 Доступ к тестам

Введите пароль для входа

Неверный пароль!