Adacor - Hosting, IT Security

BGP Manipulation leicht gemacht

29. September 2014 von Simon Roehl

Mittels FlowSpec RFC5575 ist es möglich, IP-Routen so zu manipulieren, dass diese als Trafficfilter analog zu Access Control Lists fungieren.

Wie die Manipulation von IP-Routen funktioniert, zeige ich euch anhand eines kleinen Beispiels.

In diesem Beispiel nutzen wir wieder Exabgp, da wir hier eine komplette Unterstützung aller bereits standardisierten FlowSpec-Features haben.

Nach Etablierung von BGP-Sessions zwischen dem oder den Router(n) an dem die Pakete eintreffen, die wir manipulieren wollen, können wir nun Flowspec Routen setzen.

Diese Routen landen nicht in der „normalen“ Routing Tabelle des Routers, sondern in einer für FlowSpec reservierten Tabelle.

In unserem Scenario kommt JunOS von Juniper Networks zum Einsatz, daher heißt die Routing Tabelle inetflow.0.

Ablauf einer simplen exabgp Konfiguration

group examplerouters {

local-as 65500;

peer-as 65500;

router-id 192.0.2.1;

local-address 192.0.2.1;

hold-time 10;

flow {

route example-1 {

match {

source 198.51.100.0/24;

destination 203.0.113.0/30;

destination-port  =80;

protocol tcp;

}

then {

discard;

}

}

}

neighbor 192.0.2.2 {

description „examplerouter01“;

graceful-restart 5;

family {

inet4 flow;

}

}

neighbor 192.0.2.3 {

description „examplerouter02“;

graceful-restart 5;

family {

inet4 flow;

}

}

process  tcp-server{

run /etc/exabgp/tcp-server;

}

Die Gruppe „examplerouters“ beinhaltet zwei Router (examplerouter 01/02) und tauscht Flow Routen untereinander aus (family inet4 flow).

In dem durch Klammern inkludierten Teil von „flow“ setzen wir nun unseren Filter example-1. Dieser matched auf verschiedene Parameter:

Wenn Quell IP Adressen von 198.51.100.0-255 auf die Zieladressen von 203.113.0-3 via TCP auf Port 80 zugreifen möchten, dann soll der Router dieses Paket verwerfen.

Als Ergebnis hat man auf dem Router dann folgenden Eintrag in der Routingtabelle inetflow.0:

203.0.113.0/30,198.51.100.0/24,proto=6,dstport=80/term:2 (1 entry, 1 announced)

*BGP    Preference: 170/-101

Next hop type: Fictitious

Address: 0x8e6f244

Next-hop reference count: 2

State: <Active Int Ext>

Local AS: 65500 Peer AS: 65550

Age: 3d 8:06:19

Task: BGP_65500.192.0.2.1+47940

Announcement bits (1): 0-Flow

AS path: I

AS path: Recorded

Communities: traffic-rate:0:0

Accepted

Localpref: 100

Router ID: 192.0.2.1

Um nun während eines Angriffes zu verifizieren, dass der Filter auch greift schauen wir uns die vom Router geführte Statistik dazu an:

show firewall filter __flowspec_default_inet__

Filter: __flowspec_default_inet__

Counters:

Name                                                                                                                 Bytes              Packets

203.0.113.0/30,198.51.100.0/24,proto=6,dstport=80                    60673                    1216

Wir haben in diesem Beispiel bereits 1.216 Pakete mit 60.673 Bytes gefiltert.

Dasselbe gilt für unterschiedliche ICMP Pakettypen, Pakete mit bestimmten DSCP Feldern etc…

Durch die im Artikel „Anycast Leichtgemacht“ genannten Checkscripte kann man selbstverständlich auch automatisiert auf Angriffe reagieren. Natürlich nur, wenn man so einen Automatismus möchte.

Hierzu muss ein entsprechender Sensor mitbekommen, dass ein Angriff läuft. Dieser Sensor misst die Art des Angriffs und von welchen Quell-IPs auf welche Ziel-IPs der Angriff stattfindet. Mit diesen Information kann man nun der API von ExaBGP mitteilen, entsprechende FlowSpec Rules zu senden.

Erfolgreich in der Cloud

Nutzen Sie vorhandene Ressourcen jetzt effektiver!

Informieren Sie sich über unsere Cloud Infrastruktur made in Frankfurt.

Verwandte Artikel