Guia para iniciantes do TCPDUMP

Guia para iniciantes do TCPDUMP
O TCPDUMP é um analisador de pacotes de rede de dados sem fio gratuito e de código aberto que funciona na interface da linha de comando. É a ferramenta CLI mais usada para analisar o tráfego de rede. O TCPDUMP permite que os usuários vejam, leem ou capturam o tráfego de rede transmitido por uma rede conectada ao computador. É útil na administração do sistema, monitorando o tráfego da rede (para problemas ou de outra forma).

Originalmente, foi escrito em 1988 por quatro trabalhadores do grupo de pesquisa de rede no Lawrence Berkeley Laboratory na Califórnia. Foi organizado onze anos depois por Micheal Richardson e Bill Fenner em 1999, que criou o site do TCPDUMP. O TCPDUMP funciona em todos os sistemas operacionais do tipo Unix. A versão do Windows do TCPDUMP é chamada de windump e usa WinPCap, a alternativa do Windows para libpcap.

Use o snap para instalar o tcpdump:

$ sudo snap install tcpdump

Use o seu gerenciador de pacotes para instalar o tcpdump:

$ sudo apt-get install tcpdump (debian/ubuntu)
$ sudo dnf install tcpdump (centos/rhel 6 e 7)
$ sudo yum install tcpdump (fedora/centos/rhel 8)

Vamos ver diferentes usos e saídas enquanto exploramos o TCPDUMP!

UDP

TCPDUMP pode despejar pacotes UDP também. Usaremos uma ferramenta NetCat (NC) para enviar um pacote UDP e depois despejar.

$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337

No comando acima, enviamos um pacote UDP composto pela string “TCPDUMPER” para a porta UDP 1337 através da LocalHost. O tcpdump captura o pacote sendo enviado pela porta UDP 1337 e exibirá.

Agora vamos despejar este pacote usando tcpdump.

$ sudo tcpdump -i lo udp porta 1337 -vvv -x

Este comando capturará e mostrará os dados capturados dos pacotes em ASCII, bem como a forma hexadecimal.

TCPDUMP: Ouvindo LO, Link-Type EN10MB (Ethernet), Comprimento de Snapshot 262144 Bytes
04:39:39.072802 IP (TOS 0x0, TTL 64, ID 32650, deslocamento 0, sinalizadores [df], proto udp (17), comprimento 37)
LocalHost.54574> localhost.1337: [UDP Bad Cksum 0xfe24 -> 0XEAC6!] UDP, comprimento 9
0x0000: 4500 0025 7F8A 4000 4011 BD3B 7F00 0001 E… %… @.@…;…
0x0010: 7F00 0001 D52E 0539 0011 FE24 7463 7064… 9… $ TCPD
0x0020: 756d 7065 72 UMPER

Como podemos ver, o pacote foi enviado para a porta 1337 e o comprimento era 9 como a corda tcpdumper é 9 bytes. Também podemos ver que o pacote foi exibido em formato hexadecimal.

DHCP

O TCPDUMP também pode realizar investigações em pacotes DHCP pela rede. O DHCP usa a porta UDP no 67 ou 68, então definiremos e limitaremos o TCPDUMP para apenas pacotes DHCP. Suponha que estamos usando uma interface de rede wifi.
O comando usado aqui será:

$ sudo tcpdump -i wlan0 porta 67 ou porta 68 -e -n -vvv
tcpdump: ouvindo no WLAN0, link-tipo En10MB (Ethernet), comprimento do instantâneo 262144 Bytes
03:52:04.004356 00: 11: 22: 33: 44: 55> 00: 11: 22: 33: 44: 66, ethertype ipv4 (0x0800), comprimento 342: (TOS 0x0, ttl 64, id 39781, deslocamento 0, bandeiras [df ], proto udp (17), comprimento 328)
192.168.10.21.68> 192.168.10.1.67: [UDP SUM OK] BOOTP/DHCP, Solicitação de 00: 11: 22: 33: 44: 55, comprimento 300, xid 0xfeab2d67, sinalizadores [nenhum] (0x0000)
Cliente-IP 192.168.10.16
CLIENT-ETERNET-ADREST 00: 11: 22: 33: 44: 55
Extensões do Vendor-RFC1048
Magic Cookie 0x63825363
DHCP-Message (53), Comprimento 1: Release
ID do servidor (54), comprimento 4: 192.168.10.1
Nome do host (12), comprimento 6: "Parrot"
Fim (255), comprimento 0
Almofada (0), comprimento 0, ocorre 42

