Temel Saldırı Teknikleri - Sizin Portal

Temel Saldırı Teknikleri

Tuesday, February 5, 2008

Bu dökümanda bazı saldırı teknikleri hakkında bilgi sahibi olarak bu saldırılara karşı ne gibi korunma önlemleri alacağınızı öğrenebilirsiniz.

1.a Fingerprinting

Fingerprinting tanımı aslında karşı taraf hakkında bilgi toplamaktan ibarettir.Bir saldırı yöntemi değildir sadece karşı sistem hakkında bilgi verir ve saldırı için doğru seçimlerin yapılmasına olanak sağlar.Çalışan işletim sistemi, çalışan programlar işletim sistemi versiyonu gibi bilgiler sayesinde karşı sistemin güvenlik açıkları kolayca tespit edilip saldırı uygulanabilir.Bir çok çeşidi ve yöntemi vardır.En basit örneği , FTP Server’larından vermek mümkündür.FTP formatına göre karşı tarafa gönderilen “SYST” mesajı karşı tarafın işletim sistemi hakkında bilgi verir.Örneğin; anonymous olarak ftp.sau.edu.tr adresine bağlanıp, command ekranına SYST yazılırsa sonuç aşağıdaki gibi olacaktır :

Connected to ftp.sau.edu.tr

SYST
215 UNIX Type: L8
Host Type (S): UNIX Standart

Bu sayede karşı tarafta UNIX Standart yüklü bir makinenin olduğu tespit edildi.Bunun dışında telnet aracılığıyla bağlandığımız bir sistem direkt olarak bize işletim sistemini verebilir.Çoğu işletim sistemi üreticisi günümüzde bu bilgiyi telnet üzerinden otomatik olarak vermeye ayarlıyor ve çoğu sistem yöneticisi de bunları kapatmıyor.Aşağıda küçük bir örnek var:

playground~> telnet hpux.u-aizu.ac.jp
Trying 163.143.103.12 ...
Connected to hpux.u-aizu.ac.jp.
Escape character is '^]'.

HP-UX hpux B.10.01 A 9000/715 (ttyp2)

login:

Görüldüğü gibi yaptığımız tek şey telnet aracılığı ile karşı tarafa bağlanmaktı.Sistem bize işletim sistemini versiyon numarasına kadar verdi.Bu yöntemlerin dışında birde http Fingerprinting adı verilen ve adından da anlaşılabileceği gibi http protokolünü kullanan bir yöntem daha var.Bu yöntemde “http” ’de tanımlı “GET” metodunu kullanarak Web Server’ın ne olduğunu öğreniyoruz:

playground> echo 'GET / HTTP/1.0\n' | nc hotbot.com 80 | egrep '^Server:'
Server: Microsoft-IIS/4.0

IIS Web Server kurulu bir sistemde hangi işletim sisteminin yüklü olduğunu tahmin etmek pek zor değil.Bu anlatılan yöntemlerden farklı olarak daha alt seviye bazı yöntemler de mevcut.Bu yöntemler TCP/IP protokolünün işletim sistemleri arasındaki küçük farklarından yararlanarak amacına ulaşıyor.Aşağıda bunlardan bazılarını inceleyelim:

The FIN Probe: Bu teknikte karşı tarafın açık bir portuna bir FIN paketi yolluyoruz(Yani FIN kontrol biti bir olan herhangi bir paket).RFC 973 standart’ına göre karşı tarafın bu pakete hiçbir karşılık vermemesi gerekirken, MS Windows, BSDI, CISCO, HP/UX, MVS, IRIX gibi işletim sistemleri geriye RST paketi yollarlar.Günümüzde bir çok Fingerprinting aracı bu yöntemi kullanmaktadır.

TCP ISN Sampling: Bu teknik işletim sistemlerinin TCP/IP stack’lerinin “initial sequnce number”’ları (ISN) seçme özelliğinden faydalanıyor.Hatırlayacağınız gibi TCP/IP’de bir bağlantı kurulduğu zaman iki tarafta da byte akışının doğru sağlanması için sequence number’lar kullanılıyordu.Her yeni paket için de x kadar arttırılıyordu.Bu yöntemde işletim sistemlerini kategorize edersek: “Random Increments”, “True Random” ve “Time dependant model” olarak üçe ayırabiliriz.İlk modelde iki bağlantı için belirlenen seq. Number’lar arasındaki x artış miktarı her paket için random olarak seçilir ve sürekli bir öncekiyle toplanır.Solaris, IRIX, FreeBSD, Digital UNIX, Cray gibi işletim sistemleri ISN üretmede bu modeli kullanmaktadır.İkinci modelde ise iki bağlantının seq. Number’ları arasında hiçbir bağıntı yoktur, birbirlerinden tamamen bağımsızdırlar.Bu modeli kullanan sistemler arasında Linux 2.0.x Open VMS gibi sistemleri sayabiliriz.Üçüncü modelde ise ISN ‘ler belli bir zaman aralığında sabit bir sayıyla toplanarak elde edilirler.Windows bu üçüncü modeli kullanan bir yapıya sahiptir.

TCP TimeStamp: TCP başlığı içinde yer alan bu bilgiyi işletim sistemleri farklı işlerler.Bazıları bu özelliği desteklemez, bazıları ise belirli peryodlarla bu değeri arttırırlar.Bazı işletim sistemleri ise hep 0 döndürür.

TCP Initial Window: Bu teknikte karşı sistemden dönen paketlerin “Window Size”’ları kontrol edilir ve buna göre değerlendirme yapılır.Bu değerlendirme önemlidir çünkü çoğu işletim sistemi bu değer için sabit bir sayı kullanır.Örneğin AIX işletim sistemi Window Size değeri için hex değer olarak $3F25 sayısını kullanır.Aynı şekilde FreeBSD, OpenBSD ve Windows NT işletim sistemleri bu sayıyı $402E olarak belirlemişlerdir.

ICMP Message Quoting: Bu teknikte ICMP protokolünün “port unreachable” hatasından faydalanıyoruz.Bu hata karşı tarafa bir ICMP paketi gönderildiği ve bu port açık olmadığı zaman geri gelen bir hata mesajıdır.Çoğu sistem IP Header + 8 Byte geri gönderir.Fakat Solaris işletim sistemi 8 Byte’dan daha fazla gönderir, Linux ise Solaris’ten daha fazla gönderir.

Type Of Service: ICMP protokolünde alınan bir port unreachable paketinin ToS değeri incelenirse, bu değerin her işletim sisteminde 0, bir tek Linux’ta $0C olduğu görülmüştür.

TCP Options: TCP paket başlığında “TCP Options” değerini kullanarak işletim sistemi tahmini yapmaktır.Bu yöntemin bir çok avantajı vardır bunlardan birkaçını sıralarsak:

i) Her şeyden önce bu kısım isteğe bağlıdır yani birçok işletim sistemi bu değeri gözardı eder.

ii) Eğer bir Option ayarlayarak karşı makineye gönderirseniz, karşı sistemin cevabı o option’ ın desteklenip desteklenmediğini gösterecektir.Bu Option’lar da her işletim sistemine göre değişeceği için bu da bize avantaj sağlar.

iii) Bir çok Option’ı ayarlayıp sadece bir paket göndererek, cevap alabilirsiniz.Yani tek bir paketle karşı tarafın hangi Option’ ları desteklediğini kolayca anlayabilirsiniz.

WindowScale, NOP, Max Segment Size, TimeStamp TCP Options’ın alabileceği değerlerin bazılarıdır.Örneğin bu sayılan özelliklerin hepsi FreeBSD tarafından desteklenmektedir.Bunun yanında Linux 2.0.x sürümleri yukarıdakilerin çok azını destekler.İki işletim sistemi aynı Option özellikleri desteklese bile bunlara verdiği cevaplar faklıdır.Örneğin bir Linux sistemine küçük bir MSS(Max Segment Size) değeri gönderilirse, sistem aynı değeri bize geri gönderecektir.Geri dönen değerler aynı olsa bile sıraları faklıdır.Örneğin Solaris “MSS” değerine “NNTNWME” ile cevap verirken Linux 2.1.122 “MENNTNW” ile cevap verir

1.b Port Scanning

