2010-02-08 5 views
8

Me resulta necesario procesar el tráfico de red capturado con tcpdump. Leer el tráfico no es difícil, pero lo que se pone un poco complicado es detectar dónde hay "picos" en el tráfico. Me preocupan principalmente los paquetes TCP SYN y lo que quiero hacer es encontrar días en los que haya un aumento repentino en el tráfico de un puerto de destino determinado. Hay bastante información para procesar (aproximadamente un año).Algoritmo (s) para detectar anomalías ("picos") en los datos de tráfico

Lo que he intentado hasta ahora es utilizar una media móvil exponencial, esto fue lo suficientemente bueno como para permitirme obtener algunas medidas interesantes, pero comparar lo que he visto con fuentes de datos externas parece ser un poco agresivo en marcar cosas como anormales.

He considerado utilizar una combinación de la media móvil exponencial más datos históricos (posiblemente de 7 días en el pasado, pensando que debería haber un ciclo semanal de lo que estoy viendo), como algunos documentos que he La lectura parece haber logrado modelar el uso de los recursos de esa manera con buen éxito.

Entonces, ¿alguien sabe de un buen método o en algún lugar para leer este tipo de cosas?

El promedio móvil He estado usando apariencia más o menos así:

avg = avg+0.96*(new-avg) 

Con avg ser el EMA y new ser la nueva medida. He estado experimentando con los umbrales a usar, pero encontré que una combinación de "debe ser un factor dado más alto que el promedio antes de pesar el nuevo valor" y "debe ser al menos 3 más alto" para dar el resultado menos malo.

Respuesta

5

Esto ha sido ampliamente estudiado en la literatura de detección de intrusos. Este es un documento fundamental sobre el tema que muestra, entre otras cosas, cómo analizar los datos de tcpdump para obtener información relevante.

Este es el papel: http://www.usenix.org/publications/library/proceedings/sec98/full_papers/full_papers/lee/lee_html/lee.html aquí se utiliza el sistema de inducción de reglas DESTRIPADOR, supongo que se podría sustituir a la antigua algo más nuevo como http://www.newty.de/pnc2/ o http://www.data-miner.com/rik.html

+0

Lectura interesante, seguro. Por el momento, la detección de un aumento en los niveles de tráfico es suficiente para lo que necesito, pero ciertamente es algo a considerar para el futuro. – Vatine

4

Aplicaría dos filtros de paso bajo a los datos, uno con una constante de tiempo largo, T1, y uno con una constante de tiempo corto, T2. Luego miraría la diferencia de magnitud en la salida de estos dos filtros y cuando exceda un cierto umbral, K, entonces eso sería un pico. La parte más difícil es sintonizar T1, T2 y K para que no obtenga demasiados falsos positivos y no se pierda ninguna espiga pequeña.

El siguiente es un filtro de paso bajo de un solo polo IIR:

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

El valor de k determina la constante de tiempo y es generalmente de cerca de 1.0 (pero < 1,0 por supuesto).

Estoy sugiriendo que aplique dos filtros en paralelo, con diferentes constantes de tiempo, p. Ej. comience con decir k = 0.9 para uno (constante de tiempo corto) yk = 0.99 para el otro (constante de tiempo largo) y luego observe la diferencia de magnitud en sus salidas. La diferencia de magnitud será pequeña la mayor parte del tiempo, pero se agrandará cuando haya un pico.

+1

interesante. Como estoy haciendo un procesamiento fuera de línea, también debería ser relativamente fácil de hacer. ¿Crees que vale la pena experimentar con el tamaño del fragmento también (he intentado cada hora y todos los días en el pasado)? – Vatine

+0

Depende de si sus datos se muestrean regularmente. De lo contrario, es posible que desee recopilar datos en intervalos o fragmentos de igual duración o lo que sea que quiera llamarlos para obtener el efecto equivalente de un intervalo de muestreo fijo. –

+1

Los datos de tcpdump tienen una marca de tiempo que se puede suponer exacta al menos en resolución "por segundo", pero el intervalo para los datos entrantes es, bueno, no tan regular, siendo el tráfico de red y todo, así que supongo que binning/dividirlo en intervalos de tamaño fijo tiene sentido. – Vatine

Cuestiones relacionadas