terça-feira, 12 de março de 2013

Sniffers de Rede

Existem alguns programas chamados de sniffers de rede que, a grosso modo, podem capturar mensagens que trafegam por uma rede local de computadores, mesmo que elas não sejam endereçadas ao seu computador. Para entendermos melhor como eles fazem isso, é necessário que primeiro estejamos familiarizados com o "modo promíscuo" dos adaptadores de rede. 

Numa rede de computadores, todo o tráfego de broadcast ou tráfego não endereçado a sua máquina local é automaticamente descartado. Uma vez ativado o modo promíscuo, toda a informação da camada 2 dos pacotes é ignorada (enlace), e logo, todos os pacotes são aceitos pela máquina local, mesmo que não sejam endereçados a ela. Ou seja, um adaptador em modo promíscuo "aceita todos" os pacotes que chegam até ele.

O uso de sniffers era muito mais acessível quando se utilizavam hubs ao invés de switches nas redes, já que todo o tráfego nos hubs funciona em broadcast. Qualquer computador numa rede local usando hub, que tivesse um sniffer ativo, poderia "sniffar" a rede toda. Uma das grandes vantagens trazidas pelos switches é justamente trabalhar na camada 2 do modelo OSI, utilizando bastante comunicação unicast ao invés de usar apenas broadcast, aprimorando a segurança (sem falar na drástica redução de colisões). Na grande maioria dos sistemas operacionais atuais é necessário ter privilégios de administrador do sistema para ativar o modo promíscuo de uma interface de rede.

Definidos muitas vezes como "analisadores de protocolos", a utilização de um sniffer pode facilitar consideravelmente o trabalho de um administrador de redes, uma vez que o tráfego coletado permitirá uma análise do que se passa na rede em questão.

Através do uso de um sniffer podemos:
  • entender as características da rede;
  • ver "quem" está na rede;
  • determinar o que ou quem está utilizando a banda disponível;
  • identificar horários de pico de utilização da rede;
  • identificar possíveis ataques ou atividades suspeitas;
  • encontrar aplicações inseguras num determinado host;
A escolha de um bom sniffer, passa por alguns critérios como protocolos suportados, custo, interface amigável, documentação disponível, suporte do programa e etc. Basicamente, a operação de um sniffer se define pela coleta (ativa a placa de rede em modo promíscuo e captura pacotes), conversão (converte as informações binárias coletadas numa linguagem legível para o ser humano) e análise (analisa os dados capturados baseando-se nos seus protocolos). Um dos sniffers mais utilizados atualmente, disponível para ambientes Linux, Mac OS X e Microsoft é o Wireshark (que antigamente se chamava Ethereal), disponível em: http://www.wireshark.org/download.html.  Podemos ver seu logo na "Figura 1" abaixo:
Figura 1 - Logo do Wireshark

Sniffers como o Wireshark possuem uma interface gráfica bem intuitiva para quem trabalha com redes e está familiarizado com as camadas dos protocolos, conforme pode ser visto na "Figura 2".
Figura 2 - Tela do Wireshark
Existem também os sniffers que rodam em interface de linha de comando como o Tcpdump (lembrando que o Wireshark também pode ser executado via linha de comandos). É claro que é bem mais fácil utilizar os programas através de sua interface gráfica, mas isso não quer dizer que programas como o Tcpdump não cumpram bem sua função. Você pode ver a documentação completa do Wireshark, bem como vídeos de exemplos de sua utilização na sua página oficial em: http://www.wireshark.org/docs/. Você também pode ver  no blog do Seginfo um desafio prático de análise forense, que utiliza o Wireshark, como uma das ferramentas para solucionar o problema.

Uma questão importante a ser considerada é "Onde colocar o sniffer na rede?". Não é tão simples (ou pelo menos não deveria), colocar um computador numa rede cabeada de uma determinada empresa e sair sniffando pacotes. Como os dispositivos tratam o tráfego de maneiras diferentes, vejamos como faríamos para sniffar uma rede local cabeada que utiliza hub ou switch.

Rede local com Hub

Sonho de qualquer invasor. Basta conectar seu computador em qualquer porta do dispositivo concentrador, ativar o sniffer na sua máquina local e coletar tráfego de toda a rede, conforme pode ser visto no "Diagrama 1" abaixo. É prática comum deixar o sniffer coletando informações por um determinado período de tempo e posteriormente fazer a análise "off line". Infelizmente (ou não), o hub além de ser inseguro também aumenta consideravelmente o número de colisões, e logo, está caindo vertiginosamente em desuso. 

Diagrama 1 - Rede com hub


 Rede local com Switch

Em redes que utilizam switches a situação é um pouco mais complicada pois a janela de visibilidade é menor, conforme pode-se ver no "Diagrama 2". Boa parte do tráfego de rede acontece em unicast entre as portas e somente o tráfego que é enviado especificamente em broadcast chega até o computador com o sniffer instalado. 
Diagrama 2 - Rede com switch

 Porém como comentado anteriormente, o cenário é um pouco mais complicado, não impossível ;o) As três técnicas mais utilizadas para burlar essa dificuldade são o "Hubbing Out", o "Port Mirroring" ou "Port Spanning" e o "ARP Cache Poisoning".  Vejamos a seguir seus conceitos.

Hubbing Out

Conforme o nome sugere, coloca-se um hub entre a interface de rede do computador do "atacante" e do computador da "vítima", criando um ambiente "isolado" da rede para ambas as máquinas. Ou seja, toda a informação que chegar até esse hub (no caso, qualquer comunicação estabelecida pelo computador da vítima), será enviada em broadcast também para o computador do atacante pois o hub aumenta sua janela de visibilidade permitindo que o tráfego seja sniffado, conforme vemos no "Diagrama 3".
Diagrama 3 - Hubbing Out

Obviamente, para que esse processo funcione é preciso que o invasor possua acesso físico aos dispositivos, o que aumenta o risco de ser detectado. Geralmente esse é um último recurso, visto que existem outras maneiras de obter esse tráfego via software. Não é o melhor método, mas funciona.

Port Mirroring

O Port Mirroring é uma funcionalidade presente em switches gerenciáveis, logo, é preciso que o switch possua essa funcionalidade para que ela possa ser explorada. Consiste em mandar uma cópia dos pacotes que passam por uma determinada porta do switch (ou de toda uma VLAN), para outra porta pré-configurada, criando assim um espelhamento, conforme vemos no "Diagrama 4". Logicamente, a porta espelhada poderá rodar o sniffer. Apesar de falarmos sobre essa prática como uma técnica de invasão, ela também é muito utilizada por appliances que monitoram o tráfego da rede, como os IDSs. 
Diagrama 4 - Port Mirror

Abaixo na "Figura 3", podemos ver os comandos para mapear portas em switches da Cisco, Enterasys e Nortel:
Figura 3 - Comandos de Port Mirroring

Alguns fabricantes como a Cisco Systems se referem ao Port Mirroring como SPAN (Switched Port Analyzer). Já switches gerenciáveis da 3Com possuem a opção RAP (Roving Analysis Port), que trata-se da mesma funcionalidade.

ARP Cache Poisoning

A outra maneira de capturarmos tráfego de uma outra estação através do switch é empregarmos uma técnica chamada de "ARP Cache Poisoning" ou apenas "ARP Poisoning", onde conforme o nome sugere, faremos o "envenenamento" da tabela ARP do switch. Porém para entendermos melhor esse tipo de ataque, precisamos entender como funciona o protocolo ARP (Address Resolution Protocol ou Protocolo de Resolução de Endereços). O ARP é utilizado para descobrir endereços físicos dos dispositivos na rede. Por exemplo, se o meu computador quer usar a impressora que está no computador "192.168.1.1" e ele ainda não tem o endereço da camada de enlace desse dispositivo no seu cache ARP local, ele envia uma mensagem em broadcast para a rede perguntando "Quem tem o IP 192.168.1.1?". O computador que tiver esse IP responde com seu endereço físico "O IP 192.168.1.1 tem MAC Address 0A:6B:85:91:A3:E5", podendo funcionar também de maneira reversa (perguntar pelo MAC e obter o IP). Logo, o ARP possui basicamente 4 tipos de mensagens:
  • ARP Request (Solicitação ARP): Computador "A" questiona na rede: "Quem tem o IP x.x.x.x?"
  • ARP Reply (Resposta ARP): Todos os computadores que possuem endereço diferente de "x.x.x.x" ignoram a requisição. O computador "B", que no nosso caso possui este endereço responde: "Eu tenho o IP solicitado. Eis meu MAC Address: 00:11:22:33:44:55".
  • RARP Request (Solicitação ARP Reversa): Computador "A" questiona na rede: "Que tem o MAC Address: 00:11:22:33:44:55?"
  • RARP Reply (Resposta ARP Reversa):  Todos os computadores que possuem endereço físico diferente de " 00:11:22:33:44:55" ignoram a requisição. O computador "B", que no nosso caso possui este endereço responde: "Eu tenho o IP MAC Address solicitado. Eis meu endereço IP: x.x.x.x".
