Light mode

Как находить аномалии в трафике с помощью ML

8 минут
  • #ML
  • #PTNAD

В 2023 году свет увидела новая фича PT Network Attack Discovery (PT NAD), реализованная на основе пользовательских правил профилирования. Под капотом у нее — машинное обучение. Ниже мы расскажем о том, как разрабатывали эту фичу, а именно: как создавали модель кластеризации и алгоритм поиска аномалий. Отметим, что наша модель отдельно обучается под каждый кейс ее использования. Но сначала небольшой экскурс в тему.

Задача выявления аномалий в сетевом трафике — одна из важнейших в области защиты информации. Разработано большое количество методов и правил обнаружения аномалий, однако большинство из них требуют высокоточной настройки, подбора параметров и плохо масштабируемы. Использование машинного обучения (machine learning, ML) для решения таких задач позволяет минимизировать ручную настройку и автоматически адаптировать PT NAD под конкретную инфраструктуру благодаря обобщающей способности моделей.

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

ML может подсветить отклонения в трафике, автоматизировать процесс принятия решений о наличии вредоносной активности.

Кейсы для правил профилирования

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

  • Аномально большой трафик к Dropbox, «Яндекс Диску» и т. п. — хакер крадет данные.
  • Аномально большой входящий трафик от определенного узла — может быть туннель из интернета к хосту в DMZ.
  • Превышение уникальных соединений в серверном сегменте — возможно, хакер исследует инфраструктуру.
  • Превышение количества уникальных dst между одним узлом и группой серверного сегмента — также кто-то исследует инфраструктуру.
  • Превышение количества соединений к базе данных — хакер крадет данные.

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

Как выглядят данные

В рамках каждого кейса рассматривается один признак (количество отправленных байт, уникальных соединений и т. д.) с группировкой по объекту (клиент, сервер, пара «клиент — сервер») или без группировки (сумма по всей сети) с агрегацией за какой-то выбранный временной интервал (в нашем случае за час). То есть наши данные — это временные ряды.

Аномалия для нас — это превышение определенного порога для одного или нескольких временных рядов на каком-то промежутке времени.

рисунок_1.png
Рисунок 1. Количество соединений с БД в час с группировкой по host_id. Единичная аномалия

Ограничения

Задача анализа временных рядов достаточно успешно решается с использованием методов машинного обучения. Но нужно понимать, что, когда мы говорим о применении какой-либо технологии, нужно учитывать контекст (условия), в котором она будет работать. При первичном анализе данных мы определили такие условия для нашего случая.

Много временных рядов. Как уже упоминалось выше, данные могут быть сгруппированы по host_id. Соответственно, максимальное количество временных рядов, которое мы можем наблюдать, будет равно количеству хостов в сети.

Нет заранее зафиксированных фильтров. Основное преимущество ППП для пользователей — гибкость в настройке фильтра. Однако для ML это является ограничением, так как мы заранее не знаем, на каких данных будет обучаться/работать модель.

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

Модели нужно уметь находить аномалии, даже если объекта (хоста) не было в обучении. Время от времени в сети появляются новые объекты, способные осуществлять вредоносную активность, на которую мы должны своевременно реагировать.

Подходы к обнаружению аномалий

Мы протестировали несколько методов.

Статистический подход. Большинство явлений, с которыми мы сталкиваемся в жизни, имеют нормальное распределение. Например, рост и вес человека. Если взять случайную выборку людей, то мы увидим, что лишь небольшой процент будет иметь экстремально высокий или низкий рост/вес, тогда как показатели большинства людей будут похожи и находиться в определенных рамках. Правило трех сигм утверждает, что 99,72% наблюдений будут находиться в рамках трех среднеквадратических отклонений от среднего по выборке. Это правило хорошо работает при достаточном объеме выборки и тогда, когда явление действительно имеет нормальное распределение. К сожалению, в нашем случае интервал, который мы можем взять для обучения, оказался недостаточным для того, чтобы распределение активности хостов в сети было похоже на нормальное.

Кластеризация временных рядов. После проведения разведочного анализа данных мы пришли к очевидному выводу, что можно выделить группы хостов со схожей активностью. Но как связать это с поиском аномалий?

Классические модели по анализу временных рядов. Работают только в случае одномерных временных рядов, нужно вручную тщательно настраивать параметры.

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

Алгоритмы на основе скользящего среднего. Дают неплохие результаты, но больше подходят в том случае, если есть тестовая выборка за какой-то промежуток времени. Мы же должны делать прогноз каждый час. И у нас есть всего одно агрегированное значение для каждого хоста за прошлый час. Но мы взяли эту идею за основу.

Кластеризация временных рядов

После проведенных экспериментов и тестирования мы пришли к основополагающему выводу:

Нужно искать аномалии, сравнивая текущую активность объекта с активностью других объектов внутри своего кластера.

Это привело нас обратно к кластеризации, но уже для поиска аномалий (см. рис. 2).

рисунок_2.png
Рисунок 2. Количество соединений с БД в час с группировкой по host_id. Различие в поведении хостов

У нас есть общие паттерны активности в рамках кластера для разных хостов. Это можно использовать для того, чтобы находить аномалии.

Кластеризация дает нам ряд преимуществ.

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

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

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

А что с минусами?

Во-первых, сложно контролировать качество кластеризации «на потоке». Кластеризация —алгоритм машинного обучения «без учителя». Это означает, что у нас нет разметки, нет правильного ответа на вопрос, в какой кластер какой объект надо отнести, что осложняет оценку качества работы алгоритма. Есть метрики, которые позволяют оценить качество кластеризации, но они также имеют ограничения.

Во-вторых, снижается производительность на больших объемах данных (более 100 тыс. объектов). Мы пока не работаем с такими большими сетями, что позволяет избежать потери производительности на потоке.

Признаки для кластеризации

Есть несколько подходов к кластеризации временных рядов.

Самое простое решение — кластеризовать «сырые» (необработанные) временные ряды. Но есть риск, что мы будем концентрироваться на незначительных отклонениях, так как «сырые» временные ряды часто зашумлены.

Второй подход — выделить различные признаки из временных рядов, в той или иной степени описывающие распределения. Мы остановились на нем.

Есть различные фреймворки, позволяющие получить все возможные признаки из временных рядов. Мы выбрали tsfresh. Рис. 3 показывает, как выглядят признаки, полученные с помощью tsfresh.

рисунок_3.png
Рисунок 3. Признаки, полученные из временных рядов с помощью tsfresh

Как работает модель. Обучение step-by-step

рисунок_4.png
Рисунок 4. Принципы работы ML-модели

Референсные значения

Референсные значения представляют собой верхние границы кластеров, на которые ориентируется алгоритм поиска аномалий. Это может быть максимальное значение на кластере, среднекластерное значение или нечто более сложное (например, средний максимум на кластере). В любом случае выбор референсного значения будет связан с преимуществами и ограничениями его использования. Например, если мы выбираем средний максимум, то можем обезопасить себя от влияния аномалий, которые могут попасть в обучающую выборку. Но при этом уменьшаем разнообразие данных. 

Алгоритм поиска аномалий (инференс)

Алгоритм определяет, присутствовал ли объект на этапе кластеризации, и, если он отсутствовал, относит его к кластеру с низкой активностью. Это позволяет не пропустить аномалию.

Результат работы алгоритма упрощенно показывает, во сколько раз текущее значение объекта превысило референсное значение кластера, к которому он относится.

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

Первые результаты и планы по развитию

За первые несколько месяцев работы модели задетектировали 10 — четыре сгенерированных и шесть реальных — аномалий, подтвержденных экспертами. Все они работают на потоке, есть возможность переобучения моделей по выбору пользователя, собирается телеметрия. 

Но мы не хотим останавливаться на достигнутом, поэтому в ближайшее время добавим следующие функции:

  • детектирование дрифта и автоматическое переобучение моделей;
  • режим дообучения моделей;
  • хранение признаков для обучения вместо агрегированных данных;
  • использование категориальных признаков.

Мы дěлаем Positive Research → для ИБ-экспертов, бизнеса и всех, кто интересуется ✽ {кибербезопасностью}