Kategoriler
Siber Güvenlik Teknoloji

Spanning Tree Protokolü, Ataklar ve Önlemler

Siber güvenlikte en hassas saldırılar genellikle network saldırılarıdır. Çünkü network zafiyetleri genellikle güncelliğini korur ve sistemin temelinde network bulunduğu için bu saldırılar oldukça etkileyici olur. Zafiyetleri tespit etmek ve anlamak için önce sistemin nasıl çalıştığını anlamak gerekir. Bu yüzden önce spanning tree protokolüne neden ihtiyaç duyulduğu, tanımı ve protokolün kullanılması halinde sürecin nasıl işlediği öncelikli ele alınmıştır. Daha sonrasında ise spanning tree protokolünün diğer versiyonları ve switchler üzerinde pratik olarak nasıl konfigüre edileceği anlatılmıştır. Son olarak da bu protokolün kullanımında oluşabilecek zafiyetler ve mantık hataları ele alınmış, zafiyetlere karşı geliştirilen önlemler

Gereksinim ve Temel Tanım

Bilgisayarların iletişime geçmeleri için kurduğumuz ağları birbirine bağlayacağımız donanımlara ihtiyaç duyarız. Bunlardan birisi de switch’tir. Her bilgisayara bağlı kablolar, switch’in portuna bağlanır. Bu sayede artık bilgisayarlarımız birbirleri ile iletişime geçebilir. Ancak switchler, kendisine gelen bir paketi, kendisine bağlı tüm cihazlara gönderir. Bu duruma broadcast yayın denir. Aşağıda switch kullanılan örnek bir topoloji yer alıyor.

Bu durumda birden fazla switch olduğunu ve henüz konfigüre etmediğimizi düşünelim. Switchleri bağlamak için yedekli bir yapı kullanılır. Yani tek kablo ile değil, iki kablo ile yedekli, halkasal bir yapı oluşturulur. İki switch’in birbirine bağlı olduğu bir ağda, switch’lere gelen bir paket sonsuz bir döngüye (loop) girecektir. Çünkü önceden de dediğimiz gibi switchler kendisine gelen paketi, konfigüre edilmemesi halinde portlarına bağlı tüm cihazlara gönderiyordu. Bu portlardan birisinde de başka bir switch varsa o da paketi geri gönderecektir. İç ağda TTL (Time to Live) süresi bulunmayan paketler dönüp duracaktır. Buna broadcast fırtınası da denir. Switchler’den birisi kapatılana veya aralarındaki bağlantı kablosunun bir ucu porttan çekilinceye kadar sonsuz döngü devam edecektir.

Spanning Tree Protocol bu döngüyü bozmak için paketin geldiği portu devre dışı bırakır. Bu sayede gelen paket, paketi gönderen switche tekrar gönderilmez. Aynı zamanda STP, paketlerin ilerlemesi için en doğru yolu da belirler. Protokol uygulamaya koyulduktan sonra switchler’in topolojisini yapılandırır. Belirlenen yollardan birinde arıza olması durumunda da alternatif rotayı belirleyerek paketi hedefe ulaştırır. Haliyle spanning tree protokolü OSI katmanlarında layer 2’de yer alır. IEEE 802.1D standardı ile tanımlanmıştır.

Bridge Protocol Data Units (BPDU)

Spanning tree protokolünün çalışması için networkte sürekli dolanan BPDU isminde paketler bulunur. BPDU paketleri her iki saniyede bir diğer switchlere gönderilir. İçerisinde bridge ID’yi bulundurur. Bridge ID, bridge priority(öncelik) ve MAC adresi bilgilerini taşır. Bridge priority 2 byte, MAC adresi 6 byte, toplamda bridge ID ise 8 bytetır. Varsayılan bridge priority değeri ise 32768 olarak gelir.

Bu paketlerin izleyeceği yol için aşağıdaki adımları takip etmek gerekiyor:

  • Root bridge seçimi yapılır. Bridge priority değeri sıfıra en yakın olan switch, seçilir. Eğer tüm switchlerin önceliği eşit ise bu durumda MAC adresi en küçük olan switch, root bridge olacaktır. Root bridgelerin tüm portları designated porttur. Zaten kendisi root bridge olduğu için root portu bulunmaz.
  • Switchlerin, root bridge’den alacağı paketler için root portları belirlenir. Bu port, root bridge tarafına en yakın yolu olduğu porttur.
  • Switchlerin designated portları belirlenir. Switchlere aksi belirtilmedikçe son kullanıcıya bağlı portlar designated portu olur.

Switchlerin son kullanıcıya bağlı portları designated portu olduğuna göre switch, son kullanıcıya da BPDU paketleri gönderecektir. Ancak biz bu paketlerin yalnızca switchler arasında dolaşmasını istiyoruz. Aksi durumda ağda gereksiz bir trafik oluşacaktır. Bunun için de BPDU guard ve BPDU filter geliştirilmiştir.

