← Back to list

Network Pusulası #7 — STP: Switch’leri Döngüden Kurtaran Protokol ve Root Hijacking Saldırısı

Ağ tasarımında ilginç bir paradoks vardır: yedeklilik ve döngü aynı madalyonun iki yüzüdür. Switch’leri birbirine birden fazla yoldan…

Toprak Külekçioğlu · 2026-06-02 20:12 · 0 claps · 7.1 min read
#ccna #networking #pentesting #social-media #cybersecurity
Open on Medium ↗
Wiki topics: 🔒 · Cybersecurity 🐾 · Pets & Animals

Network Pusulası #7 — STP: Switch’leri Döngüden Kurtaran Protokol ve Root Hijacking Saldırısı

Ağ tasarımında ilginç bir paradoks vardır: yedeklilik ve döngü aynı madalyonun iki yüzüdür. Switch’leri birbirine birden fazla yoldan bağlamak istersin (biri kopsa diğeri çalışsın diye), ama bunu yaptığın anda istemeden bir döngü yaratırsın. Ve switch’lerin döngüye düşmesi, ağın çökmesi anlamına gelir.

İşte STP (Spanning Tree Protocol) tam bu paradoksu çözmek için var. Bu yazıda STP’nin nasıl çalıştığını, BPDU denen sihirli mesajları, root bridge’i nasıl seçtiğini ve sonunda da bu mekanizmanın saldırgan tarafından nasıl ele geçirilebileceğini göreceğiz.

Bir önceki yazıda Switch Spoofing’i konuşmuştuk; saldırganın DTP ile port’u trunk’a çevirip bütün VLAN’lara sızmasını anlatmıştık. Bu yazı onun kardeşi — saldırgan benzer bir mantıkla STP’yi de kandırıp ağın merkezine oturabiliyor.

Önce Şu Sorunu Görmemiz Lazım

Bir senaryo kuralım. Bir kurumda üç switch var, hepsi birbirine bağlı, çünkü yedeklilik istiyoruz:

SWITCH A ─────── SWITCH B
            │              │
            │              │
            └─── SWITCH C ─┘

Üçgen şeklinde bir topoloji. Bir bağlantı koparsa diğer iki bağlantı üzerinden trafik akmaya devam eder. Mantıklı bir tasarım.

Ama bir bilgisayar broadcast frame gönderse ne olur? Switch’in temel kuralını hatırla: hedefi bilmediği frame’leri tüm portlara dağıtır. Yani Switch A frame’i alır, B ve C’ye yollar. B aldığı frame’i A ve C’ye yollar. C aldığı frame’i A ve B’ye yollar. Sonsuz döngü başlar. Her tur, her switch frame’i yeniden çoğaltır ve ağda dolaşan frame sayısı saniyeler içinde milyonlara çıkar.

Bu duruma broadcast storm denir ve etkisi yıkıcıdır: switch’lerin CPU’su tamamen tükenir, ağ bant genişliği tıkanır, gerçek trafik geçemez, ağ pratikte çöker. Düzeltmenin tek yolu bağlantılardan birini fiziksel olarak çekmek ya da switch’leri kapatıp açmak.

İşte bu yüzden döngülü bir topoloji, yedeklilik sağladığı için iyi olsa da, döngüyü yöneten bir mekanizma olmadan kullanılamaz. O mekanizma STP.

STP’nin Felsefesi: “Olsun Ama Aktif Olmasın”

STP’nin yaklaşımı çok zarif. Diyor ki: “Yedek bağlantılar fiziksel olarak kalsın, ama hepsi aynı anda aktif olmasın. Birini ana yol olarak kullan, diğerlerini blokla. Eğer ana yol koparsa, blokladığın yedeği hemen aktif et.”

Sonuç: Yukarıdaki üçgen aslında bir ağaç (tree) gibi açılır. Bir kenarı pasif, diğer ikisi aktif. Döngü ortadan kalkar, yedeklilik korunur.

Peki bu kararı kim veriyor? Switch’ler kendi aralarında konuşup karar veriyor. Bu konuşmayı sağlayan şey BPDU.

BPDU — Switch’lerin Birbiriyle Konuştuğu Dil

BPDU, “Bridge Protocol Data Unit”in kısaltması. “Bridge” kelimesi eski jargon, eskiden switch’lere bridge denirdi, terminoloji öyle yerleşmiş.

BPDU, switch’lerin birbirleriyle konuşmak için ürettiği özel bir frame. Normal kullanıcı trafiği değil, switch-to-switch yönetim mesajları. Switch’i ağa taktığın anda, herhangi bir trafik olmasa bile, switch trunk port’larından her 2 saniyede bir BPDU göndermeye başlar. Bu BPDU’lar STP’nin yaşam belirtisidir.

