Inspecionando o Conteúdo de Pacotes

WiresharkBeginner
Pratique Agora

Introdução

Ao rastrear uma encomenda física, ler a etiqueta de envio geralmente é suficiente para saber para onde ela vai. Mas, às vezes, você precisa saber o que realmente está dentro da caixa.

Na análise de rede, observar endereços IP e portas é como ler a etiqueta de envio (o cabeçalho do pacote). No entanto, as informações realmente valiosas — como o texto de uma página da web, um arquivo baixado ou até mesmo uma senha não criptografada — estão escondidas dentro da carga útil (payload) do pacote.

Essa distinção entre cabeçalho e carga útil é fundamental na cibersegurança. Os cabeçalhos respondem a perguntas de roteamento, como de onde veio o tráfego, para onde ele vai e qual protocolo está sendo usado. As cargas úteis respondem a perguntas de conteúdo, como o que foi solicitado, o que foi retornado e se dados confidenciais foram expostos. Analistas experientes aprendem a alternar entre essas duas visões, dependendo da pergunta que estão tentando responder.

Neste laboratório, você aprenderá a usar o tcpdump para abrir a caixa e inspecionar o conteúdo real dos pacotes de rede. Você explorará como garantir que está capturando o pacote inteiro, em vez de apenas a etiqueta, e como exibir os dados brutos em formatos que tanto humanos quanto computadores possam ler facilmente. Por fim, você praticará o uso de ferramentas de texto do Linux para extrair segredos em texto simples diretamente do tráfego de rede.

Aumentar o Snaplen (Capturar Pacotes Completos)

Para olhar dentro do pacote, você deve primeiro garantir que o tcpdump capture o pacote inteiro. Por padrão, versões mais antigas do tcpdump e algumas ferramentas de rede tentam economizar espaço em disco cortando o final de cada pacote, capturando apenas os cabeçalhos.

Esse compromisso explica por que a captura de pacotes é sempre um equilíbrio entre integridade e custo. Capturar pacotes menores usa menos armazenamento e pode ser mais rápido, o que é importante em redes movimentadas. Capturar pacotes completos preserva mais evidências, o que é importante durante a solução de problemas e perícia forense. Não existe uma configuração universal que seja sempre a correta. Os analistas escolhem com base na pergunta, no ambiente e no orçamento de desempenho.

A quantidade de dados capturados de um único pacote é conhecida como "snapshot length" ou snaplen para abreviar. Se você deseja a carga útil, deve dizer à ferramenta para não truncar os dados. Você controla isso usando o sinalizador -s. Definir o snaplen como 0 (-s 0) é um truque especial que instrui o tcpdump a usar o comprimento máximo possível, garantindo que nenhum dado seja deixado para trás.

Em seu ambiente de fundo, já iniciamos um servidor web simples na porta 8080. Para capturar os dados de forma limpa, usaremos um comando útil do Linux chamado timeout para executar o tcpdump automaticamente por exatamente 10 segundos.

Execute o seguinte comando. Ele iniciará a captura na interface de loopback (lo), filtrará a porta 8080, garantirá que pacotes completos sejam capturados (-s 0) e salvará os resultados em traffic.pcap em segundo plano (usando o símbolo &):

sudo timeout 10 tcpdump -i lo port 8080 -s 0 -w ~/project/traffic.pcap &

Enquanto o tcpdump observa silenciosamente em segundo plano, precisamos gerar algum tráfego web interessante para ele capturar. Use o comando curl para solicitar um arquivo oculto do servidor web local:

curl http://localhost:8080/secret.txt

Você verá o texto SecretPayloadData123 impresso, que é o servidor web respondendo à sua solicitação. Aguarde alguns segundos para que o temporizador de timeout de 10 segundos termine de fechar o processo do tcpdump em segundo plano. Você pode pressionar Enter algumas vezes para ver a mensagem de conclusão do processo em segundo plano aparecer.

Para garantir que tudo funcionou, liste o conteúdo do seu diretório para verificar o arquivo de captura:

ls -l ~/project/traffic.pcap

