Erkennung von Netzwerkangriffen mittels maschinellem Lernen
Beschreibung
Dieses Projekt nutzt Techniken des maschinellen Lernens, um Netzwerkangriffe wie Port-Scanning, Denial of Service (DoS) und Malware zu klassifizieren. Die Eingabedaten liegen im Netflow-V9-Format vor, einem von Cisco verwendeten Standardformat.
Die Klassifizierung erfolgt mit den folgenden Modellen:
- K-Nearest Neighbors (KNN)
- Support Vector Machine Classifier (SVC) mit RBF-Kernel (Radial Basis Function)
- Pipeline mit Hauptkomponentenanalyse (PCA) und Support Vector Machine Classifier (SVC)
- Bagging Classifier (basierend auf SVC mit RBF-Kernel)
- Random Forest Classifier
- Extra Trees Classifier
- Neuronales Netz (MLPClassifier)
Das Projekt ist in Python implementiert, unter Verwendung von Jupyter Notebook und mehreren gängigen Bibliotheken, darunter UMAP, Pandas, NumPy, Scikit-Learn, Matplotlib und Seaborn.
Notebook
Das Notebook ist hier zur direkten Ansicht auf GitHub zugänglich. Alternativ können Sie NbViewer über diesen Link nutzen.
Präsentation
Die Keynote-Präsentation im PDF-Format ist hier verfügbar.
Datensätze
Der für dieses Projekt verwendete Datensatz liegt im NetFlow-V9-Format vor (dokumentiert von Cisco, verfügbar hier). Er besteht aus zwei Dateien: train_net.csv und test_net.csv.
Die Datei train_net.csv enthält Informationen darüber, wann ein bestimmter Alarm wahrscheinlich auftritt, während test_net.csv ausschließlich zu Testzwecken dient und keine Zielvariable zur Bewertung der Modellleistung enthält.
Der Datensatz ist recht groß:
train_net.csv: etwa 4 Millionen Pakete (von 14.066 eindeutigen Netzwerk-Hosts)
test_net.csv: etwa 2 Millionen Pakete (von 6.186 eindeutigen Netzwerk-Hosts)
Merkmale des Datensatzes
- FLOW_ID: Eine eindeutige Kennung für den Flow
- PROTOCOL_MAP: Eine Zeichenfolge, die das im Flow verwendete Protokoll angibt; mögliche Werte sind „ICMP", „TCP", „UDP", „IGMP", „GRE", „ESP", „AH", „EIGRP", „OSPF", „PIM", „IPV6-ICMP", „IPV6-IP", „IPV6-ROUTE", „IPV6-FRAG", „IPV6-NONXT", „IPV6-OPTS" und andere.
- L4_SRC_PORT: Die Quellportnummer im Flow; mögliche Werte reichen von 0 bis 65535.
- IPV4_SRC_ADDR: Die IPv4-Quelladresse im Flow, dargestellt als Zeichenfolge in punktierter Dezimalschreibweise (z. B. „192.168.0.1").
- L4_DST_PORT: Die Zielportnummer im Flow; mögliche Werte reichen von 0 bis 65535.
- IPV4_DST_ADDR: Die IPv4-Zieladresse im Flow, dargestellt als Zeichenfolge in punktierter Dezimalschreibweise (z. B. „192.168.0.2").
- FIRST_SWITCHED: Der Zeitpunkt, zu dem der Flow begann, gemessen in Sekunden seit dem 1. Januar 1970 (Unix-Epoche).
- FLOW_DURATION_MILLISECONDS: Die Dauer des Flows in Millisekunden.
- LAST_SWITCHED: Der Zeitpunkt, zu dem der Flow endete, gemessen in Sekunden seit dem 1. Januar 1970.
- PROTOCOL: Das im Flow verwendete Protokoll; mögliche Werte sind 1 (ICMP), 6 (TCP), 17 (UDP) und andere.
- TCP_FLAGS: Die im Flow gesetzten TCP-Flags, dargestellt als binäre Zeichenfolge (z. B. „100101").
- TCP_WIN_MAX_IN: Die maximal angekündigte Fenstergröße (in Bytes) für eingehenden Verkehr.
- TCP_WIN_MAX_OUT: Die maximal angekündigte Fenstergröße (in Bytes) für ausgehenden Verkehr.
- TCP_WIN_MIN_IN: Die minimal angekündigte Fenstergröße (in Bytes) für eingehenden Verkehr.
- TCP_WIN_MIN_OUT: Die minimal angekündigte Fenstergröße (in Bytes) für ausgehenden Verkehr.
- TCP_WIN_MSS_IN: Die maximale Segmentgröße (in Bytes) für eingehenden Verkehr.
- TCP_WIN_SCALE_IN: Der Fensterskalierungsfaktor für eingehenden Verkehr.
- TCP_WIN_SCALE_OUT: Der Fensterskalierungsfaktor für ausgehenden Verkehr.
- SRC_TOS: Der Type-of-Service (ToS)-Wert für die Quell-IP-Adresse.
- DST_TOS: Der Type-of-Service (ToS)-Wert für die Ziel-IP-Adresse.
- TOTAL_FLOWS_EXP: Die Gesamtanzahl der erwarteten Flows.
- MIN_IP_PKT_LEN: Die minimale Länge (in Bytes) von IP-Paketen im Flow.
- : Die maximale Länge (in Bytes) von IP-Paketen im Flow.
Autoren des Datensatzes
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)
Kaggle-Link