Skip to main content

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

Comments

Popular posts from this blog

What should you know about HA 'override enabled' setting on Fortigate?

High availability is mandatory in most of today's network designs. Only very small companies or branches can run their business without redundancy. When you have Fortigate firewall in your network you have many options to increase network availability. You can use Fortigate Clustering Protocol ( FGCP ) or Virtual Router Redundancy Protocol ( VRRP ). FGCP has two modes: 'override' disabled (default) and 'override' enabled . I'm not going to explain how to set up HA as you can find many resources on Fortinet websites: https://cookbook.fortinet.com/high-availability-two-fortigates-56/ https://cookbook.fortinet.com/high-availability-with-fgcp-56/ Let's recap what is the main difference between them. The default HA setting is 'override' disabled and this is an order of selection an active unit: 1) number of monitored interfaces - when both units have the same number of working (up) interfaces check next parameter 2) HA uptime - an ...

FortiGate and GRE tunnel

Recently I worked on one project where a client requested to re-route web traffic to the GRE tunnel to perform traffic inspection. I would like to share with you what is required if you configure it on FortiGate. We need a new GRE interface and policy base routing (PBR) to change the route for specific source IPs. Of course you need firewall policies to permit the traffic. Let's start with GRE interface. Unfortunately you can't configure it using the GUI, only CLI is the option: config system gre-tunnel edit "gre1" set interface "port1" set local-gw 55.55.55.55 set remote-gw 44.44.44.44 next end When the end peer is Cisco router, you need to set the IP for the GRE interface: config system interface edit gre1 set ip 192.168.10.10 255.255.255.255 set remote-ip192.168.10.20 end In next step we need to fix routing. We need the alternate path via GRE but to keep the route in the active routing table you need to set the same AD (adminis...

Inpection of asymmetric sessions on FortiGate

There is one feature available on FortiGate, and I think you should know it, as it modifies a bit what we know about stateful firewalls. In past every packet was treated individually and you had to create policies in both directions. With stateful firewalls we can track connections, and by checking couple of attributes, we can treat them as part of the same session. For example when you initiate connection from a host1 to host2, the returning connection from host2 to host1 will be treated as part of the same connection (session). They have to have the same source/destination and destination/source IPs, port numbers and interfaces.There is an exception from this rule and FortiGate in some specific cases can accept connections on port which was not used in the initial connection. Let me explain how it works on the below example:      The host1 has a default gateway on R1 (10.0.1.2), but you may notice that it is not the optimal path to host2 subnet. When we analyze ...