SyN Flood nedir?
1 sayfadaki 1 sayfası
SyN Flood nedir?
Syn Flood,3 adımdan oluşan bir D.o.S(Denial of Service) atak çeşitidir.İlk önce bu 3 adım'ın ne olduğuna bir göz atalım.
1. adım : İstemci makine,sunucu makinenin bir portuna bağlanmak için sunucu'ya bir bağlantı talebinde bulunur.
2. adım : Sunucu makine bu isteği -eğer koşullar uyuyor ise- kabul eder ve istemci makineye bağlantı talebinin onayladığını belirtir.
3. adım : İstemci,sunucuya herşeyin tamam olduğunu belirtir ve bağlantı başlar.
Bağlantı başladıktan sonra,veriler iki makine arasında eşzamanlı olarak gidip gelir.Bu çeşit bağlantıya "full-duplex" iletişim denilir.Full-duplex iletişim sayesinde veri alış verişi iki makine arasında eş zamanlı olur.
- Buraya kadar herşey iyi peki SyN Flood ne?
Ok. Az önce olayın üzerinden basit bir geçiş yaptık.Gelin az önceki o 3 adım süresince neler olduğuna bakalım.
1. adım : İstemci,sunucu makinenin herhangi bir servisine bağlanmak istiyor telnet,mail, web,news..etc.. Ve sunucu makineye içinde kendisi hakkında bilgi bulunan bir SYN(Synchronize) paketi yolluyor.
2. adım : Sunucu makine bu SYN paketini alıyor,ve istemci makineye gönderilen SYN'i aldığını belirten ACK(Acknowledgement) ile yine kendi hakkında bilgi içeren SYN paketini beraber yolluyor.
3. adım : İstemci SYN+ACK paketini alıyor ve sunucuya ACK paketi ile bunu haber veriyor.Ve iki makine arasındaki bağlantı başlıyor.
Küçük bir grafik ile olayın anlaşılmasını kolaylaştıralım.
Şimdiye kadar anlatılan şeyler istemci ile sunucu makine arasındaki normal bir bağlantıdan başka birşey değildi.Yani ortada herhangi bir saldırı yoktu.Herşey normal idi.
Şimdide olayın saldırı yönüne bakacağız.
Diyelim ki,ilk iki adım gerçekleşti.Yani istemci bir SYN,sunucuda buna yanıt olarak SYN+ACK paketlerini yolladı ve ACK paketini beklemeye koyuldu.Buraya kadar herşey güzel.Peki,ACK paketi gelmez ise ne olurdu? ACK paketi gelmez ise bu bağlantı full-duplex değil "yarı-açık" bir bağlantı olurdu.Ve bu bağlantı çeşidi pek içaçıcı değildir.
Sunucu SYN+ACK'yi yolladıktan sonra ACK için bekler.Fakat dediğim gibi istemci ACK paketini yollamaz ise işler çıkmaza girer.Sunucu beklemeyi bırakmaz.Sürekli bekler..
Sunucu ACK için beklerken,karşıya ACK yerine bir bağlantı talebinde daha bulunduğumuzu varsayalım.Ve yine 3. adım'ı gerçekleştirmeyelim.Yani son ACK'yi yollamayalım.Hatta bunu bir daha yapalım.. Bir daha .. Bir daha.. Ve "flood" şekline getirelim bunu (Eminim herkes flood'un anlamını biliyordur,IRC de çoğu zaman kick+ban sebebi olur.)
Sunucu açtığımız her bağlantının son ACK paketini bekliyecektir.Açtığımız her bağlantı hakkında bilgiyi hafızaya yerleştirir.Ama bir süre olduktan sonra artık bu bilgi boyut olarak bayağı büyümüştür.Yani kısaca bu data,hafızada taşma meydana getirir.
Artık bir süre sonra bütün hafıza dolacaktır.Ve sunucu dışarıdan gelecek hiçbir bağlantı talebine yanıt veremeyecektir.Normalde sistem bağlantı için ACK paketi beklerken,bu paketi bir süre içinde alamazsa bağlantıyı iptal eder.Fakat saldırı sistemden daha hızlı ve spoofed IP'ler ile sürdülürse,ne kadar bağlantı iptal edilirse edilsin,yenileri eklenecektir.
- Hasar..
Bu şekil bir saldırı sonucunda,sunucuda bulunan TCP tabanlı servisler saldırı altında bulunduğu sürece çalışmayacaktır.
- Çözüm..
Şu günkü IP protokol'ü teknolojisine göre genel olarak bir çözüm kabul edilmiş degil.Ama teknolojinin bugün yarattığı routerlar,basit bir konfigürasyon sayesinde bu saldırıyı engelleyebiliyorlar.Ayrıca yeni kerneller bu saldırıdan en az şekilde etkilenebilecek şekildeler.
- Sistemime SYN Flood yapıldığını nasıl anlarım?
Sisteminize taaki bir Spoofed IP paketi girip içerde dolaşana dek olayların farkına varmazsınız. Siz dışarıya bağlantı yapabilirsiniz,fakat problem dışarıdan gelen bağlantıların sisteminizce kabul edilmemesidir.
Sisteminize saldırı yapıldığını anlamak için Ağ Trafiğini kontrol etmelisinizdir. SunOS'da bu kontrol aşşağıdaki komut sayesinde yapılabilir.
netstat -a -f inet
Aynı komut sayesinde parametler değiştirilerek diğer OS'larda da trafiğin izlenilmesi mümkündür.Mesela FreeBSD kullananlar aşşağıdaki komutu girmelilerdir.
netstat -s \grep "listenqueue overflows"
Bu komutları yazdıktan sonra karşınıza yüzlerce "SYN_RECEIVED" yazısı çıkarsa eliniz reset tuşunda hazır bulunsun )
Ve bu kadar yazıdan sonra size,ağınızın güvenliğini test edebilmeniz için(?)bir SyN Flood exploiti. synk4.c
ALINTIDIR
synk4.c indirebilirsiniz
1. adım : İstemci makine,sunucu makinenin bir portuna bağlanmak için sunucu'ya bir bağlantı talebinde bulunur.
2. adım : Sunucu makine bu isteği -eğer koşullar uyuyor ise- kabul eder ve istemci makineye bağlantı talebinin onayladığını belirtir.
3. adım : İstemci,sunucuya herşeyin tamam olduğunu belirtir ve bağlantı başlar.
Bağlantı başladıktan sonra,veriler iki makine arasında eşzamanlı olarak gidip gelir.Bu çeşit bağlantıya "full-duplex" iletişim denilir.Full-duplex iletişim sayesinde veri alış verişi iki makine arasında eş zamanlı olur.
- Buraya kadar herşey iyi peki SyN Flood ne?
Ok. Az önce olayın üzerinden basit bir geçiş yaptık.Gelin az önceki o 3 adım süresince neler olduğuna bakalım.
1. adım : İstemci,sunucu makinenin herhangi bir servisine bağlanmak istiyor telnet,mail, web,news..etc.. Ve sunucu makineye içinde kendisi hakkında bilgi bulunan bir SYN(Synchronize) paketi yolluyor.
2. adım : Sunucu makine bu SYN paketini alıyor,ve istemci makineye gönderilen SYN'i aldığını belirten ACK(Acknowledgement) ile yine kendi hakkında bilgi içeren SYN paketini beraber yolluyor.
3. adım : İstemci SYN+ACK paketini alıyor ve sunucuya ACK paketi ile bunu haber veriyor.Ve iki makine arasındaki bağlantı başlıyor.
Küçük bir grafik ile olayın anlaşılmasını kolaylaştıralım.
Şimdiye kadar anlatılan şeyler istemci ile sunucu makine arasındaki normal bir bağlantıdan başka birşey değildi.Yani ortada herhangi bir saldırı yoktu.Herşey normal idi.
Şimdide olayın saldırı yönüne bakacağız.
Diyelim ki,ilk iki adım gerçekleşti.Yani istemci bir SYN,sunucuda buna yanıt olarak SYN+ACK paketlerini yolladı ve ACK paketini beklemeye koyuldu.Buraya kadar herşey güzel.Peki,ACK paketi gelmez ise ne olurdu? ACK paketi gelmez ise bu bağlantı full-duplex değil "yarı-açık" bir bağlantı olurdu.Ve bu bağlantı çeşidi pek içaçıcı değildir.
Sunucu SYN+ACK'yi yolladıktan sonra ACK için bekler.Fakat dediğim gibi istemci ACK paketini yollamaz ise işler çıkmaza girer.Sunucu beklemeyi bırakmaz.Sürekli bekler..
Sunucu ACK için beklerken,karşıya ACK yerine bir bağlantı talebinde daha bulunduğumuzu varsayalım.Ve yine 3. adım'ı gerçekleştirmeyelim.Yani son ACK'yi yollamayalım.Hatta bunu bir daha yapalım.. Bir daha .. Bir daha.. Ve "flood" şekline getirelim bunu (Eminim herkes flood'un anlamını biliyordur,IRC de çoğu zaman kick+ban sebebi olur.)
Sunucu açtığımız her bağlantının son ACK paketini bekliyecektir.Açtığımız her bağlantı hakkında bilgiyi hafızaya yerleştirir.Ama bir süre olduktan sonra artık bu bilgi boyut olarak bayağı büyümüştür.Yani kısaca bu data,hafızada taşma meydana getirir.
Artık bir süre sonra bütün hafıza dolacaktır.Ve sunucu dışarıdan gelecek hiçbir bağlantı talebine yanıt veremeyecektir.Normalde sistem bağlantı için ACK paketi beklerken,bu paketi bir süre içinde alamazsa bağlantıyı iptal eder.Fakat saldırı sistemden daha hızlı ve spoofed IP'ler ile sürdülürse,ne kadar bağlantı iptal edilirse edilsin,yenileri eklenecektir.
- Hasar..
Bu şekil bir saldırı sonucunda,sunucuda bulunan TCP tabanlı servisler saldırı altında bulunduğu sürece çalışmayacaktır.
- Çözüm..
Şu günkü IP protokol'ü teknolojisine göre genel olarak bir çözüm kabul edilmiş degil.Ama teknolojinin bugün yarattığı routerlar,basit bir konfigürasyon sayesinde bu saldırıyı engelleyebiliyorlar.Ayrıca yeni kerneller bu saldırıdan en az şekilde etkilenebilecek şekildeler.
- Sistemime SYN Flood yapıldığını nasıl anlarım?
Sisteminize taaki bir Spoofed IP paketi girip içerde dolaşana dek olayların farkına varmazsınız. Siz dışarıya bağlantı yapabilirsiniz,fakat problem dışarıdan gelen bağlantıların sisteminizce kabul edilmemesidir.
Sisteminize saldırı yapıldığını anlamak için Ağ Trafiğini kontrol etmelisinizdir. SunOS'da bu kontrol aşşağıdaki komut sayesinde yapılabilir.
netstat -a -f inet
Aynı komut sayesinde parametler değiştirilerek diğer OS'larda da trafiğin izlenilmesi mümkündür.Mesela FreeBSD kullananlar aşşağıdaki komutu girmelilerdir.
netstat -s \grep "listenqueue overflows"
Bu komutları yazdıktan sonra karşınıza yüzlerce "SYN_RECEIVED" yazısı çıkarsa eliniz reset tuşunda hazır bulunsun )
Ve bu kadar yazıdan sonra size,ağınızın güvenliğini test edebilmeniz için(?)bir SyN Flood exploiti. synk4.c
ALINTIDIR
synk4.c indirebilirsiniz
1 sayfadaki 1 sayfası
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz