Saturday, May 2, 2015

Remotely Triggered Black Hole (RTBH)

Today I would like to talk about one technique that helps to mitigate DOS attack - RTBH. The technique is defined by RFC 5635 (2009) which is updated (and extension) of RFC 3882 (2004). As you see it’s quite old document and today we can find much better tools to mitigate such attacks.
It isn’t complex technique, the configuration is very simple and the result of it is to send unwanted traffic to interface Null0 (silently drop) on the edge of your network. As you know, routers can easily route packets rather than analyze them and drop based on ACL entries. When DOS attack starts you can see huge number of packets that need to be processed by your router. Route all of them to the Null0 interface, requires less router resources when you compare with filtering based on access list.
The main problem is that the technique is not much granular. You can choose source or destination IP, what means you will discard legitimate traffic too. You can’t block the traffic per flow (source, destination, protocol, port). I agree, it’s much better than nothing because otherwise the traffic would block access to any server you have in your network. It isn’t ideal solution but it’s less intrusive to block access to one server (for attacker and legitimate users) than allow attacker to block your whole network.
Based on a below diagram I will implement RTBH solution:

RTHB1.jpg



R1 - EDGE/FILTERING ROUTER:
!
hostname R1
!
interface Loopback0
 ip address 150.1.1.1 255.255.255.0
!
interface FastEthernet0/0
 ip address 7.7.7.1 255.255.255.0
!
interface FastEthernet0/1
 ip address 8.8.8.1 255.255.255.0
!
router rip
 version 2
 network 7.0.0.0
 network 8.0.0.0
 network 150.1.0.0
!
router bgp 123
 bgp log-neighbor-changes
 neighbor 150.2.2.2 remote-as 123
 neighbor 150.2.2.2 update-source Loopback0
 neighbor 150.3.3.3 remote-as 123
 neighbor 150.3.3.3 update-source Loopback0
!
ip route 192.0.2.1 255.255.255.255 Null0
!

 R2 - EDGE/FILTERING ROUTER:
 
!
hostname R2
!
interface Loopback0
 ip address 150.2.2.2 255.255.255.255
!
interface FastEthernet0/0
 ip address 7.7.7.2 255.255.255.0
!
interface FastEthernet0/1
 ip address 8.8.8.2 255.255.255.0
!
router rip
 version 2
 network 7.0.0.0
 network 8.0.0.0
 network 150.2.0.0
!
router bgp 123
 bgp log-neighbor-changes
 neighbor 150.1.1.1 remote-as 123
 neighbor 150.1.1.1 update-source Loopback0
 neighbor 150.3.3.3 remote-as 123
 neighbor 150.3.3.3 update-source Loopback0
!
ip route 192.0.2.1 255.255.255.255 Null0
!
 
R3 - TRIGGER/ANNOUNCING ROUTER:
 
!
hostname R3
!
interface Loopback0
 ip address 150.3.3.3 255.255.255.0
!
interface FastEthernet0/0
 ip address 8.8.8.3 255.255.255.0
!
interface FastEthernet0/1
 ip address 9.9.9.3 255.255.255.0
!
router rip
 version 2
 network 8.0.0.0
 network 9.0.0.0
 network 150.3.0.0
!
router bgp 123
 bgp log-neighbor-changes
 redistribute static route-map ATTACK1
 neighbor 150.1.1.1 remote-as 123
 neighbor 150.1.1.1 update-source Loopback0
 neighbor 150.2.2.2 remote-as 123
 neighbor 150.2.2.2 update-source Loopback0
!
ip route 192.0.2.1 255.255.255.255 Null0
!
route-map ATTACK1 permit 10
 match tag 123
 set local-preference 200
 set origin igp
 set community no-export
 set ip next-hop 192.0.2.1
!


As you see on the ‘TRIGGER ROUTER’ there is a route map which is used to redistribute a static route with a tag equal '123’.

The current route to a host 9.9.9.5:
 
 
R2#sh ip route 9.9.9.5
Routing entry for 9.0.0.0/8
  Known via "rip", distance 120, metric 1
  Redistributing via rip
  Last update from 8.8.8.3 on FastEthernet0/1, 00:00:25 ago
  Routing Descriptor Blocks:
  * 8.8.8.3, from 8.8.8.3, 00:00:25 ago, via FastEthernet0/1
      Route metric is 1, traffic share count is 1
R2#


Once, you find out, what is the attacker IP or what is the DOS attack destination, you have to add a static route on the 'TRIGGER ROUTER’:
 
 
ip route 9.9.9.5 255.255.255.255 Null0 tag 123


The 'TRIGGER ROUTER’ sends the new route to 'EDGE ROUTERS’:
 
 
R2#sh ip route 9.9.9.5
Routing entry for 9.9.9.5/32
  Known via "bgp 123", distance 200, metric 0, type internal
  Last update from 192.0.2.1 00:00:06 ago
  Routing Descriptor Blocks:
  * 192.0.2.1, from 150.3.3.3, 00:00:06 ago
      Route metric is 0, traffic share count is 1
      AS Hops 0
      MPLS label: none
R2#


There are two variations of the technique: based on source and destination IP. For source based we need to add following command on edge routers :
 
 
 interface FastEthernet 0/0
   ip verify unicast source reachable-via any


Useful links:
https://tools.ietf.org/html/rfc5635
https://tools.ietf.org/html/rfc3882

No comments:

Post a Comment