Todos os computadores da rede possuem uma tabela cache ARP contendo o mapeamento de todos os "IPs x MAC Addresses" dos dispositivos com os quais já se comunicou. Apesar de ser importantíssimo para a rede por ser um protocolo simples e eficiente, o ARP possui uma grande falha que é não ter autenticação. Ou seja, não há como autenticar o mapeamento de "IP x Mac Address" no "ARP Reply". Além disso, o host remoto não checa se está recebendo um "ARP Reply" de um "ARP Request" enviado anteriormente, o que significa dizer que, mesmo que eu não tenha feito uma pergunta ARP, posso receber uma resposta ARP de qualquer computador da rede que irá atualizar a tabela ARP do meu computador, processo conhecido como ARP Cache Poisoning ou Envenenamento de Cache ARP.

Através do ARP Poisoning é possível:

  • Fazer ataques de negação de serviço: Um usuário poderia enviar um "ARP Reply" aos hosts da rede, mapeando um IP para um MAC Address incorreto ou que não existe. Um "ARP Reply" falso mapeando o roteador a um endereço físico que não existe, por exemplo, poderia fazer com que toda essa rede parasse de se comunicar com a Internet.
  • Fazer ataques de MAC Flooding: Muitos switches de rede quando sobrecarregados, começam a agir como um hub, enviando os pacotes em broadcast para todos os hubs da rede. Um Atacante poderia “inundar” (flood) um switch com diversos pacotes de “ARP Reply”, sobrecarregando-o e fazendo-o agir como um hub, permitindo ao atacante sniffar todos os pacotes. 
  • Fazer ataques do tipo Man-in-the-Middle: Como o nome sugere, um atacante poderia colocar a máquina dele entre a sua máquina e outra máquina da rede (o gateway, por exemplo). Dessa maneira,  todas as suas informações passam pela máquina do atacante como se ela fosse a sua saída da rede, conforme podemos ver no "Diagrama 5".
Diagrama 5 - Arp Cache Poisoning

Nesse cenário, o ataque se daria da seguinte forma:
  1. A máquina “A” tem “IP-A” e “MAC-A”. O roteador “B” tem “IP-B” e “MAC-B”.
  2. O Atacante envia “ARP Reply” para “B” informando o IP de “A” com MAC address dele (“IP-A” -> “MAC-C”).
  3. O Atacante envia “ARP Reply” para “A” informando o IP de “B” com o MAC address dele (“IP-B” -> “MAC-C”).
  4. O Atacante habilita IP forwarding e passa a monitorar ou mesmo interagir no tráfego.
Vimos acima a utilidade de um sniffer e como posicioná-los nas redes. Veremos num próximo artigo como fazer um ARP Cache Poisoning na prática utilizando a ferramenta "Cain & Abel" no Windows e com o "ArpSpoof" no Linux.

Bibliografia e ilustrações utilizadas nesse artigo e indicada aos alunos: 
- SANDERS, Chris. Practical Packet Analysis - Using Wireshark to solve real-world network problems. Ed. No Starch Press. Link: Amazon

t+

Cristiano
"It's nothing but a network layer 8 issue"  -  "There's no place like 127.0.0.1"

Nenhum comentário:

Related Posts Plugin for WordPress, Blogger...