Détection d'attaques réseau à l'aide de l'apprentissage automatique
Description
Ce projet exploite des techniques d'apprentissage automatique pour classer les attaques réseau telles que l'analyse de ports, le déni de service (DoS) et les logiciels malveillants. Les données d'entrée sont au format Netflow V9, un format standard utilisé par Cisco.
La classification est effectuée à l'aide des modèles suivants :
- K-Nearest Neighbors (KNN)
- Support Vector Machine Classifier (SVC) avec noyau RBF (Radial Basis Function)
- Pipeline avec analyse en composantes principales (PCA) et Support Vector Machine Classifier (SVC)
- Bagging Classifier (basé sur SVC avec noyau RBF)
- Random Forest Classifier
- Extra Trees Classifier
- Réseau de neurones (MLPClassifier)
Le projet est implémenté en Python à l'aide de Jupyter Notebook et de plusieurs bibliothèques populaires, notamment UMAP, Pandas, NumPy, Scikit-Learn, Matplotlib et Seaborn.
Notebook
Le notebook est accessible ici pour un affichage direct sur GitHub. Vous pouvez également utiliser NbViewer pour accéder au notebook via ce lien.
Présentation
La présentation Keynote au format PDF est accessible ici.
Jeux de données
Le jeu de données utilisé pour ce projet est au format NetFlow V9 (documenté par Cisco, disponible ici). Il se compose de deux fichiers : train_net.csv et test_net.csv.
Le fichier train_net.csv fournit des informations sur le moment où une alerte particulière est susceptible de se produire, tandis que le fichier test_net.csv est utilisé uniquement à des fins de test et ne contient pas de variable cible pour évaluer les performances du modèle.
Le jeu de données est assez volumineux :
train_net.csv : environ 4 millions de paquets (provenant de 14'066 hôtes réseau uniques)
test_net.csv : environ 2 millions de paquets (provenant de 6'186 hôtes réseau uniques)
Caractéristiques du jeu de données
- FLOW_ID : Un identifiant unique pour le flux
- PROTOCOL_MAP : Une chaîne de caractères représentant le protocole utilisé dans le flux, les valeurs possibles incluent « ICMP », « TCP », « UDP », « IGMP », « GRE », « ESP », « AH », « EIGRP », « OSPF », « PIM », « IPV6-ICMP », « IPV6-IP », « IPV6-ROUTE », « IPV6-FRAG », « IPV6-NONXT », « IPV6-OPTS », et d'autres.
- L4_SRC_PORT : Le numéro de port source dans le flux, les valeurs possibles vont de 0 à 65535.
- IPV4_SRC_ADDR : L'adresse IPv4 source dans le flux, représentée sous forme de chaîne en notation décimale à points (par exemple, « 192.168.0.1 »).
- L4_DST_PORT : Le numéro de port de destination dans le flux, les valeurs possibles vont de 0 à 65535.
- IPV4_DST_ADDR : L'adresse IPv4 de destination dans le flux, représentée sous forme de chaîne en notation décimale à points (par exemple, « 192.168.0.2 »).
- FIRST_SWITCHED : L'heure à laquelle le flux a commencé, mesurée en secondes depuis l'époque (1er janvier 1970).
- FLOW_DURATION_MILLISECONDS : La durée du flux en millisecondes.
- LAST_SWITCHED : L'heure à laquelle le flux s'est terminé, mesurée en secondes depuis l'époque (1er janvier 1970).
- PROTOCOL : Le protocole utilisé dans le flux, les valeurs possibles incluent 1 (ICMP), 6 (TCP), 17 (UDP), et d'autres.
- TCP_FLAGS : Les indicateurs TCP définis dans le flux, représentés sous forme de chaîne binaire (par exemple, « 100101 »).
- TCP_WIN_MAX_IN : La taille de fenêtre annoncée maximale (en octets) pour le trafic entrant.
- TCP_WIN_MAX_OUT : La taille de fenêtre annoncée maximale (en octets) pour le trafic sortant.
- TCP_WIN_MIN_IN : La taille de fenêtre annoncée minimale (en octets) pour le trafic entrant.
- TCP_WIN_MIN_OUT : La taille de fenêtre annoncée minimale (en octets) pour le trafic sortant.
- TCP_WIN_MSS_IN : La taille de segment maximale (en octets) pour le trafic entrant.
- TCP_WIN_SCALE_IN : Le facteur d'échelle de fenêtre pour le trafic entrant.
- TCP_WIN_SCALE_OUT : Le facteur d'échelle de fenêtre pour le trafic sortant.
- SRC_TOS : La valeur Type of Service (ToS) pour l'adresse IP source.
- DST_TOS : La valeur Type of Service (ToS) pour l'adresse IP de destination.
- TOTAL_FLOWS_EXP : Le nombre total de flux attendus.
Auteurs du jeu de données
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)
Lien Kaggle