====== Remotely Triggered Black Hole RTBH ====== ===== O que é? ===== Estou montando um ambiente para testes de defesa ou alguma defesa contra DoS(Denial of Service) ou DDoS(Distributed Denial of Service), ou seja, ataques contra infra-estrutura de redes de computadores de negação de serviço. E o que quer dizer negação de serviço, consiste em negar acesso a um serviço de redes de computadores, um exemplo: servidores de hospedagem de sites, servidores de e-mail, etc. Como é feito a negação? cada um destes serviço tem uma quantidade de recursos para fornecer o serviço, quando todos os recursos são ocupados as proximas requisições serão negadas. O que são esses recursos? recurso computacional(hardware, memória, uso de CPU, etc) e também recursos de rede como largura de banda utilizada para o fornecimento do serviço. Lembrando seja ele um servidor de hospedagem sites como terra.com.br, globo.com.br, são exemplo. Montei o seguinte exemplo abaixo para tentar demostrar o recurso de RTBH. Vejam a topologia abaixo. {{ :infra-estrutura:seguranca:rtbh-blackhole.png?direct&400 |}} ===== Explicando o ambiente ===== Neste ambiente temos três AS(Autonomous Systems - Sistema autonômo). Resumindo sistema autonômo e um conjunto de equipamentos ou uma infra-estrutura de redes sob um determinado orgão ou empresa. Para exemplificar temos três AS's e antes de falar do RTBH vamos montar o ambiente funcionando normalmente. Vou colocar a configuração de cada roteador. **R1** interface Loopback0 ip address 10.10.10.1 255.255.255.0 ! interface FastEthernet0/0 ip address 192.168.10.1 255.255.255.0 duplex full ! interface FastEthernet1/0 ip address 192.168.20.1 255.255.255.0 speed auto duplex auto ! router bgp 10 network 10.10.10.0 mask 255.255.255.0 network 192.168.10.0 network 192.168.20.0 neighbor 192.168.10.2 remote-as 20 neighbor 192.168.10.2 soft-reconfiguration inbound neighbor 192.168.20.2 remote-as 30 neighbor 192.168.20.2 soft-reconfiguration inbound **R2** interface Loopback0 ip address 30.30.30.1 255.255.255.0 ! interface Loopback1 ip address 50.50.50.1 255.255.255.0 ! interface FastEthernet0/0 ip address 192.168.20.2 255.255.255.0 duplex full ! router bgp 30 network 30.30.30.0 mask 255.255.255.0 network 50.50.50.0 mask 255.255.255.0 neighbor 192.168.20.1 remote-as 10 neighbor 192.168.20.1 soft-reconfiguration inbound **R3** interface Loopback0 ip address 20.20.20.1 255.255.255.0 ! interface Loopback1 ip address 40.40.40.1 255.255.255.0 ! interface FastEthernet0/0 ip address 192.168.10.2 255.255.255.0 duplex full ! interface FastEthernet1/0 ip address 60.60.60.1 255.255.255.0 speed auto duplex auto ! router bgp 20 network 20.20.20.0 mask 255.255.255.0 network 40.40.40.0 mask 255.255.255.0 network 60.60.60.0 mask 255.255.255.0 neighbor 192.168.10.1 remote-as 10 neighbor 192.168.10.1 soft-reconfiguration inbound **R4** interface FastEthernet0/0 ip address 60.60.60.2 255.255.255.0 duplex full ! ip route 0.0.0.0 0.0.0.0 60.60.60.1 ===== Teste de conectividade ===== Vamos testar um ping a partir do roteador R2 para R4. R2#ping 60.60.60.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 60.60.60.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 40/40/44 ms R2# Vejamos a tabela BGP do R2. R2#show ip bgp BGP table version is 11, local router ID is 50.50.50.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 10.10.10.0/24 192.168.20.1 0 0 10 i *> 20.20.20.0/24 192.168.20.1 0 10 20 i *> 30.30.30.0/24 0.0.0.0 0 32768 i *> 40.40.40.0/24 192.168.20.1 0 10 20 i *> 50.50.50.0/24 0.0.0.0 0 32768 i *> 60.60.60.0/24 192.168.20.1 0 10 20 i *> 192.168.10.0 192.168.20.1 0 0 10 i r> 192.168.20.0 192.168.20.1 0 0 10 i R2# Aprendemos todas as redes do AS 10 e 30. R2#ping 10.10.10.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.10.10.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 8/11/16 ms R2#ping 20.20.20.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 20.20.20.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 12/29/40 ms R2#ping 30.30.30.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 30.30.30.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms R2# Vejamos um traceroute. R2#traceroute 10.10.10.1 Type escape sequence to abort. Tracing the route to 10.10.10.1 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.20.1 [AS 10] 40 msec 16 msec 16 msec R2#traceroute 20.20.20.1 Type escape sequence to abort. Tracing the route to 20.20.20.1 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.20.1 [AS 10] 12 msec 16 msec 16 msec 2 192.168.10.2 [AS 10] 16 msec 28 msec 24 msec R2#traceroute 60.60.60.2 Type escape sequence to abort. Tracing the route to 60.60.60.2 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.20.1 [AS 10] 12 msec 16 msec 12 msec 2 192.168.10.2 [AS 10] 16 msec 36 msec 36 msec 3 60.60.60.2 [AS 20] 68 msec 52 msec 56 msec R2# Podemos constatar que a conectividade flue normalmente ===== Simulando um ataque de DoS ===== Bom para simular que alguém no AS 30 esta atacando o endereço IP 60.60.60.2 no AS 20. Vamos validar através do comando ping. R2#traceroute 60.60.60.2 Type escape sequence to abort. Tracing the route to 60.60.60.2 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.20.1 [AS 10] 92 msec 56 msec 8 msec 2 192.168.10.2 [AS 10] 12 msec 28 msec 28 msec 3 60.60.60.2 [AS 20] 12 msec 28 msec 28 msec R2#ping 60.60.60.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 60.60.60.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 8/24/32 ms R2# Veja que para chegar no endereço IP 60.60.60.2 passamos pelos endereços 192.168.20.1 e 192.168.10.2 do AS 10. Agora como faremos a técnica de RTBH. Na verdade eu considero o RTBH um paleativo não é uma solução 100% eficiente mas vamos lá. Vou tentar explicar o RTBH baseado no endereço de destino. Funciona da seguinte forma, resumindo: * Filtragem baseado no endereço de rede de destino. * Um trigger é gerado e uma atualização é gerado e repassado com um endereço de next-hop associado a uma interface null0. * Roteadores de borda tem pré-configurado rotas estáticas apontando para interface null0. Normalmente endereço inválido ou não roteados RFC1918. * Para iniciar a filtragem, o nó afetado ou sendo atacado adiciona uma rota estática com o destino o endereço atacado, e a rota estática e redistribuída para todos os peers. * Caso não seja mais necessário a filtragem, e necessário somente remover a rota. * Grande desvantagem e que todos os tráfegos serão bloqueados, tráfego legítimo ou malicioso. Vamos as configurações primeiramente no roteador de transito ou seja o roteador do AS10 **R1** interface Null0 no ip unreachables ! ip route 192.0.2.1 255.255.255.255 Null0 ! ip community-list 1 permit 10:300 ! route-map blackhole permit 10 match community 1 set local-preference 200 set origin igp set community no-export set ip next-hop 192.0.2.1 ! route-map blackhole permit 20 ! Note que definimos a comunidade BGP que iremos utilizar 10:300 e criamos um route-map chamado blackhole com ação default permitir o que combinar a community-list(uma access-list de comunidades) 1 e configurar o next-hop 192.0.2.1, caso não combine com a community-list 1 o fluxo seguira para o route-map id 20 que permite tudo. Agora precisamos aplicar o route-map. **R1** router bgp 10 bgp log-neighbor-changes network 10.10.10.0 mask 255.255.255.0 network 192.168.10.0 network 192.168.20.0 neighbor 192.168.10.2 remote-as 20 neighbor 192.168.10.2 soft-reconfiguration inbound neighbor 192.168.10.2 route-map blackhole in neighbor 192.168.10.2 disable-connected-check neighbor 192.168.20.2 remote-as 30 neighbor 192.168.20.2 soft-reconfiguration inbound neighbor 192.168.20.2 route-map blackhole in neighbor 192.168.20.2 disable-connected-check No As de transito, ou seja, AS 10 somente precisamos disso. Vamos ao AS 20 **R3** ! route-map blackhole permit 5 match tag 66 set community 10:300 ! route-map blackhole permit 10 ! Agora nesse route-map se uma rota for marcada com a tag 66 o route-map configura a communidade bgp 10:300 e prossegue o route-map permitindo outros anúncios. Agora precisamos dizer para anunciar para todos os peers, ou seja vamos redistribuir rotas estáticas do R3. redistribute static route-map blackhole Ficando a configuração completa como router bgp 20 bgp log-neighbor-changes network 20.20.20.0 mask 255.255.255.0 network 40.40.40.0 mask 255.255.255.0 network 60.60.60.0 mask 255.255.255.0 redistribute static route-map blackhole neighbor 192.168.10.1 remote-as 10 neighbor 192.168.10.1 soft-reconfiguration inbound ===== Testando o ataque e contra-ataque :) ===== Vamos testar um ping para o destino 60.60.60.2 R2#traceroute 60.60.60.2 Type escape sequence to abort. Tracing the route to 60.60.60.2 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.20.1 [AS 10] 64 msec 28 msec 4 msec 2 192.168.10.2 [AS 10] 44 msec 8 msec 16 msec 3 60.60.60.2 [AS 20] 48 msec 40 msec 40 msec R2#ping 60.60.60.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 60.60.60.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 12/32/40 ms R2# Ataque ou ping bem sucedido :) Agora vamos mandar uma caralhada de pacotes uns 1000 e depois vamos bloquear. O alvo do "ataque" é 60.60.60.2 então devemos criar uma rota com tag 66 no AS 20 no roteador R3 que automaticamente essa rota estática será marcada como communidade BGP de blackhole do AS 10. ip route 60.60.60.2 255.255.255.255 Null0 tag 66 R2#ping Protocol [ip]: Target IP address: 60.60.60.2 Repeat count [5]: 500 Datagram size [100]: Timeout in seconds [2]: Extended commands [n]: Sweep range of sizes [n]: Type escape sequence to abort. Sending 500, 100-byte ICMP Echos to 60.60.60.2, timeout is 2 seconds: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUU Success rate is 19 percent (96/500), round-trip min/avg/max = 8/33/68 ms R2# Repare que no momento que inserimos a rota o R2 não conseguiu mais conectividade vamos visualizar a tabela de rotas de R1. R1#sh ip route Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP + - replicated route, % - next hop override Gateway of last resort is not set 10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks C 10.10.10.0/24 is directly connected, Loopback0 L 10.10.10.1/32 is directly connected, Loopback0 20.0.0.0/24 is subnetted, 1 subnets B 20.20.20.0 [20/0] via 192.168.10.2, 00:23:35 30.0.0.0/24 is subnetted, 1 subnets B 30.30.30.0 [20/0] via 192.168.20.2, 00:23:35 40.0.0.0/24 is subnetted, 1 subnets B 40.40.40.0 [20/0] via 192.168.10.2, 00:23:35 50.0.0.0/24 is subnetted, 1 subnets B 50.50.50.0 [20/0] via 192.168.20.2, 00:23:35 60.0.0.0/8 is variably subnetted, 2 subnets, 2 masks B 60.60.60.0/24 [20/0] via 192.168.10.2, 00:23:35 B 60.60.60.2/32 [20/0] via 192.0.2.1, 00:22:32 192.0.2.0/32 is subnetted, 1 subnets S 192.0.2.1 is directly connected, Null0 192.168.10.0/24 is variably subnetted, 2 subnets, 2 masks C 192.168.10.0/24 is directly connected, FastEthernet0/0 L 192.168.10.1/32 is directly connected, FastEthernet0/0 192.168.20.0/24 is variably subnetted, 2 subnets, 2 masks C 192.168.20.0/24 is directly connected, FastEthernet1/0 L 192.168.20.1/32 is directly connected, FastEthernet1/0 R1# Vamos visualizar a tabela BGP R1#sh ip bgp BGP table version is 10, local router ID is 10.10.10.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 10.10.10.0/24 0.0.0.0 0 32768 i *> 20.20.20.0/24 192.168.10.2 0 0 20 i *> 30.30.30.0/24 192.168.20.2 0 0 30 i *> 40.40.40.0/24 192.168.10.2 0 0 20 i *> 50.50.50.0/24 192.168.20.2 0 0 30 i *> 60.60.60.0/24 192.168.10.2 0 0 20 i *> 60.60.60.2/32 192.0.2.1 0 200 0 20 i *> 192.168.10.0 0.0.0.0 0 32768 i *> 192.168.20.0 0.0.0.0 0 32768 i R1# Note que a rota para o destino 60.60.60.2 foi aprendida e inserida na tabela de roteamento como o gateway o endereço ip 192.0.2.1. Sendo este endereço IP inválido, e não conseguindo conectividade. Agora como podemos constatar que o trafego não esta chegando no AS 20? para esse ambiente estou utilizando o GNS3 vamos capturar pacotes na interface FastEthernet0/0 de R3 para comprovar isso {{ :infra-estrutura:seguranca:rtbh-blackhole1.png?direct&400 |}} Iniciei a captura e executei o comando ping para 60.60.60.2 que é o endereço sendo atacado que criei a rota marcando com tag e executei o comando ping para 60.60.60.1 o qual não esta na blackhole e o mesmo respondeu. Sendo assim podemos notar que o trafego de flood não consumira seu link de dados mas em contrapartida você ficará inacessivel ao serviço no endereço IP 60.60.60.2. {{ :infra-estrutura:seguranca:rtbh-blackhole2.png?direct&400 |}} Att.