Bir BPDU’nun içinde kritik bilgiler bulunur:

Bridge ID (BID): Bu BPDU’yu gönderen switch’in kimliği. İki parçadan oluşur: Priority (öncelik değeri) ve MAC adresi. Yani:

Bridge ID = [Priority][MAC adresi]
Örnek:      32768.aaaa.bbbb.cccc

Root Bridge ID: “Bu mesajı gönderirken, root bridge olduğunu düşündüğüm switch şu” diye beyan ettiği değer.

Root Path Cost: “Ben root’a ulaşmak için ne kadar yol kat ediyorum” değeri. Hızlı link ucuz, yavaş link pahalı.

Sender Bridge ID: Bu BPDU’yu şu anda gönderen switch’in kendi BID’si.

Port ID: BPDU’nun gönderildiği port numarası.

Switch’ler birbirinin BPDU’larını dinleyip bu bilgileri karşılaştırır, kararlar verir. STP’nin bütün dansı bu mesajların etrafında döner.

Priority — Yöneticinin Müdahale Kapısı

BPDU’nun içindeki Priority alanı çok önemli. Çünkü STP’nin “kim root olacak” yarışmasında birinci kriter budur.

Priority, 0 ile 65535 arasında bir sayıdır. Varsayılan değer 32768. Mantığı çok basit: Sayısal olarak düşük olan kazanır.

Hiç müdahale edilmediği durumda, bütün switch’ler 32768 priority ile gelir. Eşit priority demek “ikinci kritere git” demek, o da MAC adresi. Yani varsayılan durumda root’u MAC adresi belirler — genelde en eski switch (eski MAC numaraları küçük olduğu için) root olur.

Bu kabul edilemez bir durum, çünkü:

  • Root rastgele seçilmiş oluyor, planlanmamış
  • En eski switch genelde en zayıf switch’tir, root olmamalı
  • Yeni bir switch eklendiğinde topoloji aniden değişebilir

İşte priority bu yüzden var. Yönetici “şu güçlü switch root olsun” demek istediğinde, o switch’in priority’sini düşürür:

Switch(config)# spanning-tree vlan 1 priority 4096

Bu komut priority’yi 4096'ya çeker. Diğer switch’ler hâlâ 32768'de olduğu için, karşılaştırmada 4096 < 32768 → o switch kesin root olur. MAC’e bakılmaz bile.

Priority değerleri 4096'nın katları olarak verilir: 0, 4096, 8192, 12288, 16384… Bu Cisco’nun bir gerekliliği. En agresif seçim 0'dır, “kesin root ol” demek.

Pratikte mühendisler şöyle yapar:

  • Asıl root olmasını istediği switch’e: priority 4096
  • Yedek root: priority 8192
  • Diğerleri: varsayılan 32768

Böylece root manuel olarak belirlenir, asıl root çökerse yedek root devreye girer, kullanıcı switch’lerinden hiçbiri root olamaz.

Switch’ler BPDU’larla Üç Aşamalı Yarışma Yapar

BPDU’lar konuşmaya başladığı anda STP üç adımda topolojiyi inşa eder.

Adım 1 — Root Bridge Seçimi

Bütün switch’ler başlangıçta kendini root sanır. BPDU’larında “root bridge benim, BID’m şu” diye beyan eder. İki switch birbirinin BPDU’sunu aldığında BID karşılaştırması yapar:

  1. Önce priority’lere bakılır → düşük olan kazanır
  2. Priority eşitse, MAC adreslerine bakılır → düşük olan kazanır

Switch kendisinden daha düşük BID’li bir root duyduğunda “tamam, ben root değilim” der ve kendi BPDU’larında o switch’i root olarak işaretler. Mesaj kademe kademe yayılır, herkes aynı root’ta hemfikir olur. Sonuçta bütün ağ tek bir root bridge’i kabul eder.

Adım 2 — Root Port Seçimi

Root seçildikten sonra, her switch (root hariç) kendine sorar: “Root’a en kısa yoldan hangi portumdan giderim?”

BPDU’lardaki Root Path Cost alanına bakılır. Her port’a gelen BPDU’nun maliyeti hesaplanır. En düşük maliyetli port Root Port seçilir. Her switch’in tek bir Root Port’u olur — root’a doğru bakan port.

Adım 3 — Designated Port Seçimi

Her link üzerinde (iki switch arası kablo), o linki yönetecek bir port seçilir. Bu Designated Port, link üzerinde root’a en yakın olan switch’in portudur. Root bridge’in bütün portları Designated’tir, çünkü root’a olan maliyeti 0'dır.

Geriye Kalan Portlar Bloklanır

Şimdi her port’un bir rolü var: ya Root Port, ya Designated Port, ya da Blocked Port. Bloklanan portlar fiziksel olarak bağlı ama kullanıcı trafiğini geçirmez. Sadece BPDU dinler ve “yedek” pozisyonda bekler. Aktif bir link koparsa, bloklanmış port hemen uyanır ve devreye girer.

Port Durumları — Yavaş Yavaş Aktifleşmek

STP’de bir port hemen forward etmeye başlamaz, bir dizi durumdan geçer:

  1. Disabled: Port idari olarak kapalı
  2. Blocking: BPDU dinler, veri trafiği geçirmez
  3. Listening: Kendisinin Root mu Designated mı olduğunu hesaplıyor (~15 saniye)
  4. Learning: MAC öğrenmeye başlıyor ama hâlâ trafik geçirmiyor (~15 saniye)
  5. Forwarding: Tam aktif, hem BPDU dinler hem trafik geçirir

Bir port “blocking”ten “forwarding”e geçerken 30 saniye kaybediyor. Klasik STP’nin yavaşlığı buradan geliyor — bir bağlantı koptuğunda yedeğin devreye girmesi yarım dakika sürebiliyor. Modern alternatifler (RSTP, MST) bu süreyi saniyelere indirmek için geliştirildi.

Bir Örnekle Bütünü Görelim

[Switch A]  ← Root (priority 4096, manuel ayarlandı)
              /    \
             /      \
        Link1        Link2
           /          \
     [Switch B] ──── [Switch C]
                Link3
  • Yönetici Switch A’nın priority’sini 4096 yaptı, diğerleri 32768. A root oldu.
  • Switch B: Link1 üzerinden root’a en kısa yoldan ulaşıyor → Link1 portu = Root Port
  • Switch C: Link2 üzerinden root’a en kısa yoldan ulaşıyor → Link2 portu = Root Port
  • Link3 (B-C arası) bir döngü yaratır. STP bu linkin uçlarından birini Blocked durumuna alır. (Hangi portun bloklanacağı BPDU’lardaki Sender Bridge ID ve Port ID karşılaştırmasıyla belirlenir.)

Sonuç: Üç switch arasında üçgen vardı, STP onu bir ağaca dönüştürdü. Link3'ün bir ucu pasif. Eğer Link1 ya da Link2 koparsa, Link3 anında uyanır ve trafik akmaya devam eder.

STP’nin Karanlık Yüzü: Root Hijacking Saldırısı

Şimdi işin pentest tarafına geliyoruz. STP’nin temel bir güven sorunu var: BPDU’nun kim olduğunu doğrulayan bir mekanizma yok. Bir switch BPDU aldığında “bu gerçekten başka bir switch mi yoksa sahte mi” diye soramaz. BPDU’ya bakar ve içeriğine güvenir.

Saldırgan bu açığı şöyle kullanır: Kendi laptopundan sahte BPDU’lar üretir ve içine “priority 0” yazar. Yani “ben dünyanın en düşük BID’li switch’iyim, root benim” diye yalan söyler.

Switch’ler bu BPDU’yu alır ve mevcut root’un BID’siyle karşılaştırır. Mevcut root’un priority’si 4096 olsun, saldırganın 0. Sayısal karşılaştırma: 0 < 4096. Saldırgan kazanır. Ağ topolojisi yeniden inşa edilir, her switch artık saldırganın laptopuna “root” olarak bakar.

Bu noktada saldırgan ağın merkezine oturmuş olur. Bütün switch’ler trafiklerini ona göre yönlendirmeye başlar. Saldırgan Man-in-the-Middle pozisyonunda — istediği trafiği dinler, kaydeder, manipüle edebilir.

Saldırının teknik adı STP Root Role Hijacking ya da kısaca Root Bridge Takeover. Bir önceki yazıdaki Switch Spoofing’in akrabası: ikisi de switch’in “güvenmemesi gereken bir kaynağa güvenmesi” zafiyetinden besleniyor.

Savunma — İki Mekanizma Yeter

Bu saldırının önüne geçmek için Cisco iki özel özellik geliştirdi:

BPDU Guard — Kullanıcı portlarına uygulanan en sert önlem. “Bu port’tan BPDU gelmemeli” der. Çünkü kullanıcı portlarında bilgisayar, telefon olur, switch olmaz. Switch olmayan bir cihazdan BPDU geliyorsa şüphelidir.

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

Bu komut yazıldığında, port’tan BPDU geldiği anda port err-disable durumuna alınır (idari kapalı). Saldırgan BPDU göndermeye kalktığı saniye port ölür, saldırı başlamadan biter. Yöneticinin müdahalesi olmadan port açılmaz.

Root Guard — Trunk portlarda uygulanır. “Bu port’tan asla yeni bir root iddiası gelmesin” der. Eğer bu porttan daha düşük BID’li bir BPDU gelirse, port root-inconsistent durumuna alınır, yine pasifleşir.

Switch(config-if)# spanning-tree guard root

Bu özellikle distribution-access katmanı arasındaki bağlantılarda kullanılır. Aşağıdaki access switch’leri root olmamalı, root yukarıda olmalı. Root Guard bu kuralı zorlar.

İki katmanlı savunma: BPDU Guard ile kullanıcı portları korunur, Root Guard ile switch-to-switch bağlantıları korunur. Birlikte uygulandığında STP saldırıları neredeyse imkansız hale gelir.

Modern Alternatifler — RSTP ve MST

STP klasik versiyonu artık eski. Yerine geliştirilenler:

RSTP (Rapid Spanning Tree Protocol) — STP’nin hızlandırılmış versiyonu. Aynı işi yapıyor ama yakınsama süresi 30 saniyeden 1–2 saniyeye düşürüldü. Modern switch’lerin varsayılan ayarı genelde budur.

MST (Multiple Spanning Tree) — VLAN’ları gruplara ayırıp her grup için ayrı bir STP ağacı kurar. Tek bir topoloji yerine birden fazla topoloji yönetir, yedek linklerin de aktif kullanılmasını sağlar (load balancing). Büyük, karmaşık ağlarda kullanılır.

Üçü de temelde aynı problemle uğraşıyor: döngüleri engelle, yedekliliği koru. BPDU mantığı üçünde de aynı. Sadece yakınsama hızı ve grup yönetimi farklı.

🧭 Network Pusulası: Bu Yazıda Ne Öğrendik?

  • STP (Spanning Tree Protocol), yedekli switch topolojilerinde döngüleri engelleyen protokoldür. Yedek bağlantıları blocked duruma alır, aktif bağlantı koparsa yedek devreye girer.
  • BPDU, switch’lerin birbiriyle konuştuğu özel mesajdır. Her 2 saniyede bir gönderilir, içinde Bridge ID, Root ID, Path Cost gibi kritik bilgiler vardır.
  • Bridge ID = Priority + MAC adresi. Düşük olan kazanır.
  • Priority, root seçiminde birinci kriterdir. Varsayılan 32768, manuel olarak 4096 ve katlarıyla ayarlanır. Yönetici priority’yi düşürerek istediği switch’i root yapar.
  • STP üç aşamada topolojiyi inşa eder: Root Bridge → Root Port → Designated Port seçimi. Geri kalan portlar bloklanır.
  • Portlar Blocking → Listening → Learning → Forwarding durumlarından geçer. Klasik STP’de 30+ saniye, RSTP’de 1–2 saniye.
  • STP Root Hijacking saldırısında saldırgan priority 0'lı sahte BPDU göndererek kendini root yapar, ağın merkezine oturur, Man-in-the-Middle pozisyonu kazanır.
  • Savunma: BPDU Guard (kullanıcı portlarında) + Root Guard (trunk portlarda). Birlikte uygulandığında STP saldırıları kapatılır.
  • Modern alternatifler: RSTP (hızlı STP), MST (VLAN grupları için ayrı ağaçlar).

VLAN Hopping ve STP Hijacking, bir saldırganın ağ katmanında yapabileceği en temel iki saldırı. İkisini de gördük; ikisinin de savunması bir avuç komutla mümkün, ama ihmal edildiğinde sonuçları yıkıcı.

Bir sonraki yazıda ağ tasarımının büyük resmine bakacağız: Core, Distribution, Access katmanları. Yani bu yazılarda konuştuğumuz her şeyin hangi katmanda yaşadığını, kurumsal ağların nasıl tasarlandığını göreceğiz.🧭

PUSULAYI KAYBETMEYİİİİNNN


메타데이터
post_id
41bc3485a86f
slug
network-pusulası-7-stp-switchleri-döngüden-kurtaran-protokol-ve-root-hijacking-saldırısı-41bc3485a86f
url
https://medium.com/@toprakkulekcioglu/network-pusulas%C4%B1-7-stp-switchleri-d%C3%B6ng%C3%BCden-kurtaran-protokol-ve-root-hijacking-sald%C4%B1r%C4%B1s%C4%B1-41bc3485a86f
canonical_url
https://medium.com/@toprakkulekcioglu/network-pusulas%C4%B1-7-stp-switchleri-d%C3%B6ng%C3%BCden-kurtaran-protokol-ve-root-hijacking-sald%C4%B1r%C4%B1s%C4%B1-41bc3485a86f
author_url
https://medium.com/@toprakkulekcioglu
status
ok
fetched_at
2026-06-15 20:49:13