A-Detector: un IDS basado en anomalías


Soy @alexfrancow en todas las redes sociales y este es un post resumiendo el trabajo que hice para el proyecto de fin de curso, el que quiera profundizar decir que tengo explicado lo que hace cada parte del código de la aplicación final en un jupyter notebook.

A-Detector es un software desarrollado para automatizar el análisis de anomalías de red en grandes datasets. Gracias a una serie de algoritmos, A-Detector puede detectar datos anómalos y mostrarlos en gráficos dinámicos.

Básicamente es capaz de automatizar el análisis de tráfico aprender de él y detectar el tráfico anómalo.

¿Cómo lo haría una persona?
 


Una persona abriría un .pcap, (el que se ve en la imagen de arriba) y claramente vería algo sospechoso: en menos de 1 segundo el destino ha recibido múltiples paquetes provenientes de la IP 192.168.60.6 por el protocolo SSH.

En este caso es fácil detectarlo, pero que pasaría si fuese un dataset muchísimo más grande, imaginaros 1 millón de paquetes, sería más complicado analizarlo.

(Podemos usar filtros y demás, peeeero somos muy vagos.)

¿Cómo lo hace A-Detector?

A-Detector hace por nosotros este trabajo, permitiéndonos así trabajar casi en tiempo real.

Mediante la librería PANDAS, que nos permite trabajar con tablas en Python y una serie de algoritmos de machine learning como pueden ser Isolation Forest y Escalado de variables, a-detector es capaz de hacer lo que haríamos nosotros analizando un dataset, pero de manera más eficiente.

Vamos por partes..

Importación de datos

Este es el primer paso para comenzar a jugar.

Básicamente se importa el .json recogido de nuestro Suricata, Snort..

Actualmente la aplicación tiene un módulo que permite subir un archivo .PCAP a la aplicación y analizarlo.

import pandas as pd
import numpy as np

df = pd.read_json('/home/alexfrancow/netflow.json')


Grupo de datos

En este punto, básicamente le pedimos a la aplicación que cuente los paquetes que tienen la misma IP y el mismo protocolo en un período de tiempo de 5 segundos.

Si tenemos la siguiente tabla:
 


Con el grupo de datos, la salida será la siguiente:

Normalización de datos

Para la normalización de datos he seguido el método de escalado de variables (Feature Scaling o MinMax Scaler): de esta manera cada entrada se normaliza entre unos límites definidos (el máximo y el mínimo de la variable).

Aplicamos la fórmula MinMax Scaler a la columna [‘count’] y guardamos el resultado en una nueva columna llamada [‘count_n’].


Algoritmo Isolation Forest

Isolation Forest es uno de los algoritmos que incorpora la librería scikits-learn.
IsolationForest 'aísla' las observaciones seleccionando aleatoriamente una característica y luego seleccionando aleatoriamente un valor dividido entre los valores máximo y mínimo de la característica seleccionada.



Vemos que el algoritmo ha encontrado un dato anómalo en la tabla y lo señala como -1.

Visualiza las anomalías

Los resultados de todos estos algoritmos se imprimirán en un mapa, para ofrecer una buena vista al usuario.


POC:


Guía de instalación

Probado en Ubuntu 16.04.3 - 18.04

Dependencias:

$ sudo apt install python3-venv tshark

Instalación

$ git clone https://github.com/alexfrancow/A-Detector.git
$ cd A-Detector
$ . venv/bin/activate
$ python run.py

Si os gusta, espero una ⭐️ en el github del proyecto ;):
https://github.com/alexfrancow/A-Detector

Para ver la documentación: https://adetector.github.io

Comentarios