Descripción
Este proyecto emplea técnicas de aprendizaje automático para clasificar ataques de red como escaneo de puertos, denegación de servicio (DoS) y malware. Los datos de entrada están en formato Netflow V9, un formato estándar utilizado por Cisco.
La clasificación se realiza mediante los siguientes modelos:
- K-Vecinos más Cercanos (KNN)
- Máquina de Vectores de Soporte (SVC) con núcleo RBF (Función de Base Radial)
- Pipeline con Análisis de Componentes Principales (PCA) y Máquina de Vectores de Soporte (SVC)
- Clasificador Bagging (basado en SVC con núcleo RBF)
- Clasificador de Bosque Aleatorio
- Clasificador de Árboles Extra
- Red Neuronal (MLPClassifier)
El proyecto está implementado en Python utilizando Jupyter Notebook y varias bibliotecas populares, incluyendo UMAP, Pandas, NumPy, Scikit-Learn, Matplotlib, y Seaborn.
Notebook
El notebook está accesible aquí para visualización directa en GitHub. Alternativamente, puede usar NbViewer para acceder al notebook mediante este enlace.
Presentación
La presentación en Keynote en formato PDF está accesible aquí.
Conjuntos de datos
El conjunto de datos utilizado para este proyecto está en formato NetFlow V9 (documentado por Cisco, disponible aquí). Consiste en dos archivos: train_net.csv y test_net.csv.
El archivo train_net.csv proporciona información sobre cuándo es probable que ocurra una alerta en particular, mientras que el archivo test_net.csv se usa únicamente para pruebas y no contiene una variable objetivo para evaluar el rendimiento del modelo.
El conjunto de datos es bastante grande:
train_net.csv: aproximadamente 4 millones de paquetes (de 14.066 hosts de red únicos)
test_net.csv: aproximadamente 2 millones de paquetes (de 6.186 hosts de red únicos)
Características del conjunto de datos
- FLOW_ID: Un identificador único para el flujo.
- PROTOCOL_MAP: Una cadena que representa el protocolo utilizado en el flujo; los valores posibles incluyen "ICMP", "TCP", "UDP", "IGMP", "GRE", "ESP", "AH", "EIGRP", "OSPF", "PIM", "IPV6-ICMP", "IPV6-IP", "IPV6-ROUTE", "IPV6-FRAG", "IPV6-NONXT", "IPV6-OPTS", y otros.
- L4_SRC_PORT: El número de puerto de origen en el flujo; los valores posibles van de 0 a 65535.
- IPV4_SRC_ADDR: La dirección IPv4 de origen en el flujo, representada como una cadena en notación decimal punteada (por ejemplo, "192.168.0.1").
- L4_DST_PORT: El número de puerto de destino en el flujo; los valores posibles van de 0 a 65535.
- IPV4_DST_ADDR: La dirección IPv4 de destino en el flujo, representada como una cadena en notación decimal punteada (por ejemplo, "192.168.0.2").
- FIRST_SWITCHED: El momento en que comenzó el flujo, medido en segundos desde la época (1 de enero de 1970).
- FLOW_DURATION_MILLISECONDS: La duración del flujo en milisegundos.
- LAST_SWITCHED: El momento en que terminó el flujo, medido en segundos desde la época (1 de enero de 1970).
- PROTOCOL: El protocolo utilizado en el flujo; los valores posibles incluyen 1 (ICMP), 6 (TCP), 17 (UDP), y otros.
- TCP_FLAGS: Las banderas TCP establecidas en el flujo, representadas como una cadena binaria (por ejemplo, "100101").
- TCP_WIN_MAX_IN: El tamaño máximo de ventana anunciada (en bytes) para el tráfico entrante.
- TCP_WIN_MAX_OUT: El tamaño máximo de ventana anunciada (en bytes) para el tráfico saliente.
- TCP_WIN_MIN_IN: El tamaño mínimo de ventana anunciada (en bytes) para el tráfico entrante.
- TCP_WIN_MIN_OUT: El tamaño mínimo de ventana anunciada (en bytes) para el tráfico saliente.
- TCP_WIN_MSS_IN: El tamaño máximo de segmento (en bytes) para el tráfico entrante.
- TCP_WIN_SCALE_IN: El factor de escala de ventana para el tráfico entrante.
- TCP_WIN_SCALE_OUT: El factor de escala de ventana para el tráfico saliente.
- SRC_TOS: El valor de Tipo de Servicio (ToS) para la dirección IP de origen.
- DST_TOS: El valor de Tipo de Servicio (ToS) para la dirección IP de destino.
- TOTAL_FLOWS_EXP: El número total de flujos esperados.
- : La longitud mínima (en bytes) de los paquetes IP en el flujo.
Autores del conjunto de datos
Maria-Elena Mihailescu, Darius Mihai, Mihai Carabas, Mikolaj Komisarek, Marek Pawlicki, Witold Holubowicz, Rafal Kozik:
The Proposition and Evaluation of the RoEduNet-SIMARGL2021 Network Intrusion Detection Dataset. Sensors 21(13): 4319 (2021)
Enlace de Kaggle