Ddos nedir, ne değildir? II. Bölüm

>

Bir önceki yazımızda genel olarak Bilgi Güvenliği’nin temelini oluşturan Gizlilik – Bütünlük – Erişilebilirlik (CIA)’den ve DoS’un ne olduğundan bahsettik. Sonrasında verdiğimiz yaşanmış vakalar da, bize bu silahın ne denli güçlü olabileceğini gösterdi. Bu yazımızda ise biraz daha derine inip bu işin teknik detaylarından, saldırı şekillerinden bahsedeceğiz. Son olarak da alınabilecek önlemlere değinerek bu saldırılara karşı neler yapabileceğimizi göreceğiz.

DDoS, daha önceki yazımızda bahsettiğimiz üzere Dağıtık Servis Engelleme saldırılarıdır. Dağıtık olması, sadece saldırının şiddetini arttırmamakta, aynı zamanda engellenmesini de zorlaştırmaktadır. Çünkü saldırı tek kaynaktan gelmiyordur ve tek bir firewall kuralı ile basitçe o IP’yi engelleyebileceğiniz bir durum söz konusu değildir.

Yandaki şekilde görüldüğü gibi, hedef sunucuya aynı anda çok sayıda istek gitmektedir. Sistemin kaynakları (CPU, Stack, band vs) bu istekleri karşılayamadığı durumda sistem, gerçek kullanıcılar tarafından da erişilemez hale gelmektedir. Ne yazık ki bu durum, sisteme gelen yükün azalıp kabul edilebilir seviyelere kadar inmesine kadar devam etmektedir.

DDoS saldırılarının temel olarak 2 şekilde gerçekleştirildiğini söylersek yanlış olmaz; bunlardan birinde çok sayıda farklı kullanıcının; sosyal medya, forum, IRC gibi kanallar üzerinden organize olarak aynı anda bir sisteme erişmeye çalışması şeklinde olmaktadır. Diğerinde ise Botnet üyesi olan zombi makinelerin bilinçsizce sisteme erişimi şeklinde gerçekleşir.

 

Yukarıdaki şekilde, temel bir BotNet yapısı görülmektedir. Burada, 1 ya da daha fazla C&C sunucuya bağlanan zombi makineler, saldırganın verdiği komutları C&C sunucusundan alarak belirlenen zamanda, belirlenen hedefe çok sayıda istek göndermekte ve hedef sistemin gerçek kullanıcılar tarafından erişimini engellemektedir. C&C yani command-and-control sunucuları, asıl BotNet master tarafından yönetilen ve zombi makinelerin belirli zamanlarda bağlanıp gerekli komutları aldıkları sunuculardır.  Bu tip saldırılarda C&C sunucuların tespit edilebilmesi ve zombi makinelerle iletişiminin kesilebilmesi, saldırının engellenmesine katkıda bulunabilir

Servis engelleme saldırıları çeşitli yöntemlerle yapılmaktadır;

Bu saldırı türünde, hedef sistemin sahip olduğu hattın doldurulması amaçlanmaktadır. Burada genelde çok sayıda istek yapılması, yapılan isteklerin hattı doldurmasına yetmeyebilmektedir. Bu durumda saldırı, yapılan isteklerle değil, dönen cevaplarla bandın doldurulması şeklinde gerçekleşmektedir. Örneğin, bir internet sitesinin yüksek miktarda hat kapasitesine sahip olduğunu düşünelim. Bu siteye yapacağımız GET isteklerinin boyutu hattı doldurmaya yetmeyebilir. Bu durumda, çok sayıda kullanıcıyla, site üzerindeki büyük bir dosyayı (örneğin resim, video gibi) çağırmak suretiyle, sunucudan dönen cevapların hattı doldurması ve gerçek kullanıcı isteklerine yer kalmaması sağlanabilir. Burada hattı saldıranlar değil, kurban sistem doldurmuş olur.  Aşağıda görünen grafik, bir sisteme ait hat kullanımının zamana bağlı değişimini gösteren grafiktir. Burada görülebileceği gibi, sistem belli zamanlarda (özellikle saat 6-10 arası) maksimum hat kapasitesine ulaştığı için hat tamamen dolmuştur. Buna hattın satureolması denir. Hat sature olduğunda, sisteme mevcut trafiğin yanında yeni trafik gelemez, gelse de beklenen sürelerde sistemden yanıt alamaz.

Bu tip saldırıda ilk yapılan şey, ilgili servis sağlayıcı ile görüşüp hat kapasitesini yükseltmek olmaktadır. Fakat bu her zaman çözüm olmayabilir. Çünkü hat kapasitesi, gelen saldırıdan düşük olduğu sürece hat büyüdükçe gelen trafik hattı doldurmaya devam edecektir. Ancak gelen trafikten daha yüksek kapasite sağlandığında sistem cevap verebilir hale gelecektir Bu saldırıları az şeritli bir köprüye çok sayıda aracın aynı anda girmeye çalışmasına benzetebiliriz. Bunu en iyi, İstanbul’da yaşayan ve sabah akşam Boğaz Köprüleri’ni geçmeye çalışanlar bilir. Araç sayısı arttıkça yoğunluk artacak ve trafiğin akış hızı düşecektir. Tıpkı satüre olmuş bir hatta isteklere verilen cevap sürelerin uzaması yani hızın düşmesi gibi.

SYN Flood saldırılarının temelinde TCP (Transmission Control Protocol)’ün yapısı yatmaktadır. TCP’de bir bağlantının kurulabilmesi için öncelikle 3-way handshake (3 yollu el sıkışma) sağlanmalıdır. 3 yollu el sıkışma temel olarak aşağıdaki şekilde gösterildidiği gibi gerçekleşir;

 

  1. İstemci, sunucuya  belli bir hedef port için X sıra numarasıyla bir SYN (Synchronize) paketi gönderir.
  2. Hedef sistem, eğer bu porttan hizmet veriyorsa ve gerekli güvenlik izinleri varsa, bu SYN paketine karşılık X+1 sıra numarasıyla bir ACK (Acknowledgment) paketi ve Z sıra numarasıyla bir SYN paketi gönderir.
  3. İstemci, gelen Z sıra numaralı SYN paketine karşılık gelen bir Z+1 sıra numaralı bir ACK paketi gönderir ve böylece 3-yollu el sıkışma sağlanmış olur.

SYN Flood saldırılarının temelinde TCP’nin bu yapısı yatar demiştik. Burada saldırganlar, hedef sisteme çok sayıda SYN paketi gönderir. Bu paketleri alan kurban sistem ise, bu kaynaklar için kendi tarafında bir bağlantı noktası ayırır. Gelen her istek için bağlantı tablosunda bir yer ayrılmasına karşın asla 3-yollu el sıkışmalar tamamlanmaz ve belli bir yerden sonra bu bağlantı tablosu şişer. Kurban yeni bağlantı alamaz ve böylece hizmet veremez duruma gelir. Aşağıda bu işlemin basit bir uygulamasını kendi laboratuar ortamında gerçekleştirdik. Elimizde fazla sayıda bilgisayar olmadığından, hping3’ü kullanarak source-spoof, yani sahte kaynak adresli, çok miktarda istek gönderiyoruz;

Aynı anda paket analizi yaptığımızda, kendi bilgisayarımızdan fakat farklı kaynak adresli çok sayıda isteğin hedef makineye yönlendiğini görüyoruz;

Son olarak hedef bilgisayarımızın oturum tablosuna baktığımızda, bu istekler için bir bağlantı noktasının ayrıldığını görüyoruz;

Belli bir noktadan sonra kurban sistemimiz yeni gelen isteklere cevap veremez hale geliyor. Bu saldırı türünden korunmak için hedef sistemimiz; SYN Cookie, SYN Proxy gibi özellikleri olan güvenlik cihazlarının arkasına alınmalıdır. Bu güvenlik cihazları, gelen istekleri doğrudan hedef sisteme göndermeyip bağlantıyı kendisi karşılamakta, eğer bağlantı gerçek bir bağlantı değilse hemen session (oturum) tablosundan düşürüp kaynakların boşa harcanmasını engellemektedir.

