Обнаружение сетевых атак с использованием машинного обучения
Описание
Этот проект использует методы машинного обучения для классификации сетевых атак, таких как сканирование портов, отказ в обслуживании (DoS) и вредоносное ПО. Входные данные представлены в формате NetFlow V9, который является стандартным форматом, используемым Cisco.
Классификация выполняется с использованием следующих моделей:
- K-Nearest Neighbors (KNN)
- Support Vector Machine Classifier (SVC) with RBF (Radial Basis Function) kernel
- Pipeline with Principal Component Analysis (PCA) and Support Vector Machine Classifier (SVC)
- Bagging Classifier (based on SVC with RBF kernel)
- Random Forest Classifier
- Extra Trees Classifier
- Neural Network (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: IP-адрес источника IPv4 в потоке, представленный в виде строки в десятичной нотации с точками (например, "192.168.0.1").
- L4_DST_PORT: Номер порта назначения в потоке; возможные значения от 0 до 65535.
- IPV4_DST_ADDR: IP-адрес назначения 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: Значение Type of Service (ToS) для IP-адреса источника.
- DST_TOS: Значение Type of Service (ToS) для IP-адреса назначения.
- TOTAL_FLOWS_EXP: Общее количество ожидаемых потоков.
- MIN_IP_PKT_LEN: Минимальная длина (в байтах) IP-пакетов в потоке.
- MAX_IP_PKT_LEN: Максимальная длина (в байтах) IP-пакетов в потоке.
Авторы набора данных
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