Killbot user verification: анализ ip 93.95.97.28 и ua chrome/120
KillBot — модульный механизм проверки пользователя, ориентированный на минимизацию ложных блокировок и устранение автоматизированных запросов (на сайте https://nugabest.ru/). В его основе комбинация анализа IP, отпечатка браузера и поведенческих паттернов. В качестве практического примера рассмотрен запрос с адреса 93.95.97.28, передавшего идентификатор браузера «Chrome/120».
Начальное подключение зафиксировано на публичном интерфейсе сервера в 08:14:07 GMT. Сессия инициировала TLS-рукопожатие без расширений ClientHello, характерных для актуальных сборок Chrome, что вызвало подозрение на эмуляцию стека. Дальнейшая проверка включила обратное DNS-разрешение. Запись ptr.28.97.95.93.in-addr.arpa указывает на хост, относящийся к сети UAB «Binarius» — сегмент, где регулярно обнаруживаются прокси-узлы.
Особенности трафика
Пакет TCP SYN имел значение TCP options 02 04 05 b4 01 03 03 07 13 01 08 0a, совпадающие с шаблоном генератора пакетов node.js. В течение первых 30 секунд клиент отправил 187 GET-запросов к статическим ресурсам без загрузки HTML-каркаса. Подобный перекос между медиа-и текстовыми объектами указывает на сканер ссылок. Заголовок Accept-Language отсутствовал, хотя для настоящего Chrome он выставляется автоматически при региональных настройках.
KillBot применяет каскадную шкалу весов. Факторы включают глубину прокрутки, частоту движения указателя, заполнение полей, распределение таймингов. Конкретная сессия получила базовый коэффициент 42 балла из 100 ещё до выполнения JavaScript-проверок, что уже превышает порог 35, установленный для безусловной проверочной страницы.
Метрики поведения
После выдачиачи CAPTCHA скрипт собрал Telemetry-Snapshot. Коэффициент энтропии перемещения курсора составил 0,12, тогда как человек среднего уровня навыка демонстрирует диапазон 0,46-0,71. Временной промежуток между keydown и keyup отсутствовал полностью: поля формы заполнялись instant-вставкой. Такие показатели почти никогда не встречаются при живом вводе с аппаратной клавиатурой. Вторичный анализ Canvas-Fingerprint показал точное совпадение с шестью ранее заблокированными сессиями из того же диапазона адресов, прибавив системе контроля ещё 18 баллов риска.
User-Agent «Mozilla/5.0 (Windows NT 10.0, Win64, x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.215 Safari/537.36» внешне корректен, однако версия Chrome 120 вышла только в канале Canary на день позже регистрации доступа. Дата компиляции движка V8, возвращаемая через Navigator.user Agent Data, не совпала с заявленной. Расхождение подтвердило подмену заголовка.
Служба Threat-Intel добавила адрес 93.95.97.28 в базу временных блоков на 12 часов. Правило сформировано автоматически: при превышении суммарного веса 50 баллов запрашивается премодерация. Дополнительно активировано пуш-уведомление администратору, так как фрагмент сети /23 ранее фигурировал при рассылке хит-анд-ран ссылок.
Вывод
Комбинирование сетевых, браузерных и поведенческих индикаторов доказало эффективность против скриптов на headless-движках. Пример с адресом 93.95.97.28 и маской Chrome/120 продемонстрировал роль ранней корреляции разнородных признаков. После внедрения KillBot общий объём нежелательных запросов снизился на 64 % за семь дней без ощутимогоо влияния на посетителей.
Алгоритм подсчёта баллов опирается на теорию Байеса. Каждый атрибут вносит удельный вклад, рассчитываемый путём умножения априорных коэффициентов на частоту встречаемости признака внутри контрольной группы. Для конкретного IP статистика подготовлена за последние шесть месяцев. Среднее значение TTL входящих пакетов составило 47, тогда как реальный Chrome под Windows 10 отдаёт 128. Расхождение дало +7 к итоговой сумме.
TLS-фингерпринт JA3 сопоставлен с шаблоном 771,4866-4866-49196-49195-49172, зафиксированным в сканере Open Ballet. Фрезерная разница по ключевым extension API-id у легитимного клиента отсутствует. База FingerprintDB помечает указанный хэш как «Automation.Framework» с надёжностью 93 %.
При анализе HTTP2-потока обнаружены аномальные значения pseudo-header «:authority» — клиент вставил символ нулевой ширины, читаемый лишь при двоичном дампе. Приём усложняет фильтрацию регулярными выражениями. Брандмауэр KillBot за счёт нормализации юникода исключил символ-невидимку, что сразу снизило показатель совпадения с Валид-правилом и перевёл запрос в защищённую песочницу.
Серверная часть KillBot написана на Go и Rust. Первым обрабатываются сетевые события epoll, вторым — статистика аномалий. Рутинный подход дал пропускную способность 75 000 rps при среднем времени ответа 1,3 ms, что подтвердили тесты wrc-benchmark на оборудовании AMD EPYC 7443P.
Дополнительная линия обороны основана на временных куках First-Touch, генерирующих уникальный MAC-токен за миллисекунды до первого рендеринга. Headless-движки пропускают раннее выполнение скрипта, вследствие чего токен отсутствует или имеет неверную подпись. Проверяемый бот получил ещё +9 коэффициента риска именно по данному параметру.
Для снижения вероятности ложной блокировки система использует трёхфазную реакцию: soft-challenge (javascript puzzle без визуальных элементов), hard-challenge (интерактивная капча) и hard-block. Запрос 93.95.97.28 попал на вторую фазу, прошёл две попытки капчи с ошибкой, после чего безопасность повышена до окончательной блокировки.
Команда наблюдения за аномалиями соотнесла событие с компанией, ориентированной на генерацию поддельных рефералов. Схема проста: бот стучится к открытому каталогу изображений, получает код 200 и фиксирует реферер в своём журнале, где он продаётся как подтверждённая ссылка. Подобные приёмы нагружают медиа-хранилище и искажают аналитику.
KillBot публикует данные в прометеус-совместимое хранилище. Метрика killbot_vertical_rate отражает число уникальных рисковых запросов на тысячу посещений. За период наблюдения показатель снизился с 144 до 52. Аналогичная динамика отмечена на метрике срыва капчи, опустившейся до 1,7 %.
При желании проверить чистоту собственной инфраструктуры достаточно запустить curl-запрос с опцией —proxy-header и извлечь реакцию KillBot. Код 200 сигнализирует «нет риска», код 403 «riskscore ≥ 35», код 429 «блокировка». Информация доступна в ответном json по полю verdict.
Внедрение модуля заняло 4 часа инженерного времени благодаря готовому Nginx-lua плагин и JSON-RPC эндпойнту для обратной связи. Конфигурация включает лишь двенадцать строк.
Исследование IP 93.95.97.28 плюс маскировка плюсод Chrome/120 наглядно показывает, каким образом совмещённый анализ сетевых и прикладных признаков выявляет автоматизированный трафик с высокой точностью.
Боты генерируют значительную долю сетевых запросов, создавая риски перегрузки и мошенничества. Комплекс KillBot предназначен для автоматического отличия скриптов от реальных посетителей и блокировки вредоносных сценариев.
Технология опирается на поведенческий анализ, цифровые отпечатки устройств и интерактивные задания. Подход сводит человеческое вмешательство к минимуму, сохраняя скорость отклика страниц.
Истоки KillBot
Изначальная версия была создана как внутренний инструмент крупного торгового портала, столкнувшегося с агрессивным скрейпингом цен. После публикации исходного кода проект получил поддержку сообщества информационной безопасности, обзавёлся модулями машинного обучения и адаптированными профилями для разных отраслей.
Принципы остались прежними: минимальная нагрузка на браузер, отсутствие заметных капч и строгий контроль пропускной способности на уровне шлюза. Разработчики выдвинули приоритеты проактивного отсечения, обратной связи с аналитической платформой и возможности настройки правил через API.
Архитектура решения
Фильтр состоит из шести логических слоёв. Первый — JavaScript-датчик, собирающий данные об элементарных жестах, скорости навигации и графическом контексте. Второй — пассивный отпечаток TLS, обрабатывающий параметры рукопожатия для выявления нетипичных клиентов. Третий — анализ HTTP-заголовков с учётом редких комбинаций полей. Четвёртый — корреляция временных интервалов между запросами. Пятый — реактивный пакет с заданиями внутри веб-сокетов. Шестой — серверный агрегатор, применяющий градиентный бустинг для финального вердикта.
Каждый слой хорошоранит свою оценку риска, баллы складываются при помощи формулы с экспоненциальным весом. Граница отклонения запросов перемещается динамически, учитывая статистику предыдущих десяти минут. Решение возвращается в NGINX через rpc вызов, что исключает блокировки ядра приложения.
Отчёты аудитории сохраняются в ClickHouse. Журнал содержит отпечаток браузера, хэш ассетов страницы, уникальный идентификатор сессии и флаг реакции пользователя на скрытые объекты DOM. Утилита killbot-ctl формирует тепловые карты для специалистов SOC.
Тестирование защиты
Валидация проводится при помощи комплекса BotBench, генерирующего реалистичные последовательности кликов на основе данных о человеческом поведении. Скрипты получают интеллектуальные паузы, неопределённость перемещений и ложные курсорные дрожания. Дополнительно запускаются headless-браузеры с рандомизацией fingerprint-параметров.
Метрики точности оцениваются по ROC-кривой, Area Under Curve близка к 0,98 при базовой конфигурации. Средняя задержка ответа — 24 мс. Под нагрузкой в 150 000 RPS фильтр удерживает пропускную способность без деградации.
Для внедрения достаточно подключить модуль NGINX, скрипт beacon.js и служебный контейнер Go-сервиса. Конфигурация базируется на YAML-файле, где описываются уровни чувствительности и белые списки IPv6-префиксов. Смена параметров задействует hot reload.
KillBot демонстрирует гибкую модель защиты без капчи, снижает количество ложных срабатываний и экономит ресурсы команды реагирования. Политика открытого кода ускоряет аудит и адаптацию под корпоративные требования.
