BGP Community Yardımı İle DDOS Saldırılarını Önlemek

BGP COMMUNITY KULLANIMI

Community Nedir?

BGP (Border Gateway Protocol) community’leri, BGP ile değiş tokuş işlemi yapılan rota bilgilerini (prefix) nitelendirmek amacıyla kullanılan etiketlerdir. Bu etiketler sayesinde prefixler kategorize edilebilir ve yönetilebilirler.

BGP community bilgisi komşulara gönderilen veya onlardan alınan update’lere bir ek olarak (TAG) iliştirilirler. Bu ek bilgiler sayesinde komşular alınan prefix’lere karşı şartlandırılabilirler.

Community etiketlerini bir route-map yardımı ile kolayca uygulayabiliriz. Ancak burada dikkat etmemiz gereken nokta şudur: bir community uygulanmış route bilgisi bir diğer komşuya aktarılırken default olarak community etiketi’i silinir öyle gönderilir. Bu sebeple bir devamlılık düşünülüyorsa route bilgisinin gönderildiği veya alındığı tüm yerlerde veya gerekli yerlerde community etiketi uygulanmalıdır.

Community bir route-map altında şartları sağlayan rotalara “set” komutu ile kolayca uygulanır.

route-map <route-map ismi>

match <eşleşme şartı>

set community <community değeri>

router bgp <ASN>

neighbor x.x.x.x send-community

neighbor x.x.x.x route-map neighbor x.x.x.x in/out

Community Formatı

Community etiketleri 32 bit uzunluğa sahiptirler. Bu parametreler doğrudan 32 bit’in tamamını kullanarak ifade edilebilir. Veya ilk 16 bit ASN (Autonomus System Number) kalan diğer 16 bit ise istenilen değerleri temsil edecek şekilde kullanılabilir.

Community değerleri heksadesimal olarak; 0x00000000’dan 0x0000FFFF’a kadar kullanılabilir, 0xFFFF0000’dan 0xFFFFFFFF’a kadar da çeşitli standartlar veya denemeler amacıyla rezerve edilmiş aralıklardan oluşmaktadır.

Bu aralıklar günümüzdeki bir çok router’da (Cisco’da “new-format” olarak tabir edilen) yeni bir formatta ve ASN:<DEĞER> olacak şekilde gösterilmektedir. Bu desimal format ile kullanılabilir community aralığı 1:0’dan 65534:65535’e kadar uzanmaktadır.

Well-Known Communities

BGP community değerlerinden bazıları standarttır ve tüm cihazlar tarafından ne manaya geldikleri bilinmektedir. Bu community’ler RFC 1997 ve RFC 3765’de “Well-known Communities” olarak adlandırılırlar. Bunlardan bir kaçını kısaca açıklayalım :

NO-EXPORT : Bu community ile alınan prefixler external BGP komşulara bildirilmemesi gereken prefixlerdir. Ancak bir konfederasyon ve Sub-AS (Autonomus System) durumu varsa bu prefixler diğer Sub-AS’de bulunan komşulara yollanmazlar.

NO-ADVERTISE-SUBCONFED : Cisco cihazlarda “local-AS” olarak isimlendirilen bu community, prefixlerin e-BGP (External BGP) komşulara yollanmamasını ifade eder. Ancak Sub-AS durumu varsa prefix Sub-AS dışına da gönderilmez.

NO-ADVERTISE : No-advertise community set edilmiş olarak alınan prefixler diğer BGP komşulara yollanmazlar.

Not : AS içinde bir BGP konfederasyonu yoksa No-Export ile local-AS community’leri aynı işlevi yaparlar.

Buraya kadar community’nin az çok neye yaradığını gördük. Yazının devam eden kısmında community kullanmayı anlatarak devam edelim.

Community’lerin Kullanımı

Community’ler kullanım amaçlarına göre ikiye ayrılır. Bunlardan birincisi bilgilendirme maksatlı diğeri ise aksiyon maksatlı community kullanmaktır.

BGP_Sema

  1. Bilgilendirme maksatlı (Informational TAGS) communityler ile bir prefixin nereden (Ülke, şehir, kıta vb.) ne şekilde (Müşteriden, transit diğer ISP’den veya internal bir prefix gibi .. )öğrenildiği bilgisine sahip olmak amacıyla kullanılırlar.
  2. Diğer kullanım amacı aksiyon maksatlı kullanım şeklidir. Bu aksiyon amaçlı community kullanımı da temel olarak ikiye ayrılır:
  • Prefixlerin bir alan dışına duyurulup duyurulmamasının kontrolünü yapmak. (Örn: Bir prefixi bir ülkeye export ederken bir diğer ülkeye etmemek veya bir müşteriye export ederken diğerine AS numarasını 2 defa prepend edip export etmek gibi..)
  • Prefixlerin BGP metrikleri (Attributes; MED,local-pref,next-hop,weight gibi.) ile oynamak.

