Rilevamento degli attacchi di rete tramite machine learning
Descrizione
Questo progetto utilizza tecniche di machine learning per classificare attacchi di rete come Port Scanning, Denial of Service (DoS) e malware. I dati di input sono nel formato Netflow V9, un formato standard utilizzato da Cisco.
La classificazione viene eseguita utilizzando i seguenti modelli:
- K-Nearest Neighbors (KNN)
- Support Vector Machine Classifier (SVC) con kernel RBF (Radial Basis Function)
- Pipeline con Principal Component Analysis (PCA) e Support Vector Machine Classifier (SVC)
- Bagging Classifier (basato su SVC con kernel RBF)
- Random Forest Classifier
- Extra Trees Classifier
- Rete neurale (MLPClassifier)
Il progetto è implementato in Python utilizzando Jupyter Notebook e diverse librerie popolari, tra cui UMAP, Pandas, NumPy, Scikit-Learn, Matplotlib e Seaborn.
Notebook
Il notebook è accessibile qui per la visualizzazione diretta su GitHub. In alternativa, puoi usare NbViewer per accedere al notebook tramite questo link.
Presentazione
La presentazione Keynote in formato PDF è accessibile qui.
Dataset
Il dataset utilizzato per questo progetto è nel formato NetFlow V9 (documentato da Cisco, disponibile qui). È composto da due file: train_net.csv e test_net.csv.
Il file train_net.csv fornisce informazioni su quando è probabile che si verifichi un determinato alert, mentre il file test_net.csv viene utilizzato esclusivamente a scopo di test e non contiene una variabile target per valutare le prestazioni del modello.
Il dataset è piuttosto grande:
train_net.csv: circa 4 milioni di pacchetti (da 14'066 host di rete unici)
test_net.csv: circa 2 milioni di pacchetti (da 6'186 host di rete unici)
Caratteristiche del dataset
- FLOW_ID: Un identificatore univoco per il flusso
- PROTOCOL_MAP: Una stringa che rappresenta il protocollo usato nel flusso; i possibili valori includono "ICMP", "TCP", "UDP", "IGMP", "GRE", "ESP", "AH", "EIGRP", "OSPF", "PIM", "IPV6-ICMP", "IPV6-IP", "IPV6-ROUTE", "IPV6-FRAG", "IPV6-NONXT", "IPV6-OPTS" e altri.
- L4_SRC_PORT: Il numero della porta sorgente nel flusso; i possibili valori vanno da 0 a 65535.
- IPV4_SRC_ADDR: L'indirizzo IPv4 sorgente nel flusso, rappresentato come stringa in notazione decimale puntata (es. "192.168.0.1").
- L4_DST_PORT: Il numero della porta di destinazione nel flusso; i possibili valori vanno da 0 a 65535.
- IPV4_DST_ADDR: L'indirizzo IPv4 di destinazione nel flusso, rappresentato come stringa in notazione decimale puntata (es. "192.168.0.2").
- FIRST_SWITCHED: L'istante in cui il flusso è iniziato, misurato in secondi dall'epoch (1 gennaio 1970).
- FLOW_DURATION_MILLISECONDS: La durata del flusso in millisecondi.
- LAST_SWITCHED: L'istante in cui il flusso è terminato, misurato in secondi dall'epoch (1 gennaio 1970).
- PROTOCOL: Il protocollo usato nel flusso; i possibili valori includono 1 (ICMP), 6 (TCP), 17 (UDP) e altri.
- TCP_FLAGS: I flag TCP impostati nel flusso, rappresentati come stringa binaria (es. "100101").
- TCP_WIN_MAX_IN: La dimensione massima della finestra annunciata (in byte) per il traffico in ingresso.
- TCP_WIN_MAX_OUT: La dimensione massima della finestra annunciata (in byte) per il traffico in uscita.
- TCP_WIN_MIN_IN: La dimensione minima della finestra annunciata (in byte) per il traffico in ingresso.
- TCP_WIN_MIN_OUT: La dimensione minima della finestra annunciata (in byte) per il traffico in uscita.
- TCP_WIN_MSS_IN: La dimensione massima del segmento (in byte) per il traffico in ingresso.
- TCP_WIN_SCALE_IN: Il fattore di scala della finestra per il traffico in ingresso.
- TCP_WIN_SCALE_OUT: Il fattore di scala della finestra per il traffico in uscita.
- SRC_TOS: Il valore Type of Service (ToS) per l'indirizzo IP sorgente.
- DST_TOS: Il valore Type of Service (ToS) per l'indirizzo IP di destinazione.
- TOTAL_FLOWS_EXP: Il numero totale di flussi attesi.
- : La lunghezza minima (in byte) dei pacchetti IP nel flusso.
Autori del dataset
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)
Link Kaggle