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

мне нужно обработать сетевой трафик, захваченный с tcpdump. Чтение трафика не сложно, но что становится немного сложным, это определить, где есть "шипы" в трафике. Я в основном обеспокоен пакетами TCP SYN, и то, что я хочу сделать, это найти дни, когда происходит внезапный рост трафика для данного порта назначения. Есть довольно много данных для обработки (примерно один год).

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

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

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

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

avg = avg+0.96*(new-avg)

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

2 ответов


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

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


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

следующее одиночный пропуск IIR поляка фильтр:

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

значение k определяет постоянную времени и обычно близко к 1.0 (но

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