07 November 2004, Sunday
Bir kanalı veya botu ele geçirmenin veya kullanılamaz hale getirmenin bir çok yolu mevcut. Bunlardan korunmanın en sağlıklı yolu ise bu saldırıların nasıl yapıldığı hakkında bilgiye sahip olmak. Aşağıda anlatılanlar, bu saldırı yöntemlerinin çok sık kullanılanları. Elbette farklı yöntemler kullanılarak bu saldırılar yapılabilir. Ne yazık ki bazı saldırıların önüne geçmek bazı durumlarda imkansız olabiliyor. Bu tip durumlarda kanalı geçici olarak kapatmak en iyi çözüm olabiliyor.
Saldırı tiplerini kabaca genel saldırılar, eggdrop saldırıları, flood saldırıları ve sunucu saldırıları olmak üzere dört başlık altında toplayabiliriz. Bu ana başlıkları da kendi içinde dallandırmak mümkün.
1-) Genel Saldırılar
a) Op Saldırıları:
Bu saldırılar genelde kanalda kayıtlı bulunan oplardan gelir. Oplardan birisi sürekli diğer opları ve/veya botları deop eder. Kanal oplarını ne kadar iyi seçerseniz bu saldırıyla karşılaşma ihtimaliniz de o kadar azalır. Ayrıca kanal oplarının diğer kullanıcılara op vermemesini de sağlamalısınız.
b) Şifre Saldırıları:
Şifre çalınması oldukça büyük bir problem. Şifre çalmak için genelde üç yöntem kullanılır.
Bazı kullanıcılar kendilerini bota tanıtmak için otomatik mesaj gönderirler.(bazı mirc scriptlerinin sunucuya bağlandığında sizin nick şifrenizi göndermesi gibi) Şifreyi çalmak isteyen kişi botun nicki ile kanalda durmaktadır fakat nicki identify etmemiştir. Kullanıcı otomatik olarak mesaj gönderdiği için bu nickin identify edilip edilmediğini denetlemez ve böylece şifresini kaptırmış olur. Bunu engellemek için biraz "uyanık" olmak yeterli.
Diğer yöntem ise şifreyi çalmak için sniffer programları kullanmak. Bu programlar bir dosyadaki kelimeleri sırayla deneyip şifreyi bulmaya çalışıyorlar. Bu dosyalar ise milyonlarca kelimeden oluşuyor. Bu yöntem ile şifrenin bulunması bir kaç dakika da sürebilir birkaç yüz yıl da. Şifreleriniz sadece alfabetik ve nümerik karakterlerden oluşmasın. _ - [ gibi karakterleri de kullanmalısınız. Bu sayede bu tür programlar ile şifrenizin bulunması zorlaşır.(imkansız demiyorum çünkü teorik olarak mümkün) Ayrıca belirli periyotlarda (mesele ayda bir) şifrenizi değiştirebilirsiniz.
Kullanılan diğer bir yöntem ise brute-force saldırıları. Bu saldırıyı yapan birisi bota kayıtlı kullanıcıların şifresini ele geçirebilir. Bu sayede hem botu hem de kanalı yönetebilir. Bu tip saldırılardan korunmak için botun flood ayarlarını oldukça iyi yapmak ve log dosyalarını denetlemek yeterlidir.
c)IP Saldırıları: Bu saldırı aslında oldukça üst düzey bir saldırıdır. Kanal sahibi olarak bu tip bir saldırıdan korunmak imkansız.
Saldırgan irc sunucusu ile kanal sahibi arasındaki iletişimi engeller yada irc sunucusundan kanal sahibine giden bilgilere bazı hata mesajları veya komutlar ekler. Böylece kanal sahibinin kullandığı irc istemcisi(mesela mirc) irc sunucu ile bağlantıyı keser. Bundan sonra saldırgan kanal sahibinin ip adresini ve nickini alarak sunucu ile iletişime geçer.
Zaten bu tür bir durumda kanaldan çok sunucu tehlikede demektir. Bunu engellemek için irc sunucusu olarak kullanılan yazılımın standart dışı olması gerekir. Standart dışı derken mesela bir open-source irc sunucu yazılımının bazı kısımları değiştirilerek kurulabilir. Böylece saldırgan sunucunun nasıl işlediğini bilemediğinden saldırıyı gerçekleştiremeyecektir yada yazılımın gerekli yamaları yapılmalıdır. Böylece saldırganın sunucu ile kullanıcı arasındaki iletişime erişmesi engellenebilir.
2-) Eggdrop Saldırıları
a) Hostmask Taklidi:
Bazı irc sunucularında hostmask taklidi yapmak mümkün. Bu tip bir sunucuda saldırgan bota kayıtlı kullanıcılardan birinin hostmakını alıp botdan op alabiliyor. Bunu engellemek için bu tip sunucuda kullandığınız botun +autoop ayarını kapatmak ve kullanıcılara +a bayrağını vermemek yeterli olacaktır.
b) Op Taklidi:
Bota kayıtlı kullanıcı bottan op istediği anda saldırgan kullanıcıya flood saldırısı yaparak bağlantısının kesilmesini sağlıyor. Daha sonra kullanıcının nickini alarak bottan op almış oluyor.
Normal olarak bir botun kayıtlı bir kullanıcıya op vermesi şu şekilde gerçekleşir:
** Kullanıcı bota istek gönderir ** Kullanıcı: /MSG botadi op şifre ** Bot bir op istediği alır ve kullanıcı dosyasından bu kullanıcıyı arar ** ** Kullanıcının kaydını bulur ve op verir ** Bot: /MODE #kanal +o kullanıcı
Saldırı sırasında ise şunlar olur:
** Kullanıcı bota istek gönderir ** Kullanıcı: /MSG botadi op şifre ** Bot bir op istediği alır ve kullanıcı dosyasından bu kullanıcıyı arar ** ** Kullanıcının kaydını bulur ve op verir ** ** Bu arada saldırgan kullanıcıya flood saldırısı yapar ** ** Kullanıcının saldırgan nedeniyle bağlantısı kesilir ** ** Daha sonra saldırgan kullanıcının nickini alır ** saldırgan -> kullanıcı Bot: /MODE #kanal +o kullanıcı
Böyle saldırı olmaz demeyin. Özellikle eggheads.org sitesine bu konuda oldukça fazla şikayet gelmiş. Bu tip bir saldırı yaşanmasının iki nedeni vardır. Ya bot laga düşmüştür yada irc sunucusunun servisleri lagdadır. Normal şartlarda bu tip bir saldırı pek etkili olmaz.
c) Buglar ve Açıklar:
Şimdiye kadar çıkan eggdrop sürümlerinin hiç birinde bir bug yada açık nedeniyle saldırgana op verilmesi yada eggdropun ele geçirilmesi söz konusu olmamıştır. Ancak yüklediğiniz tcl scriptlerinde ve/veya modüllerde bu tip açıklar olabilir veya eggdropun çalıştığı sisteme virüs ve/veya trojan bulaşmış olabilir. Bu nedenle hem sistemi hem de scriptleri/modülleri iyi kontrol etmek gerekir.
d) Shell Saldırıları:
Eggdrop sağlayan shell sunucusuna yapılacak bir saldırıyı doğal olarak sizin düşünmenize gerek yok. Sunucunun yöneticisi bu tip saldırılara yeteri kadar kafa yoruyordur zaten :-) Ancak bazen onlar da çaresiz kalabiliyor ve sunucuya yapılan saldırı başarılı olabiliyor. Bu durumda (yönetici zaten sizi şifrelerinizi değiştirmeniz konusunda uyaracaktır) botunuzu durdurun ve şifrelerini değiştirin. Tüm kullanıcıları silip yeniden farklı şifreler almalarını sağlayın.
e) Kullanıcı Dosyası Deşifrelemesi:
Kullanıcı dosyasının bulunduğu dizinin chmod ayarları mutlaka 700 olmalı. Bu sayede herhangi birinin kullanıcı dosyasını okuması ve deşifre etmesi engellenmiş olur. Eğer saldırgan kullanıcı dosyasını ele geçirirse dosyayı deşifre etmesi en fazla bir iki gün sürer.
f) Netsplit Modları:
Eğer botunuz kullanıcıların kanalda ban/exempt/intive koymasına izin veriyorsa bir netsplit sırasında op olan saldırgan bot(lar)a ban koyabilir. Netsplit kalktığında ise bot(lar) sunucu tarafından kanaldan atılacaktır. Bu tip saldırılardan korunmak için botların birbirlerini asla banlamamalarını veya atmamalarını sağlamalısınız.
g) Mod Listesi Saldırısı:
Bütün irc sunucularının kanallar için belirli mod sayısı sınırlaması vardır. Mesela IrcNet için kanal ban sayısı 30'dur. Bu sayı bir wingate, proxy veya vhost kullanılarak kolayca doldurulabilir. Eggdrop -1.4.0 versiyonundan beri- eğer kanal mod listesi doluysa yenilerini eklemeye çalışmaz ancak yeni bir tane eklenmesi gerektiğinde de eskileri silmez. Bu tür saldırılarda kanalı geçici olarak +i (invite only) moduna almak en pratik çözüm gibi gözüküyor. Bunun için eggdrop dağıtımlarıyla gelen "sentinel" scriptini kullanabilirsiniz.
h) Disk Doldurma Saldırıları:
Shell aldığınız sunucuda, size ayrılan disk kapasitesi çok kısıtlıysa sık sık kullandığınız miktarı kontrol etmelisiniz. Eğer limitinizi doldurursanız botunuz kullanıcı dosyasını düzgün olarak kaydedemez. Eğer bu durumu iki gün içinde fark edemezseniz kullanıcı dosyasının yedeği de değiştirileceği için yedek dosyasını da kaybetmiş olursunuz. Bu sırada botun yeniden başlatılması gerekirse botunuz hata verip kapanacaktır. Bu durumdan keep-all-logs ayarını sıfır ve max-logsize ayarını uygun bir değer yaparak kurtulabilirsiniz.
i) Zayıf Şifre Saldırıları:
Eggdropun 1.4.x ve 1.5.x serilerinde bu tip bir bug tespit edildi. Eğer bir kullanıcı "aaaaa" veya "abcdabcd" gibi zayıf şifre kullandıysa saldırgan şifre olarak "a" veya "abcd" kullanarak bota giriş yapabiliyor. Kullanıcılarınızı bu tip şifreler seçmemesi konusunda uyarın.
j) TCL Komut İşleme Saldırıları:
TCL'de bütün metinler parantez içinde kullanılır ve bu metinlere komutlar da dahildir. Bazı kötü kodlanmış scriptler nickleri ve metinleri, içerebilecekleri komutlara karşı denetlemezler. Örneğin yüklediğiniz bir badnick scripti bu tür bir denetim yapmıyor ve gelen verileri olduğu gibi işliyor. Eğer kanala 'NoT[die]' nickli biri girerse bu scriptin yüklü olduğu tüm botlar kapancaktır. Çünkü nickin içinde botu kapatmaya yarayan "die" komutu geçmektedir. Bu tür script açıkları daha çok timer, utimer, expr ve eval komutlarını kullanan scriptlerde karşımıza çıkmaktadır. Bu bir eggdrop açığı değildir.
k) Fake-Bot Saldırıları:
Eğer saldırgan sizin botnet yapınızı biliyorsa, botunuzun çalıştırıldığı sunucu üzerinden kendine bir eggdrop sağlayabilir(mesela aynı şirketten hesap satın alabilir) ve sizin botunuzu devre dışı bırakıp, kendi botunu sizin botunuzun nicki ve ip adresiyle botnetinize bağlar. Bu durumda sizin botunuzun şifresi olmadığından diğer botlar yeni şifre alırlar. Böylece fake-bot botnete sızmış olur. Senaryo daha da kötüleşebilir. Sizin botunuzun yada saldırgan botun diğer botlar ile değişen kullanıcı bilgilerini değiştirmesi daha vahim sonuçlar doğuracaktır.
Saldırgan bu tip uzun bir yöntem izlemeden de, botnete sızmasını istediği botun ip adresini ip spoofing yaparak değiştirip aynı saldırıyı yapabilir.
3-) Flood Saldırıları
Bir kullanıcının, flood yaparak irc bağlantısını kesmenin iki yöntemi vardır. İlk yöntem; eğer kullanıcı bir seferde sunucuya, sunucunun belirlediği limiti aşacak şekilde bilgi gönderirse irc sunucusu bu kullanıcının bağlanısını kesecektir. Mesela saldırgan kullanıcıya bir çok farklı ip adresinden CTCP isteğinde bulunuyor. Kullanıcı bu istekleri cevaplamak(kabul veya red mesajı) için sunucuya bilgi gönderecektir. Sunucu, kullanıcıdan gelen bilgiler limiti aştığında bağlantıyı kesecektir. (excess flood)
Diğer yöntem; sunucu, kullanıcının bağlı olup olmadığını ping göndererek belirler. Eğer sununun gönderdiği ping mesajına cevap gelmezse sunucu, kullanıcının bağlantısını kestiğini düşünecek ve bağlatıyı kapatacaktır. Saldırgan, kullanıcının tüm bant genişliğini(bandwidth) doldurmak için de çeşitli flood saldırıları yapabilir. Ancak kullanıcının bant genişliği(bir bakıma internet bağlantı hızı) saldırganınkinden fazlaysa kullanıcı bu saldırıdan etkilenmeyecek sadece biraz yavaşlık hissedecektir. (ping timeout)
a) CTCP Flood Saldırıları:
Eğer saldırgan 130byte'lık ECHO CTCP isteği ile saldırı yaparsa bu saldırının başarılı olma şansı oldukça yüksektir. Bu durumdan korunmanın tek yolu çok dikkatli yapılmış CTCP cevap ve flood ayarlarıdır.
b) Trigger Flood Saldırıları:
Trigger saldırıları CTCP saldırılarına benzer tek farkı bot bu isteğe cevap verir ve başarı şansı daha düşüktür. Genelde tcl scriptleri ve modüller bu tip saldrırılara açıktır. Saldırgan botun bant genişliğini doldurup irc bağlantısını kesmeye çalışır.(Mesela bota sürekli '!seen' komutunu göndererek.)
c) Text Flood Saldırıları:
Bu tip bir saldırının başarı ihtimali oldukça düşüktür çünkü saldırgan çoğu zaman saldrısına başlar başlamaz kanaldan banlanır yada ignore edilir.
d) Notice Flood Saldırıları:
Text floodda olduğu gibi iyi ayarlanmış bir eggdrop için bu tip bir saldırıyı atlatmak oldukça kolaydır. Saldırgan ya banlanır yada ignore edilir.
e) Nick Flood Saldırıları:
Eggdrop ayarlarında bu tip bir saldırı için koruma ayarı yoktur ancak bu tip saldırı zaten eggdropa(hatta hiç kimseye) zarar vermez. Yüklenecek bir tcl scripti ile saldırgan kanaldan banlanabilir.
f) Join/Part Flood Saldırıları:
Aynen nick floodda olduğu gibi saldırgan kanaldaki kullanıcıları rahatsız etmenin dışında hiç bir şey elde edemez. Yüklenecek bir tcl scriptiyle bu problem kolayca halledilebilir.
g) Ping Flood Saldırıları:
Bu saldırının mantığı oldukça basittir. Eğer saldırgan botun(yada bir opun) bant genişliğini doldurabilirse irc sunucusu botun sunucuya bağlı olmadığını düşünecek ve bağlantıyı kapatacaktır.(ping timeout)
4-) Sunucu Saldırıları
İki sunucunun bir birine bağlı olduğunu düşünelim. Siz ircye girerken irc1.sunucu.com veya irc2.sunucu.com adreslerini kullanıyorsunuz. Bir süreliğine bu iki sunucu arasındaki bağlantının kopmasına split denir. Bu durumda bir sunucudaki kullanıcıları diğeri göremez. Kanallar veya kullanıcılar için yapılan işlemler sadece girmiş olduğunuz sunucu için geçerli olur. Bağlantı geri geldiğinde ise bazı sunucular bu sırada yapılan bazı(op,ban vs.) işlemleri geri alır, bazıları ise olduğu gibi bırakır.
a) Server Op:
Bazı irc sunucularında splited durumdaki sunucudan kanala girip op olmak mümkün. Saldırgan splited durumdaki sunucudan kanala girer ve kanal boşsa op olur. Sunucular tekrar eski durumuna geldiğinde saldırgan tam yetkiyle op olmuş olur.
b) Nick Collision:
Yine splited durumdaki sunuculardan kaynaklanan bir problem. Bağlantısı kopan sunucunun birinde turker nickli biri olsun. Diğeri doğal olarak bu nickli bir kullanıcının bağlı olduğunu bilemeyecektir. Eğer bu sunucudan da turker nickli biri girerse ve sunucular tekrar bağlantı sağladığında her iki sunucuda da turker nickini kullanan kullanıcıların bağlantıları kesilecektir.
c) Desynch:
Desynch, ingilizce desynchronization(eş zamanlı olmayan) kelimesinin kısaltılmışıdır. Aslında adından da ne olduğu anlaşılabilir ama kısaca iki farklı sunucunun aynı kanal için farklı düşünmesi diyebiliriz. Mesela splited durumdaki iki sunucudan birincisinde turker nickli kullanıcı op olarak duruyor ama ikincisinde voice olarak duruyor. Bağlantı tekrar sağlandığında birinci sunucu turker nickli kullanıcıyı voice, ikinci sunucu ise op yapacaktır. Bu problem net splitten farklı olarak sunuclardan birisi lagdaysa da olabilir. Bu durumdan kurtulmak için bazen tüm kanalı boşaltmak gerekebilir.
Ele Geçirme Örnekleri
1) Nick Collision & Server OP:
iyiBotA, iyiBotB ve iyiBotC #foo kanalında op olarak durmaktadırlar. KotuBotA, KotuBotB, KotuBotC ve KotuBotD kanalı ele geçirmek isteyen botlardır. Sunucu1 ile Sunucu2 arasında net split olur. KotuBoTA-C nicklerini iyiBotA-C olarak değiştirirler. İki sunucu arasındaki bağlantı tekrar sağlanır ve iyiBotA-C ile KotuBotA-C sunucu tarafından bağlantıları kesilir. KotuBotD kanaldan çıkıp girer ve sunucu tarafından op alır. KotuBotD artık diğer kötü botları op vermek için beklemektedir.
2) Desynch:
BotA ve BotB aynı kanalda op olarak durmaktadır. Ancak BotA sunucu1 üzerinden, BotB ise sunucu2 üzerinden bağlanmıştır. BotA BotB'yi deop eder ve bilgi sunucu1den sunucu2ye gider. Bu sırada BotB BotA'yı deop eder ve bu bilgiler de sunucu2den sunucu1e gider. Fakat sunuculardan birisi lagdadır.
BotA sets mode: -o BotB | BotB sets mode: -o BotA Sunucu1 -> Server2 | Sunucu2 -> Server1
Bilgiler sunuculara ulaşır. Fakat sunucu1 BotB'nin, sunucu2den gelen işlemini kabul etmez çünkü sunucu1 üzerinde BotB'nin opu yoktur. Aynı nedenden dolayı sunucu2 de BotA'nın işlemini kabul etmez. Tüm bunların sonucunda aynı kanalın sunucu1 ve sunucu2deki görüntüsü farklı farklı olacaktır.
Sunucu1: @BotA, BotB Sunucu2: BotA, @BotB
Eggdropturk ten alinmistir |