Community Uygulama Örnekleri

Null-Route & No-Export Community

Bu uygulamada daha çok müşterilerin DDOS gibi bir saldırıya maruz kalması durumunda ISP’deki Null Route’u kullanmasına olanak sağlanır.

BGP_Sema_2

Şekilde WEB sunucusunu hedef alan DDOS atakları bir çok lokasyondan gelmektedir. ISP bu tarz atakları bertaraf etmek için öntanımlı bir Null-Route oluşturarak sunucuyu hedef alan DDOS saldırılarını bir black-hole’a yönlendirebilir. Müşteri tarafından ilgili prefix (/32 olmak şartı ile) ön tanımlı null-route community ile ISP’ye anons edilirse bu prefixi hedef alan trafik ISP içerisinde hedef sunucuya ulaşmadan sönümlenmektedir.

Bir prefix’e birden fazla community uygulanabildiğinden, saldırıya maruz kalan prefixe null-route community ile birlikte no-export community uygulanırsa DDOS atakları, kullandığımız ISP’ye dahi ulaşamadan sönümlenebilir. Çünkü no-export ile prefix’in yurt dışı anonsu önlenmiş olmaktadır.

Bu community değerleri her ISP’nin kendi tasarrufundadır. Ve ISP’den ISP’ye farklılık gösterebilir. Örneğin, Türk Telekom’da Null-Route (Blackhole Community) değeri 9121:666 ve No-Export (Sadece Yurtiçi Community) değeri 9121:444’tür. Diğer örneklerini görmek için linkleri incelediğinizde yedekli çıkışa (multi-path) sahip kurumsal ağlar için BGP metriklerinin değişimini tetikleyen community değerlerini görebilirsiniz.

http://www.onesc.net/communities/as4323/

http://www.onesc.net/communities/as7922/

http://www.onesc.net/communities/as29838/

http://www.onesc.net/communities/

http://www.gtt.net/services/ip-transit/bgp-communities/

Null-Route Community Uygulama Örneği

Aşağıdaki şekilde BGP 1234 ASN’li servis sağlayıcı müşterilerine Null-Route Community olanağı imkanı tanımaktadır. BGP 333 ASN’li kurum ağında 5.5.5.5 ip adresli sunucu dünya üzerinde bir çok lokasyondan DDOS saldırısı almaktadır. Senaryo gereği kurum ağında bulunan IDS (Intrusion Detection System – Saldırı Tespit Sistemi) bu saldırıyı tespit ederek sunucu ip adresini DDOS’dan korunması için servis sağlayıcıya bildirecektir.

Ön tanımlı community değerini saldırıya maruz kalan sunucu ip adresine yönelik BGP güncellemesinde okuyan alan servis sağlayıcı yönlendiricileri, saldırıları Null 0 arayüzüne yönlendirerek trafiği bir nevi drop edecektir.

Hatta opsiyonel olarak servis sağlayıcı ağı dışından (yurt dışı’da diyebiliriz) gelen saldırılara karşı hedef sunucu ip adresi bilgisi anonsu durdurularak gizlenebilecektir. Bu sayede servis sağlayıcı ağına DDOS trafiği ek yük getirmeyecektir.

Yapılandırmayı adım adım uygulayarak cihazlar üzerindeki etkilerine yazının devamında değineceğiz.

BGP COMM

Servis sağlayıcı yönlendiricileri kendi içlerinde full-mesh iBGP (Internal BGP) komşuluğa sahiptirler. Bu sebeple herhangi birisinin BGP ile anons ettiği rota bilgisi diğerleri tarafından öğrenilmektedir. Cihazlar üzerindeki komşuluğu sağlayan temel BGP yapılandırmasının basit örnekleri aşağıdaki gibidir :

BGP_Sema_3

Müşterilerine Null-Route DDOS Önleme olanığı sağlamak isteyen servis sağlayıcı öncelikle bir Null rotaya sahip olmalıdır. Bu null rota BGP AS 1234 içerisindeki tüm yönlendiricilere AS dışına çıkmayacak şekilde anons edilmelidir. Biz bu örnekte R3 yönlendiricisi üzerinde Null rota oluşturup anons edeceğiz. Ancak gerçek şartlarda yönlendiricinin arızalanma ihtimaline karşı ve DDOS trafiğinin en az mesafe katederek sönümlenmesi için bir çok yönlendirici üzerinde Null rota oluşturup anons etmek en doğrusudur.

İlk adım olarak kullanılmayan ve public olmayan herhangi bir ip adresine doğru bir null rota yazıyoruz:

R3

ip route 192.168.1.1 255.255.255.255 Null0 permanent name DDOS_BLACK_HOLE

Bu statik rota 192.168.1.1/32 ip adresine giden tüm ip paketlerinin Null0 arayüzüne yönlendirileceği, yani drop edileceği anlamına gelmektedir.

Bu statik rotayı BGP AS 1234 servis sağlayıcı ağının dışına çıkmayacak şekilde bir route-map ile R3 üzerinden anons ederek işleme devam ediyoruz.

Öncelikle route-map’i oluştururak, rotanın AS dışına çıkmasını önleyen community değerini giriyoruz:

R3

route-map Lokal_Null_Rota_Anonsu permit 10

set community local-AS——————–> No-export olarak’da verebiliriz.

Sonra bu rotayı BGP AS 1234 içerisine R3 üzerinden anons ediyoruz :

R3

router bgp 1234

neighbor 13.13.13.1 send-community both

neighbor 23.23.23.2 send-community both

redistribute static route-map Lokal_Null_Rota_Anonsu

Görüldüğü üzere anons işlemimiz başarılı olmuş durumda. Ve bu yaptığımız yöntemin amatör bir yöntem olduğunu da söylemeden geçemeyeceğim. Profesyonel uygulamada statik rotanın öncelikle IGP’ye IGP’nin de BGP’ye anons edilmesi gerekmektedir. Biz burada daha basit olması açısından böyle bir anons işlemi yaptık.

R3#show ip bgp 192.168.1.1

BGP routing table entry for 192.168.1.1/32, version 2

Paths: (1 available, best #1, not advertised outside local AS)

Flag: 0x410

Not advertised to any peer

Local

0.0.0.0 from 0.0.0.0 (23.23.23.3)

Origin incomplete, metric 0, localpref 100, weight 32768, valid, sourced, best

Community: local-AS

R1#show ip route bgp

192.168.1.0/32 is subnetted, 1 subnets

B 192.168.1.1 [200/0] via 13.13.13.3, 00:00:27

Şimdi R2 yönlendiricisinde tetiklenmesi halinde ilgili prefix’in yönlendirileceği ip adresini 192.168.1.1 olarak değiştirip BGP AS 1234’e anons edecek ayarlamaları yapalım:

R2

ip bgp-community new-format——–> Community değerlerini desimal formatta okuyabilmek için bu komut gerekmektedir.

ip community-list 1 permit 1234:666——-> 1234:666 Null-Route için ön tanımlı değerdir.

Aşağıdaki route-map’i yukarıdaki 1 numaralı listedeki community ile eşleşen prefix’leri hedef alacak trafiğin yönlendirileceği ip adresi 192.168.1.1 ile değiştirmek amaçlı oluşturuyoruz. Ve bunu BGP komşumuz olan CE (Customer Edge) isimli yönlendiriciden gelen prefixler’e uyguluyoruz.

R2

route-map DDOS_TESPIT permit 10

match community 1

set ip next-hop 192.168.1.1

router bgp 1234

neighbor 95.10.9.111 route-map DDOS_TESPIT in

route-map DDOS_TESPIT permit 20

Bu aşamada servis sağlayıcı olarak DDOS ataklarını sönümleyecek kabiliyete sahip olduk. Ancak bu işlemi tetikleyen etken müşteri ağlarından gelen ön tanımlı community etiketine sahip olan prefix’ler olacaktır.

5.5.5.5 ip adresi DDOS tetiklemesi olmadan servis sağlayıcı cihazlarının yönlendirme tablosunda aşağıdaki gibi görünür:

R2#show ip route 5.5.5.5

Routing entry for 5.5.5.5/32

Known via “bgp 1234”, distance 20, metric 0

Tag 333, type external

Last update from 95.9.10.111 00:00:17 ago

Routing Descriptor Blocks:

* 95.9.10.111, from 95.9.10.111, 00:00:17 ago

Route metric is 0, traffic share count is 1

AS Hops 1

Ve BGP tablolarında aşağıdaki gibi görünür. Yani 5.5.5.5 ip adresine 95.9.10.111 ip adresli yönlendirici üzerinden ulaşılabilecektir.

R2#show ip bgp 5.5.5.5

BGP routing table entry for 5.5.5.5/32, version 6

Paths: (1 available, best #1)

Flag: 0x410

Advertised to non peer-group peers:

12.12.12.1 23.23.23.3

333

95.9.10.111 from 95.9.10.111 (95.9.10.111)

Origin incomplete, metric 0, localpref 100, valid, external, best

Bu noktada saldırganlar aşağıda görüleceği üzere hedef sunucuya yaptıkları saldırılarda başarılı olmaktadırlar.

DDOS_SALDIRGANI#ping 5.5.5.5

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 8/9/12 ms

Saldırıdan hedef sunucuyu kurtarmak için, kurum ağı yöneticisi olarak servis sağlayıcıyı tetiklememiz gerekiyor. Bunu başarmak için servis sağlayıcıdan aldığımız ön tanımlı community bilgisini hedef sunucuyu kapsayan prefixe eklememiz yeterli olacaktır.

Bunun için öncelikle bir erişim listesi oluşturup altında sunucu ip adresini tanımlıyoruz.

CE

ip access-list extended DDOS_KORUMALI_IP_ADRESLERI

permit ip host 5.5.5.5 any

Bu erişim listesindeki ip veya ip blokları ile eşleşen prefixlerin servis sağlayıcıya doğru anons edilirken ön tanımlı community değerini alması için bir route-map oluşturuyoruz ve e-BGP komşumuza gönderdiğimiz prefix’lere uyguluyoruz:

route-map DDOS_TETIKLEYICI permit 10

match ip address DDOS_KORUMALI_IP_ADRESLERI

set community 1234:666

route-map DDOS_TETIKLEYICI permit 20

router bgp 333

neighbor 95.9.10.112 route-map DDOS_TETIKLEYICI out

neighbor 95.9.10.112 send

neighbor 95.9.10.112 send-community both

Bu aşamada kurum ağı olarak DDOS’a karşı bizi savunması için servis sağlayıcıyı tetikledik. Şimdi servis sağlayıcı yönlendiricilerinde hedef sunucusu ile ilgili nasıl bir bilgi var bakalım :

R1#show ip route 5.5.5.5

% Network not in table

R2#show ip route 5.5.5.5

% Network not in table

R3#show ip route 5.5.5.5

% Network not in table

Görüldüğü üzere hedef sunucu L3 olarak ulaşılamaz durumdadır. Ve BGP tablolarına baktığımızda bunun sebebinin ön tanımlı community olduğunu görürüz :

R2#show ip bgp 5.5.5.5

BGP routing table entry for 5.5.5.5/32, version 0

Paths: (1 available, no best path)

Not advertised to any peer

333

192.168.1.1 (inaccessible) from 95.9.10.111 (95.9.10.111)

Origin incomplete, metric 0, localpref 100, valid, external

Community: 1234:666

Şimdi saldırgan tarafına bakalım ve sonucu görelim :

DDOS_SALDIRGANI#ping 5.5.5.5

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 5.5.5.1, timeout is 2 seconds:

UUUUU————–>Destination unreachable

Success rate is 0 percent (0/5)

DDOS_SALDIRGANI#traceroute 5.5.5.5

Type escape sequence to abort.

Tracing the route to 5.5.5.5

1 1.1.1.1 32 msec 20 msec 8 msec

2 1.1.1.1 !H !H !H——————> !H : The host is unreachable .

Saldırgan saldırı girişimlerine “Destination Unreachable” şeklinde R1’den yanıt almaktadır. Ve saldırı ISP içerisinde sönümlenmiştir.

Kurum IDS’i yönetici müdahalesi gerekmeksizin yukarıda yaptığımız tetikleme işlemini uygulayabilir ve bir süre bekledikten sonra tetiklemeyi kaldırabilir. Biz de BGP’nin bu özelliği sayesinde kurumumuzu data kaybına uğramaktan korumuş oluruz.

Murat KAYAPINAR
Net. & Sys. Adm. / Electronic Eng.

Kaynaklar:

  1. http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_6-2/bgp_communities.html

  2. https://tools.ietf.org/html/rfc1997

  3. https://tools.ietf.org/html/rfc3765

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir