Ferramentas do usuário

Ferramentas do site


infra-estrutura:seguranca:remotely_triggered_black_hole_rtbh

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.

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

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.

Att.