Şu forumda yıllardır aynı şeyleri, üstelikte yanlış şeyleri tekrarlayıp duran bir çok arkadaşımız var, uzun sürelerdir bu işlerle uğraşan biri olarak lütfen hepiniz bu açıklamamı dikkatlice okuyun ve yazıcıdan çıkartıp evinizin duvarına asın;
A) juno.c juno.c juno.c nedir bu juno.c?
Herkesin salladığı, hatta bu konunun başlığı olan "juno.c saldırısı" diye bir saldırı türü yoktur. juno.c adından da anlaşılabileceği gibi bir ansi-c yazılımının kaynak kod dosyasıdır. Bu yazılımın amacı syn-flood denilen saldırı türünü gerçekleştirmeye yardımcı olmaktır. Yani saldırının türü "syn-flood", saldırıyı gerçeklemeye yarayan yüzmilyonlarca araçtan birisi juno.c dosyasıdır, herhangi biri , "raw ip" paketini düzenleyebilen herhangi bir yazılım dili ile bu saldırıyı gerçekleştirebilir. Umarım artık bu forumda "juno saldırısı" terimi içeren bir yazı yazılmaz.
B) syn-flood nedir?
Bunu anlatmadan önce TCP nedir, nasıl çalışır konusunu açıklamak gerekir. TCP bir protokolün (protokol: bir sistemin nasıl çalışacağına dair kurallar) adıdır ve 3 yönlü handshake (SYN/SYN-ACK/ACK işaretleri) denilen kurallar bütünü ile işler.
Örneklemek gerekirse;
İstemci sunucuya SYN gönderir: 3585 cevap ver tamam
Sunucu istemciye SYN-ACK gönderir: 3585 dinlemede, teyid edin tamam
İstemci sunucuya ACK gönderir: Telsiz kontrol olumlu tamam.
Böylece kurallar bütünü tamamlanıp bir sonraki aşamaya geçilir. İşletim sistemlerinde TCP_BACKLOG denilen bir kuyruk vardır ve bu kuyruk sınırlı bir kuyruktur. Her gönderilen SYN işaretli paket sunucudaki işletim sistemi tarafından algılanır ve tcp_bakclog'a SYN_RECIEVED olarak kayıt edilir daha sonra sunucu, istemciye SYN-ACK işaretli paketi gönderir ve istemciden ACK işaretli paketi alana kadar veya timeout süresi doluncaya kadar tcp_backlogta bu kaydı tutar.
İşte, syn-flood bu kuralları suistimal ederek sınırlı büyüklükteki TCP_BACKLOG'u dolduran ve böylelikle sunucunun daha fazla SYN paketi kabul etmesini engelleyen bir saldırı türüdür. Bu saldırı türü kendi içinde 3'e ayrılır;
1) Doğrudan: Bir makinadan herhangi başka bir değişiklik yapılmaksızın ard arda sürekli SYN paketi yollamak.
2) Spoofed: Bir makinadan, ip header bilgisi değiştirilerek sürekli SYN paketi yollamak.
3) Spoofed Distributed: Birden falza makinadan ip header bilgisi değiştirilerek sürekli SYN paketi yollamak.
Her üçünüde inceleyelim:
1) Doğrudan saldırıda ne olur?
Saldırgan kendi ip adresi ile mağdur makinaya sürekli SYN paketi gönderir, mağdur da TCP kurallarına göre saldırgana aynı miktarda SYN-ACK gönderir elbette saldırganda buna ACK ile aynı miktarda yanıt verir. Bu durumda kimin çıkış hızı fazla ise o kazanır.
2) Spoofed saldırıda ne olur?
İşte bu yöntem en sık kullanılan synflood saldırısıdır (evet juno.c bunu yapar) Saldırgan her zamanki gibi mağdur makinaya sürekli SYN paketi gönderir ancak bu sefer ip adresini değiştirir. Böylelikle mağdur cevap olarak gönderdiği SYN-ACK işaretli paketi değiştirilmiş ip adresine gönderir ve dolayısı ile beklediği ACK paketini alamaz ve tcp_backlog kuyruğunda da belirli bir süre boyunca kalır. Saldırgan çok fazla spoofed syn paket gönderdiğinde, sonuçta tcp_backlog dolar ve mağdurun artık başka bir bağlantı kuracak yeri kalmamıştır.
3)Spoofed Distributed saldırıda ne olur?
spoofed syn floodda ne oluyorsa aynısı olur ancak bu sefer paketler bir değil birden fazla saldırgandan gelmektedir. Böylece saldırganın ağ trafiğinde bir yükselme gözlenmez ve ISP lerin dikkatini çekmez.
C) Nasıl korunurum?
İşletim sistemi düzeyinde yapılabilecekler;
1) syn_cookie: Adındanda anlaşılabileceği gibi bu bir cookie dir, etkinleştirildiğinde, SYN paketi sunucu tarafından alındıktan sonra SYN-ACK ile beraber bir cookie gönderilir ve bağlantı tcp_backloga yazılmaz. Eğer karşıda gerçek ip adresine sahip gerçek bir istemci varsa ACK ile beraber bu cookieyi gönderir ve bağlantı prosedürleri bu cookie ye göre devam ettirilir. Böylelikle spoofed saldırıların önüne geçilmeye çalışılır. Bu yöntem istisnasız her firewallda kullanılır.
2) tcp_backlog alanını genişletmek
3) timeout süresini düşürmek
Transport layer düzeyinde yapılabilecekler;
1) Sunucunun önüne bir tane daha sunucu veya bir firewall koyarak, SYN işaretli paketler öndeki sunucuya kontrol ettirilebilir. Öndeki sunucu arkadakinin yerine SYN-ACK gönderir ve eğer ACK alırsa SYN+ACK gönderek arkadaki tcp_backlog un tıkanmasını engeller. Böylelikle sizin sunucunuzun kaynakları tükeneceğine öndekinin kaynakları tükenir. AMA bu işlem normal istemcilerin bağlantı sürelerini uzatır.
2) Gene aynı yapıda ama kontrol mekanizması değiştirilerek, SYN paketi doğrudan arkadaki sunucuya geçirilir ve arkadaki sunucudan alınan SYN-ACK'ın hemen ardından öndeki sunucu arkadakine sahte bir ACK paketi yollar, böylelikle bağlantı süresi uzamaz. SYN paketi saldırgandan gelmediyse, işler normaldeki gibi ilerler ama eğer paket spoofed bir ipden geldiyse öndeki makina, arkadakine RST işaretli bir paket gönderir ve arkadaki bağlantıyı sonlandır. Çok beğendiğiniz sürekli sorduğunuz alsammı almasammı karar veremediğiniz donanımsal firewallarda bu yöntem kullanır.
Syn-flood saldırılarına karşı bunlardan başka etkili herhangi bir korunma yöntemi YOKTUR.
D) Bunu biz yapamaz mıyız, cisco bilmemne almamıza gerek var mı? iptables dandik midir?
Yok, yapabilirsiniz hiç bir farkı olmaz ayrıca iptables dandik değildir, çok başarılı bir uygulamadır -elbette bilenler faydalanabilir- ki zaten eli yüzü düzgün başka bir alternatifide yoktur, alanında neredeyse tektir, o yüzden iptablesa dandik diyenler herhalde hiç linux kullanmamış olacaklar...
E) Neden herkes donanımsal firewall ları ile gurur duyuyor peki?
Büyük trafik yönetenlerin alma sebepleri, filtreleme işlemlerini hızlıca yapabilmekten başka bir şey değil, çünkü firewalla gelen her paket her seferinde ve tek tek bütün yazılı kurallardan geçer, donanımsal firewalların içerisindeki yazılımlarda kendilerine özgü kural kontrol algoritmaları bulunur ve bu firewalların içerisinde kullanılan materyaller (chiptir odur budur) yüksek trafik için imal edilmiştir. Bir donanımsal firewallı bir yazılımsal firewalldan ayrıldığı nokta işte bu algoritmalardır (materyalleri sağladığınız sürece) Linux ile ilgili konuşmak gerekirse, iptables ın kural kontrol mekanizması lineerdir, yani doğrusal dır, yani her paketi her kuralda herhangi bir algoritma uygulamaksızın tek tek dener, işte bu yüzden girişi 1000 megabit olan ve 100 tane kuralı (300-500 olur normalde) bulunan bir networkü iptables ile yönetemezsiniz. Hiç mi olmaz peki? Elbette olur, iptables kural kontrolu için lineer olmayan bir algoritma kullanırsa neden olmasın (-ki var ama henüz emekleme aşamasında). ANCAK 20-30 megabiti olan kıllı megalomanlar neden alır diye sorarsanız "param var - işi bimiyorum verdim - mutlu oldum aldım kralım" şemasına göre hareket ederler diyebilirim.
Umarım hepiniz için faydalı olur, özellikle bu konuyu açan arkadaş için...