Мультиуровневый анализ с поддержкой мета и мультианомалий

Suricata — это мощный движок IDS/IPS и сетевого мониторинга с открытым исходным кодом. Он может анализировать сетевой трафик в режиме реального времени и генерирует структурированные события в формате eve.json.

Однако при работе с большим потоком событий становится ясно: просто фиксировать отдельные аномалии недостаточно.

Аналитикам нужно видеть взаимосвязи, агрегированные отклонения и комплексное поведение сети.

Suricata и полезные статьи на Хабре

Если вы не знакомы с Suricata, рекомендую ознакомиться с отличными публикациями:

Snort и Suricata — простой путь к использованию IDPS: от установки на сервер до грамотной настройки

Полное руководство по Suricata: основы и важные команды

Snort или Suricata. Часть 1: выбираем бесплатную IDS/IPS для защиты корпоративной сети

Snort или Suricata. Часть 2: установка и первичная настройка Suricata

Snort или Suricata. Часть 3: защищаем офисную сеть

Suricata активно используется для мониторинга, IDS, IPS и протокольного анализа. Все события пишутся в файл eve.json — универсальный формат, содержащий поля timestamp, src_ip, event_type, flow, dns, tls, alert и т.д.

Принцип обработки событий

Основной идеей для разработки методов анализа было предположение, что в выходных логах suricata содержится гораздо больше информации чем выдно на первый взгляд. И мы использовали методы машинного обучения для ее получения.

В методе, который мы реализуем и тестируем сейчас, используется простой, но эффективный подход:

События из eve.json загружаются и распределяются по Redis-ключам в зависимости от типа события.

eve.json → парсер → Redis:
    flow → list "flow"
    dns  → list "dns"
    tls  → list "tls"
    http → list "http"

Каждый ключ в Redis содержит список событий соответствующего типа. Это позволяет разделить обработку и анализ по потокам.

Архитектура

Ниже представлена структурная схема всей системы:

Архитектура системы
Архитектура системы

Анализатор TLS и роль JA3 / JA3S

Для анализа TLS-потока был реализован модуль на Python с использованиемIsolationForest.

'sni_len' # длина SNI (Server Name Indication)

'version_len' # длина версии TLS

'ja3_len' # длина JA3 fingerprint

'ja3s_len' # длина JA3S fingerprint


Пример извлече ния признаков (python):

def extract_tls_features(events):

records = []

for event in events:

tls = event.get('tls', {})

record = {

'sni_len': len(tls.get('sni') or ''),

'version_len': len(tls.get('version') or ''),

'ja3_len': len(tls.get('ja3', {}).get('hash') or ''),

'ja3s_len': len(tls.get('ja3s', {}).get('hash') or '')

}

records.append(record)

return pd.DataFrame(records).fillna(0)


JA3 / JA3S — это сигнатуры TLS-сессий, полученные из параметров ClientHello и ServerHello.
Они не случайны, а воспроизводимы, и позволяют обнаруживать:

  • нестандартные клиенты (например, malware),

  • редкие серверные конфигурации,

  • попытки маскировки.

Анализаторы по другим потокам

Аналогичные модули реализованы для других типов событий:

  • flow: объём, направление, флаги

  • dns: длина запроса, коды ответов, типы записей

  • http: методы, длина URI, заголовки

Каждый из них использует те же принципы:
признаки → модель IsolationForest → Redis с пометкой anomaly: true/false.

Что такое мета-аномалия?

В предлагаемом подходе по определению аномалий в сетевом траффике мы вводим понятие мета-аномалии.

Мета-аномалия — это не просто отклонение в одном событии, а девиация в поведении всей системы.
Она обнаруживается на втором уровне анализа, поверх поточных моделей.

? Как это работает?

Каждый первичный модуль (flow, dns, http, tls) определяет аномалии на уровне отдельных событий с помощью своей модели (например, IsolationForest). Результаты этих моделей агрегируются во временные окна (например, 60 секунд) и используются как входные признаки для мета-модели.

Таким образом, формируется контекст системы в целом, а не только по одному потоку.

? Примеры агрегированных признаков (на каждый временной слот):

  • count_tls_anomalies_last_60s

  • count_http_anomalies_last_60s

  • count_flow_total_last_60s

  • unique_src_ips_last_60s

  • count_dns_events_last_60s

  • mean_packets_per_flow

  • rate_anomalies_total

Все эти метрики подаются в модель второго уровня — как правило, это IsolationForest или RandomForestClassifier.

? Обучение мета-модели

Мета-модель обучается на синтетических или реальных выборках, где:

  • вход — агрегированные числовые признаки по окну;

  • цель — бинарная метка: “поведение нормальное” или “аномальное”.

Обучение возможно даже без разметки, т.к. модели вроде IsolationForest работают в режиме поиска выбросов.

? Зачем это нужно?

  • Поведенческий анализ позволяет выявлять медленные, но системные отклонения;

  • Атакующий может действовать «по чуть-чуть» в каждом потоке, оставаясь ниже порога локальной аномалии;

  • Мета-анализ "видит" такие схемы за счёт агрегации на втором уровне.

? Результат

  • Если мета-модель классифицирует окно как “аномальное” →
    генерируется сигнал ?мета-аномалия

  • Это может отразиться в интерфейсе, попасть в журнал или спровоцировать алерт.

Что такое мультианомалия?

Мы также вводим термин мультианомалия.

Мультианомалия — это ситуация, когда в течение одного временного окна происходят аномалии в двух и более потоках событий.

Пример:
одновременно:

  • DNS-запрос к подозрительному домену,

  • TLS-сессия с редким JA3,

  • flow с аномально большим количеством байт.

➡ Такое событие классифицируется как мультианомалия уровня 3.

Уровни мультианомалий:

Уровень

Кол-во потоков

Символ

0

1

1

2

?

2

3

?

3

4

?

Пример графика мультианомалий

Совпадения потоков визуализируются во времени
Совпадения потоков визуализируются во времени

Дополнительные возможности

  • Веб-интерфейс на основе Plotly / Chart.js

  • Автоматическое обновление и фильтрация

  • Журнал мультианомалий с возможностью эскалации

  • Поддержка мультиязычности (русский/английский)

  • Расширение на другие источники: Zeek, Wazuh

  • Возможность интеграции с Kafka и SIEM

Заключение

Простого анализа отдельных событий уже недостаточно — особенно при распределённых атаках.
Сочетание:

  • анализа потоков,

  • поведенческой мета-модели,

  • и механизма мультианомалий —

позволяет более точно и уверенно выявлять реальные угрозы, а не просто одиночные всплески.

P.S.

Если вам интересна тема поведения в сетевой безопасности, или у вас есть опыт с Suricata, будет интересно обменяться идеями.

Дополнительные материалы (код, демо, тестовые данные) готовы по запросу.

Комментарии (0)