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.
Índice
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
No Fedora, digite:
sudo dnf instalar arameshark
No Manjaro, use este comando:
sudo pacman -Syu Wirehark-qt
Durante a instalação, você verá a tela abaixo, recomendando que você não execute Wireshark
como root. Pressione Tab para mover o realce vermelho para “<OK>” e pressione a barra de espaço.
Na próxima tela, pressione Tab para mover o realce vermelho para “<SIM>” e pressione a barra de espaço.
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 groups
comando:
grupos
Você deve ver “WireShark” na lista de grupos.
Iniciando o Wireshark
Você pode iniciar o Wireshark com o comando abaixo. O e comercial ( &
) é iniciado Wireshark
como 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
A interface do Wireshark é exibida. Os dispositivos de interface de rede presentes em seu computador são listados, junto com alguns pseudo-dispositivos embutidos.
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.
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.
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.
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.
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 ping
solicitações e respostas.
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 ping
pacote de solicitação.
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.
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
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
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.
É 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
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
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 SYN
pacote (de sincronização). O dispositivo receptor então envia um ACK
pacote (de confirmação). Indica se aceitará a conexão enviando um SYN
pacote.
SYN
e ACK
são, na verdade, dois sinalizadores no mesmo pacote. O dispositivo original reconhece o SYN
enviando um ACK
e, 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 SYN
pacotes são codificadas por cores em cinza escuro.
Rolar a tela para mostrar as colunas à direita revela os SYN
, SYN/ACK
e ACK
pacotes de handshake.
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 FIN
pacote (final). A outra extremidade envia um ACK
para reconhecer o FIN
e, em seguida, também envia um FIN
para indicar que concorda que a conexão deve ser encerrada. O primeiro lado envia um ACK
para o FIN
que 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 ACK
pacote 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.
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.
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
SYN
ouFIN
): Você deve definir um valor de comparação para estes:1
significa que o sinalizador está definido e0
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 Wireshark
filtros, certifique-se de verificar sua referência online .