Facebook, Twitter yokken 1990’larda iRC ve ICQ ile sosyalleşiyorduk 🙂 “Flood yapmak yasak” kuralı iRC chat kanallarının temel kuralıydı. Yani, kanal sayfasına peş peşe, seri halde yazamazdınız. Botlar da çıkınca, iRC scriptlere flood’un önüne geçmek için kurallar eklenmişti. Yazdıkları flood olarak algılanan kullanıcı, otomatik olarak belirli bir süreliğine kanaldan banlanıyordu. Flood ile o zamanlar tanışmıştım. Ne günlerdi bee 🙂

Flood saldırıları, yoğun trafik oluşturarak, hedef alınan sistemin kullanılırlığını, geçici olarak düşürmeyi veya durdurmayı hedefler. Bu nedenle flood saldırıları, DOS(Denial of Service) olarak isimlendirilir. BotNet kullanarak birçok makineden DOS saldırısı gerçekleştirdiğinizde de, saldırı, DDOS(Distributed Denial of Service) adını almış oluyor. İnternette DOS saldırıları için kullanılan LOIC, XOIC, Hulk, DDOSIM, PyLoris gibi birçok free tool bulabilirsiniz. Biz, meselenin arka tarafına yani kod tarafına bakacağız. Anlaşılır olması için LOIC tool’u üzerinden gidelim. Aşağıdaki linkten LOIC’i indirebilirsiniz:

http://sourceforge.net/projects/loic/

LOIC’i çalıştırdığınızda görüntü aşağıdaki gibidir:

DOS saldırısı yapılacak URL veya IP‘yi girip, Lock On tıklayarak hedefi belirliyoruz. Timeout süresi request için serverdan gelecek response’u bekleme süresidir. Bu süre sonunda bağlantı kapatılır. HTTP Subsite bölümünde default olarak root site’a saldırı yapılıyor. TCP/UDP message bölümüne herhangi bir şey yazabilirsiniz. Hedef makineye mesaj olarak bunu göndereceğiz. Saldırı yapacağımız port numarası ve saldırıda kullanacağımız protokolü seçiyoruz. TCP, UDP ve HTTP protokollerini kullanarak saldırı gerçekleştirebiliriz. Threads bölümü ile kaç kullanıcı ile saldırı gerçekleştireceğimizi simule ediyoruz. Wait for reply, hedef sunucudan cevap için, beklenmesini belirliyor. Şimdi ufak bir saldırı gerçekleştirelim. Hedefimiz http://www.yeniakit.com.tr 🙂 Ping’lere cevap verecek kadar iyi korunuyor 🙂 LOIC ile saldırı gerçekleştirirken ping ile de hedefin erişilebilirlilik durumunu izleyeceğiz.

10 thread’den sürekli HTTP request gönderiyoruz. Bir süre sonra pinglere de cevap verememeye başlıyor ve sonuç aşağıdaki gibi oluyor 🙂

 

Saldırı örnek amaçlıdır. Kötü bir niyetim yok 🙂 Peki arka tarafta nasıl bir kod çalışıyor? Öncelikle hedefi belirlemek için URL veya IP adresini girmek gerekiyor. IP adresi doğrudan girilmiş ise sorun yok. Ancak URL bilgisi girilmiş ise URL’den IP’yi bulmamız gerekiyor. URL’den IP’yi aşağıdaki gibi elde edebiliriz:

TCP Flood

Hedefimiz belli. Bundan sonrasında kodumuzu farklılaştıracak tek faktör, Method bölümü, yani hedef makine ile kuracağımız iletişimde kullanacağımız protokol tipidir. LOIC; TCP, UDP ve HTTP olmak üzere 3 protokol üzerinden flood yapıyor. TCP ve UDP ile hedef makineye nasıl mesaj göndereceğimizi Backdoors yazılarında anlatmıştım. TCP kullanarak aşağıdaki gibi flood yapabiliriz:

Send metodu ile hedef makineye sürekli mesaj gönderiyoruz. Main metodundaki for döngüsü, çoklu kullanıcı saldırısını simule ediyor. LOIC’teki Threads bölümü yani. Yukarıda, mantık olarak 10 kullanıcı sürekli TCP üzerinden request gönderiyor. Bu arada test için kullandığım site, testlere dayanamadı 🙂 Daha UDP ve HTTP saldırısı yapacaktık 🙂

UDP Flood

Neyse, devam edelim. UDP üzerinden flood yapmanın, TCP üzerinden flood yapmaktan tek farkı; verinin, datagram olarak UDP protokolü üzerinden gönderilmesidir. Programlama mantığı aynı. Send metodunu aşağıdaki şekilde yazarsak UDP flood gerçekleştirebiliriz.