Port Scanning (Port Tarama) adı verilen yöntemde karşı taraf hakkında bilgi toplamayla alakalı bir işlemdir.Bu işlemde aynı Fingerprinting gibi protokol formatına dayanır ve karşı sistemde açık olan portları bulmamızı sağlar.Bu sayede Fingerprinting ’ten elde edemediğimiz bilgileri bulabiliriz.Örneğin karşı tarafın 135 no’lu portu açıksa muhtemel bir Windows İşletim sistemiyle karşı karşıya olduğumuzu varsayabiliriz.Yada bir başka örnek olarak karşı tarafta eğer 80’inci port açıksa bu makinenın da bir HTTP Server olduğunu varsayabiliriz.Port Tarama yönetimde bilgi toplama portların ne işe yaradıklarını ve genel kullanımlarını bilmekle alakalıdır.Bu şekilde karşı sistemin zayıflıkları bile bulunabilir.Aşağıda kendi makinemde denediğim Port tarama işleminin sonuçları görünmekte :

Scanning 127.0.0.1 (localhost), range : 1 -135

[110] Service found at: 110

[110] Could be: pop3

[110] Read:

[135] Service found at: 135

[135] Could be: epmap

[135] No data to read.

Burada kendi makinemde 1 ile 135’inci portlar arasında yaptığım port taraması sonuçları görülmekte.Görüldüğü gibi makinemde 110 ve 135’inci portlar açık durumda bu portların işlevleri ise sırasıyla “pop3” ve “epmap” olarak adlandırılmış.Başka birisi bende port taraması yapıp bu sonuçları aldığında makinemde muhtemel olarak Windows yüklü olduğunu kolayca anlayabilir.Bu örnekteki port tarama işlemi basit olarak şöyle bir senaryoyla anlatılabilir: Belli bir IP adresinin her portuna bağlantı isteği gönderilir.Eğer bağlantı gerçekleşirse port açık, gerçekleşmezse port kapalıdır diyebiliriz.

1.b.a Stealth SYN scan

Port Tarama işleminden bahsettik fakat bu işlemin alt seviyede nasıl yapıldığından sözetmedik.Bu sistem, karşı tarafın istenilen port aralığına bağlanma istekleri göndererek çalışır.Şimdi eski bilgilerimizi tekrar hatırlarsak TCP/IP protokolünde bir TCP bağlantısının gerçekleşmesi için 3 yollu el sıkışma olduğunu biliyoruz.Bu el sıkışmada bağlantı isteyen makine server’a bir SYN paketi gönderir.Bağlantı uygunsa server’da bu makineye bir SYN+ACK paketi yollar.Son olarak ta makine server’a bir ACK paketi yollar ve bağlantı kurulurdu.Stealth SYN Scan tipinde port tarama işlemlerinde son ACK paketi dikkate alınmaz, yani server ‘dan SYN+ACK paketi alındığında, o portun açık olduğu varsayılır ve bu şekilde tarama işlemi hızlandırılır.Bu saldırı yönteminden korunmak neredeyse imkansızdır.Fakat bazı paket filtreleme donanım yada yazılımları sayesinde gelen paketler incelenir ve SYN paketleri hep aynı IP adresinden geliyorsa bloke edilir.Aşağıda nmap adlı bir port scanner programının lokal ağda yaptığı bir taramanın sonuçları yer alıyor:

C:\osmanatabey\nmap-3.75-win32>nmap -v -sS 10.0.0.21

