Press "Enter" to skip to content

Yavaş Okutarak Hizmet Engelleme

Özellikle Web sitelerini devre dışı bırakmak için kullanılan “slow read” saldırıları TCP’nin (Transmission Control Protocol – İletim Kontrolü Protokolü) doğal yapısındaki “window size” özelliğini kullanarak sunucunun (server) istemciye (client) gönderdiği cevabın yavaş okunmasına dayanır.

Cevap, istemcide yavaş okunarak sunucu bekletilir. Daha önceden kullanılan “slow” saldırılarda sunucuya parçalar halinde gönderilen HTTP (Hypertext Transfer Protocol – Hipermetin Aktarma Protokolü) istekleri sunucunun portlarının tıkanmasına neden olmaktaydı.

Aralıklarla gönderilen sayfa parçası istekleri sunucu ile istemci arasındaki bağlantının kesilmesini önlemekteydi. “Slow read” saldırısında ise, istek sunucuya bütün halinde gönderilmekte, fakat sunucunun cevabı bellekten yavaş okunarak geciktirilmektedir.

Timer (zamanlayıcı) bulunan sunucular belirlenen süreden sonra bağlantıyı keseceğinden dolayı TCP’deki veri akışını kontrol eden “window size” özelliğinin 0’a yakın tutulmasıyla sunucu ve istemci arasında kısa sürelerle “ACK” ve “SYN” paketleri gönderilmesi sağlanarak, sunucunun bağlantıyı kesmesi önlenmektedir. Saldırı temelde istemci bilgisayarın sunucuya gönderdiği büyük boyutlu isteğin cevabını, çalıştırdığı araçlarla parça parça ve yavaşlatarak dinlemesi sonucu oluşur.

İstemci cevabı yavaş okurken, sunucu verinin kalanını gönderebilmek için istemcinin veri gönderimine hazır olmasını bekler ve belleğini gönderilmemiş verilerle doldurur. Eş zamanlı böyle saldırılar ile sunucunun diğer istemciler ile bağlantı kurması engellenir.

“Slow read” saldırıları düzenlemek oldukça kolaydır. Yalnızca asgari donanım gerektirir. Ayrıca tek bir bilgisayar bile kısa bir sürede bir sunucuyla binlerce bağlantı kurup, asgari bant genişliği kullanarak binlerce tamamlanmamış HTTP isteği gönderebilir.

“Slow read” saldırıları uzun zaman alan masum HTTP istekleri gibi göründüklerinden tespit edilmeleri zordur ve alışıldık DoS (Denial of Service – Hizmet Engelleme) saldırısı önleme yöntemleri ile engellenemezler.

Sunucularda varsayılan ayarlardan olan aşağıdaki özellikler bulunduğunda sunucu “slow read” saldırılarına açık hale gelmektedir.

Sunucunun çok küçük “window size” değeri ile gelen ilk “SYN” paketlerini kabul etmesi,
Sunucunun, istemcinin veriyi kabul etmemesi halinde bağlantıyı kesmemesi,
Sunucu ile istemciler arasında devamlı bağlantılar ve HTTP pipelining (arka arkaya veri aktarımı) yapılabilmesi.
Bu tür saldırılardan korunmak için Web sunucusuna normalden çok daha küçük “window size” kullanılarak istek yapan istemcilerle bağlantıyı reddetmesini sağlayan, istemcinin veriyi uzun süre kabul etmemesi halinde bağlantıyı kesmesini sağlayacak ve isteklerin ömrünü sınırlayan kurallar yazılmalıdır.

Uygulama

Fedora işletim sistemine sahip bir istemciden 160.75.5.174 IP (Internet Protocol – İnternet Protokolü) adresini kullanan CentOS işletim sistemi yüklü Web sunucusuna “slowhttptest” isimli bir program kullanılarak yapılan saldırıda kullanılan komut “slowhttptest –c 1000 –B –g –o body_stats –i 110 –r 200 –s 8192 –u https://160.75.5.174 –x 10 –p 3” şeklindedir. Saldırının süresi 240 saniyedir. Programın yapılandırılabilir özellikleri aşağıda açıklanmıştır.

-c : Kurulacak bağlantı sayısı belirtilir.
-g : Grafik çizmek için gerekli istatistikleri tutacak bir HTML (Hyper Text Markup Language- Zengin Metin İşaret Dili) sayfası üretir.
-o : Grafiğin tutulduğu HTML sayfasının adı belirtilir.
-i : Gönderilen veriler arasındaki zaman saniye cinsinden tanımlanır.
-r : Saniyede kurulacak bağlantı sayısı belirtilir.
-s : Veri başlığı içerik boyutu değeri “byte” cinsinden tanımlanır.
-u : Hedef URL (Uniform Resource Locator – Tekdüze Kaynak Konumlayıcı) belirtilir.
-x : Tek seferde gönderilebilecek en fazla veri boyutu tanımlanır.
-p : Sunucunun cevap vermiyor olarak yorumlanması için beklenecek süre tanımlanır.

İstemci bilgisayarda komut satırına belirtilen komut girildiğinde alınacak ilk ekran görüntüsü aşağıdaki gibi olur.

 

Buradaki “pending” değeri sunucunun göndermek için belleğinde beklettiği cevap sayısı, “closed” değeri sunucunun kapattığı bağlantı sayısıdır. “service available” değerinin “YES” olması sunucunun hizmet verebildiği anlamına gelmektedir. Saldırıya başlandığında sunucu hizmet verebilir durumdadır. Bu değer “NO” olduğunda ise sunucu hizmet veremez duruma gelecek, yani hizmet engelleme saldırısı amacına ulaşmış olacaktır.

Saldırının 0-10 saniye arasındaki çıktısının ekran görüntüsü aşağıdaki gibidir.

 

Saldırı başladıktan 5 saniye sonra sunucunun hizmet veremez halde olduğu ve istemciye göndereceği 221 cevabı belleğinde tuttuğu görülmektedir. 10. Saniyede ise “pending” değeri artmaya devam ederken, sunucu bağlantılardan 14’ünü kapatmış durumdadır.

Saldırı sonlandığında alınan çıktının ekran görüntüsü aşağıdaki gibidir.

 

Çıktıdaki “status” değerinin “Connection refused” olması sunucunun bağlantıyı reddettiğini göstermektedir. Saldırının 110. saniyesinde sunucu hala erişilemez durumdayken 111. saniyede bağlantıyı redderek saldırıyı durdurmuştur.

Programın oluşturduğu HTML sayfasından alınan ekran görüntüsü aşağıdaki gibidir.

 

Grafikte görüldüğü gibi sunucu ilk iki saniye içerisinde hizmet veremez duruma gelmiştir. Saldırı süresince sunucu bazı bağlantıları kapatarak “pending” değerini azaltmış ve saldırıyı sonlandırmaya çalışmıştır. Sunucu bu şekilde bağlantıyı reddederek saldırıyı sonlandırdığında tekrar hizmet verebilir hale gelmiştir.

Aynı saldırı geliştirilerek ve/veya birden fazla istemci tarafından uygulanarak daha etkili bir hale getirilebilir ve sunucunun hizmet verememe süresi artırılabilir, saldırının sunucu tarafından engellenmesi önlenebilir olmakla beraber daha önce yukarıda belirtilen önlemler sunucuda uygulanarak saldırı sunucu tarafında hiçbir sorun yaratmadan etkisiz hale getirilebilir.

Buna benzer diğer yazılarım

Ülke geneline gelen saldırılar hakkında erhabalar efenim, Ülke geneline gelen saldırılar hakkında biraz istişare yapalım. Öncelikle bu konu forumlarda sık tartışılır olduğu için bu yazıyı...
İmunify360 nedir ve İmunify360 Nedir diyecek olursak CloudLinux tarafından geliştirilen Linux sunucularda güvenliği artırmak bir üst seviyeye çıkartmak için yapılan bir m...
Centos’a AVG Scan Kurulum ve kullanım Merhabalar dostlar, bu yazıda Centos'a AVG Scan Kurulum ve kullanım hakkında birkaç bişeyler yazıp izeceğiz inşallah hayırlı olması dileğiyle. Önce...
cPanel vs Plesk Web hosting sektöründe bitmeyen tartışmadır Plesk vs cPanel. İnsanlar genellikle Plesk ve cPanel'ın diğerlerinden daha iyi olduğunu tartışırlar evet b...
Default Php.ini kullanmaya zorlama Merhabalar dostlar, bu yazıda centos sunucular üzerinde güvenliği bir üst seviyeye çekmek için güzel bir önlem olan Default Php.ini kullanmaya zorlama...
Siteden Virüs Temizleme yolları Merhabalar dostlar, Bu aralar birkaç kişiseden sıkça bu soruyu aldım "Siteme virüs bulaştı ne yapmalıyım" en son isim vermeyeceğim değerli bir abinin ...

Bu yazı 594 Defa okundu. Diğer yazılarımı da oku süper yazarım :)

||||

Ali Çömez
Ali Çömez

Kaldırımda yürürken beyaz çizgilere basmamaya çalışan, Sabah yüzünü yıkarken dirseklerinden su sızmasından nefret eden, Dönerle ayranı aynı anda bitirebilen, son dakikada otobüsü kaçırsada grur yapıp arkasından koşmayan... bir insanım :)

View all posts

One Comment

  1. Sunucunun bu şekilde kapatılabileceği pek aklıma gelmemişti. Dikkatli olmak lazım, teşekkürler.

Bir cevap yazın

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