InfraGuard

Обнаружения + наборы правил по последовательностям JA3

Флагманский экран обнаружения — рассказывает о движках обнаружения (Kitsune, srct, nginx, JA3) и выводит наборы правил для аномалий из последовательностей JA3 с помощью детерминированной эвристики (infr_sec_ruleset).

Обзор — что делает экран

Security ▸ Detections (/security/detections) — флагманский экран обнаружения в InfraGuard. Он объединяет три вещи на одной странице:

  1. Рассказ об алгоритмах обнаружения — обучающие всплывающие подсказки объясняют, как каждый движок ловит угрозы (Kitsune ML · эвристики srct · nginx is_suspicious · JA3).
  2. Рассказ после обнаружения — показывает на реальных данных аномальные IP · подозрительные веб-запросы · историю запусков, которые каждый движок поймал в недавнем окне.
  3. ★ Наборы правил по последовательностям JA3 — детерминированная эвристика читает хронологическую последовательность отпечатков JA3 одного IP-источника и перечисляет его «непрерывное аномальное поведение» в виде профессиональных наборов правил, сохраняемых в infr_sec_ruleset.

Сбор и автоматическая блокировка уже работают на бэкенде (старый интерфейс stats-design показывал лишь таблицы межсетевого экрана и чёрного списка) — задача этого экрана в том, чтобы вывести эту скрытую телеметрию в виде достоверного рассказа.

Этот экран преимущественно на чтение + анализ по запросу. Сами детекторы (kts_tx · srct_tx · eve_ingest) — это коллекторы на Node, работающие под pm2 на целевых хостах; приложение лишь читает заполняемые ими таблицы. Само оно никогда не перехватывает трафик.

Путь повествования через LLM удалён 2026-09-04. Раньше анализ отправлял сводку последовательности в ИИ-адаптер и сохранял его свободный текст. Этому положили конец три измеренные проблемы: вывод LLM («ротация JA3») совпадал с тем, что уже давал расчёт отношения в три строки, при затратах около 9 100 токенов за прогон; свободный текст замораживал язык автора, из-за чего англоязычные сессии читали корейские карточки; а запись проставляла provider/model из адаптера даже на резервном пути, поэтому 10 из 13 сохранённых строк заявляли model=kimi-k2.6, будучи на деле выводом шаблона. Теперь анализ только эвристический — без внешних вызовов и без затрат на токены — а provider/model фиксируют то, что действительно выполнялось.


Когда использовать


Состав экрана

Полоса KPI

KPI Значение Источник
Аномалии ИИ Число аномалий Kitsune в выбранном окне подсчёт по kitsune_detail_log
Блокировки ИИ Из них с is_blocked=1 (порог + вето выполнены) kitsune_detail_log where is_blocked
Подозрительный веб-трафик Запросы nginx с is_suspicious=1 в окне подсчёт по nginx_meta_ct
Наборы правил Действующие наборы правил (status=active) infr_sec_ruleset

Первые два KPI названы «ИИ», потому что Kitsune действительно является автокодировщиком машинного обучения — эта подпись точна и сохраняется.

Панель алгоритмов обнаружения (обучающие подсказки)

Карточка каждого движка открывает обучающую подсказку с разделами принцип · за чем следит · советы. Текст хранится в статическом языковом пакете security.det.edu.*.

Руководство по развёртыванию pm2

Даёт команду и исходный код для развёртывания 5 коллекторов обнаружения в виде pm2-cron на целевом хосте (см. Источники данных · таблица pm2).

Журнал обнаружений и история запусков

Нарушители JA3 и наборы правил


Как пользоваться

1) Осмотреть состояние обнаружения

Верхний переключатель диапазона (1h / 6h / 24h) меняет окно наблюдения (по умолчанию 24h). KPI и журналы обнаружений пересчитываются для этого окна. Страница опрашивает сервер примерно раз в 30 с, сервис кеширует на 30 с.

Только список нарушителей всегда охватывает последние 6 часов, независимо от диапазона. Ротация JA3 накапливается за несколько часов, поэтому в коротком окне закономерность не проявится (согласовано с 360-минутным окном JA3 у автоблокировки).

2) Запустить анализ последовательности JA3 (★)

  1. Выберите IP из списка нарушителей (или придите по прямой ссылке из Overview/Threats) и нажмите [Анализ].
  2. Сервер извлекает последовательность TLS JA3 этого IP из suricata_tls_ct в хронологическом порядке (окно = операционная политика sec_ai_window_min, по умолчанию 60 мин · до 200 строк).
  3. Если длина последовательности меньше минимума (sec_ai_min_seq, по умолчанию 5), она пропускается с insufficient_sequence.
  4. Эвристика раскладывает последовательность на находки (см. таблицу правил ниже).
  5. Результат сохраняется как наборы правил, а список и воронка Overview обновляются немедленно.

Пример ответа:

{
  "ok": true,
  "provider": "heuristic",
  "model": null,
  "saved": 1,
  "seq_len": 37,
  "findings": [
    { "key": "ja3_rotation",
      "params": { "conns": 37, "variety": 34 },
      "category": "tls_anomaly",
      "severity": "crit", "action": "block", "confidence": 91 }
  ]
}

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

Эвристические правила

Находки строятся из статистики последовательности (rotation = ja3_variety / seq_len).

