Como usar filtros Wireshark no Linux

Cabos Ethernet conectados a um switch de rede.
Inara Prusakova / Shutterstock

O Wireshark é um analisador de pacotes de classe mundial disponível no Linux, Windows e macOS. Seus filtros são flexíveis e sofisticados, mas às vezes, contra-intuitivos. Explicaremos as “pegadinhas” que você precisa procurar.

Análise de Pacotes com Real Bite

O Wireshark é uma das joias do mundo do código aberto. É uma ferramenta de software de classe mundial, usada por profissionais e amadores para investigar e diagnosticar problemas de rede. Os desenvolvedores de software usam-no para localizar e caracterizar bugs nas rotinas de comunicação. Os pesquisadores de segurança o usam para capturar e remover atividades maliciosas em uma rede.

Um fluxo de trabalho típico é executar o Wireshark no modo Capture, para que ele registre o tráfego de rede por meio de uma das interfaces de rede no computador. Os pacotes de rede são exibidos em tempo real, conforme são capturados. No entanto, é na análise pós-captura que os detalhes granulares do que está acontecendo na rede são revelados.

Os pacotes capturados são chamados de rastreamento. Quando a captura é concluída, o rastreamento pode ser percorrido, pacote por pacote. Você é capaz de inspecionar qualquer pacote nos mínimos detalhes, mapear “conversas” de rede entre dispositivos e usar filtros para incluir (ou excluir) pacotes de sua análise.

Os recursos de filtragem do Wireshark são incomparáveis, com grande flexibilidade e poder de resolução. Existem sutilezas em sua sintaxe que tornam mais fácil escrever um filtro e obter um resultado que não atende às suas expectativas.

Se você não entende como os filtros funcionam no Wireshark, você nunca sairá da primeira marcha e acelerará os recursos do software.

Instalando o Wireshark

Quando você instala o Wireshark, é perguntado se alguém usando uma conta não root deve ser capaz de capturar rastros de rede. Dizer não a isso pode ser uma ideia atraente. Você pode não querer que todos possam ver o que está acontecendo na rede. No entanto, instalar o Wireshark de forma que apenas aqueles com privilégios de root possam usá-lo significa que todos os seus componentes serão executados com permissões elevadas.

O Wireshark contém mais de 2 milhões de linhas de código complicado e interage com o seu computador no nível mais baixo. As melhores práticas de segurança aconselham que o mínimo de código possível seja executado com privilégios elevados – especialmente quando estiver operando em um nível tão baixo.

É muito mais seguro executar o Wireshark com uma conta de usuário normal. Ainda podemos restringir quem pode executar o Wireshark. Isso requer algumas etapas extras de configuração, mas é a maneira mais segura de prosseguir. Os elementos de captura de dados do Wireshark ainda serão executados com privilégios elevados, mas o resto Wiresharké executado como um processo normal.

Para iniciar a instalação no Ubuntu, digite:

sudo apt-get install fioshark

sudo apt-get instale fioshark em uma janela de terminal.

No Fedora, digite:

sudo dnf instalar arameshark

sudo dnf instalar fioshark em uma janela de terminal.

No Manjaro, use este comando:

sudo pacman -Syu Wirehark-qt

sudo pacman -Syu wireshark-qt em uma janela de terminal.

Durante a instalação, você verá a tela abaixo, recomendando que você não execute Wiresharkcomo root. Pressione Tab para mover o realce vermelho para “<OK>” e pressione a barra de espaço.

Tela de instalação recomendando não executar o Wireshark como root.

Na próxima tela, pressione Tab para mover o realce vermelho para “<SIM>” e pressione a barra de espaço.

A tela de opções que permite que usuários não root executem o Wireshark, com "Sim" destacado.

Para rodar Wireshark, você deve ser membro do grupo “wirehark”, que é criado durante a instalação. Isso permite que você controle quem pode correr Wireshark. Qualquer pessoa que não esteja no grupo “Fioshark” não pode correr Wireshark.

Para se adicionar ao grupo “Wireshark”, use este comando:

sudo usermod -a -G Wirehark $ USER

Para que sua nova associação ao grupo entre em vigor, você pode fazer logout e login novamente ou usar este comando:

newgrp wirehark

Para ver se você está no novo grupo, use o groupscomando:

grupos

sudo usermod -a -G threadshark $ USER em uma janela de terminal.

Você deve ver “WireShark” na lista de grupos.

Recomendado:  O que é “florescendo” ou “efeito halo” em um monitor ou TV?

Iniciando o Wireshark

Você pode iniciar o Wireshark com o comando abaixo. O e comercial ( &) é iniciado Wiresharkcomo uma tarefa em segundo plano, o que significa que você pode continuar usando a janela do terminal. Você pode até fechar a janela do terminal e o Wireshark continuará em execução.

Digite o seguinte:

Wireshark e

Wireshark e em uma janela de terminal.

A interface do Wireshark é exibida. Os dispositivos de interface de rede presentes em seu computador são listados, junto com alguns pseudo-dispositivos embutidos.

A interface principal do wirehark.

Uma linha ondulada próxima a uma interface significa que ela está ativa e que o tráfego da rede está passando por ela. Uma linha plana significa que não há atividade na interface. O primeiro item desta lista é “enp0s3,” a conexão com fio para este computador e, como esperado, mostra atividade.

Para iniciar a captura de pacotes, clicamos com o botão direito em “enp0s3” e, em seguida, selecionamos “Iniciar captura” no menu de contexto.

Clique em “Iniciar captura” no menu de contexto.

Você pode definir filtros para reduzir a quantidade de tráfego que o Wireshark captura. Preferimos capturar tudo e filtrar tudo o que não queremos ver ao fazer uma análise. Assim, sabemos que tudo o que aconteceu está no rastro. Você não quer perder inadvertidamente um evento de rede que explica a situação que você está investigando devido ao seu filtro de captura.

Obviamente, para redes de alto tráfego, os rastreamentos podem rapidamente se tornar muito grandes, portanto, a filtragem na captura faz sentido neste cenário. Ou talvez você apenas prefira assim.

Observe que a sintaxe para filtros de captura é um pouco diferente daquela para telas.

A barbatana de tubarão, a quadrada e a barbatana de tubarão com ícones de seta circular destacados na interface do Wireshark com uma captura de pacote ativa.

Os ícones destacados na imagem acima indicam o seguinte, da esquerda para a direita:

  • Barbatana de tubarão : se estiver azul, clique nele para iniciar uma captura de pacote. Se o Wireshark estiver capturando pacotes, este ícone ficará cinza.
  • Quadrado : se estiver vermelho, clicar nele irá interromper a captura de pacotes em execução. Se o Wireshark não estiver capturando pacotes, este ícone ficará cinza.
  • Barbatana de tubarão com seta circular : se estiver verde, clique para interromper o traçado em execução. Isso lhe dá a oportunidade de salvar ou descartar os pacotes capturados e reiniciar o rastreamento. Se o Wireshark não estiver capturando pacotes, este ícone ficará cinza.

Analisando o Traço

Clicar no ícone de quadrado vermelho interromperá a captura de dados para que você possa analisar os pacotes capturados no rastreamento. Os pacotes são apresentados em ordem de tempo e codificados por cores de acordo com o protocolo do pacote. Os detalhes do pacote destacado são exibidos nos dois painéis inferiores na interface do Wireshark.

Um traço capturado exibido no Wireshark em ordem de tempo.

Uma maneira simples de tornar a leitura do rastreamento mais fácil é fazer com que o Wireshark forneça nomes significativos para os endereços IP de origem e destino dos pacotes. Para fazer isso, clique em Exibir> Resolução de nome e selecione “Resolver endereços de rede”.

O Wireshark tentará resolver o nome dos dispositivos que enviaram e receberam cada pacote. Não será capaz de identificar todos os dispositivos, mas aqueles que puder irão ajudá-lo a ler o rastreamento.

Rastreamento do Wireshark com nomes de dispositivos resolvidos.

Rolar a tela para a esquerda revelará mais colunas à direita. A coluna de informações mostra todas as informações que o Wireshark pode detectar do pacote. No exemplo abaixo, vemos algumas pingsolicitações e respostas.

Recomendado:  O PlayStation VR 2 não é sem fio, e isso é uma coisa boa

A coluna Informações mostrando algumas solicitações e respostas de ping.

Por padrão, o Wireshark exibe todos os pacotes na ordem em que foram rastreados. Muitos dispositivos enviam pacotes para frente e para trás simultaneamente. Isso significa que uma única conversa entre dois dispositivos provavelmente terá pacotes de outros dispositivos entrelaçados entre eles.

Para examinar uma única conversa, você pode isolá-la por protocolo. O protocolo para cada pacote é mostrado na coluna do protocolo. A maioria dos protocolos que você verá pertencem à família TCP / IP. Você pode especificar o protocolo exato ou usar Ethernet como uma espécie de catchall.

Clique com o botão direito em qualquer um dos pacotes na sequência que deseja examinar e clique em Filtro de conversa> Ethernet. No exemplo abaixo, selecionamos um pingpacote de solicitação.

"Conversa" de ping isolada na interface do Wireshark.

A sequência de pacotes é mostrada sem outros entre eles, pois o Wireshark gerou automaticamente um filtro para fazer isso. É exibido na barra de filtro e destacado em verde, o que indica que a sintaxe do filtro está correta.

Para limpar o filtro, clique no “X” na barra do filtro.

Criando Seus Próprios Filtros

Vamos colocar um filtro simples na barra de filtros:

ip.addr == 192.168.4.20

Isso seleciona todos os pacotes que foram enviados ou recebidos pelo dispositivo com endereço IP 192.168.4.20. Observe os sinais de igual duplo ( ==) sem espaço entre eles.

Wireshark com um filtro de ip.addr == 192.168.4.20.

Para ver os pacotes enviados por um dispositivo (a fonte), você pode usar  ip.src; para ver os pacotes que chegaram a um dispositivo (o destino), você pode usar  ip.dst, conforme mostrado abaixo:

ip.dst == 192.168.4.20 && ip.src == 192.168.4.28

Wireshard com um filtro de ip.addr == 192.168.4.20.

Observe o uso de um &&“e” comercial duplo ( ) para indicar o “e” lógico. Este filtro procura pacotes que chegaram a 192.168.4.20 de 192.168.4.28.

Pessoas novas em filtros Wireshark geralmente pensam que um filtro como este irá capturar todos os pacotes entre dois endereços IP, mas não é o caso.

O que ele realmente faz é filtrar todos os pacotes de ou para o endereço IP 192.168.4.20, independentemente de onde eles vieram ou para onde foram enviados. Ele faz o mesmo com todos os pacotes do endereço IP 192.168.4.28. Para simplificar, ele filtra todo o tráfego de ou para qualquer um dos endereços IP.

Você também pode procurar atividade em outros protocolos. Por exemplo, você pode digitar este filtro para procurar solicitações HTTP:

http.request

Wireshark com filtro http.request

Para excluir pacotes que vieram de ou foram enviados para um dispositivo, use um ponto de exclamação ( !) e coloque o filtro entre parênteses [ ()]:

! (ip.addr == 192.168.4.14)

Este filtro exclui todos os pacotes enviados de ou para 192.168.4.14.

Wireshark com um filtro de! (Ip.addr == 192.168.4.14).

É contra-intuitivo porque o filtro contém o operador de igualdade ( ==). Você poderia esperar que digitaria este filtro assim:

ip.addr! = 192.168.4.14

No entanto, isso não funcionará.

Você também pode pesquisar strings dentro de pacotes, por protocolo. Este filtro procura pacotes de protocolo de controle de transmissão (TCP) que contenham a string “youtube”:

tcp contém youtube

O Wireshark com um filtro tcp contém o youtube.

Um filtro que busca a retransmissão é útil como forma de verificar se há um problema de conectividade. Retransmissões são pacotes que são reenviados porque foram danificados ou perdidos durante a transmissão inicial. Muitas retransmissões indicam uma conexão lenta ou um dispositivo que demora para responder.

Digite o seguinte:

tcp.analysis.retransmission

Wireshark com um filtro de tcp.analysis.retransmission.

Nascimento, Vida, Morte e Criptografia

Uma conexão de rede entre dois dispositivos é iniciada sempre que um entra em contato com o outro e envia um SYNpacote (de sincronização). O dispositivo receptor então envia um ACKpacote (de confirmação). Indica se aceitará a conexão enviando um SYNpacote.