Switchler arasındaki paketlerin sonsuz döngüye girmemesi için ise designated portlardan birisi seçilerek bloklanır. Bu porta artık non-designated port denir. Root port belirlenirken ise en yakın olan yani verinin en hızlı gideceği yol tercih edilir. Bu hız, cost değerine göre belirlenir. Alınan yollardaki bant genişliğinin karşılığındaki cost değerleri toplanır ve en düşük olan yol seçilir. Aynı zamanda bu yolun switch tarafındaki portu root port seçilir. Bant genişliği arttıkça cost değeri düşer.

Bandwidth (Bant Genişliği) Cost (Yol değeri)
4 Mbps 250
10 Mbps 100
16 Mbps 62
45 Mbps 39
100 Mbps 19
155 Mbps 14
622 Mbps 6
1 Gbps 4
10 Gbps 2

Switchler root portundan aldıkları BPDU paketleri ile diğer switch’leri tanırlar, root bridge’in kim olduğunu bilirler, ağdaki değişikliklerden haberdar olurlar ve loop durumu olmaması için spanning tree protokolünü artık kullanabilirler. Ağ topolojisi sağlıklı bir şekilde kurulduktan sonra artık switchler, root bridge’den gelecek Hello BPDU’sunu beklerler. Loop durumuna sebep olan portların tespit edilip kapatılma aşaması 20 saniye, listening süresi 15 saniye, learning süresi 15 saniye ve daha sonrasında ise diğer switche BPDU paketinin yönlendirilmesi ile süreç tamamlanır. Yaklaşık 50 saniye sürer. Bu sırada ağdaki kullanıcılar birbirleri ile iletişimde kalmaya devam ederler.

Switch Port Durumları

Switchlerin her portu için atanan belirli durumlar vardır. Bu sayede hangi porttan BPDU iletilip iletilemeyeceğini veya hangi işlemlerin yapılabileceğini yönetiriz.

Port Durumu Açıklama
Disabled STP devre dışı. Varsayılanda da bu geçerlidir.
Blocking Paketlerin bu porttan iletilemeyeceği anlamına gelir. Yalnızca BPDU paketleri alınır fakat iletilmezler.
Listening BPDU paketleri alınır ve gönderilir. Aktif topoloji oluşturulur.
Learning BPDU paketleri alınır, işlenir (birdge tabloları oluşturulur) ancak diğer switchlere iletilmez.
Forwarding BPDU paketleri alınır, işlenir ve diğer switchlere iletilir.

Spanning Tree Protokol Versiyonları

Rapid Spanning Tree Protokol (RSTP)

STP’nin gelişmiş halidir. Bekleme süresi sıkıntı çıkartmaya başlayınca bu 55 saniyelik süreci en aza indirmek için RSTP geliştirilmiştir. Buradaki çözüm ise bir portu bloklamak yerine yok etme metodunu kullanmasıdır. Bu sayede designated durumundaki portlar, root portta arıza çıkması durumuna karşı her zaman hazırlıklıdır. Cost değerini önceden hesaplarlar ve root port arızalandığında yerine geçerler. Bu süreç bir ile on beş saniye arasında sürer ve önemli bir zaman kazanılmış olur.

Port Durumu Açıklama
Forwarding BPDU paketleri alınır, işlenir ve diğer switchlere iletilir.
Learning BPDU paketleri alınır ve gönderilir. Aktif topoloji oluşturulur.
Discarding Bloklanan porttur. BPDU paketleri alınabilir.

 

Multiple Spanning Tree Protokol (MSTP)

RSTP’nin de bazı sorunları çözememesi üzerine MSTP geliştirilmiştir. RSTP ile aynı mantıkta çalışır ancak farklı olarak switch üzerinde bulunan diğer portları bloklamaz onun yerine her porttan farklı vlanlar geçirerek yük dengelenmesini sağlar. Yani çalışan bir portta sorun yaşanması durumunda diğer portlar üzerinden çalışmaya devam eder.

Port Durumu Açıklama
Root Port
Root bridge’e veri gönderen ve en düşük cost değerine sahip olan porttur.
Designated Port
Swich üzerlerindeki BPDU paketlerini ileten porttur.
Alternate Port Başka bir switch üzerinden gönderilen BPDU paketlerini aldıktan sonra, göndermek için alternatif bir port olarak blokede bekletir. Root Bridgeye yeniden bağlantı için alternatif yoldur.
Backup Port Adından da anlaşılacağı üzere yedek olarak hazırda bekleyen porttur.
Master Port
MST region içerisinde aldığı BPDU’ları Root Bridge gönderir. Root Bridge’e en yakın porttur.
Edge Port
Portlara doğrudan bağlanan terminal cihazlarıdır.
Forwarding
Learning

Discarding

RSTP’deki durumla aynıdır

Konfigürasyonların Gerçekleştirilmesi

Spanning Tree Kontrolü

Switch>en

Switch#sh spanning-tree

Bu komutları çalıştırdığımız switchte, önce enable moda geçip sonra spanning tree protokolü aktif mi öğreniyoruz. Aynı zamanda aktifse bu root ID, bridge ID, interaface gibi bilgilere de erişebiliriz. Aktif olduğunu “Spanning tree enabled protocol ieee” satırından anlayabiliriz. Interface kısmında hangi portun hangi durumda olduğu yer alır. “Sts” kısmı, gelen paketi yönlendiriyor ise FWD, port bloklanmış ise “BLK” olarak belirlenir.

Root Bridge Değiştirilmesi

Switch#spanning-tree vlan 1 priority 4096

Root bridge yapmak istediğimiz switch’in konfigürasyonunu yukarıdaki gibi gerçekleştiriyoruz. “vlan” ve “priority” değerleri değişkendir. Burada switch’In priority yani öncelik değeri 4096 oluyor. Verilen değerin ne olduğu teorik olarak önemli değil, en küçük değer kendisine ait olduğu için artık root bridge kendisidir. Ancak pratikte 4096 ve katları verilir. Kendisinden daha düşük değerde bir priority’e sahip switch olup olmadığı kontrol edilmelidir. Varsayılan 32768 olduğu için bizim verdiğimiz değer şu anda en küçük değerdir. Elli saniye sonunda root bridge değiştirilmiş olacak. Ayrıca pratikte, switchlerin birdge priority değeri direkt olarak varsayılanı verilmez. 32768(215) + [vlan ID] şeklinde verilir. Yukarıda değişiklik yaptığımız vlan 1’in önceki priority değeri 32768 +1 = 32769 şeklinde girilir.

PortFast

Switch>config

Switch(config)#interface fastEthernet 0/1

Switch(config-if)#switchport mode Access

Switch(config-if)#spanning-tree portfast

Elli saniyelik BPDU döngüsü sırasında diğer paket işlemleri devam edebilir. Fakat bunun için portfast aktif edilmelidir. Portfast ile beraber listening ve learning evreleri atlanır. Aktif edilecek portu Access mode’da çalışması gerekir. Bu özelliğin aktif edildiği porta hub, bridge ve switch gibi cihazlar bağlanırsa yine loop’a sebep olur. Sunucu ve son kullanıcı cihazlarının bağlı olduğu portlarda uygulanır.

BPDU Guard

Switch>config

Switch(config)#interface fastEthernet 0/1

Switch(config-if)#spanning-tree bpduguard enable

Portfast aktif edilmesi halinde oluşabilecek loop durumunu engellemek için BPDU Guard kullanılır. İlk aşamada sadece sunucu ve son kullanıcı cihazları bağlı olan porta daha sonra switch eklenebilir. Bu durumda oluşacak loop BPDU’nun aktif edilmesi ile engellenir.

Saldırı Senaryoları ve Önlemleri

Root Bridge Ele Geçirilmesi ve Root Protection

Root bridge atanırken önce priority değerine sonra da MAC adresine bakılıyordu. Bu durumda root bridge’in priority değeri sıfır dahi olsa ağa MAC adresi daha düşük olan bir cihazla bağlanarak BPDU paketleri alınabilir ve bu cihaz root bridge gibi gösterilebilir. Bu durumda bütün ağ trafiği bu cihaz üzerinden geçer. Aynı zamanda cihazı belli aralıklarla kapatıp açarak ağ sekteye uğratılabilir. Bu durumda paketler asla hedefine ulaşmaz. Bunun için root protection konfigürasyonu yapmak gerekir.

[SW1-GigabitEthernet0/0/13]stp root-protection

Spanning Tree Protokol Zamanlayıcıları

“Hello”, “Max Age” ve “Forward Delay” zamanlayıcıları, root bridge tarafından kontrol edilir ve müdahale edilebilir. Root bridge ele geçirildikten veya yerine geçildikten sonra bu paketler değiştirilebilir. “Max Age” ve “Forward Delay” paketleri en yüksek değerine, “Hello” paketi en düşük değerine alındığında bir süreliğine paket alışverişi aksatılabilir.

Topoloji Değişim Mesajları

Ağdaki switchler, kendisine bağlı olan cihazlarda fiziksel bir hata çıkması durumunda root porta TCN paketi gönderir. Bu paket ağ topolojisinin değiştiğini ve ilgili değişiklik bilgisini taşır. TCN paketi root bridge’e ulaştığında, root bridge “max age” ve “forward delay” değerleri kadar bir zaman için TC mesajını tüm portlara gönderir. Böylece bütün ağ, yeni topolojiden haberdar olur. Bu sistemi kötüye kullanmak için TCN mesajları tüm switchlere gönderilirken üzerinde değişiklik yapılarak ağın uzun süre aksaması sağlanabilir.