
Uma framework para análise de tráfego de rede e extração de características.
LUCX (LUCID network traffic parser eXtended) é um analisador de tráfego de rede que funciona tanto com capturas de tráfego pré-gravadas no formato pcap quanto com tráfego de rede capturado em tempo real a partir de uma Interface de Rede. LUCX é uma versão estendida do analisador do conjunto de dados LUCID (https://github.com/doriguzzi/lucid-ddos). Assim como a versão original, o LUCX produz observações de tráfego consistentes com aquelas coletadas em sistemas online existentes, onde os algoritmos de detecção precisam lidar com segmentos de fluxos de tráfego coletados ao longo de janelas de tempo predefinidas.
Além disso, o LUCX extrai mais características (por exemplo, características específicas de TLS) em dois formatos diferentes: Packet-Level e Statistical, descritos abaixo neste README.
As operações de pré-processamento de tráfego são divididas em dois estágios diferentes: o primeiro extrai as características dos pacotes e as organiza em fluxos e janelas de tempo; o segundo realiza a normalização das características, o preenchimento (padding) (ou achatamento (flattening), dependendo do formato de saída desejado) e salva os conjuntos de treinamento, validação e teste no formato hdf5.
O Network Intrusion Detection System (NIDS) de exemplo, fornecido neste repositório como um notebook Jupyter, pode ser usado para treinar e avaliar modelos de Deep Learning (especificamente um Multi-Layer Perceptron (MLP) ou uma Convolutional Neural Network (CNN)) usando tanto representações de tráfego de rede em nível de pacote quanto estatísticas geradas pelo LUCX.
O LUCX é implementado em Python v3.X, Numpy e Pyshark. O LUCX requer a instalação de uma série de ferramentas e bibliotecas Python. Isso pode ser feito usando o ambiente de software conda (https://docs.conda.io/projects/conda/en/latest/).
Sugerimos a instalação do miniconda, uma versão leve do conda. O miniconda está disponível para MS Windows, MacOSX e Linux e pode ser instalado seguindo as diretrizes disponíveis em https://docs.conda.io/en/latest/miniconda.html#.
É necessário o MS Windows 10 versão 2004 ou superior (Build 19041 ou superior) ou o Windows 11.
No MS Windows, primeiro instale o subsistema Windows para Linux a partir da linha de comando: wsl.exe —install (veja aqui para mais informações). Este comando instalará um sistema operacional Ubuntu Linux no seu computador. Você pode acessar a linha de comando do Linux executando o aplicativo WSL no menu do Windows e, em seguida, seguir as diretrizes para o sistema operacional Linux abaixo.
Abra um terminal, execute um dos seguintes comandos (com base no seu sistema operacional) e siga as instruções na tela:
bash Miniconda3-latest-Linux-x86_64.sh (on Linux operating systems)
bash Miniconda3-latest-MacOSX-x86_64.sh (on macOS)
Em seguida, crie um novo ambiente conda (chamado python313) baseado no Python 3.13.5:
conda create -n python313 python=3.13.5
Ative o novo ambiente python313:
conda activate python313
E configure o ambiente com a instalação de mais alguns pacotes:
(python39)$ pip install scikit-learn h5py pyshark matplotlib graphviz pandas scikeras pydot seaborn
O Pyshark é usado para o pré-processamento de dados. É apenas um wrapper Python para o tshark, o que significa que o tshark também deve estar instalado. Em um sistema operacional baseado em Ubuntu, use o seguinte comando:
sudo apt install tshark
No macOS, basta baixar o Wireshark aqui e instalá-lo.
Observe que o código atual do parser funciona com wireshark/tshark versão 4.4.9 ou superior.
O LUCX considera fluxos de tráfego de rede bidirecionais, definidos como grupos de pacotes que compartilham o mesmo identificador de 5‑tupla ou sua 5‑tupla transposta. A 5‑tupla é uma forma comum de caracterizar unicamente um fluxo de comunicação em redes IP, e é composta por:
Quando os pacotes têm valores idênticos para esses cinco campos, eles são considerados parte do mesmo fluxo. O conceito de 5‑tupla transposta considera a comunicação bidirecional: se os endereços/portas de origem e destino forem trocados, mas o protocolo permanecer o mesmo, os pacotes ainda são considerados parte do mesmo fluxo. Isso garante que ambas as direções de uma conversa (cliente → servidor e servidor → cliente) sejam agrupadas juntas.
Exemplo: Suponha que um cliente no IP 192.168.1.10 envie uma requisição TCP para um servidor web no IP 203.0.113.5 na porta 80. O cliente usa a porta de origem 54321.
Ambos os conjuntos de pacotes pertencem ao mesmo fluxo de tráfego porque a direção reversa corresponde à 5‑tupla transposta da direção direta. Além disso, o LUCX divide cada fluxo de tráfego extraído de rastros de tráfego de rede de um conjunto de dados (ou do tráfego de rede recebido) em sub‑fluxos com base em janelas de tempo. Essa segmentação simula cenários do mundo real nos quais o tráfego é coletado dentro de janelas de tempo estáticas ou dinâmicas e, em seguida, encaminhado para um classificador para análise. Ao fazer isso, o sistema espelha as práticas operacionais dos sistemas de detecção de intrusão (IDS), que frequentemente dependem de agregação de pacotes limitada por tempo para identificar comportamentos de curto prazo e detectar ataques.
Depois que os pacotes são agrupados em fluxos e os fluxos são ainda divididos em sub‑fluxos, o LUCX converte os sub‑fluxos em amostras que podem ser usadas para treinar, validar e testar classificadores baseados em ML. Há dois formatos de saída possíveis: arrays (como no LUCID) ou vetores. O primeiro formato preserva as características extraídas diretamente dos pacotes, enquanto o segundo produz representações estatísticas das características em nível de pacote. Esses dois modos operacionais são chamados de características em nível de pacote e características estatísticas, respectivamente.