Recomendado:  Revisão do SwitchBot Lock: uma maneira de alta tecnologia para destrancar sua porta

SYNe ACKsão, na verdade, dois sinalizadores no mesmo pacote. O dispositivo original reconhece o SYNenviando um ACKe, em seguida, os dispositivos estabelecem uma conexão de rede.

Isso é chamado de handshake de três vias:

A -> SYN -> B

A <- SYN, ACK <- B

A -> ACK -> B

Na captura de tela abaixo, alguém no computador “nostromo.local” faz uma conexão Secure Shell (SSH) com o computador “ubuntu20-04.local”. O handshake de três vias é a primeira parte da comunicação entre os dois computadores. Observe que as duas linhas que contêm os  SYNpacotes são codificadas por cores em cinza escuro.

Wireshark mostrando uma conexão SSH entre dois computadores.

Rolar a tela para mostrar as colunas à direita revela os SYN, SYN/ACKe ACKpacotes de handshake.

Wireshark mostrando os pacotes de handshake de três vias.

Você notará que o intercâmbio de pacotes entre os dois computadores alterna entre os protocolos TCP e SSH. Os pacotes de dados são passados ​​pela conexão SSH criptografada, mas os pacotes de mensagens (como ACK) são enviados via TCP. Filtraremos os pacotes TCP em breve.

Quando a conexão de rede não é mais necessária, ela é descartada. A seqüência de pacotes para interromper uma conexão de rede é um handshake de quatro vias.

Um lado envia um FINpacote (final). A outra extremidade envia um ACKpara reconhecer o FINe, em seguida, também envia um FINpara indicar que concorda que a conexão deve ser encerrada. O primeiro lado envia um ACKpara o FINque acabou de receber e a conexão de rede é então desmontada.

Esta é a aparência do handshake de quatro vias:

A -> FIN -> B

A <- FIN, ACK <- B

A -> ACK -> B

Às vezes, o original FIN pega carona em um ACKpacote que seria enviado de qualquer maneira, conforme mostrado abaixo:

A -> FIN, ACK -> B

A <- FIN, ACK <- B

A -> ACK -> B

Isso é o que acontece neste exemplo.

Wireshark mostrando os pacotes de handshake de quatro vias.

Se quisermos ver apenas o tráfego SSH para esta conversa, podemos usar um filtro que especifica esse protocolo. Digite o seguinte para ver todo o tráfego usando o protocolo SSH de e para o computador remoto:

ip.addr == 192.168.4.25 && ssh

Isso filtra tudo, exceto o tráfego SSH de e para 192.168.4.25.

Wireshark com um filtro de ip.addr == 192.168.4.25 && ssh.

Outros modelos de filtro úteis

Quando você está digitando um filtro na barra de filtro, ele permanecerá vermelho até que o filtro esteja sintaticamente correto. Ele ficará verde quando o filtro estiver correto e completo.

Se você digitar um protocolo, como tcp, ip, udp, ou shh, seguido por um ponto ( .), um menu aparece. Ele listará os filtros recentes que continham esse protocolo e todos os campos que podem ser usados ​​em filtros para esse nome de protocolo.

Por exemplo, com ip, você pode usar  ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host, e dezenas de outros.

Use os seguintes modelos de filtro como base para seus filtros:

  • Para mostrar apenas pacotes de protocolo HTTP: http
  • Para mostrar apenas pacotes de protocolo DNS: dns
  • Para mostrar apenas pacotes TCP com 4000 como porta de origem ou destino: tcp.port==4000
  • Para exibir todos os pacotes de redefinição TCP: http.request
  • Para filtrar pacotes ARP, ICMP e DNS: !(arp or icmp or dns)
  • Para exibir todas as retransmissões em um rastreamento: tcp.analysis.retransmission
  • Para filtrar sinalizadores (como SYNou FIN): Você deve definir um valor de comparação para estes: 1significa que o sinalizador está definido e 0 não está. Então, um exemplo seria: tcp.flags.syn == 1.

Abordamos alguns dos princípios orientadores e usos fundamentais dos filtros de exibição aqui, mas, é claro, há muito mais.

Para apreciar todo o escopo e poder dos Wiresharkfiltros, certifique-se de verificar sua referência online .