Web sunuculara ddos saldırıları, netstat ve TCP oturum detaylari

network.jpg Internete açık web sunucular için tehdit sıralamalarında ilk sırayı DDOS saldırıları alıyor. Çok basit(?) araçlarla zahmet ve bilgi gerektirmeden yapılabilmesi, etkisinin yüksek olması bu saldırı tiplerini yaygınlaştıran ana etkenlerden.

Web Sunucunuzun bir DDOS saldırısına karşı olduğunu nasıl anlarsınız?

En basitinden netstat komutunu çalıştırarak bağlantı tablosunu izlenir ve aynı ip/random ip lerden gelen bağlantılar incelemeye alınır. Normalde aynı ip adresinden(arkasında onarca istemcisi bulunan networkler haric) belirli bir sayıdan fazla istek gelmez(siz 10 diyin ben 30 diyeyim). Fazlası varsa anormal, incelenecek bir durum var demektir.

Nasıl incelersiniz?

İncelemeye geçmeden buna sebep olan protokolü ve detaylarına eğilelim.

Kısaca hatırlayacak olursak TCP bağlantıları bayraklarla(flags) yürütülür. Bayraklar TCP bağlantılarında durum belirleme konumuna sahiptir Yani bağlantının başlaması, veri transferi, onay mekanizması ve bağlantının sonlandırılması işlemleri tamamen bayraklar aracılığı ile gerçekleşir.

UDP’de ise böyle bir mekanizma yoktur. UDP’de güvenilirliliğin(paketlerin onay mekanizmasi) sağlanması üst katmanlarda çalışan uygulamalar yazılarak halledilebilir. DNS protokolü UDP aracılığı ile nasıl güvenilir iletişim kurulacağı konusunda detay bilgi verecektir.

UNIX/Windows sistemlerde bağlantılara ait en detaylı bilgi netstat (Network statistics) komutu ile elde edilir. Netstat kullanarak TCP, UDP hatta UNIX domain socketlere ait tüm bilgileri edinebiliriz.

UDP için bir bağlantı durum bilgisi olmadığından dolayı netstat aracılığı ile de fazla bilgi alamayız fakat

TCP’de bağlantıya ait oldukca fazla durum vardır.

TCP bağlantılarında netstat aracılığı ile görülebilecek durum senaryoları:

CLOSE_WAIT, CLOSED, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, SYN_RECEIVED, SYN_SEND ve TIME_WAIT

Bunların neler olduğu ve hangi durumlarda oluştuğunu irdeleyelim.

SYN_SEND : Hedef sistemle TCP bağlantısı oluşturma adımının ilkidir. Kısaca SYN bayraklı paket gönderilip buna karşılık cevap bekleme zamanında portun alacağı durum.

SYN_RECEIVED: Hedef sistem portu bağlantı kurulması için gerekli ilk adım olan SYN paketini almıştır.

ESTABLISHED: 3 lü el sıkışma tamamlanmış artık taraflar veri transferi yapabilir durumdadır.

LISTEN: O portun bağlantı kabul eder olduğunu belirtir.

tcp4 0 0 *.465 *.* LISTEN

LISTEN moddaki portları ki bunlar aynı zamanda sistemde çalışan servislerdir
netstat -ant|grep LISTEN komutu ile elde edebiliriz.

TCP Oturumlarında bağlantı sonlandırma

Oturum sonlandırma her iki tarafında anlaşması sonucu tamamlanır. Taraflardan birinin ilgili bayraklı paketi göndermemesi, geç göndermesi bağlantının sağlıklı olarak sonlanmasına engel olur.

Bağlantı sonlandırma aşamalarında çeşitli durumlar oluşur. Bu durumlara geçmeden bir TCP bağlantısının nasıl kapatıldığını inceleyelim.

A ——FIN ——–>B
A <—–ACK———B
A <—–FIN———B
A ——ACK———B

görüleceği üzere A ve B sistemleri arasındaki bağlantıyı kapatmak için 4 paket transferi oluyor. Bu paketleri Wireshark ya da tcpdump ile rahatlıkla görebilirsiniz.

tcpdump çıktısı

2007-08-13 21:38:57.239126 IP 80.93.212.86.3306 > 88.233.216.57.2175: F 75:75(0) ack 1 win 65535
2007-08-13 21:38:57.292806 IP 88.233.216.57.2175 > 80.93.212.86.3306: . ack 76 win 17446
2007-08-13 21:38:57.295927 IP 88.233.216.57.2175 > 80.93.212.86.3306: F 1:1(0) ack 76 win 17446
2007-08-13 21:38:57.295941 IP 80.93.212.86.3306 > 88.233.216.57.2175: . ack 2 win 65534

Bağlantı sonlanması esnasında oluşan durumlar:

FIN_WAIT_1:

Bağlantı sonlandırmak için işlem başlatan taraf(A) hedef sisteme FIN bayraklı TCP paketi gönderir. Ardından karşı taraftan(B) ayrı ayrı ACK ve FIN bayraklı paketleri bekler . Bu arada durumunu FIN_WAIT_1 olarak ayarlar.

FIN_WAIT_2:

Bağlantı sonlandırma isteğini(FIN bayraklı ilk paket) alan taraf(B) bu pakete karşılık olarak ACK(onay) bayraklı TCP paketi hazırlar ve gönderir ve durumunu CLOSE_WAIT’e alır. Ilk FIN bayraklı paketi gönderen taraf(A) ACK paketini aldığında durumunu FIN_WAIT_2 olarak ayarlar.

Böylece bağlantı sonlandırma işleminin ilk yarısı tamamlanmıştır. Diğer yarısıda sağlıklı tamamlandıktan sonra bağlantı tamamen sonlanmış olacaktır.

LAST_ACK:

B tarafı ACK bayraklı paket gönderdikten sonra , kendisinin de bağlantıyı sonlandırmak istediğini

bildiren FIN bayraklı paket oluşturarak A sistemine gönderir ve durumunu LAST_ACK olarak ayarlar.

TIME_WAIT

: A sistemi FIN bayraklı paketi aldıktan sonra buna cevaben ACK bayraklı bir paket oluşturarak

B’ye gönderir ve durumunu TIME_WAIT olarak belirler.

A sistemi TIME_WAIT durumunda son gönderilen ACK bayraklı paketin hedef sisteme(B) ulaştığını

garantilemek için bir müddet bekler. Bu müddet eğer gereğinden fazla(eski tip UNIX sistemlerde 4 dakikaya kadar çıkabiliyor.) ise sisteminizde netstat -an çalıştırdığınızda oldukca fazla TIME_WAIT satırı görebilirsiniz.

Bu da sistemi gereğinden fazla meşgul edeceği için performans problemleri yaşanması kaçınılmaz olacaktır.

Örnek bir sistem üzerinde inceleme:

www portuna yapılan bir istek ve isteğin sonlanması sırasında netstat ile alınan durum çıktıları. Sadece sunucu tarafını gösterdiği için bazı durumlar gözükmemektedir. İsteği yapan taraf da incelenecek olursa eksik kalan kısımlar tamamlanır.

tcp4 0 0 80.93.212.86.80 88.233.216.57.2348 SYN_RECEIVED
tcp4 0 0 80.93.212.86.80 88.233.216.57.2348 ESTABLISHED
tcp4 0 0 80.93.212.86.80 88.233.216.57.2348 FIN_WAIT_2
tcp4 0 0 80.93.212.86.80 88.233.216.57.2348 TIME_WAIT

DDOS saldırıları Nasıl Engellenebilir?

Bu sayfada yer kalmadı onu da başka bir başlık altında okuyalım..

This entry was posted in Network Security. Bookmark the permalink.

2 Responses to Web sunuculara ddos saldırıları, netstat ve TCP oturum detaylari

  1. Pingback: Netstat Kullanımı, Komutlar ve Anlamları - engintopcuoglu.com

  2. Pingback: İbrahim Sardoğan Kişisel Teknoloji ve WebMaster Portalı

Leave a Reply

Your email address will not be published. Required fields are marked *

four + 7 =