DDOS Saldırılarını Algılama ve Engelleme #2

Bu makalemizde daha önceki konu olarak ele aldığımız yazıllarımızda mantığını anlattığımız sistemi (anti-ddos) komut olarak işlemlerin (tespit/engelleme) nasıl ilerledığını göstereceğim,

Tüm Finish (FIN) paketlerini listeleyin

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[13] & 1 != 0'

Tüm SYN ve SYN-ACK paketlerini listeleyin

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[13] & 2 != 0'

Tüm Sıfırlama (RST) paketlerini listeleyin

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[13] & 4 != 0'

Tüm Push (PSH) paketlerini listeleyin

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[13] & 8 != 0'

Tüm onay (ACK) paketlerini listeleyin

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[13] & 16 != 0'

Tüm boş paketleri listeleyin

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[13] & 0xff = 0'

VEYA

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[13] = 0'

Hedef bağlantı noktası 80 için tüm paketleri listeleyin (hedef ana bilgisayarda olduğunuzu varsayarak)

$ sudo /usr/sbin/tcpdump -Nnn -i any -s0 'tcp[2:2] = 80'

IP adresine göre TCP bağlantılarının sayısını listeleyin

$ netstat -npt | awk '{print $5}' | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
554 X.275.152.15
5 Y.48.95.31
3 Z.125.85.71
2 A.451.58.257
2 B.96.978.235

Belirli bir hizmet bağlantı noktasındaki IP adresine göre TCP bağlantılarının sayısını listeleyin

$ netstat -npt | grep | awk '{print $5}' | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
554 X.275.152.15
5 Y.48.95.31
3 Z.125.85.71
2 A.451.58.257
2 B.96.978.235

Belirli hizmet bağlantı noktasında IP adresine göre kurulan TCP bağlantılarının listesi ve KURULDU durumda

$ netstat -npt | grep | grep ESTABLISHED | awk '{print $5}' | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
413 X.275.152.15
5 Y.48.95.31
3 Z.125.85.71
2 A.451.58.257
2 B.96.978.235

Duruma göre bağlantı sayısını listeleyin

$ netstat -npt | awk '{print $6}' | sort | uniq -c | sort -nr | head
1564 ESTABLISHED
154 TIME_WAIT
5 LAST_ACK
5 SYN_RECV
4 FIN_WAIT2
1 Foreign
1 FIN_WAIT1
1 CLOSE_WAIT

SYN flood saldırıları ve engelleme,

1) SYN taşması olup olmadığını tespit edin:
SYN_RECV durumu, sunucunuzun ilk SYN paketini aldığı, kendi SYN + ACK paketini gönderdiği ve TCP anlaşmasını tamamlamak için harici makineden ACK’yi beklediği anlamına gelir.

$ netstat -npt | awk '{print $6}' | sort | uniq -c | sort -nr | head
1749 SYN_RECV
18 ESTABLISHED
6 LAST_ACK

Komut, SYN_RECV durumunda çok fazla bağlantınız olduğunu ve olası SYN flood saldırısı olduğunu açıkça gösterir.

2) Tek IP’den mi (DOS saldırısı) yoksa birden çok IP’den mi (DDOS saldırısı) olduğunu tespit edin:

Tek IP saldırısı:

$ netstat -npt | grep SYN_RECV | awk '{print $5}' | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
413 X.175.191.23
2 Y.49.92.30
2 Z.225.121.76
2 A.219.69.149
2 B.152.24.254

Artık saldırgan IP’yi biliyorsunuz, IP’yi engelleyebilirsiniz. IP’yi engellemenin çeşitli yolları vardır.
Yaygın ve hızlı yollar şunlardır:
a) ip komutunu kullanarak paketleri engelleyin:

$ ip route add blackhole X.175.191.23/32

b) iptables komutunu kullanarak paketleri engelleyin:

iptables -A INPUT -s X.175.191.23 -j DROP

İp veya iptables komutunun kullanılması daha mı iyi? Her ikisi de OSI modelinin 3/4 katmanında çalıştığı için söylemesi zor. Yönlendirme tablonuzun veya iptable’larınızın ne kadar büyük olduğunu kontrol etmeniz gerekir. Hızlı geçecek olan kullanılmalıdır.