Kodları değiştirene kadar UDP flood’u test etmem için siteyi up durumuna getirmişler 🙂 Main metodunda threadden çağırdığımız metodu SendUDP olarak değiştirip, programı çalıştıralım. Aşağıda görüldüğü gibi sunucu, yine timeout’a düşmeye başladı.

Buradaki hedef sistemimiz bir web server. Buradaki hedefimiz gibi teknolojiden bihaber sistemler dışında, normalde dışa açık serverların çoğu UDP protokolüne kapalıdır. Ancak DNS, UDP tabanlı olduğu için UDP protokolüne mecburen açıktır. Bu nedenle UDP flood, daha çok DNS serverlar için büyük tehlikedir. Örnek olarak, burada bir text dosyasından büyük boyutta bir veri okuyup, hedef seçtiğim bir DNS servera flood yapsam, bir süre sonra kayıtlı zonelara gelen requestlere cevap veremeyecektir. Tabi korunma yöntemleri de var. Ancak, biz şu anda saldırılara odaklanmış durumdayız. TCP ve UDP flooddan sonra şimdi de HTTP flood ile saldıralım hedef sitemize. Bu arada, fark edilmiş olmalıyız ki, karşı DDOS saldırısı başlatmışlar 🙂

HTTP Flood

HTTP protokolünün GET veya POST metodları kullanılarak yapılır. HTTP protokolü TCP tabanlıdır. Send metodumuzu aşağıdaki gibi düzenlersek, flood için TCP üzerinden HTTP request gönderebiliriz.

Burada basitçe GET metodunu kullanarak, hedef sunucudaki root site için request gönderiyoruz. Browsera http://31.210.158.10 yazdığımızda root site açılır.

Gördüğünüz gibi LiteSpeed server üzerinde çalışıyor site. Allah’tan DNS’i clouddan kullanıyorlar. Yoksa Yeni Akit’te dışa açık sistem falan kalmazdı 🙂 Main metodunda threadden çağırdığımız metodu SendHTTP yaparak, programı çalıştıralım. Wirshark’ı açarak trafiği de izlemeye alalım. Aşağıda Wireshark paket trafiği görünmektedir:

Biz, bağlantı kurma isteğimizi bildirmek için SYN paketi gönderiyoruz. Hedef makine bize SYN+ACK göndererek “bağlantı kurabiliriz” diyor. Biz ACK ile cevap veriyoruz. Böylece TCP bağlantısı gerçekleşmiş oluyor. Sonra HTTP request gönderiyoruz. Ardından bağlantıyı kesmek istediğimizi bildirmek için FIN+ACK gönderiyoruz. Hedef makinede bağlantı kesme isteğini kabul ettiğini bildirmek için ACK gönderiyor. Biz, bağlantıyı kesmek için RST+ACK gönderiyoruz. Hedef makine de ACK ile kabul ettiğini bildiriyor. RST göndererek bağlantıyı sonlandırıyoruz. Seri halde bunu yapınca site yine teklemeye başlıyor 🙂

ICMP Flood

Hazır, pinge açık sistem bulmuşken ICMP Flood yapmamak ayıp olur 🙂 ICMP (Internet Control Message Protocol) sistemler arası iletişim ve hata ayıklama amacıyla kullanılan bir protokoldür. Aslında hiçbir kod yazmadan, command prompttan “ping -t yeniakit.com.tr” ile DOS saldırısı gerçekleştirilebilir. Ancak cmd’den gönderilen ping komutu ile 32 bytes’lık bir ICMP paketi gönderiliyor. Eğer daha büyük ICMP paketleri oluşturup, ping atarsak hedef sistemi daha fazla yorarız. Send metodumuzu aşağıdaki gibi düzenleyerek ICMP flood yapabiliriz.

Göndereceğim mesajı BBC spor haberlerinden aldım 🙂 Main metodundaki threadden SendPing metodunu çağırıp, uygulamayı çalıştırdığınızda flood yapmaya başlayacaktır.

Soldaki flood yapan uygulama. Sağdaki command prompt. Sürekli 793 bytes’lık ICMP paketleri gönderiliyor. Sonuç, görüldüğü gibi hedef sistem cevap veremez durumda.

DOS saldırı yöntemlerinin bir bölümünün perde arkasına baktık. BotNet’ler ile DDOS yapmıyorsanız, network trafiği monitor edilen sisteme yapacağınız DOS saldırılarında yakalanma ihtimaliniz %100’dür. Yukarıda Wireshark paket trafiğine baktığınızda TCP/UDP protokollerinin headerlarında IP bilgisi taşınmaktadır. Kendi web serverlarıma yaptığım bir UDP saldırısında, source IP, firewall loglarında açıkca görünmektedir.

IP spoofing yapılmadığı için bombalama yaptıktan sonra olay yerine kimliğini bırakan suçlu konumuna düşebilirsiniz:) Araya yazı girmez ise flood saldırıları üzerine devam edelim.

Reklamlar