Алгоритм (ы) для обнаружения аномалий ("всплесков") в данных трафика - PullRequest
8 голосов
/ 08 февраля 2010

Мне нужно обрабатывать сетевой трафик, захваченный с помощью tcpdump. Чтение трафика не сложно, но то, что становится немного сложнее, - это обнаружение «всплесков» трафика. В основном меня интересуют пакеты TCP SYN, и я хочу найти дни, когда трафик для данного порта назначения внезапно увеличивается. Требуется обработать довольно много данных (примерно за год).

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

Я подумал об использовании комбинации экспоненциальной скользящей средней и исторических данных (возможно, за 7 дней в прошлом, думая, что должен быть недельный цикл с тем, что я вижу), поскольку некоторые статьи, которые я прочитал похоже, с таким успехом смоделировали использование ресурсов таким способом.

Итак, кто-нибудь знает хороший метод или куда-нибудь пойти и почитать об этом?

Скользящая средняя, ​​которую я использовал, выглядит примерно так:

avg = avg+0.96*(new-avg)

С avg - EMA, а new - новая мера. Я экспериментировал с тем, какие пороги использовать, но обнаружил, что комбинация «должен быть заданным фактором выше среднего значения до взвешивания нового значения в» и «должна быть как минимум на 3 выше», чтобы дать наименее плохой результат.

Ответы [ 2 ]

5 голосов
/ 08 февраля 2010

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

Это статья: http://www.usenix.org/publications/library/proceedings/sec98/full_papers/full_papers/lee/lee_html/lee.html здесь они используют индукционную систему правил RIPPER, я думаю, вы могли бы заменить эту старую на более новую, такую ​​как http://www.newty.de/pnc2/ или http://www.data miner.com/rik.html

4 голосов
/ 08 февраля 2010

Я бы применил к данным два фильтра нижних частот, один с большой постоянной времени, T1, и один с короткой постоянной времени, T2. Затем вы бы посмотрели на разность величин на выходе этих двух фильтров, и когда она превысит определенный порог, K, тогда это будет скачок. Сложнее всего настроить T1, T2 и K, чтобы вы не получали слишком много ложных срабатываний и не пропускали небольшие всплески.

Ниже приведен однополюсный фильтр низких частот IIR:

new = k * old + (1 - k) * new

Значение k определяет постоянную времени и обычно близко к 1,0 (но, конечно, <1,0). </p>

Я предлагаю вам применять два таких фильтра параллельно, с разными постоянными времени, например начните с, скажем, k = 0,9 для одного (короткая постоянная времени) и k = 0,99 для другого (длинная постоянная времени), а затем посмотрите на разницу величин в их выходах. Разница в величине будет в большинстве случаев небольшой, но она станет большой при пике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...