Por: @jonasc
Publicado em: 2021-01-27
Inspeção de Pacotes Com nDPI
O nDPI é uma biblioteca open source (licença LGPLv3) para inspeção profunda de pacotes (ou deep-packet inspection), mantida pela NTOP. Seu valor está na capacidade de analisar o payload do pacote, ou seja, o dado/conteúdo em si que está sendo transportado. Enquanto um firewall stateful analisa superficialmente o cabeçalho de transporte para identificar o protocolo com base na porta utilizada, o nDPI detecta protocolos e serviços através da camada de aplicação. Isso significa, que ele é capaz de identificar um tráfego HTTP em uma porta 5722, por exemplo, e ao mesmo tempo detectar a aplicação Skype na porta 80, diferenciando da navegação web padrão. Atualmente detecta mais de 200 tipos de protocolos e aplicações, além de permitir criar regras personalizadas para inspeção.
Neste laboratório será documentado a implentação pura da biblioteca nDPI fornecida pela NTOP.
Topologia
Topologia de rede padrão com FWFLEX sobre CentOS 8.
Pacotes necessários
- Necessário suporte a ferramentas de desenvolvedor para compilação do software.
- Necessário repositórios EPEL, remi e powertools ativos.
yum groupinstall "Development tools"
yum install automake libpcap-devel gcc-c++ libtool
yum install epel-release
rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf config-manager --set-enabled powertools
dnf config-manager --set-enabled remi
Instalação
O nDPI já vem incluso na instalação padrão do ntop e do nProbe, mas é possível instalar apenas a biblioteca nDPI. Será descrito como instalar os binários via repositório RPM para o CentOS e também como compilar o código fonte (este segundo, necessário para apresentar a ferramenta de demo ndpiReader).
Instalação via repo:
yum update
yum install pfring-dkms n2disk nprobe ntopng cento pfring-drivers-zc-dkms
Instalação via compilação:
cd /usr/src/
git clone https://github.com/ntop/nDPI.git
cd nDPI/
yum install json-c json-c-devel
./autogen.sh
./configure
make
cd example/
make
Testes
Ferramenta de demonstração:
[root@localhost nDPI]# ndpiReader -i ens18 -s 20
-----------------------------------------------------------
* NOTE: This is demo app to show *some* nDPI features.
* In this demo we have implemented only some basic features
* just to show you what you can do with the library. Feel
* free to extend it and send us the patches for inclusion
------------------------------------------------------------
Using nDPI (3.4.0-2818-75898a4f) [1 thread(s)]
Using libgcrypt version 1.8.5
Capturing live traffic from device ens18...
Capturing traffic up to 20 seconds
Running thread 0...
Error while reading pcap file: ''
nDPI Memory statistics:
nDPI Memory (once): 223.89 KB
Flow Memory (per flow): 2.21 KB
Actual Memory: 3.75 MB
Peak Memory: 3.75 MB
Setup Time: 24 msec
Packet Processing Time: 20149 msec
Traffic statistics:
Ethernet bytes: 21034 (includes ethernet CRC/IFC/trailer)
Discarded bytes: 2280
IP packets: 174 of 212 packets total
IP bytes: 16858 (avg pkt size 79 bytes)
Unique flows: 7
TCP Packets: 160
UDP Packets: 10
VLAN Packets: 0
MPLS Packets: 0
PPPoE Packets: 0
Fragmented Packets: 0
Max Packet size: 220
Packet Len < 64: 68
Packet Len 64-128: 99
Packet Len 128-256: 7
Packet Len 256-1024: 0
Packet Len 1024-1500: 0
Packet Len > 1500: 0
nDPI throughput: 8.64 pps / 8.16 Kb/sec
Analysis begin: 27/Jan/2021 19:08:56
Analysis end: 27/Jan/2021 19:09:16
Traffic throughput: 8.64 pps / 8.16 Kb/sec
Traffic duration: 20.150 sec
Guessed flow protos: 0
Detected protocols:
DNS packets: 6 bytes: 800 flows: 2
SSH packets: 152 bytes: 14776 flows: 2
YouTube packets: 4 bytes: 328 flows: 1
Google packets: 4 bytes: 392 flows: 1
Amazon packets: 8 bytes: 562 flows: 1
Protocol statistics:
Acceptable 16138 bytes
Fun 328 bytes
Unrated 392 bytes
Na demonstração acima, já foi possível observar a eficácia da feramenta, que detectou os acessos de DNS, SSH, YouTube, Google e Amazon.
Resultados
Para análise passiva de fluxos, a ferramenta pura pode ser interessante. Uma alternativa, é usá-la em conjunto ao NTOP e suas APIs, para consultar informações dos fluxos de rede. Porém, para usar de forma ativa, criando bloqueios de firewall junto ao produto FWFLEX, não é uma alternativa viável.
Para o uso ativo do nDPI, será avaliado outras ferramentas como o Netify Agent e o Netify Firewall Agent.