Wireshark - Parte 1 - Análise de Tráfego e Captura de Senhas
por
em 19-12-2012 às 18:17 (174415 Visualizações)
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:
Antes de poder iniciar a captura dos pacotes, temos que definir em qual interface iremos “escutar” o tráfego. Clique em Capture->Interfaces
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:
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:
Para parar a captura, basta clicar no botão “Stop the running live capture”, (é o quarto da esquerda para a direita).
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.
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:
Endereço de origem 10.10.10.1 e porta de destino 80Código :ip.src == 10.10.10.1 && tcp.dstport==80 OU ip.src == 10.10.10.1 and tcp.dstport==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 [email protected] 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”.
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.
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->Import. Depois 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
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 mais) sendo 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
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.
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.
Quer saber algo em específico? Deixe sua sugestão nos comentários.
Comentários
+ Enviar Comentário