August 9, 2026
Uygulamalı Layer 2 Saldırıları: Layer2PoC #2 : STP Manipülasyonu & Layer2PoC #3 :CAM Table Overflow
Giriş

By Taha Altın
15 min read
Giriş
Layer 2 (Veri Bağlantı Katmanı) saldırılarını uygulamalı olarak incelediğimiz makale serimizin ikinci yazısıyla devam ediyoruz. Serimizin ilk bölümü olan Layer2PoC #1: VLAN Hopping başlıklı yazımızda, yanlış yapılandırılmış trunk bağlantıları üzerinden farklı VLAN'lara nasıl erişim sağlanabileceğini ve bu yapılandırma hatalarının oluşturduğu güvenlik risklerini incelemiştik.
Bu makalede ise ağ altyapısında döngülerin (loop) oluşmasını engelleyerek sürekliliği sağlayan Spanning Tree Protocol (STP) mekanizmasını ve switchlerin ağdaki cihazların MAC adreslerini öğrenerek trafiği doğru portlara yönlendirmesini sağlayan CAM (Content Addressable Memory) tablosunu ele alacağız. İlk olarak STP üzerinde gerçekleştirilen Root Bridge manipülasyonunu, ardından CAM tablosunun kapasitesini hedef alan CAM Table Overflow saldırısını laboratuvar ortamında uygulamalı olarak inceleyeceğiz.
Layer2PoC #2 — STP Manipülasyonu
STP Nedir?
Spanning Tree Protocol (STP), IEEE 802.1D standardı kapsamında geliştirilmiş, Layer 2 ağlarda oluşabilecek döngüleri (loop) engellemek amacıyla kullanılan bir protokoldür.
Bir ağda switchler arasında yedeklilik sağlamak amacıyla birden fazla fiziksel bağlantı bulunabilir. Bu durum ağın sürekliliği açısından avantaj sağlarken, aynı zamanda Ethernet frame'lerinin sonsuz döngüye girmesine neden olabilir. Bu döngüler; Broadcast Storm, MAC Address Table Instability ve Duplicate Frame gibi ciddi problemlere yol açarak ağ performansını olumsuz etkileyebilir.
STP, ağ topolojisini analiz ederek mantıksal olarak döngüsüz (loop-free) bir yapı oluşturur. Bunu yaparken gerekli olmayan bağlantıları geçici olarak engeller (Blocking State) ve yalnızca ihtiyaç duyulan yolları aktif bırakır. Eğer aktif bağlantılardan biri koparsa, daha önce engellenen bağlantılardan biri devreye alınarak ağın çalışmaya devam etmesi sağlanır.
STP Nasıl Çalışır?
STP'nin çalışma mantığı, ağ üzerinde tek bir referans switch belirlemek ve diğer tüm switchlerin bu referans üzerinden en uygun yolu kullanmasını sağlamaktır.
İlk aşamada tüm switchler birbirlerine Bridge Protocol Data Unit (BPDU) adı verilen yönetim paketlerini gönderir. Bu paketler sayesinde ağdaki switchler kendi öncelik (Priority) ve MAC adreslerini karşılaştırarak Root Bridge seçimini gerçekleştirir.
Root Bridge seçildikten sonra ağdaki diğer switchler, Root Bridge'e ulaşabilecekleri yolları değerlendirir. STP, bu yollar arasında seçim yaparken Path Cost değerini kullanır.
Her switch portunun bağlantı hızına göre belirlenen bir cost değeri bulunur. Bir switch ile Root Bridge arasındaki yol üzerinde bulunan portların cost değerleri toplanarak Root Path Cost hesaplanır. Toplam cost değeri en düşük olan yol, Root Bridge'e giden en iyi yol olarak kabul edilir.
Örneğin bir switch Root Bridge'e iki farklı yol üzerinden ulaşabiliyorsa, STP bu yolların toplam cost değerlerini karşılaştırır ve daha düşük maliyete sahip yolu aktif olarak kullanır. Daha yüksek maliyetli yol ise ağda döngü oluşmasını engellemek amacıyla blocking veya discarding durumuna alınabilir.
Yaygın STP cost değerlerinden bazıları şunlardır:
Bağlantı hızı:10 Mbps Kısa yol cost değeri:100
Bağlantı hızı:100 Mbps Kısa yol cost değeri:19
Bağlantı hızı:1 Gbps Kısa yol cost değeri:4
Bağlantı hızı:10 Gbps Kısa yol cost değeri:2Bağlantı hızı:10 Mbps Kısa yol cost değeri:100
Bağlantı hızı:100 Mbps Kısa yol cost değeri:19
Bağlantı hızı:1 Gbps Kısa yol cost değeri:4
Bağlantı hızı:10 Gbps Kısa yol cost değeri:2Ardından mevcut port rolleri bölümüne geçebilirsiniz:
- Root Port: Root Bridge'e en düşük toplam cost ile ulaşan port
- Designated Port: Bulunduğu segmentte Root Bridge'e en iyi yolu sunan port
- Blocked Port: Döngüyü önlemek için veri iletimi engellenen port
Bu sayede fiziksel olarak birden fazla bağlantı bulunsa bile mantıksal olarak yalnızca tek bir aktif yol kullanılır. Ağ topolojisinde bir değişiklik meydana geldiğinde STP yeniden hesaplama yaparak uygun portları aktif veya pasif duruma getirir.
Root Bridge Kavramı
Root Bridge, STP topolojisinin merkezinde bulunan ve tüm yol hesaplamalarının referans aldığı switchtir.
Root Bridge seçimi yapılırken ilk olarak switchlerin Bridge Priority değerleri karşılaştırılır. En düşük Priority değerine sahip switch Root Bridge olur. Eğer Priority değerleri aynıysa bu kez MAC adresleri karşılaştırılır ve MAC adresi en düşük olan switch Root Bridge olarak seçilir.
Varsayılan olarak Cisco switchlerde Bridge Priority değeri 32768'dir. Bu nedenle herhangi bir yapılandırma yapılmadığında Root Bridge seçimi çoğunlukla MAC adresine göre gerçekleşir.
Ağdaki diğer tüm switchler, Root Bridge'e ulaşmak için en düşük maliyetli yolu belirler ve STP topolojisini buna göre oluşturur. Bu nedenle Root Bridge'in değişmesi, ağdaki tüm STP hesaplamalarının yeniden yapılmasına neden olur.
Saldırının Mantığı
STP Manipülasyonu saldırısının temel amacı, saldırganın kendi cihazını ağdaki Root Bridge olarak seçtirmesidir.
Saldırgan, STP'de kullanılan BPDU paketlerini değiştirerek veya daha düşük Bridge Priority değerine sahip BPDU'lar göndererek mevcut Root Bridge seçim sürecini etkiler. Ağdaki switchler bu yeni BPDU'ları daha uygun gördüğünde, ağ topolojisini yeniden hesaplar ve saldırganın bağlı olduğu cihazı yeni Root Bridge olarak kabul edebilir.
Root Bridge'in değişmesi sonucunda ağ trafiğinin izlediği yol değişebilir. Bu durum saldırgana;
- Ağ trafiğini kendi üzerinden geçirme,
- Trafiği izleme veya analiz etme,
- Man-in-the-Middle (MitM) saldırıları için uygun ortam oluşturma,
- Ağ performansını düşürme,
- Yanlış yapılandırmalarda servis kesintilerine neden olma
gibi imkanlar sağlayabilir.
Bu makalede oluşturacağımız laboratuvar ortamında, Yersinia aracı kullanılarak düşük Bridge Priority değerine sahip BPDU paketleri gönderilecek ve saldırganın Root Bridge seçim sürecini nasıl etkileyebildiği adım adım incelenecektir.
Laboratuvar Topolojisi
Not: Kali Linux makinesi, Yersinia ve gerekli paket/analiz araçlarının yüklenebilmesi amacıyla
e1arayüzü üzerinden EVE-NGNet(Management Cloud) nesnesine bağlanarak internet erişimine çıkarılmıştır.
! Ağ arayüzlerini görüntülüyoruz.
ip a
! Ağ arayüzlerinin durumunu kontrol ediyoruz.
ip link
! eth1 arayüzü üzerinden DHCP sunucusundan IP adresi almaya çalışıyoruz.
dhcpcd eth1
! DHCP sürecini ayrıntılı (debug) modda görüntülüyoruz.
dhcpcd -d eth1
! Oluşan yönlendirme (routing) tablosunu kontrol ediyoruz.
ip route
! Varsayılan ağ geçidine erişimi test ediyoruz.
ping -c 4 192.168.100.2
! İnternet bağlantısını test ediyoruz.
ping -c 4 8.8.8.8! Ağ arayüzlerini görüntülüyoruz.
ip a
! Ağ arayüzlerinin durumunu kontrol ediyoruz.
ip link
! eth1 arayüzü üzerinden DHCP sunucusundan IP adresi almaya çalışıyoruz.
dhcpcd eth1
! DHCP sürecini ayrıntılı (debug) modda görüntülüyoruz.
dhcpcd -d eth1
! Oluşan yönlendirme (routing) tablosunu kontrol ediyoruz.
ip route
! Varsayılan ağ geçidine erişimi test ediyoruz.
ping -c 4 192.168.100.2
! İnternet bağlantısını test ediyoruz.
ping -c 4 8.8.8.8Not:_ Yapılandırmalar, laboratuvarın gereksiz detaylarla uzamaması amacıyla yalnızca_ STP Manipülasyonu saldırısı için gerekli komutları içermektedir. Temel yönetim ve güvenlik yapılandırmaları (VTY, SSH, kullanıcı hesapları vb.) bilinçli olarak eklenmemiştir.
SW1 (Meşru Root Bridge) Konfigürasyonu
! Ayrıcalıklı (Privileged) moda geçiyoruz.
enable
! Global yapılandırma moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW1
! Yanlış yazılan komutlarda DNS sorgusu yapılmasını engelliyoruz.
no ip domain-lookup
! STP'nin Root Bridge seçimi için öncelik değerini düşürüyoruz.
! Böylece SW1'in Root Bridge olmasını sağlıyoruz.
spanning-tree vlan 1 priority 4096
! Switch2 ile bağlantılı GigabitEthernet0/0 portuna giriyoruz.
interface GigabitEthernet0/0
! Portu aktif hale getiriyoruz.
no shutdown
! Switch3 ile bağlantılı GigabitEthernet0/1 portuna giriyoruz.
interface GigabitEthernet0/1
! Portu aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! Root Bridge durumunu kontrol ediyoruz.
show spanning-tree
-VLAN0001
- Spanning tree enabled protocol rstp
- Root ID Priority 4097
- Address 5000.0001.0000
- This bridge is the root
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
-
- Bridge ID Priority 4097 (priority 4096 sys-id-ext 1)
- Address 5000.0001.0000
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
- Aging Time 300 sec
! Yapılandırmayı kalıcı hale getiriyoruz.
write memory! Ayrıcalıklı (Privileged) moda geçiyoruz.
enable
! Global yapılandırma moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW1
! Yanlış yazılan komutlarda DNS sorgusu yapılmasını engelliyoruz.
no ip domain-lookup
! STP'nin Root Bridge seçimi için öncelik değerini düşürüyoruz.
! Böylece SW1'in Root Bridge olmasını sağlıyoruz.
spanning-tree vlan 1 priority 4096
! Switch2 ile bağlantılı GigabitEthernet0/0 portuna giriyoruz.
interface GigabitEthernet0/0
! Portu aktif hale getiriyoruz.
no shutdown
! Switch3 ile bağlantılı GigabitEthernet0/1 portuna giriyoruz.
interface GigabitEthernet0/1
! Portu aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! Root Bridge durumunu kontrol ediyoruz.
show spanning-tree
-VLAN0001
- Spanning tree enabled protocol rstp
- Root ID Priority 4097
- Address 5000.0001.0000
- This bridge is the root
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
-
- Bridge ID Priority 4097 (priority 4096 sys-id-ext 1)
- Address 5000.0001.0000
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
- Aging Time 300 sec
! Yapılandırmayı kalıcı hale getiriyoruz.
write memorySwitch2 Konfigürasyonu
! Ayrıcalıklı moda geçiyoruz.
enable
! Global yapılandırma moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW2
! Yanlış yazılan komutlarda DNS sorgusunu kapatıyoruz.
no ip domain-lookup
! SW1 ile bağlantılı GigabitEthernet0/2 portuna giriyoruz.
interface GigabitEthernet0/2
! Portu aktif hale getiriyoruz.
no shutdown
! Switch3 ile bağlantılı GigabitEthernet0/0 portuna giriyoruz.
interface GigabitEthernet0/0
! Portu aktif hale getiriyoruz.
no shutdown
! VPC1'in bağlı olduğu GigabitEthernet0/1 portuna giriyoruz.
interface GigabitEthernet0/1
! Portu aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! STP durumunu kontrol ediyoruz.
show spanning-tree
-VLAN0001
- Spanning tree enabled protocol rstp
- Root ID Priority 4097
- Address 5000.0001.0000
- Cost 4
- Port 3 (GigabitEthernet0/2)
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
-
- Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
- Address 5000.0002.0000
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
- Aging Time 300 sec
! Yapılandırmayı kaydediyoruz.
write memory! Ayrıcalıklı moda geçiyoruz.
enable
! Global yapılandırma moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW2
! Yanlış yazılan komutlarda DNS sorgusunu kapatıyoruz.
no ip domain-lookup
! SW1 ile bağlantılı GigabitEthernet0/2 portuna giriyoruz.
interface GigabitEthernet0/2
! Portu aktif hale getiriyoruz.
no shutdown
! Switch3 ile bağlantılı GigabitEthernet0/0 portuna giriyoruz.
interface GigabitEthernet0/0
! Portu aktif hale getiriyoruz.
no shutdown
! VPC1'in bağlı olduğu GigabitEthernet0/1 portuna giriyoruz.
interface GigabitEthernet0/1
! Portu aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! STP durumunu kontrol ediyoruz.
show spanning-tree
-VLAN0001
- Spanning tree enabled protocol rstp
- Root ID Priority 4097
- Address 5000.0001.0000
- Cost 4
- Port 3 (GigabitEthernet0/2)
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
-
- Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
- Address 5000.0002.0000
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
- Aging Time 300 sec
! Yapılandırmayı kaydediyoruz.
write memorySwitch3 Konfigürasyonu
! Ayrıcalıklı moda geçiyoruz.
enable
! Global yapılandırma moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW3
! Yanlış yazılan komutlarda DNS sorgusunu kapatıyoruz.
no ip domain-lookup
! SW1 ile bağlantılı GigabitEthernet0/2 portuna giriyoruz.
interface GigabitEthernet0/2
! Portu aktif hale getiriyoruz.
no shutdown
! Switch2 ile bağlantılı GigabitEthernet0/0 portuna giriyoruz.
interface GigabitEthernet0/0
! Portu aktif hale getiriyoruz.
no shutdown
! VPC2'nin bağlı olduğu GigabitEthernet0/1 portuna giriyoruz.
interface GigabitEthernet0/1
! Portu aktif hale getiriyoruz.
no shutdown
! Linux saldırı makinesinin bağlı olduğu GigabitEthernet0/3 portuna giriyoruz.
interface GigabitEthernet0/3
! Portu aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! STP durumunu kontrol ediyoruz.
show spanning-tree
-VLAN0001
- Spanning tree enabled protocol rstp
- Root ID Priority 4097
- Address 5000.0001.0000
- Cost 4
- Port 3 (GigabitEthernet0/2)
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
-
- Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
- Address 5000.0003.0000
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
- Aging Time 300 sec
! Yapılandırmayı kaydediyoruz.
write memory! Ayrıcalıklı moda geçiyoruz.
enable
! Global yapılandırma moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW3
! Yanlış yazılan komutlarda DNS sorgusunu kapatıyoruz.
no ip domain-lookup
! SW1 ile bağlantılı GigabitEthernet0/2 portuna giriyoruz.
interface GigabitEthernet0/2
! Portu aktif hale getiriyoruz.
no shutdown
! Switch2 ile bağlantılı GigabitEthernet0/0 portuna giriyoruz.
interface GigabitEthernet0/0
! Portu aktif hale getiriyoruz.
no shutdown
! VPC2'nin bağlı olduğu GigabitEthernet0/1 portuna giriyoruz.
interface GigabitEthernet0/1
! Portu aktif hale getiriyoruz.
no shutdown
! Linux saldırı makinesinin bağlı olduğu GigabitEthernet0/3 portuna giriyoruz.
interface GigabitEthernet0/3
! Portu aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! STP durumunu kontrol ediyoruz.
show spanning-tree
-VLAN0001
- Spanning tree enabled protocol rstp
- Root ID Priority 4097
- Address 5000.0001.0000
- Cost 4
- Port 3 (GigabitEthernet0/2)
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
-
- Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
- Address 5000.0003.0000
- Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
- Aging Time 300 sec
! Yapılandırmayı kaydediyoruz.
write memoryNot: STP çıktısında görülen 4097 ve 32769 değerleri, yapılandırılan Bridge Priority ile VLAN ID'nin birleşiminden oluşur. Bu laboratuvarda VLAN 1 kullanıldığı için 4096 → 4097, 32768 → 32769 olarak görüntülenmektedir.
PC Yapılandırmaları
---PC-1 Yapılandırması---
! PC-1'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.10/24 192.168.1.10 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
---PC-2 Yapılandırması---
! PC-2'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.20/24 192.168.1.20 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
---Kali Linux Yapılandırması---
! Ağ arayüzlerini görüntüler
ip a
! Mevcut IP adresini temizler
sudo ip addr flush dev eth0
! Statik IP adresi atanır
sudo ip addr add 192.168.1.100/24 dev eth0
! Ağ arayüzü etkinleştirilir
sudo ip link set eth0 up
! Varsayılan ağ geçidi tanımlanır
sudo ip route add default via 192.168.1.1 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! IP adresini görüntüler
ip addr show eth0
---PC-1 Yapılandırması---
! PC-1'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.10/24 192.168.1.10 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
---PC-2 Yapılandırması---
! PC-2'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.20/24 192.168.1.20 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
---Kali Linux Yapılandırması---
! Ağ arayüzlerini görüntüler
ip a
! Mevcut IP adresini temizler
sudo ip addr flush dev eth0
! Statik IP adresi atanır
sudo ip addr add 192.168.1.100/24 dev eth0
! Ağ arayüzü etkinleştirilir
sudo ip link set eth0 up
! Varsayılan ağ geçidi tanımlanır
sudo ip route add default via 192.168.1.1 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! IP adresini görüntüler
ip addr show eth0
Not: STP, Layer 2 seviyesinde çalışan bir protokol olduğu için BPDU paketlerinin iletilmesinde IP adresi veya varsayılan ağ geçidi kullanılmaz. Bu laboratuvada IP adresleri yalnızca cihazların birbirleriyle temel bağlantı testlerini yapabilmesi amacıyla atanmıştır.
Not: Bu laboratuvarda STP davranışını daha sade gösterebilmek amacıyla tüm cihazlar varsayılan VLAN 1 üzerinde çalıştırılmıştır. Farklı VLAN'lar kullanılması STP saldırısının çalışma mantığını değiştirmeyecektir.
STP Manipülasyonu Saldırısının Gerçekleştirilmesi
Laboratuvar ortamı hazırlandıktan ve ağda Root Bridge seçiminin başarıyla gerçekleştirildiği doğrulandıktan sonra STP Manipülasyonu saldırısını gerçekleştirmeye geçebiliriz. Bu aşamada Kali Linux üzerinde Yersinia aracı kullanılacak ve hedef ağa, mevcut Root Bridge'den daha düşük Bridge Priority değerine sahip sahte BPDU (Bridge Protocol Data Unit) paketleri gönderilecektir.
Saldırının amacı, ağdaki switchlerin STP hesaplamasını yeniden yapmasını sağlayarak saldırganın bağlı olduğu cihazı yeni Root Bridge olarak kabul ettirmektir. Saldırının başarılı olması durumunda ağ topolojisi yeniden oluşturulacak ve veri trafiğinin izlediği yol değişecektir. Bu durum, saldırgana ağ trafiğini kendi üzerinden yönlendirme, trafiği analiz etme ve uygun senaryolarda Man-in-the-Middle (MitM) gibi ileri seviye saldırılar için uygun bir ortam hazırlama imkânı sağlayabilir.
Aracı çalıştırmak için kali makinesinde şu komutları çalıştırın:
! Paket listesini güncelliyoruz.
sudo apt update
! kurulu olan tüm programları ve paketleri en güncel sürümlerine yükseltİyoruz
sudo apt upgrade
! Yersinia'yı sistemimize kuruyoruz.
sudo apt install yersinia -y
! Yersinia aracını açıyoruz
yersinia -I! Paket listesini güncelliyoruz.
sudo apt update
! kurulu olan tüm programları ve paketleri en güncel sürümlerine yükseltİyoruz
sudo apt upgrade
! Yersinia'yı sistemimize kuruyoruz.
sudo apt install yersinia -y
! Yersinia aracını açıyoruz
yersinia -INot: Not (Wireshark Analizi ve EVE-NG İpucu):
Saldırının ağ üzerindeki etkisini ve paket paket davranışını canlı olarak analiz edebilmek için Wireshark aracını kali-SW3 arasındaki hattı (
e0arayüzü) çalıştırmamız gerekmektedir.
EVE-NG arayüzünde kali üzerindeki
e0portuna sağ tıklayıp capture tıkladığınızda bilgisayarınızdaki Wireshark otomatik olarak başlatılacaktır. Wireshark açıldıktan sonra üst kısımdaki filtre alanınastpyazarak sadece fırlatacağımız paketlere odaklanabilirsiniz. Eğer Windows ortamında SSH Plink Key uyuşmazlık hatası (WARNING - POTENTIAL SECURITY BREACH!) alırsanız, Windows CMD (Komut İstemi) ekranını açıp aşağıdaki komutu çalıştırarak SSH anahtarını onaylayabilirsiniz:
Adım 1: Yersinia aracı açıldıktan sonra bir tuşa basarak uyarıyı kapatın
**Adım 2:**Ekran açıldığında i tuşuna basarak Burada eth0'ın on olduğundan emin ol
Adım 3: g tuşuna basarak protokol listesinden STP (Spanning Tree Protocol) seçeneğini seçiyoruz.
Adım 4:x tuşuna basarak "Attack Panel" menüsünü açıp 4 — Claiming Root Role seçeneğini 4 tuşuna basarak seçiyoruz.
**Adım 5:**Saldırının bağladığını ana ekrandan görüntülüyoruz
Saldırı Öncesi ve Sonrası Analizi
Saldırı öncesinde Wireshark üzerinde incelediğimiz RSTP BPDU paketlerinde Root Identifier alanının 5000.0001.0000 olduğunu ve Root Path Cost değerinin 4 olduğunu gördük. show spanning-tree çıktısı da Switch3'ün Root Bridge'e GigabitEthernet0/2 portu üzerinden ulaştığını doğruladı.
Yersinia ile Claiming Root Role saldırısını başlattıktan sonra Wireshark üzerinde Topology Change (TC) bayrağının aktif olduğunu, Root Identifier değerinin 5000.0000.0000 olarak değiştiğini ve Root Path Cost değerinin 8'e yükseldiğini gözlemledik.
Bu değişiklikleri show spanning-tree çıktısıyla da doğruladık. Saldırı sonrasında Switch3'ün Root ID bilgisinin değiştiğini ve Root Port olarak Kali Linux'un bağlı olduğu GigabitEthernet0/3 arayüzünü seçtiğini gördük. Bu da gönderilen sahte BPDU paketlerinin STP topolojisini etkilediğini göstermektedir.
Savunma ve Alınabilecek Önlemler
STP Manipülasyonu saldırısı, saldırganın ağa sahte BPDU paketleri göndererek Root Bridge seçimini ve STP topolojisini değiştirmesinden faydalanır. Bu nedenle kullanıcı cihazlarının bağlı olduğu access portlarından gelen BPDU paketlerinin engellenmesi veya bu portların STP topolojisini değiştirmesinin önüne geçilmesi gerekir.
- Kullanıcıların bağlı olduğu access portlarında BPDU Guard etkinleştirin: Bu yapılandırma ile PortFast etkin olan kullanıcı portundan beklenmedik bir BPDU alınması durumunda port devre dışı bırakılarak saldırganın STP topolojisini etkilemesi engellenebilir. Bizim laboratuvarımızda SW2 ve SW3 üzerinde çalışıtırın:
! Access/edge portlarda PortFast'i varsayılan olarak etkinleştir
spanning-tree portfast default
! PortFast etkin portlarda BPDU Guard'ı varsayılan olarak etkinleştir
spanning-tree portfast bpduguard default
! Access/edge portlarda PortFast'i varsayılan olarak etkinleştir
spanning-tree portfast default
! PortFast etkin portlarda BPDU Guard'ı varsayılan olarak etkinleştir
spanning-tree portfast bpduguard default
- Root Bridge'in değişmesini önlemek için Root Guard kullanın:
Root Guard, ilgili port üzerinden mevcut Root Bridge'den daha üstün bir BPDU alınması durumunda portun yeni Root Bridge'e giden yol olarak kullanılmasını engeller. Bizim laboratuvarımızda SW1 üzerinde SW2 ve SW3'e giden iki porta Root Guard uygulayalım
! SW2'ye bağlı porta geç
interface range GigabitEthernet0/0-1
! Bu yönden superior BPDU gelerek Root Bridge'in değişmesini engelle
spanning-tree guard root! SW2'ye bağlı porta geç
interface range GigabitEthernet0/0-1
! Bu yönden superior BPDU gelerek Root Bridge'in değişmesini engelle
spanning-tree guard rootNot:
BPDU GuardveRoot Guardaynı amaçla her porta birlikte uygulanacak özellikler olarak düşünülmemelidir. BPDU Guard özellikle son kullanıcı cihazlarının bağlı olduğu ve BPDU gelmesi beklenmeyen access portlarında kullanılırken, Root Guard BPDU alınabilen ancak o yönden yeni bir Root Bridge oluşmasının istenmediği bağlantılarda kullanılır.
Layer2PoC #3 — CAM Table Overflow
CAM Tablosu Ne İşe Yarar?
CAM (Content Addressable Memory) tablosu, switchlerin ağdaki cihazların MAC adreslerini hangi fiziksel port üzerinden öğrendiğini sakladığı tablodur.
Bir Ethernet frame'i switch'e ulaştığında switch, frame'in Source MAC Address bilgisini kontrol eder ve bu MAC adresini paketin geldiği port ile eşleştirerek CAM tablosuna kaydeder.
Örneğin CAM tablosu şu şekilde olabilir:
| MAC Adresi | Port |
| ----------------- | ----- |
| AA:AA:AA:AA:AA:01 | Gi0/1 |
| BB:BB:BB:BB:BB:02 | Gi0/2 || MAC Adresi | Port |
| ----------------- | ----- |
| AA:AA:AA:AA:AA:01 | Gi0/1 |
| BB:BB:BB:BB:BB:02 | Gi0/2 |Switch daha sonra BB:BB:BB:BB:BB:02 MAC adresine gönderilecek bir frame aldığında, bu cihazın Gi0/2 portunda olduğunu bildiği için frame'i yalnızca ilgili porta iletir.
Bu mekanizma sayesinde switch, trafiği gereksiz yere bütün portlara göndermek yerine hedef cihazın bulunduğu porta yönlendirerek ağın daha verimli çalışmasını sağlar.
Saldırının Mantığı
CAM Table Overflow saldırısının temel amacı, switchin CAM tablosunu çok sayıda sahte MAC adresiyle doldurarak normal MAC öğrenme mekanizmasını bozmayı hedeflemektir.
Normal şartlarda switch, öğrendiği MAC adreslerini ilgili portlarla eşleştirerek trafiği yalnızca hedef cihazın bulunduğu porta iletir. Saldırı sırasında ise saldırgan kısa sürede çok sayıda farklı Source MAC Address içeren Ethernet frame'i göndererek CAM tablosunun kapasitesini tüketmeye çalışır. Örneğin Switch üzerindeki donanımsal CAM belleğinin kapasitesi 8.000 veya 16.000 kayıt gibi sınırlıdır. Saldırgan ağa saniyeler içinde binlerce sahte (random) Kaynak MAC adresli paket gönderdiğinde, CAM tablosu tamamen dolar.
CAM tablosunun kapasitesi aşıldığında, bazı switch modelleri hedef MAC adresini tabloda bulamadığı unknown unicast trafiğini ilgili VLAN içerisindeki birden fazla porta iletebilir. Bu davranış, saldırganın normal şartlarda kendi portuna ulaşmayacak bazı ağ trafiğini gözlemleyebilmesine neden olabilir.
Ancak bu davranış switch modeline, işletim sistemine ve güvenlik yapılandırmasına göre değişebilir; CAM tablosunun dolması her switchin otomatik olarak bir hub gibi davranacağı anlamına gelmez.
Laboratuvar Topolojisi
Not:
macofaracı Kali Linux içerisinde varsayılan olarak (dsniff paketiyle) hazır geldiği için bu laboratuvarda Kali makinesine ek bir internet bağlantısı (Net / Management Cloud) tanımlamaya gerek kalmamıştır. Saldırı doğrudan yerel ağ (eth0) arayüzü üzerinden gerçekleştirilecektir.
SW1 Konfigürasyonu
! Ayrıcalıklı (Privileged) moda geçiş yapıyoruz.
enable
! Global yapılandırma (Configuration) moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW1
! Yanlış yazılan komutlarda switch'in DNS araması yapıp kilitlenmesini engelliyoruz.
no ip domain-lookup
! VPC1 (Gi0/0), VPC2 (Gi0/1) ve Kali'nin (Gi0/2) bağlı olduğu port aralığına giriyoruz.
interface range GigabitEthernet0/0-2
! Portları uç cihaz erişimi için Access moduna alıyoruz.
switchport mode access
! Cihazları varsayılan VLAN 1 içerisine alıyoruz.
switchport access vlan 1
! Portları aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! Yapılan ayarları NVRAM'e kaydediyoruz.
write memory
(AŞAĞIDAKİ İŞLEMLERİ PC'LER ARASI PİNG İŞLEMİNDEN SONRA YAPIYORUZ)
! CAM tablosundaki toplam MAC adresi sayısını kontrol ediyoruz.
show mac address-table count
- Mac Entries for Vlan 1:
- ---------------------------
- Dynamic Address Count : 2
- Static Address Count : 0
- Total Mac Addresses : 2
- Total Mac Address Space Available: 70013688
! Tablodaki mevcut MAC adresi ve port eşleşmelerini listeliyoruz.
show mac address-table dynamic
- Mac Address Table
- -------------------------------------------
- Vlan Mac Address Type Ports
- ---- ----------- -------- -----
- 1 0050.7966.6802 DYNAMIC Gi0/1
- 1 0050.7966.6803 DYNAMIC Gi0/0
- Total Mac Addresses for this criterion: 2
! Ayrıcalıklı (Privileged) moda geçiş yapıyoruz.
enable
! Global yapılandırma (Configuration) moduna giriyoruz.
configure terminal
! Switch'e isim veriyoruz.
hostname SW1
! Yanlış yazılan komutlarda switch'in DNS araması yapıp kilitlenmesini engelliyoruz.
no ip domain-lookup
! VPC1 (Gi0/0), VPC2 (Gi0/1) ve Kali'nin (Gi0/2) bağlı olduğu port aralığına giriyoruz.
interface range GigabitEthernet0/0-2
! Portları uç cihaz erişimi için Access moduna alıyoruz.
switchport mode access
! Cihazları varsayılan VLAN 1 içerisine alıyoruz.
switchport access vlan 1
! Portları aktif hale getiriyoruz.
no shutdown
! Yapılandırma modundan çıkıyoruz.
end
! Yapılan ayarları NVRAM'e kaydediyoruz.
write memory
(AŞAĞIDAKİ İŞLEMLERİ PC'LER ARASI PİNG İŞLEMİNDEN SONRA YAPIYORUZ)
! CAM tablosundaki toplam MAC adresi sayısını kontrol ediyoruz.
show mac address-table count
- Mac Entries for Vlan 1:
- ---------------------------
- Dynamic Address Count : 2
- Static Address Count : 0
- Total Mac Addresses : 2
- Total Mac Address Space Available: 70013688
! Tablodaki mevcut MAC adresi ve port eşleşmelerini listeliyoruz.
show mac address-table dynamic
- Mac Address Table
- -------------------------------------------
- Vlan Mac Address Type Ports
- ---- ----------- -------- -----
- 1 0050.7966.6802 DYNAMIC Gi0/1
- 1 0050.7966.6803 DYNAMIC Gi0/0
- Total Mac Addresses for this criterion: 2
PC Yapılandırmaları
---PC-1 Yapılandırması---
! PC-1'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.10/24 192.168.1.10 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
! ICMP ile MAC adreslerinin SW1 CAM tablosuna öğrenilmesini sağlıyoruz.
ping 192.168.1.20 -c 4
---PC-2 Yapılandırması---
! PC-2'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.20/24 192.168.1.20 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
! ICMP ile MAC adreslerinin SW1 CAM tablosuna öğrenilmesini sağlıyoruz.
ping 192.168.1.10 -c 4
---Kali Linux Yapılandırması---
! Ağ arayüzlerini görüntüler
ip a
! Mevcut IP adresini temizler
sudo ip addr flush dev eth0
! Statik IP adresi atanır
sudo ip addr add 192.168.1.100/24 dev eth0
! Ağ arayüzü etkinleştirilir
sudo ip link set eth0 up
! Varsayılan ağ geçidi tanımlanır
sudo ip route add default via 192.168.1.1 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! IP adresini görüntüler
ip addr show eth0---PC-1 Yapılandırması---
! PC-1'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.10/24 192.168.1.10 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
! ICMP ile MAC adreslerinin SW1 CAM tablosuna öğrenilmesini sağlıyoruz.
ping 192.168.1.20 -c 4
---PC-2 Yapılandırması---
! PC-2'e IP adresi ve varsayılan ağ geçidi atanır
ip 192.168.1.20/24 192.168.1.20 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! Yapılandırma kaydedilir
save
! IP yapılandırmasını görüntüler
show ip
! ICMP ile MAC adreslerinin SW1 CAM tablosuna öğrenilmesini sağlıyoruz.
ping 192.168.1.10 -c 4
---Kali Linux Yapılandırması---
! Ağ arayüzlerini görüntüler
ip a
! Mevcut IP adresini temizler
sudo ip addr flush dev eth0
! Statik IP adresi atanır
sudo ip addr add 192.168.1.100/24 dev eth0
! Ağ arayüzü etkinleştirilir
sudo ip link set eth0 up
! Varsayılan ağ geçidi tanımlanır
sudo ip route add default via 192.168.1.1 (Bu labda Router veya L3 Sw olmadığı için gatewaye gerek yok)
! IP adresini görüntüler
ip addr show eth0CAM Table Overflow Saldırısının Gerçekleştirilmesi
Laboratuvar ortamı hazırlandıktan ve switch üzerindeki CAM tablosunun normal çalışma durumu doğrulandıktan sonra CAM Table Overflow saldırısını gerçekleştirmeye geçebiliriz. Bu aşamada Kali Linux üzerinden çok sayıda farklı Source MAC Address içeren Ethernet frame'leri gönderilerek switchin CAM tablosunun sahte MAC adresleriyle doldurulması hedeflenecektir.
Saldırının amacı, switchin MAC adresi ile port eşleştirmelerini tuttuğu CAM tablosunun kapasitesini tüketerek normal MAC öğrenme mekanizmasını etkilemektir. CAM tablosunun kapasitesinin aşılması durumunda switch, tabloda bulunmayan hedeflere ait unknown unicast trafiğini ilgili VLAN'daki birden fazla porta iletebilir. Bu durum, kullanılan switchin davranışına ve güvenlik yapılandırmasına bağlı olarak saldırganın normal şartlarda kendi portuna ulaşmayacak bazı ağ trafiğini gözlemleyebilmesine neden olabilir.
Saldırıyı başlatma için kali makinesinde şu komutları çalıştırın:
! SW1'in CAM tablosunu doldurmak için SW1'e bağlı olan
! eth0 üzerinden saniyede binlerce sahte MAC adresi gönderiyoruz.
sudo macof -i eth0! SW1'in CAM tablosunu doldurmak için SW1'e bağlı olan
! eth0 üzerinden saniyede binlerce sahte MAC adresi gönderiyoruz.
sudo macof -i eth0
Saldırı Öncesi ve Sonrası Analizi
Saldırı öncesinde show mac address-table çıktısını incelediğimizde switch'in MAC adres tablosunda yalnızca 2 dinamik MAC adresi bulunduğunu ve bu adreslerin ilgili fiziksel portlarla eşleştirildiğini gördük. Wireshark üzerinde yaptığımız incelemede de ağ trafiğinin normal seviyede olduğu ve yoğun miktarda rastgele kaynak adresli trafik bulunmadığı gözlemlendi.
Kali Linux üzerinde macof aracını kullanarak CAM Table Overflow (MAC Flooding) saldırısını başlattıktan sonra Wireshark üzerinde çok sayıda rastgele kaynak ve hedef adres kullanılarak oluşturulan paketlerin kısa süre içerisinde ağa gönderildiğini gözlemledik. Saldırı sonrasında show mac address-table çıktısını tekrar kontrol ettiğimizde, daha önce yalnızca 2 dinamik kayıt bulunan MAC adres tablosuna çok sayıda rastgele MAC adresinin eklendiğini ve bu adreslerin saldırgan sistemin bağlı olduğu GigabitEthernet0/2 arayüzü üzerinden öğrenildiğini gördük.
Bu değişiklikler, macof tarafından üretilen sahte kaynak MAC adreslerinin switch tarafından dinamik MAC kayıtları olarak öğrenildiğini ve CAM tablosunun yoğun biçimde sahte kayıtlarla doldurulduğunu gösterdi
Gerçek Kurumsal Ağlarda CAM Table Overflow Saldırısının İzlenmesi
┌─────────────────────┐
│ Core Switch │
│ SW1 │
└──────────┬──────────┘
│
Gi0/10│ Trunk
│
┌──────────▼──────────┐
│ Access Switch │
│ SW2 │
└─────┬─────────┬─────┘
│ │
Gi0/5 │ │ Gi0/6
│ │
┌──────────▼───┐ ┌─▼────────────────┐
│ Wi-Fi │ │ ESXi / Hypervisor│
└──────┬───────┘ └────────┬─────────┘
│ │
┌──────┼──────┐ ┌─────┼─────┐
│ │ │ │ │ │
Laptop Phone Attacker VM1 VM2 VM3
(KALİ) ┌─────────────────────┐
│ Core Switch │
│ SW1 │
└──────────┬──────────┘
│
Gi0/10│ Trunk
│
┌──────────▼──────────┐
│ Access Switch │
│ SW2 │
└─────┬─────────┬─────┘
│ │
Gi0/5 │ │ Gi0/6
│ │
┌──────────▼───┐ ┌─▼────────────────┐
│ Wi-Fi │ │ ESXi / Hypervisor│
└──────┬───────┘ └────────┬─────────┘
│ │
┌──────┼──────┐ ┌─────┼─────┐
│ │ │ │ │ │
Laptop Phone Attacker VM1 VM2 VM3
(KALİ)aboratuvar ortamımızda Kali Linux doğrudan switch üzerindeki GigabitEthernet0/2 portuna bağlı olduğu için, show mac address-table çıktısında çok sayıda sahte MAC adresinin aynı port üzerinden öğrenildiğini kolaylıkla görebildik. Bu nedenle saldırının hangi fiziksel port üzerinden gerçekleştirildiğinin tespit edilmesi oldukça basitti.
Ancak gerçek kurumsal ağlarda istemci cihazları her zaman doğrudan incelenen switch'e bağlı olmayabilir. Arada başka switchler, kablosuz erişim noktaları (Access Point) veya sanallaştırma altyapıları bulunabilir.
Yukarıdaki örnek topolojide saldırganın Wi-Fi üzerinden ağa bağlandığını ve CAM Table Overflow saldırısını gerçekleştirdiğini düşünelim.
SW1 üzerinde MAC adres tablosu incelendiğinde sahte MAC adreslerinin Gi0/10 arayüzü üzerinden öğrenildiği görülebilir. Ancak Gi0/10 doğrudan saldırganın bağlı olduğu port değildir. Bu port, SW1 ile Access Switch SW2 arasındaki trunk bağlantısıdır.
SW2 üzerinde MAC adres tablosu incelendiğinde ise aynı sahte MAC adreslerinin Gi0/5 üzerinden öğrenildiği görülebilir.Bu noktada saldırı trafiğinin Wi-Fi yönünden geldiği tespit edilmiş olur. Ancak Gi0/5 portunun arkasında birden fazla kablosuz istemci bulunduğundan, yalnızca switch üzerindeki MAC adres tablosuna bakarak saldırıyı hangi kablosuz istemcinin gerçekleştirdiğini kesin olarak belirlemek mümkün olmayabilir.
Not: Wi-Fi üzerinden bağlıysak
eth0değil, kablosuz ağ arayüzünün adı kullanılır.
Saldırıyı başlatma için kali makinesinde şu komutları çalıştırın:
!Kali'de önce arayüzleri görelim
ip link
! wlan0 üzerinden saniyede binlerce sahte MAC adresi gönderiyoruz.
sudo macof -i wlan0
!Kali'de önce arayüzleri görelim
ip link
! wlan0 üzerinden saniyede binlerce sahte MAC adresi gönderiyoruz.
sudo macof -i wlan0
Not: CAM Table Overflow, günümüz modern switch altyapılarında çeşitli güvenlik mekanizmaları nedeniyle geçmişe kıyasla daha zor uygulanabilen bir saldırıdır. Bununla birlikte saldırının temel aldığı dinamik MAC öğrenme mekanizması hâlâ Ethernet switchlerin çalışma prensibinin bir parçasıdır. Port Security ve benzeri kontrollerin uygulanmadığı veya yanlış yapılandırıldığı ortamlarda MAC Flooding saldırıları risk oluşturmaya devam edebilir.
Savunma ve Alınabilecek Önlemler
Not: Kaynak MAC adreslerinin değiştirilmesi, switch'in trafiği hangi port üzerinden aldığını gizlemez. MAC adres tabloları ve ağ topolojisi takip edilerek saldırı trafiğinin geldiği yön belirlenebilir. Ancak portun arkasında Access Point, başka bir switch veya hypervisor gibi birden fazla cihazı barındırabilen bir altyapı bulunuyorsa, yalnızca
show mac address-tableçıktısı saldırgan cihazın kesin olarak belirlenmesi için yeterli olmayabilir.
CAM Table Overflow saldırısı, switch'in bir port üzerinden çok sayıda farklı MAC adresini öğrenebilmesinden faydalanır. Bu nedenle switch portlarında öğrenilebilecek MAC adresi sayısının sınırlandırılması saldırının etkisini önemli ölçüde azaltabilir.
1.Port Security özelliğini etkinleştirin:
interface GigabitEthernet0/2
switchport mode access
switchport port-securityinterface GigabitEthernet0/2
switchport mode access
switchport port-security2.Port üzerinden öğrenilebilecek maksimum MAC adresi sayısını sınırlandırın:
interface GigabitEthernet0/2
switchport port-security maximum 2interface GigabitEthernet0/2
switchport port-security maximum 23.MAC adresi limiti aşıldığında uygulanacak aksiyonu belirleyin:
interface GigabitEthernet0/2
switchport port-security violation shutdowninterface GigabitEthernet0/2
switchport port-security violation shutdownBu yapılandırma ile GigabitEthernet0/2 portu üzerinden en fazla iki MAC adresinin öğrenilmesine izin verilir. Belirlenen limitin aşılması durumunda port güvenlik ihlali olarak değerlendirilir ve shutdown durumuna geçirilir. Böylece macof gibi araçlarla kısa sürede çok sayıda sahte MAC adresi gönderilerek CAM tablosunun doldurulmasının önüne geçilebilir.
Not: Bu önlemler saldırganın hangi port üzerinden geldiğini tespit etmeye yönelik değil, switch'in CAM tablosunun sahte MAC adresleriyle doldurulmasını önlemeye yöneliktir. Saldırı sırasında sahte MAC adresleri kullanılsa dahi switch, bu adresleri trafiğin geldiği fiziksel port üzerinden öğrenir. Bu nedenle yaptığımız senaryoda saldırı trafiğinin GigabitEthernet0/2 arayüzünden geldiği show mac address-table çıktısı üzerinden tespit edilebilmektedir.
Bu çalışmada Layer 2 güvenliğini tehdit eden STP (Spanning Tree Protocol) Manipülasyonu ve CAM Table Overflow (MAC Flooding) saldırılarını uygulamalı olarak inceledik. Saldırıların çalışma mantığını, Wireshark üzerinde oluşan trafik değişikliklerini ve switch tarafındaki etkilerini analiz ederek bu saldırıların ağ altyapısını nasıl etkileyebildiğini ve alınabilecek temel güvenlik önlemlerini ele aldık.
Bir sonraki makalede ise Layer 2 ağlarda gerçekleştirilebilen ARP Spoofing ve DHCP Starvation & Rogue DHCP saldırılarını uygulamalı olarak inceleyeceğiz.