Starting nmap 3.75 ( http://www.insecure.org/nmap ) at 2005-01-02 22:18 GTB Standard Time

Initiating SYN Stealth Scan against T1000 (10.0.0.21) [1663 ports] at 22:18

Discovered open port 3389/tcp on 10.0.0.21

Discovered open port 139/tcp on 10.0.0.21

Discovered open port 445/tcp on 10.0.0.21

Discovered open port 1025/tcp on 10.0.0.21

Discovered open port 135/tcp on 10.0.0.21

The SYN Stealth Scan took 1.47s to scan 1663 total ports.

Host T1000 (10.0.0.21) appears to be up ... good.

Interesting ports on T1000 (10.0.0.21):

(The 1658 ports scanned but not shown below are in state: closed)

PORT STATE SERVICE

135/tcp open msrpc

139/tcp open netbios-ssn

445/tcp open microsoft-ds

1025/tcp open NFS-or-IIS

3389/tcp open ms-term-serv

MAC Address: 00:50:FC:A0:26:AB (Edimax Technology CO.)

Nmap run completed -- 1 IP address (1 host up) scanned in 1.969 seconds

Görüldüğü gibi SYN Scanning lokal ağda 1.5 saniye gibi kısa bir sürede 1600 port taradık.Aynı işlemi normal adi port scanner’la yaptığımızda sonuçları elde etmemiz 3 dakika sürdü.Dikkat edilirse port tarama işlemi bittikten sonra bir de açık portların görevleri gösterildi.Bu sayede karşı tarafta hangi işletim sisteminin yüklü olduğunu tahmin edebiliriz.

1.b.b FIN Scanning

FIN Scanning’te Stealth SYN Scan mantığına dayanır.Karşı tarafa bir FIN paketi gönderilir.Bu paket TCP/IP protokolünde bağlantının bittiğini haber veren mesajdır.Eğer biz bağlı olmadığımız bir adresin herhangi bir portuna FIN paketi yollarsak ve eğer o port kapalıysa bir RST paketi geri döner.İşte bu sayede port kontrolü yapabiliyoruz.Fakat bu yöntem Windows işletim sistemi yüklü makineler için geçersizdir.Çünkü Windows yollanan her FIN paketine RST cevabını verir, port açık olsa da olmasa da.Her neyse aslında bu tarama yönteminin ortaya çıkış nedeni “SYN Scan” port tarama yönteminin bir çok paket filtreleme programı tarafından engellenmesi sonucu ortaya çıkmıştır.İlk kez Uriel Maimon tarafından Phrack 49, Article 15 ‘ te anlatılmıştır.Bu yöntem de günümüzde paket filtreleme programları tarafından engellenebildiği için hacker’ lar da değişik sistemler üzerinde değişik tarama işlemleri gerçekleştirmeye başlamışlardır.”XMAS Scan” ve “NULL Scan” adı verilen iki tip tarama yöntemi daha mevcuttur.XMAS yönteminde tıpkı bir Noel Ağacının her tarafının ışıl ışıl parlaması gibi, bir TCP paketinin bütün kontrol bitlerini etkin duruma getirir.Bu şekilde cevapları inceleyerek tarama işlemini yapar.NULL tarama metodunda ise XMAS ’ın tam tersi olarak tüm kontrol bitlerini etkisiz duruma getirir.Her neyse her iki metotta da karşı sistemin işletim sistemi paket cevaplarının incelenmesinde kilit rol oynar.

1.b.c Fragmented Packet Scanning

Bu tarama metodu, paket filtreleme programları tarafından engellenmesi en güç olandır.Çünkü bu metotta TCP Başlıkları da kendi içinde parçalara ayrılarak karşı tarafa gönderilir.Bu sayede paket filtreleme programı tüm TCP başlığını göremediği için filtreleme işlemini yapamayacaktır.Ancak yine de bu tarama metoduna da dayanıklı sistemler mevcut:Örneğin Linux sürümlerinde CONFIG_IP_ALWAYS_DEFRAG özelliği sayesinde, herhangi bir başlık tamamen oluşturulmadan cevap gönderilmez, paket işlenmez, yani bir nevi kuyruk oluşturur.Fakat çoğu ağ yöneticisi bu özelliği kullanmaz, çünkü ağ trafiğini yavaşlatır.Günümüzde çoğu port tarayıcı program bu yöntemi kullanmaktadır.

1.c Network Sniffing

Network Sniffing adı verilen yöntem ağda dolaşan paketlerin görüntülenmesi, ve kaydedilmesine olanak sağlayan bir yöntemdir.Bilindiği gibi çoğu yerel ağ sisteminin (LAN) temelini Ethernet oluşturmaktadır.Ethernet ilk tasarlanırken mühendisler kendi protokollerini test etmek için sniffer programlarını kullanıyorlardı.Fakat günümüzde Network Sniffing genellikle kötü amaçlara hizmet ediyor.Ethernet protokolü veriyi olduğu gibi gönderir, yani veriye herhangi bir şifreleme uygulamaz.İşte bu aşamada Sniffing daha da kolaylaşır.Ayrıca Ethernet protokolü gönderilen bu şifrelenmemiş veriyi bağlı olan tüm düğümlere(node) gönderir.Yani aslında aynı non-switched bir LAN da birbirlerine bağlı iki bilgisayarın birbirlerinin ağ trafiğini incelemeleri, sadece NIC (Network Interface Card) bir değişikliğe bağlıdır.Bu değişikliğin uygulandığı bir NIC üzerine gelen tüm bilgiyi filtrelemeden alır.Yani bağlı olduğu tüm ağ trafiğini inceleyebilir.Bu duruma gelmiş bir NIC ‘e “promiscuous mode” ‘a geçmiş denilir.NIC farklı amaçlara hizmet etmesi için farklı filtreleme metotları vardır.

Unicast D estination Address ’ i NIC ’in kendi fiziksel adresi olan paketleri alır.

Broadcast : Destination Address ’i FF FF FF FF FF FF olan paketleri alır.Bu paketler ağ üzerindeki tüm düğümlere gönderilmek amacıyla oluşturulmuştur.

Multicast : Belirli bir adres veya adres aralığından gelen paketleri kabul eder.Bu adres aralığı NIC ‘in içinde tanımlanmıştır.Ayrıca bir paketin multicast özeliği taşıması için paketin grup bitinin aktif olması gerekir.Yani bir gruba ait olduğunu gösteren bit.Bu biti aktif olanlar NIC ‘ teki listeyle kontrol edilir.

All Multicast :Herhangi bir gruba bağlı yani grup biti aktif tüm paketler NIC tarafından kabul edilir.

Promiscuous : NIC gelen bütün veriyi alır.

Non-switched ağlarda “Packet Sniffing” oldukça kolay.Çünkü filtreleme işlemi NIC ‘ te yapıldığı için bu filtreleme işlemini değiştirme imkanımız var.Switched ağlarda ise durum biraz farklı.Switched ağlarda bahsedilen filtreleme işlemleri, switch yada router ‘ de yapılır.Yani gelen paket hangi adrese gidecekse o adrese yollanır.Switch o adresin nerede olduğunu bilir ve paketi o adrese yollar.

1.d DoS (Denial of Service)

DoS saldırıları günümüzde en yaygın kullanılan saldırı biçimlerinden biridir.Çünkü bir çok saldırı yöntemini içinde barındırır.DoS saldırıları genelde bir ağa ya da kaynağa ulaşımı engellemek için kullanılır.Kendi içinde mantıksal olarak ikiye ayırmak mümkündür: Program tabanlı DoS saldırıları ve Network tabanlı DoS saldırıları.Bu iki saldırıda da iki yöntem kullanılabilir birisi “flooding” diğeri “exploiting”.Flooding’te kullanıcı kurbana çok sayıda paket yollayarak belli bir işlemi çalışamaz duruma getirir.Exploiting yönteminde ise kurbanda çalışan herhangi bir program hedef alınıp bu programın açıklarından faydalanarak program, kullanılamaz hale gelir.Şimdi DoS saldırılarını kısa bilgilerle inceleyelim.

1.d.a DDoS Flooding

Bir makineye yada ağa DDoS saldırısı yapabilmek için bir kişi önceden kendine bir çok kurban makine bulup onlara kendi hazırladığı küçük bir programcık yükler(deamon).Bu programcık bu makinelerde sürekli bu kişiden bir istek bekler.Bu kişi istediği zaman bu programcıkları da kullanarak aynı anda binlerce paketi hedef sisteme yollayabilir.Bu paketler genelde ICMP Echo request yada UDP Echo gibi masum görünen ve sadece basit işlemler için tasarlanmış paketler olabilir.Ama aynı anda binlercesi gelince bu hedef sistemin ağ trafiğinin durmasına ve hatta programların çalışamaz hale gelmesine sebep olabilir.Bu saldırı sisteminden www.yahoo.com gibi siteler bile etkilenmiştir.Günümüzde hala önemini korumaktadır ve paket filtreleyici yazılımları veya donanımlarıyla fark edilememektedir.Akıllıca yapılmış bir DDoS saldırısı farklı IP adreslerinden geleceği için filtreleyici programı şaşırtabilir.Ama çoğu sistem bu tür saldırılara karşı önlemini almıştır.

1.d.b The Ping of Death

Artık günümüzde neredeyse bütün işletim sistemleri bu tür bir saldırıya karşı önlemini aldıysa da zamanında çok etkili bir yöntemdi.Bu yöntemin mantığı şöyle çalışır: ICMP protokolü ağda bilgisayarların hata mesajlarını birbirlerine göndermesini yada “Ping” gibi basit işlemlerin yapılmasını sağlar.ICMP spesifikasyonunda, ICMP Echo request’lerin data kısmı 216 ile 65,536 byte arasında olmak zorundadır.Eğer bu veri sınırlarının dışına taşmış bir paket kurban sisteme yollanırsa işletim sistemi böyle bir şey beklemediği için çalışamaz duruma gelecektir.

1.d.c TearDrop

Bu saldırı yöntemi biraz karışıktır ve IP paketlerinin reassembly yapılmasıyla ilgilidir.Bir IP paketi karşı tarafa yollandığında bu paket tekrar verilere ayrılırken paketin içinde bulunan “offset” bilgisi kullanılır.Bu “offset” bilgilerinin birbirleriyle çakışmaması yani üst üste gelmemesi lazımdır.Özel ayarlanmış bir paket bu senkronizasyonu bozabilir ve paketler üst üste gelirse ve bunu kontrol edebilecek bir mekanizma da mevcut değilse bu işletim sistemini çalışmaz duruma getirebilir.Bu saldırı yönteminden korunma yöntemi IP protokülünün kodlanması ile ilgili olduğundan tamamen işletim sistemi ile alakalıdır.Günümüzde çoğu işletim sistemi bu tür saldırılara karşı dayanıklıdır.

1.d.d Ping Flood

“Flooding” adı verilen olay aslında bir işlemin bir çok kere tekrarlanması demektir.Flooding saldırılarında amaç programa hata verdirmek değil programı işlemez duruma sokmaktır, yani kaldırabileceğinden daha fazla işlem emri vermektir.Daha önce aynı DDoS flooding’te olduğu gibi bu saldırı yönteminde de karşı sisteme binlerce paket yollanır ve bu paketler karşı tarafın ağ trafiğinin akışını durdurabilir.Bu paketler karşı sistemle aramızdaki hızı ölçmeye yarayan ping komutundan başka bir şey değildir.Ama bunlardan binlercesi sistemde ciddi ağ trafiğine yol açar ve kullanılamaz hale gelir.Bu saldırı yönteminde zekice bir taraf yoktur, sadece internet hızı yüksek olan bir sistem daha düşük olan bir sistemin ağ trafiğini kitleyebilir.Günümüzde çoğu sistem bu tür bir sadırıya korunmalıdır.Filtreleme programları bu sadırıları kolaylıkla engeller.Aşağıda örnek bir ping komutu ve sonuçları görünmektedir:

C:\ping www.tcpsecurity.com

Pinging http://www.tcpsecurity.com/ [66.102.11.104] with 32 bytes of data:

Reply from 66.102.11.104: bytes=32 time=119ms TTL=242
Reply from 66.102.11.104: bytes=32 time=126ms TTL=242
Reply from 66.102.11.104: bytes=32 time=165ms TTL=242
Reply from 66.102.11.104: bytes=32 time=178ms TTL=242

Ping statistics for 66.102.11.104:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 119ms, Maximum = 178ms, Average = 147ms

1.d.e SYN Flooding

TCP/IP “stack” denilen bir bölgede tüm bağlantıları tutar.Tekrar eski bilgilerimize dönersek üç yollu el sıkışmadan hatırlayacağımız gibi SYN paketine cevap olarak SYN/ACK gönderiliyordu daha sonra biz tekrar ACK gönderiyorduk ve bağlantı kuruluyordu.Şimdi şöyle bir senaryo düşünelim:Bir kişi bir server’a SYN paketi gönderiyor fakat bu paketin özelliği içindeki “Source ip” kısmı bizim IP adresimizi göstermiyor, tam tersine aslında gerçekte varolmayan bir IP adresini gösteriyor.Bu noktada server bu SYN paketini alıp bağlantı işleminin aslında varolmayan IP adresiyle gerçekleşmesi için bu IP adresine SYN+ACK gönderiyor ve ACK almak için bekliyor.Bu bekleme sırasında IP adresi TCP/IP’nin stack’inde tutuluyor ve biz sürekli bu aslında varolmayan IP adresinden bu sisteme SYN paketleri yolluyoruz.IP adresinde hiçbir sistem varolmadığı için asla ACK paketi gelmiyor sonuçta belli bir süre sonra kurbanın TCP/IP stack’i taşıyor ve ağ trafiği neredeyse işlemez hale geliyor.Bu saldırı yönteminden de korunmak için yine basit bir paket filtreleme sayesinde mümkündür.

1.d.f Buffer Overflow

Buffer Overflow dediğimiz şey hatalı kodlanmış bir programın dışarıdan bir etkiyle belleğinin taşmasına neden olmaktır.Daha açarsak sınır kontrolü yapılmamış bir değişkenine alabileceğinden daha fazla veri atanırsa program bellek hatası verir ve bu hatayı kullanarak özel olarak hazırlanmış bazı kodlar sayesinde programın akışı değiştirilebilir.Bunun en güzel örneklerinden biri daha 1.5 seneyi doldurmamış Sasser Solucanıdır.Bu solucan Windows işletim sisteminde sürekli çalışan LSASS.EXE adlı dosyada bulunan bir Buffer Overflow hatası sayesinde milyonlarca makinaya bulaşabildi.

Bu LSASS.exe ‘nin asıl görevi (Local Security Authentication Server) Windows un kulanıcı işlemlerinin güvenliğini sağlamak ve kullanıcı izinlerini düzenlemekti.Fakat Windows 2000 ve XP yüklü makinelerde bu dosyanın kullandığı bir DLL dosyasında Buffer Overflow tesbit edildi.( (LSASRV.DLL).Bu sayede virüs 445’inci porta bağlanıp, programa istediği işlemleri yaptırıyordu.Daha sonra da LSASS.EXE kapatılıyordu ve 1 dakika içinde de server ‘ a reset atılıyordu.

Kısacası “Buffer Overflow Exploiting” bir programdaki programlama hatalarını kullanarak o programın değişkenlerine ve program akışına dışarıdan erişmeye denir.

Bu tür bir saldırı yöntemini engellemenin iki çeşit yolu olduğunu söleyebiliriz:Birincisi eğer programı geliştiren firma yada kişi bizsek Buffer Overflow hatalarını engellemek için alt seviye bellek fonksiyonlarından ve sınır kontrolü yapmayan değişken işlemlerinden olabildiğince kaçınmalıyız.Örneğin C dilinde, iki string tipinde değişkeni birbirine kopyalamak için kullanılan “strcpy()” fonksiyonu bu tür buffer overflow hatalarına gebedir.Çünkü birinci string’i ikinci string’e kopyalar fakat sınır kontrolü yapmaz.Yani eğer biz değişkenlerden herhangi birinin büyüklüğünü statik olarak girmişsek bu programda bellek taşmasına yol açacaktır.Örneğin aşağıdaki C programında çok basit bir buffer overflow görülmektedir:

int main(int argc, char *argv[])
{
char Buffer1[4];
char * Buffer2;
Buffer2 = “AAAAOverFlow”;
strcpy(Buffer2,Buffer1); // işte tam burada Buffer Overflow mevcuttur.
return 0;
}

Kodda görüldüğü gibi ilk 4 byte ’ tan sonra yazılan “OverFlow” kelimesi tam anlamını yansıtmaktadır.Bu pogram çalıştığında Buffer Overrun hatası verecektir.Ama OverFlow sözcüğü program stack ’ inin kritik kısımlarını etkileyecektir.

1.e TCP/IP Hijacking

TCP/IP Hijacking bir A sisteminin B sistemi ile C sistemi arasında kurulan bağlantıya sızarak kendini C sistemine B sistemi olarak göstermesi demektir.Peki bu iş nasıl yapılır?Öncelikle şunu söylemeliyimki bu tür bir saldırı için network sniffing kullanılacağı için A sistemi ile B sistemi aynı ağ üzerinde olmalıdır.

Bilindiği gibi TCP güvenilir bir protokoldür.Güvenilirden kastım her paketin karşı tarafa ulaşıp ulaşmadığı kontrol edilir ve sonra gitmesi gereken paketin önce gitmesi gerekenden daha önce gitmesi gibi senkronizasyon problemlerinin aşılması için her pakete belli senkronizasyon numaraları verilir(“sequence number”).Bu numaralar sayesinde iletişimde bulunan iki program gelen giden paketleri sırasına göre alıp sırasına göre işleyebilir.Eğer A sistemi “network sniffing” sayesinde B sisteminini tüm gelen giden paketlerini incelerse, B sisteminin C sistemiyle olan bağlantısında o andaki “sequence number”’ını tahmin edebilir.Bu hesapladığı sequence number ve B sisteminin IP adresini source IP olarak kullanarak karşı tarafa bir paket yollarsa, C sistemi doğal olarak artık A sistemini B sistemi olarak algılayacaktır.Bu sırada B sistemi C sistemine bir paket gönderse bile aralarındaki senkronizasyon numaralarında hata oluştuğu için artık C sistemi B sistemini tanımaz.Bu çeşit bir saldırının engellenmesi imkansızdır.Yapabileceğiniz tek şey ağda bir sniffer olup olmadığını araştırmak olacaktır.(bkz.Network Sniffers)

1.e.a RST Hijacking

RST Hijacking iki sistem arasında kurulan bağlantıyı dışarıdan kesmek için kullanılır.Bilindiği gibi RST Kontrol Biti TCP başlığında tanımlı spesifik bir bittir.Bu kontrol bit’i 1 olduğu zaman iki sistem arasındaki bağlantı sona erer.Eğer biz doğru ayarlanmış bir paketi iki sitemden herhangi birine RST biti 1 olarak olarak gönderirsek iki sistem arasındaki bağlantıyı dışarıdan kesmiş oluruz.Burada dikkat edilecek nokta yine TCP Başlık formatında tanımlı “acknowledgement number” dediğimiz kısımdır.Bu 32 bitlik kısım, sistemin bir sonra alacağını varsaydığı paketin “sequence number”’ını içerir.(bkz.TCP Hijacking:Sequence Number).Eğer biz source ip kısmını iki sistemden birine ayarlayıp “acknowledgement number”’ıda bulabilirsek ve RST bitini de 1 olarak ayarlarsak, bu paketi alan sistem, bağlı olduğu diğer sistemin bağlantıyı kesmek istediğini sanarak bağlantıyı bitirecektir.Bu saldırı yönteminden de korunmak neredeyse imkansızdır.Fakat 32 bitlik bir sayıyı tahmin etmek imkansıza yakındır.Yani aynı TCP/IP Hijacking ‘te olduğu gibi, bu saldırının gerçekleşmesi için saldıranın kurban sistemle aynı ağda olup trafiği bir sniffer aracıyla izlemesi gerekmektedir.Bu noktada bu saldırıyı engellemenin tek yolu ağda sniffer kullanımını bloke etmekten geçer.

1.f Shattering (Mesajlaşma sistemi açıkları)

Bu saldırı yöntemi aslında çok yeni değildir fakat son günlerde hacker’ ların ilgisini biraz daha çekmiştir.Bu yöntemde Windows’un mesajlaşma sisteminin zayıflıklarından faydalanılır.Windows’ta daha önce API düzeyinde programlama ile uğraşan herkesin bileceği gibi Windows işletim sistemi mesajlaşma sistemi üzerine kurulmuştur.Bundan kastım, oluşturulan her kontrolün kendine özgü bir “handle”’ı vardır.Sistem bu “handle”’lar arasında giden mesajlar sayesinde işler.Örneğin Windows’ta bir düğmeye tıklandığında WM_LBUTTONDOWN mesajı bu düğmeyi içeren form’a gönderilir ve işlemler orada gerçekleşir.Bu şekilde binlerce mesaj aynı anda farklı programlarda işlenebilir.Fakat bu sistemin de bir takım zayıflıkları vardır.Windows bu mesajı gönderenin kim olduğuna bakmaz, yani daha açarsak, mesaj dışarıdan başka bir programla da rahatlıkla gönderilebilir.BU zayıflıkta diğer programın ilk programı kullanarak bazı haklar elde etmesine yol açabilir.Örneğin Microsoft’un Windows 2000 SP3’e kadar ürettiği Windows versiyonlarda WM_TIMER mesajı ile ilgili bu tür bir açık mevcuttu.Bu açık sayesinde kötü niyetli bir kişi başka bir programı kullanarak yetkisi dahilinde olmayan işlemleri gerçekleştirebiliyordu.Bu saldırı yöntemini birisinin gerçekleştirebilmesi için saldırıyı yapacağı makineyi kullanıyor olması gerekmektedir.Yani dışarıdan bir tehlikesi yoktur.Bu saldırı yöntemi ile bir kişi administrator yetkisi olmayan bir sistemde administrator yetkisini kolaylıkla kazanıp ağda bir takım değişikler yaparak o makinenin bağlı olduğu ağın tümünü kullanılmaz hale getirebilir.

0 comments: