CAM Table Overflow – Exploitation

É muito provável que você já tenha lido em algum lugar ou mesmo ouvido alguém falar que o switch não permite que você sniffe o tráfego que não é direcionado à sua máquina por que ele apenas envia os pacotes para as partes interessadas. Ou seja, se o tráfego não era direcionado para você, ele nunca chegará na placa de rede da sua máquina. Embora em seu funcionamento padrão o este seja o caso, existem meios de se subverter esse sistema e fazer com que o tráfego seja enviado para todas as portas do switch. Efetivamente fazendo com que o switch se comporte como um hub.

Isso acontece quando um atacante começa a enviar milhares de endereços MAC inválidos para o switch armazenar em memória. Quando essa memória se esgota, o seu switch vai começar a enviar pacotes por todas as portas. Interessante, né?

Aqui você vai aprender como isso é possível, qual ferramenta se usa para executar o ataque e também como mitigar o ataque em switches Cisco.

 

Como funciona um switch

Quando o switch foi introduzido no mercado há anos atrás, ele causou uma pequena revolução nas redes da época. Antes do switch, você tinha (entre outros) o hub. Este equipamento atua apenas na camada 1 do modelo OSI, ou seja, ele atua apenas replicando o sinal elétrico que entra em uma porta para todas as outras portas. Assim, todos os equipamentos que estão ligados ao mesmo hub receberão os pacotes enviados por uma estação mesmo que eles não sejam o destino final. Isso fazia com que apenas uma transmissão pudesse ocorrer por vez e que qualquer um pudesse facilmente sniffartodo o tráfego da rede, bastando colocar a sua interface em modo promíscuo.

Com o switch, isso mudou drasticamente. Agora, você pode ter múltiplas transmissões simultaneas desde que estas não envolvam os mesmos hosts (no caso de envolver os mesmos hosts, os pacotes serão entregues de maneira alternada) e colisões não acontecem mais. Vamos imaginar que você tenha quatro hosts ligados ao mesmo switch, como na figura abaixo:

No cenário acima, o switch é capaz de trabalhar com transmissões simultaneas entre A e B e C e D. Isso aumenta muito o desempenho da rede, diminui a chance de colisões (que minam qualquer arquitetura de rede) e também economiza recursos já que nenhum pacote da transmissão entre A e B será enviado para C ou D. Trocando em miúdos:

  • Um frame chega em uma porta do switch
  • Se for um broadcast, ele será enviado para todas as portas do switch menos para a porta onde o frame foi recebido
  • Se o frame for destinado a um único host e não se sabe em qual porta este host está conectado (ou seja, este endereço MAC não está na CAM table), o frame é enviado para todas as portas menos para a porta onde ele foi recebido
  • Se o MAC estiver na CAM table e o host não estiver conectado na mesma porta onde recebemos o frame, o frame é enviado para a porta correta

Como você viu, a CAM table tem um papel importante no switching de pacotes. Mas o que é a CAM table?

O que é a CAM table?

O exemplo acima realmente não faz juz ao switch. Switches modernos são capazes de trabalhar com milhares de conexões simultaneas sem se perder. Isso acontece por que eles mantém um “mapeamento” em sua memória dizendo para ele em qual porta um host (ou hosts) está localizado. A esta tabela damos o nome de CAM (Content Addressable Memory) table, como dito anteriormente. Para popular a CAM table, o processo é o seguinte:

  • O switch recebe o frame enviado por um host
  • O endereço MAC de origem é lido
  • Verifica-se a CAM table procurando pelo endereço presente no frame em questão. Se este endereço não for encontrado, ele é adicionado à tabela.
  • O frame é encaminhado e o mesmo processo é feito para o próximo frame na fila.

Na CAM table então, há o mapeamento de endereço MAC e porta, por exemplo:

Porta1 F0-4D-A2-E4-59-5F
Porta2 AB-52-EF-C1-CF-32
Porta3 98-E1-CB-AD-33-AA,34-AA-BB-CC-DD-23

Vale notar também que, dependendo da configuração, uma porta do switch pode corresponder a vários MACs (por exemplo, quando se cascateia switches).

Bom, você já deve ter imaginado onde nós estamos chegando. A CAM table é armazenada em um recurso finito do switch: a memória RAM. E se nós enviarmos bilhões de endereços MACs inválidos para o switch? Ele vai começar a armazenar todos na CAM table até chegar a um ponto onde o espaço em memória será esgotado. Quando chegarmos a este ponto, o switch vai passar a agir exatamente como um hub: todos os pacotes que chegam serão enviados para todas as portas, permitindo que você sniffe todo o tráfego da rede.

Este ataque se chama CAM table overflow e pode ser executado utilizando uma ferramenta bem simples chamada Macof.

Macof: a ferramenta para executar o CAM table overflow

Macof é uma ferramenta integrante do pacote “dsniff”, disponível nos repositórios oficiais da maioria das distribuições Linux mais atuais. Ele é um port em C da ferramenta original (desenvolvida em Perl) por Ian Vitek. E tem um funcionamento simples: inunda a rede com endereços MAC aleatórios, fazendo com que switches configurados erroneamente passem a se comportar como um hub e minando a segurança de uma rede pois permite que um atacante consiga facilmente sniffar o tráfego.

O Macof é bem simples de usar e tem apenas algumas opções:

  • -i <interface>: Define qual será a interface por onde serão enviados os pacotes.
  • -s <endereço IP>: Define qual será o IP de origem do pacote.
  • -d <endereço IP>: Especifica o endereço IP de destino.
  • -e <endereço MAC>: Permite que você diga qual será o endereço MAC de destino no pacote a ser gerado.
  • -x <porta>: Define a porta TCP de origem.
  • -y <porta>: Define a porta TCP de destino.
  • -n <número>: Especifica quantos pacotes serão enviados.

Se você não quiser preencher alguns (ou mesmo nenhum) dos valores da lista acima, não tem problema: o Macof vai gerar valores aleatórios para você. Por exemplo, a maneira mais simples de se executar o Macof:

E pronto, a CAM table do switch já começou a ser inundada com endereços MAC aleatórios.

Uma vez que o limite de Tabela CAM tem sido alcançado, o comutador irá iniciar inundando os pacotes de todas as portas (semelhante ao comportamento de um hub). Para aproveitar isso, lançar ettercap usando o seguinte comando:
Quote

root@nullity:~/# ettercap -C

 Once in ettercap, do the following:
  • Options   => Promiscuous
  • Sniff      => Unified -> eth2 (or whatever your active interface is)
  • Start      => Start Sniffing
  • View      => Statistics

 

Etercap começa imediatamente a sniffing para o tráfego. Se desejar, os registros podem ser definidos e armazenados como especificado. Isto é ideal para inspeção posterior, e para inspeção de tráfego que ettercap não marcar como interessante.

Se um usuário se conecta a um site a partir de outro PC na rede, os dados são vomitou todas as portas, fazendo com que todo o tráfego não-SSL suscetível a ataques de reconhecimento:

Se algum tráfego interessante ou sinalizada é identificado por ettercap, vai exibi-lo no “User Messages”  na parte inferior da tela:

Pwned!

Fonte: Link1 , Link2

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s