Você deve ver o arquivo traffic.pcap listado com um tamanho de arquivo maior que zero, confirmando que nossos pacotes completos e não cortados foram capturados e armazenados com segurança.

Imprimir Cargas Úteis em ASCII

Agora que salvamos os pacotes completos com sucesso, é hora de abri-los e lê-los. Quando aplicações de rede como sites básicos, servidores FTP ou sistemas Telnet antigos se comunicam, eles geralmente enviam seus dados de carga útil como texto simples e não criptografado.

É também por isso que protocolos não criptografados são considerados arriscados em redes não confiáveis. Se um humano pode ler a carga útil em um arquivo de captura, um invasor que intercepta o mesmo tráfego também pode. Em outras palavras, a inspeção de pacotes não é apenas uma técnica de análise. É também um lembrete de por que os sistemas modernos preferem protocolos criptografados, como HTTPS e SSH.

Para revelar esse texto simples, o tcpdump fornece o sinalizador -A. Esta opção útil traduz os dados binários brutos dentro do pacote em caracteres ASCII legíveis por humanos. É uma excelente maneira de verificar rapidamente um arquivo de captura em busca de palavras legíveis, mensagens de erro ou credenciais expostas.

Use o sinalizador -r para ler seu arquivo de captura recém-criado e combine-o com o sinalizador -A para exibir o conteúdo ASCII:

sudo tcpdump -r ~/project/traffic.pcap -A

À medida que o texto rola, observe atentamente a saída. Você verá primeiro os cabeçalhos técnicos do pacote, mas misturado abaixo deles, verá inglês legível.

Você deve identificar facilmente a solicitação GET /secret.txt que seu comando curl enviou, seguida pelo servidor web respondendo com uma mensagem HTTP/1.0 200 OK. Perto do final do pacote de resposta do servidor, você verá claramente a carga útil oculta exposta em texto simples: SecretPayloadData123.

...
E..e..@.@.............Q...P.P...P...*......
GET /secret.txt HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
Accept: */*

...
E.....@.@.............P...Q.P...P...*......
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
...

SecretPayloadData123
...

Você notará, sem dúvida, muitos pontos aleatórios (.) espalhados pela saída. Isso é completamente normal. O computador está tentando exibir o código de máquina subjacente (como cabeçalhos TCP/IP) como texto, e quando encontra um valor binário que não corresponde a um caractere de teclado padrão, ele simplesmente imprime um ponto.

Imprimir Hex e ASCII (Hexdump)

Embora a visualização ASCII (-A) seja fantástica para ler texto simples, ela não é suficiente ao lidar com lógica computacional complexa. Como protocolos binários (como solicitações DNS ou tráfego criptografado) são exibidos como um mar confuso de pontos no modo ASCII, os engenheiros de rede precisam de uma ferramenta mais precisa.

O hexadecimal aparece constantemente no trabalho de segurança de baixo nível porque é uma maneira compacta de representar bytes brutos. Os computadores armazenam dados em binário, mas o binário é difícil para os humanos lerem diretamente. O Hex atua como um meio-termo prático: cada dígito hexadecimal mapeia perfeitamente para quatro bits binários, para que os analistas possam inspecionar a estrutura em nível de byte sem se afogar em longas sequências de zeros e uns.

Para obter a visão mais precisa da anatomia de um pacote, você usa o sinalizador -X. Isso transforma a saída em um formato estruturado conhecido como Hexdump. Ele exibe os valores hexadecimais (base-16) exatos dos dados ao lado do texto ASCII, oferecendo o melhor dos dois mundos.

Execute o seguinte comando para ler seu arquivo de captura e exibir a visualização hexdump detalhada:

sudo tcpdump -r ~/project/traffic.pcap -X

Examine os blocos de dados estruturados apresentados na sua tela.

...
0x0000:  4500 0065 1419 4000 4006 28b4 7f00 0001  E..e..@.@.(.....
0x0010:  7f00 0001 8152 1f90 50b9 1017 5018 0200  .....R..P...P...
0x0020:  fe59 0000 4745 5420 2f73 6563 7265 742e  .Y..GET./secret.
0x0030:  7478 7420 4854 5450 2f31 2e31 0d0a 486f  txt.HTTP/1.1..Ho
0x0040:  7374 3a20 6c6f 6361 6c68 6f73 743a 3830  st:.localhost:80
...

A saída é cuidadosamente organizada em três colunas distintas.

A coluna da extrema esquerda (começando com 0x0000:) é basicamente uma régua, informando a posição exata do byte dentro do pacote.

A seção central larga exibe os dados brutos e inalterados do pacote em formato hexadecimal, agrupados ordenadamente em pares de dois bytes para facilitar a leitura pelos analistas de segurança.

Finalmente, a seção da extrema direita tenta traduzir essa mesma linha de dados hexadecimais de volta para caracteres ASCII familiares, servindo como um guia de referência rápida.

Ao apresentar os dados lado a lado, você pode identificar o valor binário exato de qualquer caractere errático, o que é uma necessidade absoluta para a engenharia reversa de ataques de rede complexos.

Extrair Cabeçalhos HTTP em Texto Simples

Pesquisar manualmente na saída ASCII ou Hexdump bruta é aceitável para pequenos testes, mas rapidamente se torna uma tarefa impossível ao analisar arquivos de captura do mundo real contendo milhares de pacotes.

Esta etapa apresenta outra ideia central de engenharia: fluxos de trabalho poderosos geralmente surgem da combinação de pequenas ferramentas, em vez de depender de uma única ferramenta gigante para fazer tudo. O tcpdump é bom em ler pacotes. O grep é bom em pesquisar texto. Ao conectá-los com um pipe, você cria um fluxo de trabalho que é rápido e fácil de adaptar. Essa capacidade de composição é um dos pontos fortes do ambiente de linha de comando do Linux.

Para resolver isso, o Linux permite que você combine ferramentas. Ao pegar a saída ASCII do tcpdump e enviá-la (|) diretamente para uma ferramenta de pesquisa de texto chamada grep, você pode filtrar instantaneamente o fluxo massivo de texto para revelar apenas as agulhas específicas que você está procurando no palheiro.

Por exemplo, se você estiver investigando tráfego web, pode querer mapear rapidamente quais sites estão sendo visitados (cabeçalho Host) e que tipo de navegadores web os usuários estão executando (cabeçalho User-Agent).

Execute o seguinte comando. Ele lê o arquivo no modo ASCII, envia o texto para o grep e usa o sinalizador -E para habilitar uma pesquisa estendida por linhas que contenham "Host:", "User-Agent:" ou "HTTP":

sudo tcpdump -r ~/project/traffic.pcap -A | grep -E "Host:|User-Agent:|HTTP"

Instantaneamente, a saída confusa é substituída por um resumo limpo e altamente organizado da transação web:

GET /secret.txt HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.81.0
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12

Este fluxo de trabalho é incrivelmente poderoso para a resposta a incidentes de cibersegurança. Ao trocar as palavras de pesquisa, você pode usar essa mesma técnica para varrer sem esforço uma captura de rede inteira em busca de senhas vazadas (por exemplo, grep -i "password"), nomes de arquivos confidenciais ou sequências de comandos maliciosos conhecidos.

Resumo

Parabéns! Você concluiu com sucesso o laboratório de Inspeção de Conteúdo de Pacotes.

Você elevou suas habilidades, passando de apenas olhar para o exterior dos pacotes de rede para mergulhar profundamente nos dados reais que estão sendo transmitidos. Você praticou a desativação do truncamento de pacotes usando a opção snaplen (-s 0) para garantir uma captura completa. Em seguida, você desbloqueou o conteúdo usando o sinalizador -A para uma visualização ASCII legível e o sinalizador -X para uma análise detalhada e profissional em Hexdump. Finalmente, você aprimorou seu fluxo de trabalho combinando o tcpdump com ferramentas de texto padrão do Linux para caçar e extrair automaticamente dados de aplicação específicos do ruído.

Essas habilidades principais são a base da inspeção profunda de pacotes. Esteja você solucionando um bug de aplicação obscuro ou realizando uma perícia de rede detalhada em uma violação de segurança, agora você tem as ferramentas para descobrir exatamente o que está se movendo pelos fios.