Dns

DNS, também conhecido como sistema de nomes de domínio, confirma para fornecer o que você está procurando, combinando o nome de domínio com o endereço do domínio. Para inspecionar a comunicação de nível DNS do seu dispositivo pela Internet, você pode usar o TCPDUMP da seguinte maneira. DNS usa a porta UDP 53 para comunicação.

$ sudo tcpdump -i wlan0 udp porta 53
tcpdump: ouvindo no WLAN0, link-tipo En10MB (Ethernet), comprimento do instantâneo 262144 Bytes
04:23:48.516616 IP (TOS 0x0, TTL 64, ID 31445, deslocamento 0, sinalizadores [df], proto udp (17), comprimento 72)
192.168.10.16.45899> um.um.um.um.Domínio: [UDP soma OK] 20852+ A? Mozilla.CloudFlare-DNS.com. (44)
04:23:48.551556 IP (TOS 0x0, TTL 60, ID 56385, deslocamento 0, sinalizadores [df], proto udp (17), comprimento 104)
um.um.um.um.Domínio> 192.168.10.16.45899: [UDP SUM OK] 20852 Q: A? Mozilla.CloudFlare-DNS.com. 2/0/0 Mozilla.CloudFlare-DNS.com. [24S] A 104.16.249.249, Mozilla.CloudFlare-DNS.com. [24S] A 104.16.248.249 (76)
04:23:48.648477 IP (TOS 0x0, TTL 64, ID 31446, deslocamento 0, sinalizadores [df], proto udp (17), comprimento 66)
192.168.10.16.34043> um.um.um.um.Domínio: [UDP Soma OK] 40757+ PTR? 1.1.1.1.In-Addr.ARPA. (38)
04:23:48.688731 IP (TOS 0x0, TTL 60, ID 56387, deslocamento 0, sinalizadores [df], proto udp (17), comprimento 95)
um.um.um.um.Domínio> 192.168.10.16.34043: [UDP SUM OK] 40757 Q: PTR? 1.1.1.1.In-Addr.ARPA. 1/0/0 1.1.1.1.In-Addr.ARPA. [26m53s] PTR.um.um.um. (67)

Arp

O protocolo de resolução de endereço é usado para descobrir o endereço da camada de link, como um endereço MAC. Está associado a um determinado endereço da camada da Internet, normalmente um endereço IPv4.

Estamos usando o tcpdump para capturar e ler os dados transportados nos pacotes ARP. O comando é tão simples quanto:

$ sudo tcpdump -i wlan0 arp -vvv
tcpdump: ouvindo no WLAN0, link-tipo En10MB (Ethernet), comprimento do instantâneo 262144 Bytes
03:44:12.023668 ARP, Ethernet (LEN 6), IPv4 (LEN 4), Solicite Who-Has 192.168.10.1 Conte 192.168.10.2, comprimento 28
03:44:17.140259 ARP, Ethernet (LEN 6), IPv4 (LEN 4), Solicite Who-Has 192.168.10.21 Conte 192.168.10.1, comprimento 28
03:44:17.140276 ARP, Ethernet (Len 6), IPv4 (Len 4), Responder 192.168.10.21 IS-AT 00: 11: 22: 33: 44: 55 (OUI desconhecido), comprimento 28
03:44:42.026393 ARP, Ethernet (LEN 6), IPv4 (Len 4), Solicite Who-Has 192.168.10.1 Conte 192.168.10.2, comprimento 28

ICMP

O ICMP, também conhecido como Protocolo de Mensagem de Controle da Internet, é um protocolo de suporte no conjunto de protocolos da Internet. O ICMP é usado como um protocolo informativo.

Para visualizar todos os pacotes ICMP em uma interface, podemos usar este comando:

$ sudo tcpdump ICMP -VVV
tcpdump: ouvindo no WLAN0, link-tipo En10MB (Ethernet), comprimento do instantâneo 262144 Bytes
04:26:42.123902 IP (TOS 0x0, TTL 64, ID 14831, deslocamento 0, sinalizadores [df], proto ICMP (1), comprimento 84)
192.168.10.16> 192.168.10.1: Solicitação de eco do ICMP, ID 47363, seq 1, comprimento 64
04:26:42.128429 IP (TOS 0x0, TTL 64, ID 32915, deslocamento 0, sinalizadores [nenhum], proto ICMP (1), comprimento 84)
192.168.10.1> 192.168.10.16: ICMP Echo Responder, ID 47363, seq 1, comprimento 64
04:26:43.125599 IP (TOS 0x0, TTL 64, ID 14888, deslocamento 0, sinalizadores [df], proto ICMP (1), comprimento 84)
192.168.10.16> 192.168.10.1: Solicitação de eco ICMP, ID 47363, seq 2, comprimento 64
04:26:43.128055 IP (TOS 0x0, TTL 64, ID 32916, deslocamento 0, sinalizadores [nenhum], proto ICMP (1), comprimento 84)
192.168.10.1> 192.168.10.16: ICMP Echo Responder, ID 47363, seq 2, comprimento 64

Ntp

O NTP é um protocolo de rede projetado especificamente para sincronizar o tempo em uma rede de máquinas. Para capturar tráfego no NTP:

$ sudo tcpdump dst porta 123
04:31:05.547856 IP (TOS 0x0, TTL 64, ID 34474, deslocamento 0, sinalizadores [df], proto udp (17), comprimento 76)
192.168.10.16.NTP> TIME-B-WWV.nist.Gov.NTP: [UDP SUM OK] NTPV4, cliente, comprimento 48
Indicador Leap: Relógio não sincronizado (192), estrato 0 (não especificado), Poll 3 (8s), precisão -6
Atraso da raiz: 1.000000, Dispersão de raiz: 1.000000, ID de referência: (UNSPEC)
Timestamp de referência: 0.000000000
Timestamp de origem: 0.000000000
Receba Timestamp: 0.000000000
Timestamp de transmissão: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Originador - Receba Timestamp: 0.000000000
Originador - Timestamp de transmissão: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (TOS 0x0, TTL 56, ID 234, deslocamento 0, sinalizadores [nenhum], proto udp (17), comprimento 76)
Time-B-wwv.nist.Gov.NTP> 192.168.10.16.NTP: [UDP SUM OK] NTPV3, servidor, comprimento 48
Indicador Leap: (0), estrato 1 (referência primária), Poll 13 (8192s), precisão -29
Atraso da raiz: 0.000244, Dispersão de raiz: 0.000488, ID de referência: NIST
Timestamp de referência: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Timestamp de origem: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Receba registro de data e hora: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Timestamp de transmissão: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
Originador - Receba Timestamp: +9.480896026
Originador - Timestamp de transmissão: +9.480897141

Smtp

SMTP ou protocolo de transferência de correio simples é usado principalmente para e -mails. O tcpdump pode usar isso para extrair informações úteis de email. Por exemplo, para extrair destinatários/remetentes de email:

$ sudo tcpdump -n -l porta 25 | grep -i 'correio de \ | rcpt para'

IPv6

IPv6 é a "próxima geração" de IP, fornecendo uma ampla gama de endereços IP. IPv6 ajuda a alcançar a saúde a longo prazo da Internet.

Para capturar o tráfego IPv6, use o filtro IP6 especificando os protocolos TCP e UDP usando Proto 6 e Proto-17.

