Ataques ao STP.
Petukhov Oleg, advogado de Direito Internacional e proteção de dados pessoais, especialista em informação segurança, proteção de informações e dados pessoais.
Canal do Telegram: https://t.me/protecaodaInformacao
Grupo em Telegram: https://t.me/protecaodaInformacao1
Site: https://legascom.ru
Correio eletrónico: online@legascom.ru
#segurançadaInformação #Segurançadainformação
O protocolo STP (Spanning Tree Protocol) é projetado para evitar loops de pacotes na rede quando há rotas duplicadas. Funciona da seguinte forma. Em primeiro lugar, os switches que estão conectados são detectados. Em seguida, o Root Bridge, principal, Switch raiz é selecionado. Em seguida, um algoritmo especial bloqueará as portas do switch, que criam laços na topologia resultante.
Para construir uma estrutura de árvore de uma rede sem loops, a rede deve definir o switch raiz (root switch) a partir do qual a árvore é construída. O switch com o menor valor de ID é selecionado como raiz. O identificador de um switch é um número de oito bytes, com seis bytes menores constituindo o endereço MAC de sua unidade de controle e dois bytes maiores sendo configurados manualmente. Isso permite que o administrador de rede influencie o processo de seleção do switch raiz. Se o administrador não interferir nesse processo, o comutador de raiz será selecionado aleatoriamente - ele será um dispositivo com um endereço MAC mínimo da unidade de controle. Essa escolha pode estar longe de ser racional. Portanto, selecione o switch raiz com base na topologia de rede existente e atribua manualmente o menor identificador. Ao selecionar automaticamente, um switch com um valor de endereço MAC menor de sua unidade de controle torna-se raiz. Em seguida, uma porta raiz é definida para cada switch, que é a porta que tem a distância mais curta para o switch raiz através da rede. Para cada segmento lógico da rede, uma chamada ponte designada é selecionada, uma das portas receberá os pacotes do segmento e os transmitirá na direção da ponte raiz através da porta raiz da ponte.
O que o atacante pode fazer? Ele pode, como no exemplo anterior, fingir ser um switch, direcionando um pacote BPDU para o switch que está sendo atacado, no qual ele pode fingir uma prioridade, um endereço MAC, para se tornar o switch raiz e interceptar o tráfego de rede. O switch raiz é aquele que tem a maior prioridade. Se a prioridade de vários switches for a mesma, o endereço MAC é usado para selecionar o switch raiz, que é menor e se torna raiz.
Vamos fazer um pequeno trabalho prático para descobrir os endereços MAC de outras máquinas e substituir o Mac por um. Para isso, precisamos do Wireshark. Você deve, como no exemplo dos hubs, ativar a escuta da interface de rede. Só que agora não estamos interessados no tráfego HTTP, mas no STP. Precisamos de descobrir o endereço MAC do switch raiz. Para obter essa informação, é necessário conhecer a topologia da rede. Você pode obter o endereço MAC da porta raiz usando o Wireshark.
Para obter informações sobre os endereços MAC, é necessário visualizar o valor dos Campos Source e Destination no cabeçalho do quadro interceptado. Estamos interessados na fonte, para o endereço falso do nosso comutador, especificamos um endereço menor, por exemplo, reduzido por um, como no exemplo abaixo.
root@kali:~# macchanger –mac=xx:xx:xx:xx:xx:xx-1 eth0
Current MAC: 00:16:ec:f1:45:e8 (unknown)
Faked MAC: xx:xx:xx:xx:xx:xx (unknown)
Reinicie a interface de rede.
root@kali:~# ifdown eth0
root@kali:~# ifup eth0
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Listening on LPF/eth0/04:2f:11:65:fc:0a
Sending on LPF/eth0/04:2f:11:65:fc:0a
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
DHCPOFFER of 192.168.1.8 from 192.168.1.101
DHCPREQUEST of 192.168.1.8 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.1.8 from 192.168.1.101
bound to 192.168.1.8 -- renewal in 42928 seconds.
if-up.d/mountnfs[eth0]: waiting for interface eth1 before doing NFS mounts
if-up.d/mountnfs[eth0]: waiting for interface eth2 before doing NFS mounts
if-up.d/mountnfs[eth0]: waiting for interface ath0 before doing NFS mounts
if-up.d/mountnfs[eth0]: waiting for interface wlan0 before doing NFS mounts
Por padrão, as prioridades devem ser as mesmas, respectivamente, o protocolo STP selecionará as portas com o menor peso para a rota.
Agora, o invasor precisa enviar um pacote BPDU que inclua seu ID de switch. Outros switches também enviam seus ids em resposta, e se o ID enviado pelo invasor contiver o menor Mac, ele será selecionado como root em prioridades iguais.
Você pode criar um pacote BPDU falso da seguinte forma:
Na janela do construtor de pacotes PackEth, você deve especificar os endereços MAC de origem e destino dos pacotes. O endereço de origem deve ser falso.
O campo User defi Ned network payload especifica os seguintes valores:
o identificador da versão do protocolo STA é de 2 bytes. Os switches devem suportar a mesma versão do protocolo STA, caso contrário, uma configuração ativa com loops pode ser estabelecida;
tipo BPDU - 1 byte. Existem dois tipos de BPDU: o BPDU de configuração, ou seja, o pedido para se tornar um switch raiz, que determina a configuração ativa, e o BPDU de notificação de reconfiguração, que é enviado pelo switch que detecta um evento que requer reconfiguração -
falha de link, falha de porta, alteração de prioridades de switch ou porta;
bandeiras - 1 byte. Um bit contém o sinalizador de alteração de configuração, o segundo contém o sinalizador de confirmação de alteração de configuração;
ID do switch raiz - 8 bytes;
distância à raiz - 2 bytes;
ID do switch - 8 bytes;
ID da porta - 2 bytes;
o tempo de vida da mensagem é de 2 bytes. Medido em unidades de 0,5 s, é usado para detectar mensagens desatualizadas. Quando um pacote BPDU passa pelo switch, ele adiciona tempo de atraso ao tempo de vida do pacote pelo switch;
o tempo máximo de vida de uma mensagem é de 2 bytes. Se um pacote BPDU tiver um tempo de vida superior ao máximo, ele será ignorado pelos switches;
o intervalo hello através do qual os pacotes BPDU são enviados;
o atraso na mudança de Estado é de 2 bytes. A latência determina o tempo mínimo de transição das portas do switch para o estado ativo. Esse atraso é necessário para evitar loops temporários durante a reconfiguração. O pacote BPDU não tem notificações de reconfiguração em todos os campos, exceto os dois primeiros. Você pode enviar o pacote compilado pressionando Send.
Se nos passos anteriores calculamos corretamente o MAC dos outros STP, a ideia é que o algoritmo desse protocolo recalcule as rotas para que todo o tráfego seja enviado para a nossa porta falsa. Para evitar ser detectado, o hacker precisará garantir que o tráfego seja transportado através de sua máquina até o destino final. Caso contrário, todo o tráfego não vai a lugar nenhum e o fato de que o Mac é falso será rapidamente detectado. No entanto, não vamos resolver esse problema no âmbito deste post.
Que medidas devem ser tomadas para eliminar essa vulnerabilidade?
Em primeiro lugar, os pacotes BPDU devem ser banidos de portas que não tenham switches. E se esse pacote ainda chegar, coloque essa porta no modo shutdown. Em seguida, nosso switch raiz deve ser protegido para que nenhum outro switch raiz, incluindo o atacante, possa ser selecionado sob nenhuma circunstância. Um atacante não terá dificuldade em priorizar um switch mestre real e um endereço MAC menor para garantir que o atacante seja root.
Para resolver esse problema, precisamos colocar todas as portas do switch em um modo STP especial chamado portfast. Depois disso, o cliente conectado a essa porta não participará da resolução de rotas usando o algoritmo STP (isso pode levar muito tempo, até 40 segundos para criar uma topologia de rede), e só então começará a transferir dados do usuário pela porta. Por padrão, o modo portfast nos switches Cisco está desativado, por isso precisamos configurá-lo manualmente. Também configuramos a desativação da porta no caso de receber um pacote BPDU.
Switch# conf t
Switch (config)# int range f0/1-24
Switch (config-if-range)# spanning-tree portfast
Switch(config)# spanning-tree portfast bpguard default
Switch(config)# int f0/1
Switch (config-if)# spanning-tree guard root
O conteúdo das duas primeiras linhas nos é familiar a partir dos exemplos anteriores. No terceiro, ativamos o modo portfast. Além disso, indicamos que nesses portos a circulação de pacotes BPDU é contra-indicada. E os dois últimos comandos são executados para proteger o root bridge. Ou seja, assumimos que outro switch está conectado ao nosso software de porta f0/1 e, portanto, deve ser usado como root.
Agora, mesmo que um invasor aponte um pacote BPDU com prioridade máxima e um endereço MAC menor para o switch, ele ainda não será capaz de se tornar um switch raiz e redirecionar todo o tráfego através dele.