Bu saldırı, OSI katmanlarından Uygulama Katmanı (Application Layer) seviyesinde yapılan bir saldırıdır. HTTP (Hyper-Text Transfer Protocol)’ündeki metodlardan GET metodu ile gerçekleştirilir. 3-yollu el sıkışmanın tamamlanmasından sonra, HTTP GET isteği gönderilen sunucu, eğer çağırılan web bileşeni kendisinde mevcut ise ilgili web bileşenini döner. GET Flood saldırıları HTTP protokolünü kullandığı için, saldırgan kişi ip adresini değiştirerek bu saldırıyı gerçekleştiremez. SYN Flood saldırısındaki sahte kaynak ipnin aksine, burada saldırgan taraf istekte bulunduktan sonra cevabı da yine kendisi alır. Bu nedenle GET Flood saldırılarının tek kaynaktan yapılması pratikte uygulanabilir değildir. Çok sayıda zombi bilgisayarın, yüksek miktarda yapacağı GET isteğiyle gerçekleştirilen bu saldırıda, web sunucu bu istekleri karşılayamaz duruma gelir ve gerçek istemciler tarafından (legitimate traffic) ulaşılamaz duruma gelir. Bu saldırıyı önlemek için sunucunun cevap vermesini engellemek, güvenlik cihazlarında sunucuya doğru olan trafiği kesmek gibi yöntemler geçersiz yaklaşımlar olacaktır. Burada zaten hedeflenen şey sunucunun erişilemez olmasını sağlamaktır. Yapılması gereken şey, atak paternini (saldırı modeli, imzası) tespit etmeye çalışmak ve bunu web sunucuya gelmeden IPS ya da özel DDoS cihazları ile engellemektir. Bu ne yazık ki her zaman mümkün olmayabilmektedir. Bu tip durumlarda, sayfayı başka bir yere taşıyıp, gelen istekleri yeni yere yönlendirmek çözüm olabilmektedir. Eğer isteği yapanlar sistemler gelen yönlendirme mesajı (redirect) algılayamıyorsa bu trafik web sunucuya kadar ulaşmayacak, sadece redirect mesajını algılayıp yeni konuma ulaşabilen istemciler web sunucusuna erişmiş olacaktır.

Bu saldırı, ICMP (Internet Control Message Protocol) protokolünü hedef almaktadır. ICMP, genel olarak sistemler arası iletişim ve hata ayıklama amacıyla kullanılan bir protokoldür. Hepimizin siyah ekran, cmd diye tabir ettiği komut satırı açarak yapabildiğimiz ve bunu yaptığımız için kendimizi bilgisayar uzmanı olarak gördüğümüz ping komutu bu protokol üzerinde çalışmaktadır. İstemci sistemin, hedef sisteme gönderdiği gönderdiği ICMP Echo Request (TYPE 8) paketine karşılık hedef sistem ICMP Echo Reply (TYPE 0) paketi gönderir. Böylece biz, hedef sistemin ulaşılabilir olduğundan emin oluruz. Burada hemen belirtelim, cevap gelmemiş olması sistemin ayakta olmadığını göstermez. Aşağıda, www.google.com adresine yapılan ping istek ve cevaplarının trafik analizi görünmektedir. Yapılan istek;

 

Bu yapıdan faydalanılarak, saldırgan makineler çok sayıda ICMP Echo Request (type 8) paketi gönderir. Kurban sistem, gelen tüm bu isteklere cevap vermek için çaba harcar ve sistem yorulmaya başlar. Sistem kaynakları bunlara cevap veremez hale gelir ve sistem erişilemez duruma düşer. Aşağıdaki örneğimizde aynı bilgisayar üzerine kurulu 2 sanal makineden birini hedef ve birini de saldırgan olarak kullanıyoruz. Burada 10.0.0.230 ipili saldırgan makineden kendi normal olarak 1 ms’nin altında bir sürede cevap alıyorken saldırı başladığı andan itibaren bu süre uzuyor ve sonrasında sistem cevap veremez hale geliyor. Saldırgan makine sadece birkaç saniyede 158647 paket gönderiyor.

Hedef makinenin cevap verme süreleri;

 

Hemen belirtmeden geçemeyeceğim; konumuz DDoS, yani dağıtık servis engelleme saldırıları fakat biz tek makineden saldırı yapıyoruz laboratuar ortamında. Fakat gerçek DDoS’u karşılamak için fark ettiğiniz üzere rand-source parametresini kullanıyoruz. Bu da, farklı ve tabi ki sahte kaynak adreslerinden saldırı yapmamıza imkan tanıyor. Zaten bu sebepledir ki saldırgan makinemize bu cevaplar gelmiyor.

UDP (User Datagram Protocol), TCP gibi OSI katmanlarından 4. Katmandır. TCP’den en temel farkı connectionless bir protokol olmasıdır. Yani verinin ulaşıp ulaşmadığını garanti etmez. Diğer taraftan, bu özelliği aslında daha hızlı bir protokol olmasını sağlamaktadır. 3 yolu el sıkışma olmaması ve trafiğin karşı tarafa ulaşıp ulaşmadığını kontrol etmemesinden dolayı daha hızlı çalışır. Eş zamanlılığın önemli olduğu uygulamalarda (video/ses yayınları gibi) bu protokol tercih edilir. Aynı zamanda internetin en temel protokollerinden DNS (Domain Name System) de bu protokolü kullanır. DNS, internet üzerinde ya da yerel ağlardaki sistemlerin adlandırma yönetimi yapan protokoldür. Günlük hayatımızda bir alan adının, IP adresine dönüşümünü yaptığını söyleyebiliriz basitçe. Aşağıda, www.google.com için yaptığımız bir A kaydı sorgusunun trafik analizini görebilirsiniz. İstek;

Cevap;

 

Burada örnek olarak DNS’i vermemizin sebebi, UDP Flood saldırıların daha çok DNS sunucuları hedef almasıdır. UDP Flood saldırıları, hedef sisteme çok sayıda UDP paketi gönderilmesi şeklinde olur. Burada hedef sistem, paket gönderen sistemlerin gerçek sistem olup olmadığını bilmediği için, gelen her isteğe cevap vermeye çalışır. Bir noktadan sonra sistem cevap veremez duruma gelir. Belirttiğimiz gibi daha çok DNS sunucuları hedef alan bu saldırıda, DNS sunucu cevap veremez hale getirilir. DNS sunucunun cevap verememesi demek, henüz DNS önbelleğine ilgili alan adını ve ip adresini almamış bir istemcinin, ulaşmak istediği sisteme ulaşamaması anlamına gelecektir. 

Bu saldırı türü de yine web sunucu çalışan sistemlere yönelik yapılan bir saldırıdır.  Saldırgan makinenin, çok az hat kullanarak hedef makinin cevap veremez hale gelmesine imkan tanımaktadır. Burada saldırgan makine hedef sisteme çok fazla bağlantı kurar. Kurduğu bağlantılar üzerinden paketleri çok seyrek bir şekilde gönderir ve böylece bağlantının kopması engellenir. Kapanmayan ve boşa çıkmayan bu bağlantılar nedeniyle hedef sunucu yorulur ve cevap veremez hale gelir.

Bu saldırılarda, saldırgan sistemler gönderdikleri paketlerin içeriğinde kaynak ip adresini hedef ip ile aynı yaparlar. Yani hedef makine sanki kendisine paket gönderiyor durumuna düşer. Böylece hem dışarıdan paket almış, hem de kaynak adres de kendisi olduğundan kendisine cevap dönmüştür. Böylece birim zamanda hedef sisteme gelen paket sayısı 2 katına çıkar. Bu şekilde saldırının şiddeti artar. Zamanımızda işletim sistemlerinde ip spoof (sahte ip) koruması olduğundan bu saldırının uygulanabilirliği azalmış durumdadır.

Saldırgan sistem, belli bir ağın broadcast (ağ yayın adresi) adresine ping istekleri gönderir. Gönderdiği paketin içerisinde ise kaynak adresini kurban sistemi olarak tanımlar. Böylece, ağda bulunan tüm makineler isteğin kurban makineden geldiğini düşünerek bu makineye cevap dönerler ve hedef sistem erişilemez hale gelir. Bunu sadece broadcast adresi ile değil, rastgele hedeflere göndereceğimiz (değiştirilmiş, sahte kaynak ile) paketlerin kurban makineye dönmesi şeklinde de uygulayabiliriz. Böylece kendimizi gizleyerek, sanki tüm internetten bu hedef sisteme doğru bir saldırı yapılmasını sağlarız.

DDoS, gerçekten de başa çıkılması zor bir saldırı türüdür. Çünkü saldırı çok çeşitli kaynaktan gelmekte ve yukarıda da değindiğimiz gibi atak patterni, yani saldırının deseni/imzası her zaman tespit edilememektedir. Yine de bu saldırılara karşı alınabilecek önlemler yok da değildir. DDoS’u önlemeye yardımcı olacak tekniklere bir göz atalım;

  • Rate Limit: Rate limit, adından da anlaşılacağı gibi, bir hedef veya kaynak için, belli zamandaki trafik miktarının sınırlanması anlamına gelmektedir. Rate limit, uygulanabiliyorsa dinamik olarak uygulanabilir. Böylece normal zamandaki trafik öğrenilerek, bu trafiğe uygun bir değer sınır olarak kabul edilir. Bu değerin üstündeki trafik göz ardı edilir, yani düşürülür. Dinamik olarak belirlenemeyen durumlarda trafik gözle incelenir ve uygun bir statik değer atanır. 
  • IP Engelleme : Bu genelde pek mümkün olmasa da nadiren uygulanabilir bir yöntemdir. Burada, kaynak ip adresleri ya da ip aralıkları tespit edilebilirse, bu adresler için yazılacak bir güvenlik duvarı kuralı ile trafik engellenebilir. Bu kara liste oluşturma yöntemidir. Eğer sistemimizin erişmesi gereken kaynakları belli bir aralıkta toplayabiliyor ya da tek tek IP adreslerini biliyorsak, bunlar için bir beyaz liste oluşturup, geriye kalan tüm trafiğin engellenmesini sağlayabiliriz. 
  • SYN Proxy : SYN Proxy, tam olarak günlük hayatta sıkça duyduğumuz web Proxy mantığına benzer bir mantıkla çalışır. SYN Proxy cihazımız, gerçek sunucumuz ile internet arasında durur. 3 yollu el sıkışmanın son ACK paketi gelmeden trafiğin web sunucusuna gitmesine izin vermez. Böylece yazımızın ilk kısımlarında bahsettiğimiz şekilde tamamlanmayan el sıkışmalar oluşmaz ve hedef sistemin kaynakları tüketilmemiş olur. Bu önlem, adından da anlaşılacağı gibi SYN Flood saldırılarına karşı uygulanabilir bir yöntemdir. 
  • Atak paterni ile engelleme : Yapılan saldırı analiz edilip trafiğin içerisinde belli bir imza tespit edilebilirse, bu imza, hedef sistemin önünde bulunan bir IPS cihazı üzerinde tanımlanarak engellenebilir. IPS (Intrusion Prevention System) sistemleri genel olarak imza tabanlı olduğundan, yazılabilecek bir imzayı içeren trafik engellenebilir.

 Son olarak şunu söylememiz gerekir ki, her ne kadar bu önlemler belirli bir şiddete kadar olan saldırıyı engelleyebilse de, saldırının şiddeti bazen karşı konulmaz seviyelere çıkabilir. Bu durumda ne yazık ki saldırı bitene kadar servis verilemez hale gelinebilir. Makalemizin üçüncü bölümü DDoS’un silah olarak kullanılması ve son kullanıcılara uyarı kısmı ile devam edecektir

Ömer Faruk ALTUNDAL
Ağ Güvenliği Çalışma Grubu
Siber Güvenlik Derneği
İstanbul, 10 Eylül 2012

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.