$ sudo tcpdump -n -i qualquer ip6 -vvv
tcpdump: link de dados tipo Linux_sll2
tcpdump: ouvindo em qualquer link-tipo Linux_sll2 (Linux Cooked V2), comprimento do instantâneo 262144 bytes
04:34:31.847359 LO em IP6 (Flowlabel 0xc7cb6, Hlim 64, UDP do próximo cabeçalho (17) Comprimento da carga útil: 40) :: 1.49395> :: 1.49395: [Bad UDP Cksum 0x003b -> 0x3587!] UDP, comprimento 32
04:34:31.859082 LO em IP6 (Flowlabel 0xc7cb6, Hlim 64, UDP do próximo cabeçalho (17) Comprimento da carga útil: 32) :: 1.49395> :: 1.49395: [Bad UDP CKSUM 0x0033 -> 0XEAEF!] UDP, comprimento 24
04:34:31.860361 LO em IP6 (Flowlabel 0xc7cb6, Hlim 64, UDP do próximo cabeçalho (17) Comprimento da carga útil: 40) :: 1.49395> :: 1.49395: [Bad UDP Cksum 0x003b -> 0x7267!] UDP, comprimento 32
04:34:31.871100 LO em IP6 (Flowlabel 0xc7cb6, Hlim 64, UDP do próximo cabeçalho (17) Comprimento da carga útil: 944) :: 1.49395> :: 1.49395: [Bad UDP Cksum 0x03c3 -> 0xf890!] UDP, comprimento 936
4 pacotes capturados
12 pacotes recebidos por filtro
0 pacotes que foram lançados por kernel

O '-C 4' fornece uma contagem de pacotes de até 4 pacotes. Podemos especificar o número de pacotes para n e capturar n pacotes.

Http

O protocolo de transferência de hipertexto é usado para transferir dados de um servidor da web para um navegador para visualizar as páginas da web. HTTP usa a comunicação de formulário TCP. Especificamente, a porta tcp 80 é usada.

Para imprimir todos os pacotes HTTP IPv4 de e para a porta 80:

tcpdump: ouvindo no WLAN0, link-tipo En10MB (Ethernet), comprimento do instantâneo 262144 Bytes
03:36:00.602104 IP (TOS 0x0, TTL 64, ID 722, deslocamento 0, sinalizadores [df], proto tcp (6), comprimento 60)
192.168.10.21.33586> 192.168.10.1.http: sinalizadores [s], cksum 0xa22b (correto), seq 2736960993, win 64240, opções [ms
03:36:00.604830 IP (TOS 0x0, TTL 64, ID 0, deslocamento 0, sinalizadores [df], proto tcp (6), comprimento 60)
192.168.10.1.http> 192.168.10.21.33586: bandeiras [s.], cksum 0x2dcc (correto), SEQ 4089727666, ACK 2736960994, Win 14480, Opções [MSS 1460, Sackok, TS Val 30996070 ECR 38982294, NOP, NOP,
03:36:00.604893 IP (TOS 0x0, TTL 64, ID 723, deslocamento 0, sinalizadores [df], proto tcp (6), comprimento 52)
192.168.10.21.33586> 192.168.10.1.http: sinalizadores [.], cksum 0x94e2 (correto), seq 1, ack 1, win 63, opções [nop, nop, ts val 3898882297 ECR 30996070], comprimento 0
03:36:00.605054 IP (TOS 0x0, TTL 64, ID 724, deslocamento 0, sinalizadores [df], proto tcp (6), comprimento 481)

Solicitações HTTP…

192.168.10.21.33586> 192.168.10.1.http: sinalizadores [p.], cksum 0x9e5d (correto), seq 1: 430, ACK 1, Win 63, opções [nop, nop, ts val 389882297 ECR 30996070], comprimento 429: http, comprimento: 429
Get / HTTP / 1.1
Host: 192.168.10.1
Agente de usuário: mozilla/5.0 (Windows NT 10.0; RV: 78.0) Gecko/20100101 Firefox/78.0
Aceitar: texto/html, aplicativo/xhtml+xml, aplicativo/xml; q = 0.9, imagem/webp,*/*; q = 0.8
Aceitar-Language: en-us, en; q = 0.5
Aceitar-se-codificador: Gzip, esvaziar
Dnt: 1
Conexão: Keep-alive
Cookie: _testcookiesupport = 1; SID = C7CCFA31CFE06065717D24FB544A5CD588760F0CDC5AE2739E746F84C469B5FD
Recordadas de upgrade-isecure: 1

E as respostas também são capturadas

192.168.10.1.http> 192.168.10.21.33586: bandeiras [P.], cksum 0x84f8 (correto), seq 1: 523, ACK 430, Win 1944, Opções [NOP, NOP, TS VAL 30996179 ECR 389882297], comprimento 522: http, comprimento: 522
Http/1.1 200 ok
Servidor: ZTE Web Server 1.0 ZTE Corp 2015.
Ranges de aceitação: bytes
Conexão: Feche
Opções x-frame: Sameorigin
Controle de cache: sem cache, sem lojas
Comprimento de conteúdo: 138098
Set-cookie: _testcookiesupport = 1; Caminho =/; Httponly
Tipo de conteúdo: texto/html; charset = utf-8
X-Content-Type-Options: Nosniff
Política de segurança de conteúdo: Avestores de quadro 'self' '' inseguro '' 'inseguro';
X-XSS-Proteção: 1; modo = bloco
Set-cookie: sid =; expira = qui, 01-Jan-1970 00:00:00 gmt; path =/; Httponly

TCP

Para capturar pacotes somente TCP, este comando fará todo o bem:

$ sudo tcpdump -i wlan0 tcp
tcpdump: ouvindo no WLAN0, link-tipo En10MB (Ethernet), comprimento do instantâneo 262144 Bytes
04:35:48.892037 IP (TOS 0x0, TTL 60, ID 23987, deslocamento 0, sinalizadores [nenhum], proto tcp (6), comprimento 104)
TL-in-F189.1E100.líquido.HTTPS> 192.168.10.16.50272: bandeiras [P.], cksum 0xc924 (correto), SEQ 1377740065: 1377740117, ACK 1546363399, Win 300, Opções [NOP, NOP, TS Val 13149401 ECR 3051434098], comprimento 52
04:35:48.892080 IP (TOS 0x0, TTL 64, ID 20577, deslocamento 0, sinalizadores [df], proto tcp (6), comprimento 52)
192.168.10.16.50272> TL-in-F189.1E100.líquido.https: sinalizadores [.], cksum 0xf898 (correto), seq 1, ACK 52, Win 63, Opções [NOP, NOP, TS VAL 3051461952 ECR 13149401], comprimento 0
04:35:50.199754 IP (TOS 0x0, TTL 64, ID 20578, deslocamento 0, sinalizadores [df], proto tcp (6), comprimento 88)
192.168.10.16.50272> TL-in-F189.1E100.líquido.https: sinalizadores [p.], cksum 0x2531 (correto), seq 1:37, ACK 52, Win 63, Opções [Nop, Nop, TS Val 3051463260 ECR 13149401], Comprimento 36
04:35:50.199809 IP (TOS 0x0, TTL 64, ID 7014, deslocamento 0, sinalizadores [df], proto tcp (6), comprimento 88)
192.168.10.16.50434> HKG12S18-in-F14.1E100.líquido.https: sinalizadores [p.], cksum 0xb21e (correto), SEQ 328391782: 328391818, ACK 3599854191, Win 63, Opções [NOP, NOP, TS VAL 3656137742 ECR 2564108387], 36
4 pacotes capturados
4 pacotes recebidos por filtro
0 pacotes que foram lançados por kernel

Normalmente, a captura de pacotes TCP resulta em muito tráfego; Você pode especificar em detalhes seus requisitos adicionando filtros à captura, como:

Porta
Especifica a porta para monitorar

$ sudo tcpdump -i wlan0 tcp porta 2222

IP fonte
Para visualizar pacotes de uma fonte especificada

$ sudo tcpdump -i wlan0 tcp src 192.168.10.2

IP de destino
Para ver pacotes para um destino especificado

$ sudo tcpdump -i wlan0 tcp dst 192.168.10.2

Salvar a captura de pacotes em arquivos

Para salvar a captura de pacotes para fazer análises mais tarde, podemos usar a opção -w da TCPDUMP que requer um parâmetro de nome do arquivo. Esses arquivos são salvos em um formato de arquivo PCAP (captura de pacotes), que pode ser usado para salvar ou enviar capturas de pacotes.

Por exemplo:

$ sudo tcpdump -c /capturado.PCAP

Podemos adicionar filtros se queremos capturar pacotes TCP, UDP ou ICMP, etc.

Leitura de captura de pacotes de arquivos

Infelizmente, você não pode ler o arquivo salvo por meio de comandos comuns de 'arquivo de leitura' como gato, etc. A saída é quase sem bobagem, e é difícil dizer o que está no arquivo. '-r' é usado para ler os pacotes salvos no .Arquivo PCAP, armazenado anteriormente por '-w' ou outro software que armazena PCAPS:

$ sudo tcpdump -r /saídas.PCAP

Isso imprime os dados coletados de pacotes capturados na tela do terminal em um formato legível.

TCPDUMP Cheatsheet

O TCPDUMP pode ser usado com outros comandos Linux, como Grep, Sed, etc., Para extrair informações úteis. Aqui estão algumas combinações úteis e palavras -chave amalgamadas em uso com tcpdump para obter informações valiosas.

Extraia agentes de usuário HTTP:

$ sudo tcpdump -n | Grep "Usuário-agente:"

Os URLs solicitados por HTTP podem ser monitorados usando o TCPDUMP, como:

$ sudo tcpdump -v -n | egrep -i "post / | get / | host:"

Você também pode Extrair senhas HTTP em solicitações de postagem

$ sudo tcpdump -nn -l | egrep -i "post /| pwd = | passwd = | senha = | host:"

Servidor ou cookies do lado do cliente podem ser extraídos usando:

$ sudo tcpdump -n | EGREP -I 'Set -Cookie | Host: | Cookie:'

Capture solicitações e respostas do DNS usando:

$ sudo tcpdump -i wlp58s0 -s0 porta 53

Imprima todas as senhas de texto simples:

$ sudo tcpdump porta http ou porta ftp ou porta smtp ou porta imap ou porta pop3 ou porta telnet -l -a | egrep -i -b5 'pass = | pwd = | log = | login = | user = | user | nome de usuário = | pw = | passw = | passwd = | senha = | passa: | user: | nome de usuário: | senha: | Login: | Passe '

Filtros TCPDUMP comuns

  • -A Mostra pacotes em formato ASCII.
  • -c Número de pacotes para capturar.
  • -contar Contagem de pacotes de impressão apenas ao ler um arquivo capturado.
  • -e Imprimir endereços MAC e cabeçalhos no nível do link.
  • -H ou -Help Imprime a versão e as informações de uso.
  • -versão Mostre apenas as informações da versão.
  • -eu Especifique a interface de rede para capturar.
  • -K Evite as tentativas de verificar as somas de verificação de qualquer pacote. Adiciona velocidade.
  • -m Especifique o módulo para usar.
  • -n Não converta endereços (eu.e., Endereços de host, números de porta, etc.) para nomes.
  • -número Imprima um número de pacote opcional no início de cada linha.
  • -p Proibir a interface de entrar no modo promíscuo.
  • -Q Escolha a direção para os pacotes serem capturados. Enviar ou receber.
  • -q Saída silenciosa/rápida. Imprima menos informações. As saídas são mais curtas.
  • -r Usado para ler pacotes de um PCAP .
  • -t Não imprima um registro de data e hora em cada linha de despejo.
  • -v Imprime mais informações sobre a produção.
  • -c Escreva os pacotes brutos para arquivar.
  • -x Imprime a saída ASCII.
  • -X Imprime ascii com hexadecimal.
  • -Lista interfaces Mostra todas as interfaces de rede disponíveis onde os pacotes podem ser capturados pelo TCPDUMP.

Cessação

O TCPDUMP tem sido uma ferramenta muito usada usada na pesquisa e aplicações de segurança/networking. A única desvantagem que o tcpdump não tem 'GUI', mas é bom demais para ser mantido fora dos principais gráficos. Como Daniel Miessler escreve: “Analisadores de protocolo como o Wireshark são ótimos, mas se você quiser realmente dominar o pacote-fu, deve se tornar um com o TCPDUMP primeiro.”