Çoklu IP saldırısı (ortak alt ağ):

$ netstat -npt | grep SYN_RECV | awk '{print $5}' | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
345 X.175.191.13
243 X.175.190.27
34 X.175.181.33
78 X.175.41.24
2 Y.42.91.30
2 Z.125.121.76

Yaygın ve hızlı yollar şunlardır:
a) ip komutunu kullanarak alt ağı engelleyin:

$ ip route add blackhole X.175.0.0/16

b) iptables komutunu kullanarak alt ağı engelleyin:

$ iptables -A INPUT -s X.175.0.0/16 -j DROP

Paketlerdeki kaynak IP adresini aldatarak birden çok IP’den SYN flood saldırılarına sahip olmak oldukça yaygındır. Bu şekilde bazen hangilerinin gerçek IP’ler ve hangilerinin sahte olduğunu ayırt etmek zorlaşır.

Çoklu IP saldırısı (farklı alt ağ):

$ netstat -npt | grep SYN_RECV | awk '{print $5}' | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
3 X.175.191.23
2 Y.42.91.30
2 Z.125.121.76
2 A.219.69.149
2 B.152.24.254
2 C.142.44.254
2 D.52.54.214
1 E.15.27.250

SYN çerezleri, SYN flood saldırısı sırasında CPU ve bellek kullanımınızı önemli ölçüde azaltır ve makinenin biraz dayanıklılık açısından sağlam kalmasına yardımcı olur. SYN Cookie, JUNOS yazılımında gelişmiş hizmetlerle etkinleştirildiğinde ve hedef sunucu için TCP görüşme proxy’si haline geldiğinde, gelen her birine yanıt verir. İlk Sıra Numarası (ISN) olarak şifrelenmiş bir tanımlama bilgisi içeren bir SYN / ACK içeren SYN segmenti. Çerez, orijinal kaynak adresi ve bağlantı noktası numarası, hedef adresi ve bağlantı noktası numarası ve orijinal SYN paketinden ISN’nin bir MD5 karmasıdır. Tanımlama bilgisini gönderdikten sonra, gelişmiş hizmetlere sahip JUNOS yazılımı orijinal SYN paketini bırakır ve hesaplanan tanımlama bilgisini bellekten siler. Tanımlama bilgisini içeren pakete yanıt yoksa, saldırı etkin bir SYN saldırısı olarak kaydedilir ve etkin bir şekilde durdurulur. Başlatan ana bilgisayar, TCP ACK alanında tanımlama bilgisi + 1’i içeren bir TCP paketi ile yanıt verirse, JUNOS yazılımı services tanımlama bilgisini çıkarır, değerden 1 çıkarır ve meşru bir ACK olduğunu doğrulamak için tanımlama bilgisini yeniden hesaplar. Meşru ise, gelişmiş hizmetlere sahip JUNOS yazılımı, bir oturum kurarak ve orijinal SYN’den kaynak bilgisini içeren sunucuya bir SYN göndererek TCP proxy sürecini başlatır. Gelişmiş hizmetlere sahip JUNOS yazılımı sunucudan bir SYN / ACK aldığında, ACK’leri sunucuya ve başlatma ana bilgisayarına gönderir. Bu noktada bağlantı kurulur ve ana bilgisayar ve sunucu doğrudan iletişim kurabilir.

SYN çerezinin etkin olup olmadığını kontrol edin:

$ sysctl -a | grep tcp_syncookies
net.ipv4.tcp_syncookies = 0
Etkinleştirin:
$ sysctl -w net.ipv4.tcp_syncookies=1

IPTABLES,

Özel SYN-ATTACK zinciri (ratelimit),

:SYN-ATTACK - [0:0]
#RULE
-A INPUT -i -m -p tcp --syn -j SYN-ATTACK
-A SYN-ATTACK -m limit --limit 100/second --limit-burst 100 -j RETURN
-A SYN-ATTACK -m limit --limit 10/h --limit-burst 10 -j LOG --log-prefix "SYN-ATTACK Attack:"
-A SYN-ATTACK -j DROP

GÜVENLE KALIN.

Bir cevap yazın

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