Условие Набор правил Категория Серьёзность Рекомендация Уверенность
variety ≥ 3 И rotation ≥ 0,5 Ротация JA3 (автоматизированный сканер/ботнет) tls_anomaly rotation≥0,9 → crit, иначе warn block 50 + round(rotation×45), максимум 95
Замечены чувствительные URL (.env·.git·wp-config…) Зондирование учётных данных/файлов конфигурации credential_access crit block 88
variety = 1 И conns ≥ 10 И sni_variety ≥ 4 Многоцелевое сканирование с единым JA3 scan warn observe 72
Ничего из перечисленного Базовая активность TLS other info observe 40

Чувствительные URL определяются регулярным выражением .env .git wp-config .aws /actuator phpunit /.. shell.php wp-login xmlrpc (по контексту nginx is_suspicious + suricata_http).

Категории, серьёзность и рекомендации проверяются по enum столбцов перед вставкой (recon · credential_access · exfil · bruteforce · c2 · tls_anomaly · scan · other / info · warn · crit / observe · block · isolate · report).

Формулировки наборов правил и языки

Находка сохраняется как идентификатор, а не как фраза. heuristicFindings() выдаёт {key, params}; строка хранит rule_key + params (миграция 000783), а формулировка применяется при чтении строки — на языке читателя.

Строки, созданные до 000783, сохраняют исходный текст. Миграция восстанавливает rule_key только там, где собственные данные строки воспроизводят прежний шаблон точно (никаких догадок); строки со свободным текстом, написанные старым путём через LLM, остаются замороженными, пока этот IP не будет проанализирован повторно и они не будут заменены.

3) Управление наборами правил

Действие Эффект
Активировать status=active (отражается в воронке Overview / рассказе о блокировках)
Отложить status=dismissed
Удалить Убирает строку

Повторный анализ заменяет только машинно выведенные наборы правил для этого IP (удаляет entity_type=ip, entity_key=ip, source=ai и создаёт заново) — написанные вручную наборы сохраняются.

Поле action в наборе правил — это рекомендация, а не команда. По нему ничего не срабатывает: автоблокировка вычисляет ротацию JA3 напрямую из suricata_tls_ct и никогда не читает infr_sec_ruleset. Набор правил с action=block ничего не блокирует — блокировка выполняется из Blocklist или планировщиком автоблокировки.

4) Накопление по расписанию (по желанию)

Команда infr:sec-analyze обходит главных нарушителей по JA3 и накапливает наборы правил. Это однократная команда, завершающаяся после выполнения, поэтому её безопасно ставить в расписание (это не демон).

# Обойти переключатель и выполнить один раз (отладка)
php artisan infr:sec-analyze --force

# Проанализировать один IP (переключатель не учитывается)
php artisan infr:sec-analyze --ip=203.0.113.10

5) Скопировать команды развёртывания pm2

Карточка pm2 предлагает [Скопировать команду] (строка запуска pm2), [Скопировать исходный код] (тело сниппета) и [Подставить значения экземпляра и скопировать] (замена токенов HOSTNAME/IP). Исходный код берётся из засеянного сниппета в Inventory ▸ Tools (infr_snippet).


Источники данных

Читаемые устаревшие таблицы (не изменять)

Таблица Назначение Питающий коллектор
kitsune_detail_log аномальный IP · anomaly_score · is_blocked kts_tx
kitsune_process_log история запусков Kitsune kts_tx
srct_process_log история запусков srct srct_tx
nginx_meta_ct подозрительные веб-запросы (is_suspicious) nginx_shipper/aggregator
suricata_tls_ct последовательность JA3 (ja3_hash · sni · version) eve_ingest
suricata_http_ct HTTP-контекст для анализа eve_ingest
blacklist_info результаты автоблокировки (справочно) kts_tx · srct_tx
ip_info_loop обогащение geo/ASN —

Новые таблицы, принадлежащие приложению

Коллекторы, разворачиваемые через pm2

key Питает Команда развёртывания (cron-restart)
eve_ingest suricata_*_ct pm2 start infr_eve_ingest.cjs --name infr-eve --cron-restart="0 0 * * 6"
kts_tx kitsune_*_log · blacklist_info pm2 start infr_kts_tx.cjs --name infr-kitsune --cron-restart="0 0 * * 2"
srct_tx srct_process_log · blacklist_info pm2 start infr_srct_tx.cjs --name infr-srct --cron-restart="0 0 * * 4"
sync_black ipset · iptables pm2 start infr_sync_black.mjs --name infr-syncblack --cron-restart="*/5 * * * *"
sync_firewall firewall_status pm2 start infr_sync_firewall.cjs --name infr-firewall --cron-restart="0 0 * * 0"

Сервисы и маршруты

Метод Маршрут
GET /security/detections (index)
GET /security/detections/live (опрос)
POST /security/detections/analyze (анализ)
POST /security/detections/ruleset/save
POST /security/detections/ruleset/delete

Доступ

Операция Условие
Просмотр экрана Доступ к ролевой области Security (min_req 2) — demo (1) вообще не видит область безопасности; staff (5) · admin (10) могут просматривать
Анализ / сохранение·удаление набора правил user_level ≥ 2 (canWrite) + аудит в infr_audit_log

Устранение неполадок и FAQ

Анализ пропущен с insufficient_sequence — последовательность этого IP в suricata_tls_ct короче sec_ai_min_seq (по умолчанию 5). Расширьте окно (sec_ai_window_min, по умолчанию 60 мин) или выберите более активный IP из 6-часового окна списка нарушителей.


Связанное

탐지 · AI JA3 시퀀스 분석
탐지 · AI JA3 시퀀스 분석