Wireshark - Parte 1 - Análise de Tráfego e Captura de Senhas

O Wireshark é uma ferramenta muito poderosa que vai muito além de um simples sniffer. O que muitos não sabem é que existem várias formas de se aproveitar o potencial desta ferramenta, mas neste primeiro artigo iremos iniciar do básico. Vamos aprender a sniffar a rede de forma efetiva, criar filtros para buscar apenas a informação que queremos, veremos como um black hat utilizaria esta ferramenta para roubar senhas e para finalizar, como utilizar o Wireshark para diagnosticar problemas de rede ou se um firewall está bloqueando os pacotes corretamente.

Antes de iniciarmos com a prática, é necessário entender o conceito de sniffing. Sniffing, a um grosso modo, seria você ficar com os ouvidos atentos para ouvir qualquer coisa que seja dita ao seu alcance. 

Atualmente, quase todos os ambientes utilizam switchs e não mais hubs, o que torna o sniffing um POUCO mais difícil, pois os switchs não enviam os dados para todas as portas como um hub faz, ele envia diretamente para a porta onde se encontra o host de destino; então, se você tentar sniffar uma rede com switch você irá apenas ouvir o que for broadcast, ou sua própria conexão. Para conseguir ouvir tudo sem ser o gateway da rede, é necessário um ataque de arp spoof, ou estourar a tabela CAM do switch. Mas isto será tema para um próximo artigo, sendo necessário entender este conceito.


Utilização Básica

Agora vamos por a mão na massa: estou assumindo que você já tem o programa instalado, se não tiver clique aqui. Ao iniciar o Wireshark, a tela apresentada será parecida com esta:

Nome:      tela inicial.jpg
Visitas:     44166
Tamanho:  90,0 KB


Antes de poder iniciar a captura dos pacotes, temos que definir em qual interface iremos “escutar” o tráfego. Clique em Capture->Interfaces

Nome:      definir interface.jpg
Visitas:     43718
Tamanho:  88,9 KB


A partir daí, irá aparecer uma nova janela com a lista de interfaces detectadas automaticamente, bastando selecionar a interface desejada, clicando na caixa ao lado do nome da interface, como na imagem abaixo:

Nome:      start.png
Visitas:     43505
Tamanho:  9,4 KB


Se você clicar em Start, ele iniciará a captura automaticamente. Você poderá apenas selecionar a interface e somente depois iniciar a captura caso seja necessário.

Quando o processo de captura iniciar, você verá vários pacotes passando pela tela do Wireshark (variando de acordo com o tráfego de sua máquina/rede). Será algo parecido com isto:

Nome:      inicio_cap.jpg
Visitas:     43820
Tamanho:  130,3 KB


Para parar a captura, basta clicar no botão “Stop the running live capture”, (é o quarto da esquerda para a direita).

Nome:      stop.jpg
Visitas:     43838
Tamanho:  132,3 KB


Tome cuidado se sua rede for muito movimentada, o fluxo de dados pode até travar sua máquina, então não é aconselhável deixar o Wireshark capturando por muito tempo; como veremos a seguir, vamos deixar ele rodando apenas durante o processo de debug de uma conexão. Quanto maior a quantidade de pacotes, maior será o tempo para aplicar um filtro, encontrar um pacote, etc.

Com isto temos o básico do programa, podemos definir a interface de captura, iniciar a captura e parar. O próximo passo é conseguir identificar o que interessa em meio a tantos pacotes. Para isto, vamos começar a utilizar filtros.


Utilizando Filtros

Existe uma infinidade de filtros possíveis, mas neste primeiro momento veremos apenas como filtrar por endereço IP, porta e protocolo.

Os filtros podem ser construídos clicando em “Filter”, em seguida selecionando o filtro desejado (existe uma pequena lista de filtros pré definidos), ou digitando diretamente na caixa de texto. Após criar seu filtro, basta clicar em “Apply”; caso você queria ver a lista inteira de pacotes novamente basta clicar em “Clear”, isto removerá o filtro previamente aplicado.

Nome:      filtros.jpg
Visitas:     43651
Tamanho:  116,9 KB


Vamos a uma pequena lista de filtros:

FILTRO
EXPLICAÇÃO
EXEMPLO
ip.addr
endereço IPv4 de destinou ou origem
ip.addr == 10.10.10.10
ip.dst
endereço de destino IPv4
ip.addr == 10.10.10.10
ip.src
endereço de origem IPv4
ip.src == 10.10.10.10
ip.proto
Protocolo IP (decimal)
ip.proto == 1
ipv6.addr
endereço IPv6 de origem ou destino
ipv6.addr == 2001 :: 5
ipv6.src
endereço IPv6 de origem
ipv6.addr == 2001 :: 5
ipv6.dst
endereço de destino IPv6
ipv6.dst == 2001 :: 5
tcp.port
porta TCP de destino ou origem
tcp.port == 20
tcp.dstport
porta TCP de destino
tcp.dstport == 80
tcp.srcport
porta TCP de origem
tcp.srcport == 60234
udp.port
porta UDP de destino ou origem
udp.port == 513
udp.dstport
porta UDP de destino
udp.dstport == 513
udp.srcport
porta UDP de origem
udp.srcport == 40000
icmp.type
Código do tipo ICMP (decimal)
icmp.type == 8


