كشف هجمات الشبكة باستخدام التعلم الآلي
الوصف
يستفيد هذا المشروع من تقنيات التعلم الآلي لتصنيف هجمات الشبكة مثل فحص المنافذ (Port Scanning)، رفض الخدمة (DoS)، والبرامج الضارة. بيانات الإدخال بتنسيق Netflow V9، وهو تنسيق قياسي تستخدمه Cisco.
يتم التصنيف باستخدام النماذج التالية:
- الجيران الأقرب (K-Nearest Neighbors - KNN)
- مصنف آلة المتجهات الداعمة (Support Vector Machine Classifier - SVC) بنواة RBF (دالة الأساس الشعاعي)
- خط أنابيب مع تحليل المكونات الرئيسية (Principal Component Analysis - PCA) ومصنف آلة المتجهات الداعمة (SVC)
- مصنف التجميع (Bagging Classifier) (المبني على SVC بنواة RBF)
- مصنف الغابة العشوائية (Random Forest Classifier)
- مصنف الأشجار الإضافية (Extra Trees Classifier)
- الشبكة العصبية (MLPClassifier)
تم تنفيذ المشروع بلغة Python باستخدام Jupyter Notebook والعديد من المكتبات الشائعة، بما في ذلك UMAP و Pandas و NumPy و Scikit-Learn و Matplotlib و Seaborn.
الدفتر
الدفتر متاح هنا للعرض المباشر على GitHub. بدلاً من ذلك، يمكنك استخدام NbViewer للوصول إلى الدفتر عبر هذا الرابط.
العرض التقديمي
عرض Keynote بصيغة PDF متاح هنا.
مجموعات البيانات
مجموعة البيانات المستخدمة لهذا المشروع هي بتنسيق NetFlow V9 (موثقة من قبل Cisco، متاحة هنا). تتكون من ملفين: train_net.csv و test_net.csv.
يوفر ملف train_net.csv معلومات حول موعد حدوث تنبيه معين، بينما يُستخدم ملف test_net.csv لأغراض الاختبار فقط ولا يحتوي على متغير هدف لتقييم أداء النموذج.
مجموعة البيانات كبيرة جداً:
train_net.csv: حوالي 4 ملايين حزمة (من 14'066 مضيف شبكة فريد)
test_net.csv: حوالي 2 مليون حزمة (من 6'186 مضيف شبكة فريد)
ميزات مجموعة البيانات
- FLOW_ID: معرف فريد للتدفق
- PROTOCOL_MAP: سلسلة تمثل البروتوكول المستخدم في التدفق، القيم الممكنة تشمل "ICMP"، "TCP"، "UDP"، "IGMP"، "GRE"، "ESP"، "AH"، "EIGRP"، "OSPF"، "PIM"، "IPV6-ICMP"، "IPV6-IP"، "IPV6-ROUTE"، "IPV6-FRAG"، "IPV6-NONXT"، "IPV6-OPTS"، وغيرها.
- L4_SRC_PORT: رقم منفذ المصدر في التدفق، القيم الممكنة تتراوح من 0 إلى 65535.
- IPV4_SRC_ADDR: عنوان IPv4 المصدر في التدفق، ممثل كسلسلة بتدوين عشري منقط (مثال: "192.168.0.1").
- L4_DST_PORT: رقم منفذ الوجهة في التدفق، القيم الممكنة تتراوح من 0 إلى 65535.
- IPV4_DST_ADDR: عنوان IPv4 الوجهة في التدفق، ممثل كسلسلة بتدوين عشري منقط (مثال: "192.168.0.2").
- FIRST_SWITCHED: الوقت الذي بدأ فيه التدفق، مقاساً بالثواني منذ العصر (1 يناير 1970).
- FLOW_DURATION_MILLISECONDS: مدة التدفق بالمللي ثانية.
- LAST_SWITCHED: الوقت الذي انتهى فيه التدفق، مقاساً بالثواني منذ العصر (1 يناير 1970).
- PROTOCOL: البروتوكول المستخدم في التدفق، القيم الممكنة تشمل 1 (ICMP)، 6 (TCP)، 17 (UDP)، وغيرها.
- TCP_FLAGS: أعلام TCP المحددة في التدفق، ممثلة كسلسلة ثنائية (مثال: "100101").
- TCP_WIN_MAX_IN: أقصى حجم نافذة معلن (بالبايت) لحركة المرور الواردة.
- TCP_WIN_MAX_OUT: أقصى حجم نافذة معلن (بالبايت) لحركة المرور الصادرة.
- TCP_WIN_MIN_IN: أدنى حجم نافذة معلن (بالبايت) لحركة المرور الواردة.
- TCP_WIN_MIN_OUT: أدنى حجم نافذة معلن (بالبايت) لحركة المرور الصادرة.
- TCP_WIN_MSS_IN: أقصى حجم للقطعة (بالبايت) لحركة المرور الواردة.
- TCP_WIN_SCALE_IN: عامل تحجيم النافذة لحركة المرور الواردة.
- TCP_WIN_SCALE_OUT: عامل تحجيم النافذة لحركة المرور الصادرة.
- SRC_TOS: قيمة نوع الخدمة (ToS) لعنوان IP المصدر.
- DST_TOS: قيمة نوع الخدمة (ToS) لعنوان IP الوجهة.
- TOTAL_FLOWS_EXP: العدد الإجمالي للتدفقات المتوقعة.
- MIN_IP_PKT_LEN: الحد الأدنى لطول حزم IP (بالبايت) في التدفق.
- MAX_IP_PKT_LEN: الحد الأقصى لطول حزم IP (بالبايت) في التدفق.
- TOTAL_PKTS_EXP: العدد الإجمالي للحزم المتوقعة في التدفق.
- TOTAL_BYTES_EXP: العدد الإجمالي للبايتات المتوقعة في التدفق.
- IN_BYTES: عدد البايتات المستلمة في التدفق.
مؤلفو مجموعة البيانات
Maria-Elena Mihailescu, Darius Mihai, Mihai Carabas, Mikolaj Komisarek, Marek Pawlicki, Witold Holubowicz, Rafal Kozik:
عرض وتقييم مجموعة بيانات كشف الاختراق الشبكي RoEduNet-SIMARGL2021. Sensors 21(13): 4319 (2021)
رابط Kaggle