wireshark

Wireshark é um software de análise de rede que permite capturar e examinar o tráfego de dados em uma rede de computadores em tempo real.
Filtros de Captura
Os filtros de captura (como tcp port 80) são muito mais limitados, são usados
para reduzir o tamanho da captura bruta de pacotes e não devem ser confundidos
com os filtros de exibição (como tcp.port == 80).
Os filtros de captura são definidos antes do início da captura de pacotes e não podem ser modificados durante a captura.
Na janela principal, o filtro de captura pode ser encontrado logo acima da lista de interfaces e na caixa de diálogo de interfaces como pode ser visto nesta imagem:

Exemplos
Captura de tráfego associada a um endereço IP específico:
host 172.18.5.4
Captura de tráfego dentro de um intervalo de endereços IP:
net 192.168.0.0/24
# ou
net 192.168.0.0 mask 255.255.255.0
Captura seletiva com base na origem dos pacotes:
src net 192.168.0.0/24
# ou
src net 192.168.0.0 mask 255.255.255.0
Captura seletiva com base no destino dos pacotes:
dst net 192.168.0.0/24
# ou
dst net 192.168.0.0 mask 255.255.255.0
Captura de tráfego específico de uma porta de aplicação:
port 53
Exclusão de tráfego HTTP e SMTP em servidores específicos:
host www.exemplo.com and not (port 80 or port 25)
# ou
host www.exemplo.com and not port 80 and not port 25
Exclusão de tráfego ARP e DNS:
port not 53 and not arp
Captura de tráfego dentro de um intervalo de portas TCP:
(tcp[0:2] > 1500 and tcp[0:2] < 1550) or (tcp[2:2] > 1500 and tcp[2:2] < 1550)
Captura de tráfego dentro de um intervalo de portas TCP para versões mais recentes do libpcap (0.9.1 ou superior):
tcp portrange 1501-1549
Captura de tráfego Ethernet EAPOL:
ether proto 0x888e
Rejeição de quadros multicast do Link Layer Discovery Protocol (LLDP):
not ether dst 01:80:c2:00:00:0e
Captura seletiva de tráfego IPv4:
ip
Captura seletiva de tráfego unicast:
not broadcast and not multicast
Captura de tráfego IPv6 destinado a todos os nós:
dst host ff02::1
Captura de requisições HTTP GET:
port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420
Referências
- https://wiki.wireshark.org/CaptureFilters
- https://www.wireshark.org/docs/wsug_html_chunked/ChCapCaptureFilterSection.html
Filtros de Exibição
Os filtros de exibição são aqueles que irão filtrar os pacotes após serem interceptados.
Exemplos
Exibir apenas tráfego SMTP (porta 25) e ICMP:
tcp.port eq 25 or icmp
Exibir apenas tráfego dentro da LAN (192.168.x.x), eliminando conexões com a Internet:
ip.src==192.168.0.0/16 and ip.dst==192.168.0.0/16
Exibir pacotes TCP onde a fonte instrui o destino a interromper o envio de dados (buffer cheio):
tcp.window_size == 0 && tcp.flags.reset != 1
Filtragem no Windows para reduzir ruído, monitorando interações entre clientes e controladores de domínio:
smb || nbns || dcerpc || nbss || dns
Filtragem de pacotes contendo a sequência de bytes 0x81, 0x60, 0x03 no início do payload UDP, ignorando o cabeçalho UDP:
udp[8:3]==81:60:03
Filtragem de pacotes baseando-se no identificador do fabricante do MAC Address (OUI). Exemplo para dispositivos DELL:
eth.addr[0:3]==00:06:5B
Identificação de pacotes que contenham a sequência de bytes 0x81, 0x60, 0x03 em qualquer parte do cabeçalho ou payload UDP:
udp contains 81:60:03
Filtragem de pacotes SIP onde o cabeçalho To contém a string "a1762":
sip.To contains "a1762"
Utilização de expressões regulares para correspondência em campos de string:
http.request.uri matches "gl=se$"
O caractere $ corresponde ao final da string conforme a sintaxe de expressões
regulares Perl (PCRE).
Filtragem por protocolo (exemplo: SIP) excluindo endereços IP específicos:
ip.src != xxx.xxx.xxx.xxx && ip.dst != xxx.xxx.xxx.xxx && sip
A utilização do operador de camada (#) permite selecionar camadas específicas.
Exemplo para pacotes GRE
com IPv4 interno e externo:
Filtrar pelo endereço IP de origem na camada externa:
ip.src#1 == 10.1.2.3
Filtrar pelo endereço IP de origem na camada interna:
ip.src#2 == 10.1.2.3
Filtrar por qualquer uma das ocorrências:
ip.src == 10.1.2.3
Considerações Especiais (Gotchas)
Certos campos de filtro correspondem a múltiplos campos de protocolo. Por
exemplo, ip.addr verifica tanto o endereço de origem quanto o de destino no
cabeçalho IP, assim como tcp.port, udp.port e eth.addr.
Por exemplo, a seguinte expressão:
ip.addr == 10.43.54.65
É equivalente a:
ip.src == 10.43.54.65 or ip.dst == 10.43.54.65
Se quisermos excluir todo o tráfego de/para 10.43.54.65, poderíamos tentar:
ip.addr != 10.43.54.65
No entanto, essa expressão é equivalente a:
ip.src != 10.43.54.65 or ip.dst != 10.43.54.65
o que significa "exibir todo o tráfego, exceto aquele onde tanto a origem quanto o destino são 10.43.54.65", e não o desejado.
Para obter o comportamento correto, deve-se negar a expressão inteira:
!(ip.addr == 10.43.54.65)
O que equivale a:
!(ip.src == 10.43.54.65 or ip.dst == 10.43.54.65)
Isso resulta na exibição de todo o tráfego, exceto os pacotes em que a origem ou o destino sejam 10.43.54.65.
Essa questão também pode surgir ao analisar protocolos tunelados, onde múltiplas camadas IPv4 ou IPv6 podem estar presentes, ou quando há múltiplas instâncias de um campo.
Referências
- https://wiki.wireshark.org/DisplayFilters
- https://www.wireshark.org/docs/wsug_html_chunked/ChWorkBuildDisplayFilterSection.html
Reconhecendo FTP em Porta não Padrão
Quando o FTP está rodando em uma porta diferente da padrão, porta 21, não é
possível identificar os pacotes FTP com os filtros ftp ou ftp-data, para
isso teremos que procurar pelas mensagens padrões da comunicação do protocolo
FTP, podendo ser de tentativa de login, transferência de arquivos, etc.
Checando tentativas de login no FTP:
tcp contains "USER" || tcp contains "PASS"
Checando download de arquivo:
tcp contains "RETR" || tcp contains "PASV" || tcp contains "PORT"
Outros filtros FTP que podem ser úteis:
tcp contains "STOR"
tcp contains "LIST"
tcp contains "CWD"
tcp contains "QUIT"
tcp contains "MKD"
tcp contains "RMD"
tcp contains "DELE"
tcp contains "RNFR"
tcp contains "RNTO"
tcp contains "ABOR"
tcp contains "TYPE"
tcp contains "MODE"
tcp contains "STRU"
tcp contains "NOOP"
tcp contains "SYST"
| Comando | Descrição |
|---|---|
| USER | Envia o nome de usuário ao servidor para iniciar uma sessão de login. |
| PASS | Envia a senha do usuário ao servidor para autenticação. |
| RETR | Solicita a transferência de um arquivo do servidor para o cliente (download). |
| PASV | Instrui o servidor a entrar no modo passivo, retornando um endereço IP e porta para o cliente conectar para transferências de dados. |
| PORT | Instrui o cliente a fornecer ao servidor o endereço IP e porta onde o servidor deve se conectar para transferências de dados (modo ativo). |
| STOR | Solicita a transferência de um arquivo do cliente para o servidor (upload). |
| LIST | Solicita uma lista detalhada de arquivos e diretórios no servidor. |
| CWD | Altera o diretório de trabalho atual no servidor. |
| QUIT | Termina a sessão de login e desconecta o cliente do servidor. |
| MKD | Cria um novo diretório no servidor. |
| RMD | Remove um diretório do servidor. |
| DELE | Exclui um arquivo do servidor. |
| RNFR | Indica o nome de um arquivo ou diretório a ser renomeado. Deve ser seguido pelo comando RNTO. |
| RNTO | Especifica o novo nome para o arquivo ou diretório indicado pelo comando RNFR. |
| ABOR | Aborta uma transferência de dados em andamento. |
| TYPE | Define o tipo de representação de dados a ser usado para transferências (por exemplo, binário ou ASCII). |
| MODE | Define o modo de transferência de dados (por exemplo, fluxo, bloco ou comprimido). |
| STRU | Define a estrutura de armazenamento de arquivos a ser usada para transferências (por exemplo, arquivo, registro ou página). |
| NOOP | Não faz nada, apenas faz o servidor enviar uma resposta para manter a conexão ativa. |
| SYST | Solicita informações sobre o sistema operacional do servidor. |
Após identificar em qual porta o FTP server está executando podemos indicar para o Wireshark que efetue o decode como FTP com base naquela porta:


Agora temos a capacidade de filtrar o ftp e o ftp-data diretamente no campo
de filtro do Wireshark.

Salvando Arquivos Transferidos no FTP
Para salvar o arquivo que foi transferido no FTP, basta efetuar o filtro por
ftp-data e efetuar o "Follow" do "TCP Stream".

Configure o "Show data as" como "Raw" e salve o arquivo com nome e extenção correta.

Arquivo PCAP usado como exemplo: invasao.pcap