Também é possível agrupar os filtros, por exemplo:

Código :
ip.src == 10.10.10.1 && tcp.dstport==80 OU ip.src == 10.10.10.1 and tcp.dstport==80
Endereço de origem 10.10.10.1 e porta de destino 80


Capturando senhas

Agora veremos como é possível capturar senhas facilmente, apenas escutando o tráfego. Para este exemplo vamos utilizar o protocolo pop3, que envia os dados em texto puro pela rede. Para isso, inicie a captura de pacotes normalmente e inicie uma sessão pop3 com seu servidor de e-mail. Caso você utilize um protocolo mais seguro como imaps ou pop3s e queria apenas ver o funcionamento do mecanismo, é possível fazer a conexão pop3 via telnet sem ter que adicionar/modificar sua conta, bastando executar o seguinte:

Código :
telnet servidordemail.com.br 110
user usuario@dominio.com.br
pass suasenha

Agora pare a captura, e no filtro coloque “pop” e clique em “Apply”. Feito isso, você verá apenas os pacotes da conexão pop3. Agora clique em qualquer uma delas com o botão direito e clique em “Follow TCP Stream”.

Nome:      pop3.jpg
Visitas:     43537
Tamanho:  125,2 KB


Com isso ele irá abrir uma nova janela com todo conteúdo ASCII da conexão. Como o protocolo pop3 envia tudo em texto puro, é possível ver todos os comandos executados, inclusive a senha.

Nome:      senha.png
Visitas:     43395
Tamanho:  13,1 KB


Isto pode ser transportado para qualquer conexão em texto puro, como ftp, telnet, http, etc. Basta que você altere o filtro e examine o conteúdo da conexão.

Importando Capturas Externas

Normalmente em servidores, não existe ambiente gráfico instalado e com isso você não consegue utilizar o Wireshark diretamente. Caso você queria analisar o tráfego deste servidor e não seja possível instalar o Wireshark, ou ainda se você não tiver como capturar este tráfego de outro lugar, o melhor que se pode fazer é gravar o tráfego localmente com o tcpdump e em seguida, copiar este dump para uma máquina com o Wireshark para que seja feita uma análise mais detalhada.

Vamos capturar tudo que vier ou for para o host 10.10.10.1 com a porta de destino 80 e salvar o conteúdo no arquivo captura.pcap da pasta local onde o comando foi executado. Execute no servidor:

Código :
tcpdump -i eth0 host 10.10.10.1 and dst port 80 -w captura.pcap

Assim que terminar de capturar, basta utilizar o CTRL+C, copiar o arquivo para a máquina do Wireshark e importar a captura clicando em File->ImportDepois de importado, você pode utilizar o programa normalmente como se a capture tivesse ocorrido localmente.

Analisando Conexões

Outra forma de utilização interessante é para detectar problemas de conexões. Quando você tenta estabelecer uma conexão com um servidor e ocorre um erro, o que foi que ocorreu? A porta estava realmente fechada? O firewall bloqueou? A porta na verdade estava aberta mas não houve tráfego? Tudo isso é possível determinar analisando o tráfego.

Exemplo 1:

Conexão bem sucedida na porta 80

Nome:      exemplo1.jpg
Visitas:     43208
Tamanho:  79,5 KB


Nas três primeiras linhas é possível ver o three way handshake (veja o artigo Nmap Parte 1 - Entendendo os tipos de Scanning para saber maissendo completado normalmente; depois o pacote com a flag FIN e em seguida, o ACK reconhecendo o fim da conexão.

Observação: Os pacotes depois do handshake e antes do FIN foram removidos para não poluir a tela.

Exemplo 2:

Conexão falha, tentativa de se conectar a uma porta fechada

Nome:      exempl2.jpg
Visitas:     43277
Tamanho:  68,4 KB


Neste caso houve a tentativa de conexão na porta 3000 que não estava aberta, e a resposta da máquina foi RST.

Exemplo 3:

Conexão falha, tentativa de se conectar a uma porta fechada por firewall.

Nome:      exemplo3.jpg
Visitas:     43364
Tamanho:  81,9 KB


Neste caso, o host estava com a porta bloqueada via firewall; devido ao comportamento padrão do iptables descartar o pacote silenciosamente, não vemos nenhum pacote de retorno.

Estes exemplos poderiam ser diagnosticados com o próprio tcpdump para quem já conhece a ferramenta, mas o intuito era ilustrar e exemplificar o uso do Wireshark. Sendo assim, nos próximos artigos iremos aprofundar a utilização desta poderosa ferramenta.

Conclusão

Como foi visto o Wireshark é uma ferramenta poderosa, com muitas utilidades, que podem ser utilizadas tanto para o bem quanto para o mal. Para se proteger dos “caras maus” é necessário entender o que eles fazem, parte disto é conhecer a ferramenta tão bem quanto eles.


fONTE: https://under-linux.org/entry.php?b=2969