Apache HTTP DoS Tool ve Önlemler
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYIWrJme' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Geçen günlerde, enteresan bir HTTP DoS tool'u yayınlandı. Perl ile yazılmış ve kullanımı çok kolay olan bu tool ile apache gibi istekleri karşılamak için birden fazla süreç çalıştıran web sunucularını hizmet veremez hale getirmek oldukça basit. | HTTP request sent, awaiting response… |
Bu tool, diğer DoS saldırılarında da olduğu gibi sunucunun kaynaklarının tükenmesine ve bir müddet sonra hizmet veremez duruma gelmesine sebep oluyor fakat bu işi, tamamlanmamış http istek paketleri göndererek yapıyor. Yani, hedef sunucu gelen http isteklerinin tamamlanmasını bekliyor ancak istekler sürekli geliyor olmasına rağmen tamamlanmadığından ve tamamlanması için kurulu olan bağlantı sonlandırılmadığından dolayı çok kısa bir süre sonra sunucu yeni ve legal isteklere yanıt veremez duruma geliyor.
Bu tool ile yapılacak bir saldırıdan korunnmak için bir iki yöntem mevcut, bu yazıda bu konuya değinmek istiyorum.
Nereden nasıl bulunabileceğine ve kullanılabileceğine değinmeyeceğim bu script, apache 1.x ve 2.x, squid, dhttpd, GoAhead gibi web sunucularını etkiliyor. Ben default ayarlarla çalışan bir apache 2.0 üzerinde test ettim ve sunucunun down olması bir kaç saniyeyi bulmadı. Script tarafından gönderilen paketler tamamlanmamış http istekleri olduğundan dolayı, bu dos attack'ı sırasında apache'nin log dosyalarına herhangi bir şey yazılmıyor; yani ilk etapta loglardan bir şey çıkarmak mümkün olamayabilir.
Saldırı tipi DoS olduğundan ve sürekli aynı ip adresinden geliyor olduğu için saldırı sırasında engellemek kolay. Web sunucunuza açılmış olan connection'lara baktığınız zaman saldırıya ait bağlantıları kolayca tespit edebilir, firewall'unuzdan erişimini engelleyebilirsiniz.
Ancak, saldırıya maruz kalsanız bile etkilenmemek için aşağıdaki işlemlerden birisi uygulanabilir.
IDS/IPS Kuralı Oluşturmak
Gönderilen istek parçaları tamamen legal, yani önde bir IDS ya da IPS çalıştırıyor olsanız bile sisteminiz bu legal durumlardan şüpelenmeyebilir. Fakat kendi IDS kuralınızı yazarak saldırının önüne geçebilirsiniz. İlgili atağa ait http isteği şu şekilde.
"GET / HTTP/1.1" 400 348 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)"
Bir IPS'iniz varsa, bu tool ile yapılacak olası bir saldırıdan etkilenmemenin en güzel yolu kendi kuralınızı yazmak ve yukarıda geçen http requestlerin bulunduğu paketleri drop etmektir. Ancak bir IPS kullanmıyorsanız, aşağıdaki diğer yöntemlere de göz atabilirisiniz.
Apache'de Timout Değerini Aşağı Çekmek
Normalde, apache'nin default timeout değer 300 sn (5 dakika) hal böyle olunca ilgili tool ile kurulan bağlantılar 5 dakika süreyle aktif olacaktır, bağlantıların timeout'a düşmesinden sonra ise yenileri açılacaktır.
Eğer bu değeri daha düşük bir süreye set ederseniz, tamamlanmayan http requestlerina ait bağlantılar çabucak sonlandırılacaktır. Timeout değerini 5 saniyeye set ederek yaptığım denemelerde apache, saldırı altında sorunsuz olarak hizmet vermeye devam etti.
Ancak, sonuç olarak timeout değerini 5 saniye gibi düşük bir değere set etmek, yavaş ya da sorunlu bağlantıya sahip olan kullnıcıları da etkileyebilecek bir durumdur. Böyle durumlarda ilgili web sitesini görüntüleyemeyebilirler.
Ayrıca, scriptin timeout değerini belirlemeye yarayan bir parametresi de bulunuyor. Yani saldırgan timeout değerini tam olarak tahmin edebilir ya da oldukça düşük tutarsa, daha çok band genişliği harcayacak olmasına rağmen başarılı olur.
Fakat bu yöntem ile en azından lamer'ların yapacağı saldırıların önüne geçebilirsiniz.
FreeBSD accf_http Modülünü Devreye Almak
Eğer apache sunucunuz FreeBSD üzerinde çalışıyorsa alınabilecek önlemlerden birisi de accf_http kernel modülünü devreye almaktır. Bu modül temel olarak, gelen bağlantılar için http istekleri tam olarak tamamlanana kadar bir tampon oluşturuyor. Sonuç olarak script aracılığı ile açılan tamamlanmamış http isteklerine ait bağlantılar, apache'ye iletilmiyor ve bu şekilde saldırı riskini azaltmanız mümkün.
accf_http modülünü devreye aldıktan sonra yaptığım testlerde, yaklaşık 50bin tamamlanmamış http isteğinin gönderilmesinin ardından sunucunun durumdan etkilenmeden hizmet vermeye devam ettiğini gözlemledim. Dolayısı ile kullanılabilicek bir yöntem.
Şu şekilde hemen devreye alabilirsiniz:
# kldload accf_http
Ayrıca, açılışlarda devreye alınması için
/boot/loader.conf dosyanıza
accf_http_load="YES"
satırını ekleyebilirsiniz.
Apache'de mod_limitipconn Modülünü Devreye Almak
limitpcon modülü, belirli bir ip'den gelecek maksimum bağlantı isteğinin set edilmesine yarıyor. Yani bu modülü devreye aldıktan sonra, tek bir ip'den açılabilecek bağlantı sayısını belirleyebiliyorsunuz. Her ne kadar benzer bir işlemm pf ya da iptables gibi firewall'lar üzerinden yapılabiliyor olsa da bir firewall'unuz yoksa bu yöntemi kullanabilirsiniz.
Ancak, büyük bir lokal ağdan ya da proxy arkasından çok sayıda kişi apache sunucunuza bağlanıyorlarsa bu modül ilgili kişilerin de erişimini engelleyebilir.
Modül'ün nasıl kurulup kullanılabileceği ile ilgili detaylar için aşağdaki adrese bakabilirsiniz.
http://dominia.org/djao/limitipconn.html
IIS 6.0/7.0 ya da lighttpd kullanıyorsanız endişelenmenize gerek yok. Zira bu sunucular threaded process mantığı ile çalışmadıkları için olası bir saldırıdan etkilenmemekteler.
Bu yazılar da ilginizi çekebilir:
- Video: Dns Cache Poisoning Attack
- DNS Cache Poisoning
- IPFIREWALL ve Snort_Inline ile IPS – Part 1: IPFW Kurulumu
- IPFIREWALL ve Snort_Inline ile IPS – Part 2: Snort_Inline Kurulumu
- Squid ve IPFIREWALL ile Transparan Proxy Kurulumu
Yorumlar
Trackbacks
Yorumda bulunun.
mod_vhost_limit’ de işe yarıyor bu konuda. Tanımlanmış bir virtualhost’a aynı anda kaç connection açılabileceğini belirleyebiliyorsunuz.
[Cevapla]
Bu sitede http://www.astalavista.com/files/file/11803-fwsnort-11-application-layer-idsips-with-iptables/
Application Layer mevcut biraz bilgi verebilirmisiniz. Kursak faydası olur mu?
[Cevapla]
Benim loglarda bunlar var. Saldırı mı bunlar?
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.
2 329458 11.83%
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Tri
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.
[Cevapla]
Hayir bunlar saldiri ile alakali loglar degil. Rahat olabilirsiniz.
[Cevapla]
saldırı olduğunu nasıl ve nerden alayabiliriz yani log dosyalarında ne yer alır bu gibi durumlarda veya başka bi yerlerde ?
[Cevapla]