Redes: Captura de Pacotes

há 4 horas 2

Saudações.

Criei esse tutorial para ensinar as diferentes formas de capturar e analisar pacotes.

Capturar quadros (ethernet) e pacotes (IP) é a última fronteira para resolver qualquer problema em rede de computadores.

1 – Capturando com TCPDUMP

O TCPDUMP é a mais antiga das ferramentas para UNIX (Linux, MacOS, FreeBSD) e permite instalar filtros de analise e duplicação de pacotes em uma interface de rede.

1.1 – Instalando

Instalando:

Bash# Instalar tcpdump apt -y install tcpdump; # Instalar tcpdump apt -y install tcpdump;

1.2 – Princípios do TCPDUMP

O filtro é opcional e a captura deve ser realizada sempre em uma interface de rede. No Linux é possível capturar de várias interfaces ao mesmo tempo (any).

Use CONTROL+C para interromper a captura.

Por padrão a captura coleta apenas os cabeçalhos, o limite é de 64 bytes para IPv4 e 96 bytes para IPv6. Você pode capturar um tamanho maior ou o pacote inteiro com o argumento -s.

A captura por padrão coloca a interface em modo promíscuo (aceita quadros e pacotes que não são destinados à interface mas que de alguma forma bateram na porta). Isso é desejável quando fazemos port-mirror no switch ou colocamos o Linux em bridge entre os nós de analise. Use “-p” para evitar o modo promíscuo.

1.3 – Captura básica

Exemplos de capturas sem filtro (pega tudo):

Bash# Capturando pacotes na eth0: tcpdump -i eth0; # Capturando pacotes em todas as interfaces (somente Linux) tcpdump -i any; # Não resolver DNS dos IPs (recomendado): tcpdump -n -i eth0; # Exibir dados do cabecalho ethernet (MAC): tcpdump -ne -i eth0; # Capturar apenas 100 pacotes e encerrar: tcpdump -ne -c 100 -i eth0; # Capturar apenas os primeiros 256 bytes de cada pacote tcpdump -ne -s 256 -i eth0; # Capturar pacotes inteiros (analise forense completa) tcpdump -ne -s 0 -i eth0; # Capturar dados com detalhes tcpdump -nev -s 0 -i eth0; # Capturar dados com detalhes e leitura humanizada tcpdump -neva -s 0 -i eth0; # Capturar com detalhes completos, humanizados e versao hexadecimal tcpdump -nevas0 -x -i eth0; # Sem modo promiscuo tcpdump -nevas0 -p -i eth0; # Capturando pacotes na eth0: tcpdump -i eth0; # Capturando pacotes em todas as interfaces (somente Linux) tcpdump -i any; # Não resolver DNS dos IPs (recomendado): tcpdump -n -i eth0; # Exibir dados do cabecalho ethernet (MAC): tcpdump -ne -i eth0; # Capturar apenas 100 pacotes e encerrar: tcpdump -ne -c 100 -i eth0; # Capturar apenas os primeiros 256 bytes de cada pacote tcpdump -ne -s 256 -i eth0; # Capturar pacotes inteiros (analise forense completa) tcpdump -ne -s 0 -i eth0; # Capturar dados com detalhes tcpdump -nev -s 0 -i eth0; # Capturar dados com detalhes e leitura humanizada tcpdump -neva -s 0 -i eth0; # Capturar com detalhes completos, humanizados e versao hexadecimal tcpdump -nevas0 -x -i eth0; # Sem modo promiscuo tcpdump -nevas0 -p -i eth0;

1.4 – Captura com filtro

Usando filtros para capturar apenas protocolos ou propriedades dos quadros/pacotes:

Bash# Capturar apenas TCP tcpdump -pnevas0 -i eth0 "tcp"; # Capturar apenas UDP tcpdump -pnevas0 -i eth0 "udp"; # Capturar apenas ICMP tcpdump -pnevas0 -i eth0 "icmp"; # Filtro combinado, capturar udp e icmp tcpdump -pnevas0 -i eth0 "udp or icmp"; # Capturar apenas pacotes TCP SYNC tcpdump -pnevas0 -i eth0 'tcp[13] & 2 != 0 && tcp[13] & 16 = 0'; # Capturar data/hora microsegundo e dados de sessao BGP de alguns peerings: tcpdump --time-stamp-precision=nano \ -pnevas0 -i eth0 \ '(host 10.10.20.5 or host 10.100.2.113) and tcp port 179'; # Capturar apenas TCP tcpdump -pnevas0 -i eth0 "tcp"; # Capturar apenas UDP tcpdump -pnevas0 -i eth0 "udp"; # Capturar apenas ICMP tcpdump -pnevas0 -i eth0 "icmp"; # Filtro combinado, capturar udp e icmp tcpdump -pnevas0 -i eth0 "udp or icmp"; # Capturar apenas pacotes TCP SYNC tcpdump -pnevas0 -i eth0 'tcp[13] & 2 != 0 && tcp[13] & 16 = 0'; # Capturar data/hora microsegundo e dados de sessao BGP de alguns peerings: tcpdump --time-stamp-precision=nano \ -pnevas0 -i eth0 \ '(host 10.10.20.5 or host 10.100.2.113) and tcp port 179';

1.5 – Salvando em arquivo

O TCPDUMP pode salvar sua captura em arquivos para que mais tarde você faça a analise. Isso é especialmente útil quando o problema é intermitente e você precisa ao final do dia comparar o horário do problema com os pacotes capturados naquele horário.

Bash# Salvar captura em arquivo, exemplo: tcpdump \ -pnevas0 \ -i eth0.95 \ 'host 45.255.128.9 and udp' \ -w /tmp/radius-captura-001.pcap; # Analisar arquivo gravado tcpdump -ttttnnva -r /tmp/radius-captura-001.pcap; # Salvar captura em arquivo, exemplo: tcpdump \ -pnevas0 \ -i eth0.95 \ 'host 45.255.128.9 and udp' \ -w /tmp/radius-captura-001.pcap; # Analisar arquivo gravado tcpdump -ttttnnva -r /tmp/radius-captura-001.pcap;

.

.

.

.

(artigo em edição constante, volte mais tarde para ver novos capítulos)

Terminamos por hoje!

Patrick Brandão, patrickbrandao@gmail.com

O segredo de avançar é começar.
O segredo de começar é dividir seus projetos
complexos e esmagadores em tarefas
pequenas e gerenciáveis,
e depois começar pela primeira.
Mark Twain