Killbot: доспехи против скриптов

KillBot — комплексная система верификации, предназначенная для отсечения автоматических запросов без ущерба для опыта реальных пользователей. Архитектура построена на принципах многоуровневой оценки, где каждый слой обогащает информацию о сессии. Подробнее: https://fabryka.ru/rulonnye-shtory/

Первый уровень выполняется прямо в браузере. Лёгкий JavaScript-агент собирает телеметрию: время отрисовки, частоту событий ввода, характеристики графического адаптера, распределение таймингов сети. Передаваемые метаданные подписываются пользовательским публичным ключом, что затрудняет подмену.

KillBot

Каскад фильтров

Полученный набор признаков проверяется каскадом фильтров на сервере. Сначала поступает синхронная проверка регулярных выражений против известных сигнатур curl, headless-браузеров и прокси-цепочек. Следующий фильтр рассчитывает энтропию набора заголовков HTTP. Дисбаланс свидетельствует о неестественном источнике запроса.

Третий фильтр внеочередной активируется при подозрении на скриптовую активность. Он использует трассировку движений курсора и позиционирует невидимые honeypot-поля внутри форм. Бот их заполняет механически и мгновенно проходит в чёрный список.

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

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

При накоплении достаточного числа очков риска инициируется challenge-ответ. Человеку нужно определить силуэт объекта в WebGL-сцене, тогде headless-браузер падает из-за отсутствия аппаратного контекста. Шифр задания генерируется динамически, исключая повтор.

Динамическая капча

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

Сервис интегрируется через REST-эндпоинт либо reverse-proxy-модуль Nginx. Передача данных шифруется AES-256-GCM, а солидные аудиты подтверждают соответствие GDP. Время обработки запроса не превосходит 8 мс при пиковой нагрузке 120 k rps.

Параллельно ведётся теневой режим. Решения системы логируются, но на пользователя не влияют, что даёт возможность настроить пороги без ущерба для конверсии.

KillBot помогает командам сократить расходы на инфраструктуру, минимизировать фрод, освободить каналы поддержки от жалоб на ложные блокировки. Гибкая схема лицензирования охватывает SaaS и on-premise развёртывания.

Каждый компонент тестируется в изолированной среде, снапшоты собираются в рантайме, а отчёты об ошибках поступают напрямую в трекер безопасности. Такой цикл DevSecOps исключает задержки при выходе патчей.

Финальная метрика — 99,87 % точности в валидации реальных посетителей при 0,04 % ложно-положительных отклонений. Числа подтверждены независимой лабораторией Q-Lab.

KillBot работает как многоуровневый фильтр, отделяющий реальных посетителей от скриптов-нарушителей. Принцип основан на проверке браузерных возможностей, поведенческой аналитике и быстром обмене телеметрией между серверами сети.

Первый уровень — быстрая JavaScript-валидация. Сценарий проверяет наличие Canvas, WebGL, Touch-событий и других признаков полноценного движка. Банальный curl или headless-браузер без эмуляции особенностей падает уже здесь.

Особенности архитектуры

Второй уровень построен вокруг временных меток. KillBot вычисляет латентность между запросами, просматривает интервалы движения курсора, анализирует ритм смены фокуса вкладок. Автомат, посылающий равномерный поток HTTP-пакетов, демонстрирует чересчур стабильный паттерн, что приводится к числовому вектору и сравнивается с эталонным распределением Кольмогорова.

Третий уровень использует ML-движок. Вектор признаков состоит из 60+ полей: глубина прокрутки, отношение кликов к скроллу, порядок загрузки шрифтов, набор заголовков Accept. Обучение проходит на датасете публичных лейблов reCAPTCHA v3 и внутренних логов. Градиентный бустинг обновляется ежедневно, что снижает устаревание модели.

Методы детектирования

Дополнительную линию обороны даёт серверный анализ сигнатур. Проверяются ASN, редкие префиксы IPv6, скорость изменения User-Agent. В игру вступает DNSBL-провайдер, отдающий хеш-очередь подозрительных адресов. При совпадении KillBot отдаёт пустую страницу с кодом 451 либо подменяет контент honeypot-скриптом, который собирает расширенную телеметрию и отправляет её в центральный коллектор.

JavaScript-ловушки включают невидимые поля форм. Браузер вставляет туда токен, подписанный приватным ключом ECC-P256. Наличие поддельного токена мгновенно сигнализирует о вмешательстве прокси-фреймворка. Обход требует полноценного движка Chromium с доступом к SubtleCrypto, что значительно поднимает стоимость атаки.

Фильтр ложных срабатываний

KillBot хранит счёт репутации в Redis-кластерe. Для свежего IP он стартует с 0. При спорных признаках добавляется дробное значение, отнимается при подтверждённых человеческих действиях: выделении текста, случайном зуме, хаотичном движении мыши. Порог блокировки смещается автоматически, если сайт испытывает пиковую нагрузку, благодаря чему нейра-ворота не закрывают путь живому трафику.

Рассмотрен и юридический аспект. Система не пишет куки с PII-данными, а ID визита образуется хешированием IP+UA+Salt. После 30 дней данные удаляются планировщиком cron-job, аудит проходит раз в квартал.

Для админа предусмотрена панель на Vue 3. Там выводится пирог трафика с разбивкой «человек/бот», список последних блокировок, лог интеграции с Cloudflare Turnstile, а также веб-сокет-вкладка, где в ре-тайме стримятся подозрительные запросы.

Чистый API REST позволяет внедрить KillBot в Nginx, Node.js, Go-сервис. Достаточно настроить обратный прокси и передавать заголовок X-Killbot-Score. При значении ≥0.7 приложение отвечает статусом 403, при <0.3 — пропускает без капчи. Серый диапазон уводится на page-challenge с Web Assembly-скриптом, требующим расшифровать кроссворд SHA256, что для браузера занимает 2-3 с, а для headless-бота с ограниченным инференсом GPU превращаеттся в минуты.

Система поддерживает мультиязычность уведомлений, логирование в ELK, Prometheus-метрики и Slack-webhook для критических событий. Благодаря модульной структуре любой компонент отключается флагом ENV, что упрощает A/B-тесты.

KillBot снижает накрутку кликов, защищает формы от спама, экономит ресурсы сервера и одновременно оставляет пользовательский путь бесшовным. При грамотном развёртывании сокращение паразитного трафика достигает 92 %. В диджитал-бюджете это эквивалентно десяткам тысяч долларов в год.