Detecção de Ataques de Rede usando Machine Learning
Descrição
Este projeto utiliza técnicas de machine learning para classificar ataques de rede, como Varredura de Portas (Port Scanning), Negação de Serviço (Denial of Service - DoS) e malware. Os dados de entrada estão no formato Netflow V9, que é um formato padrão utilizado pela Cisco.
A classificação é realizada usando os seguintes modelos:
- K-Nearest Neighbors (KNN)
- Support Vector Machine Classifier (SVC) com kernel RBF (Radial Basis Function)
- Pipeline com Principal Component Analysis (PCA) e Support Vector Machine Classifier (SVC)
- Bagging Classifier (baseado em SVC com kernel RBF)
- Random Forest Classifier
- Extra Trees Classifier
- Neural Network (MLPClassifier)
O projeto é implementado em Python usando Jupyter Notebook e várias bibliotecas populares, incluindo UMAP, Pandas, NumPy, Scikit-Learn, Matplotlib e Seaborn.
Notebook
O notebook está acessível aqui para visualização direta no GitHub. Alternativamente, você pode usar o NbViewer para acessar o notebook através deste link.
Apresentação
A apresentação Keynote em formato PDF está acessível aqui.
Conjuntos de dados
O conjunto de dados usado neste projeto está no formato NetFlow V9 (documentado pela Cisco, disponível aqui). Consiste em dois arquivos: train_net.csv e test_net.csv.
O arquivo train_net.csv fornece informações sobre quando um alerta específico provavelmente ocorrerá, enquanto o arquivo test_net.csv é usado apenas para fins de teste e não contém uma variável alvo para avaliar o desempenho do modelo.
O conjunto de dados é bastante grande:
train_net.csv: aproximadamente 4 milhões de pacotes (de 14'066 hosts de rede únicos)
test_net.csv: aproximadamente 2 milhões de pacotes (de 6'186 hosts de rede únicos)
Características do conjunto de dados
- FLOW_ID: Um identificador único para o fluxo
- PROTOCOL_MAP: Uma string que representa o protocolo usado no fluxo; os valores possíveis incluem "ICMP", "TCP", "UDP", "IGMP", "GRE", "ESP", "AH", "EIGRP", "OSPF", "PIM", "IPV6-ICMP", "IPV6-IP", "IPV6-ROUTE", "IPV6-FRAG", "IPV6-NONXT", "IPV6-OPTS" e outros.
- L4_SRC_PORT: O número da porta de origem no fluxo; os valores possíveis variam de 0 a 65535.
- IPV4_SRC_ADDR: O endereço IPv4 de origem no fluxo, representado como uma string em notação decimal pontuada (por exemplo, "192.168.0.1").
- L4_DST_PORT: O número da porta de destino no fluxo; os valores possíveis variam de 0 a 65535.
- IPV4_DST_ADDR: O endereço IPv4 de destino no fluxo, representado como uma string em notação decimal pontuada (por exemplo, "192.168.0.2").
- FIRST_SWITCHED: O momento em que o fluxo começou, medido em segundos desde a época (1º de janeiro de 1970).
- FLOW_DURATION_MILLISECONDS: A duração do fluxo em milissegundos.
- LAST_SWITCHED: O momento em que o fluxo terminou, medido em segundos desde a época (1º de janeiro de 1970).
- PROTOCOL: O protocolo usado no fluxo; os valores possíveis incluem 1 (ICMP), 6 (TCP), 17 (UDP) e outros.
- TCP_FLAGS: Os flags TCP definidos no fluxo, representados como uma string binária (por exemplo, "100101").
- TCP_WIN_MAX_IN: O tamanho máximo de janela anunciado (em bytes) para tráfego de entrada.
- TCP_WIN_MAX_OUT: O tamanho máximo de janela anunciado (em bytes) para tráfego de saída.
- TCP_WIN_MIN_IN: O tamanho mínimo de janela anunciado (em bytes) para tráfego de entrada.
- TCP_WIN_MIN_OUT: O tamanho mínimo de janela anunciado (em bytes) para tráfego de saída.
- TCP_WIN_MSS_IN: O tamanho máximo de segmento (em bytes) para tráfego de entrada.
- TCP_WIN_SCALE_IN: O fator de escala de janela para tráfego de entrada.
- TCP_WIN_SCALE_OUT: O fator de escala de janela para tráfego de saída.
- SRC_TOS: O valor Type of Service (ToS) para o endereço IP de origem.
- DST_TOS: O valor Type of Service (ToS) para o endereço IP de destino.
- TOTAL_FLOWS_EXP: O número total de fluxos esperados.
- MIN_IP_PKT_LEN: O comprimento mínimo (em bytes) dos pacotes IP no fluxo.
Autores do conjunto de dados
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