AraKullanıcı girişiGezintiEn son ağ günlüğü gönderileri
En Çok Okunanlar
Kimler yeni
İçerik paylaşımı |
Web Uygulamalarının GüvenliğiGünümüzde, Web uygulamaları, değişik önem ve şekillerde birçok şirketin varlığının bir parçasıdır. Bu varlık, bazı şirketler için, şirketin ana faaliyet alanının can damarını teşkil ederken (örneğin, sadece internette varolan şirketler gibi), bazı şirketler için sadece internette varolmaktan öteye gitmemektedir. Her ne şekilde olursa olsun Web de var olmak ve bu varlığın kesintiye uğramaması şirketler açısından oldukça önemli olmakta, hack edilmek, müşteri bilgilerinin saldırganların eline geçmesi tüm yöneticilerin kabusu olmaktadır. Şirketler, Web uygulamalarının güvenliğini sağlamak için; bu işin kalbinde duran Web sunucularının güvenliklerini ellerinden geldiğince arttırmakta (hardening), sunucularını bir DMZ'e(1) konumlandırmakta, güvenlik duvarları(2) oluşturmakta ve sunumcu trafiğini IDS(3) ile gözlemlemektedir. Tüm bu önlemlere rağmen, Web siteleri hala hack edilmektedir. Peki ama ne yanlış yapılıyor, bu duruma karşı ne yapılabilir? Aslında bu soruyu cevaplamak o kadar da güç değil. Saldırganlar bizi en zayıf yerimizden vuruyorlar, Web uygulamalarının ta kendisinden. Bu noktada birçok etken var. Web uygulamalarını yazmak, program yazmaktan nispeten daha kolay olduğu için, bu alanda program yazanların sayısı oldukça fazla. Fakat baktığımızda bu tür programcıların çoğunun bilgisayar programlama eğitiminden yoksun, lise öğrencisi benzeri bir profil oluşturduğunu görüyoruz. Tabiki bu kişilerin kod yazma yetenekleri genellikle çabuk, metodik olmayan ve güvenliği programlamanın bir parçası olarak görme farkındalığından yoksun oluyor. Web uygulamalarının tabiatı gereği, programların değişik parça ve teknolojilerle olan ilişkileri, örneğin arkada bulunan bir database’e yapılan bağlantı gibi, programcıları uygulama ile ilişkisi olan tüm farklı sistem ve teknolojilerden yeterince bilgi sahibi olmasını gerektiriyor. Bunun üzerine bir de Web sunucusunda bulunan zayıf noktalar, ince ayar hataları, database bağlantıları ve seans(4) yönetimi gibi konular da eklenince sahne daha da karmaşık bir hal alıyor. Sonuç olarak saldırganlar tüm bu karmaşık sistemde var olan sorunlardan biri ya da diğerini kullanıp işlerini tamamlıyorlar. Bu metinde sizlere nelerle karşı karşıya olduğunuzdan ve saldırganların hangi yöntemleri kullandıklarından bahsedeceğim. Peki bunlara karşı ne önlemler alırız, o da bir sonraki metnimizin konusu. Saldırı biçimlerine okuyucuyu aşina hale getirebilmek için isimlerini orjinal haliyle vereceğim, fakat açıklamaları Türkçe sunacağım. • Cross Site Scripting HTML tabanlı eposta içine ya da Web sayfasına gömülen özel hazırlanmış bir URL, kullanıcının bilmeden sunucudan Web sayfası ile beraberinde bir kod parçasını almasına ve kendi bilgisayarında çalıştırmasına neden olmaktadır. Bu iş bazen bir epostadaki linke tıklamak ile olurken, bazen bir Web sayfasına gömülmüş bir kod parçasının otomatik olarak çalışması sonucu, kullanıcının tıklamasına bile gerek kalmadan olabilir. (1) DMZ – Demilitarized Zone, Yerel alan ağı ile İnternet arasında özel olarak oluşturulmuş ve genellikle Internet tarafında güvenlik duvarı ile güvenliği artirilmis ara alan Buna bir örnek verelim; • Direct SQL Injectioni Kullanıcıdan alınan girdilerin iyi kontrol edilmemesi ve iş mantığı ile uygulama mantığının birbirinden iyice ayrılmaması sonucu, saldırganlar uygulamaya direk SQL komutları gönderebilir ve database’in içinden bilgi alabilir, bilgileri değiştirebilirler. • Direct OS Commands Yukarıda bahsedildiği gibi SQL komutlarının yerine sistemde var olan programlama dillerinin işletim sistemi ile haberleşmede faydalandığı komutları kullanarak saldırganın istediği komutları dolaylı olarak icra ettirmesi mümkün olabilir. Bu komutlar URL satırından ya da HTML formları üzerinde bulunan alanların zararlı kod parçaları/komutlar ile doldurulması ile sisteme sokulabilir. • Path Traversal and Path Disclosure (Forceful Browsing) Uygulamalar eğer girdileri kontrol etmezler ise URL(5) satırında bulunan bazı meta karakterleri doğru yorumlayamazlar ve işletim sistemine bazı işlemler yaptırabilirler. Bunların en popüleri yerleri bilinen bazı dosyaları almak, browser’da göstermektir. (5) URL – Unıfied Resource Locator, Internet sitelerinin adresine verilen isim. • Null Bytes Birçok Web uygulaması formlardan, URL’den aldığı girdileri arka tarafta çalışan bir C, Java programına iletir (parameter passing). Bu durumda bazen Web uygulaması için kabul edilen bir karakter, C gibi bir dilde özel anlamlar içeriyor olabilir. • URL Encoding Web uygulamalarında; uygulama ile browser’lar arasında bilgi aktarımı iki biçimde olur. Bilgiler ya URL satırında taşınır ya da HTTP başlığına(6) gömülür. URL satırında her türlü veri taşınabileceği için SQL injection metodunda olduğu gibi normalde reddedilecek veriler URL encoding metodu ile sunucuya iletilebilir ve uygulama farklı şeylere zorlanabilir. • Canonicalization Kanonik forma dönüştürmek, bir işareti en kısa ve standart hale dönüştürmek işidir. Bu işlem birden çok sistemin aynı veri ile uğraşması halinde önemli bir hal alır. Web uygulamaları genellikle birden çok uygulamanın birleşiminden oluştuklarından genellikle bu işlemi sıkça yapmak zorunda kalırlar. Eğer bazı kontroller ve güvenlik tetkikleri giriş verisi üzerine yapılacak ise uygulamanın girdiyi doğru şekilde kanonize etmesi ve kontrolleri bu işlemden önce mi sonra mı yapacağının belirlenmesi vazgeçilmez çok önemli bir hal alacaktır. Buna örnek olarak Unicode kullanımını verebiliriz. Unicode günümüzde çokca kullanılan bir veri temsil biçimidir, ASCII gibi karakter setlerinin tüm dünya dillerini temsil etmeye yetmemesi (8 bit) ihtiyacı nedeniyle üretilmiş bir veri ifade standardıdır. Bazı uygulamalar (özellikle eski uygulamalar) Unicode ile çalışmak üzere yazılmadıklarından, ASCII-Unicode dönüşümü sağlayan ara dönüşüm formatları bulunmuştur (UTF4, UTF8). Dolayısıyla 8 bitlik bir işaret 16 bit ile ifade edilirken, birden çok farklı biçimde ifade edilebiliyor hale gelmiştir. Örneğin ¨.¨ nokta ASCII olarak 2E ile ifade edilirken UTF8 olarak CO AE, E0 80 AE, F0 80 80 AE, F8 80 80 80 AE ve FC 80 80 80 80 AE olarak gösterilebilmektedir. Dolayısıyla uygulamaların bir girdinin içinde karakteri kontrol etme işleri daha da zorlaşmaktadır. Buna ilave olarak herhangi bir veriyi uygulamaya üç (3) farklı yöntem ile gönderebileceğimizi dikkate alarak bakarsak iş çok daha çözümü zor hale gelmektedir. Örneğin; uygulamaya aşağıdaki gibi bir veri göndermeyi istesek, (6) Header - Başlık, HTTP sunucusu ile browser arasında kullanıcının görmediği ilk iletişim, bu esnada bazı kontrol bilgileri paylaşılır. URL olarak şöyle, Unicode olarak ise aşağıdaki gibi öndört (14) farklı şekilde gönderebilmekteyiz; Yani uygulama aynı girdiyi bu farklı şekillerde algılayabilmeli ve hepsinde doğru davranabilmelidir. • Cookie Manipulation (Cookie Poisoning) Cookie(7) bilgilerini değiştirerek sunucudan başka kullanıcıların bilgilerini almak, ya da bir başkası gibi davranmak mümkündür. • HTTP Header Manipulation HTTP başlıkları browserlardan sunuculara gönderilen kontrol bilgilerini içerir ve normalde browser’in gönderdiği bu bilgiyi değiştirmek çok mümkün değildir. Ama özel yazılmış programlarla (ki böyle bir kod yazmak 15 satırlık bir kod ile mümkündür) HTTP başlıklarını değiştirmek ve eğer bazı kontroller için bunları kullanan uygulamalar var ise bu uygulamaları aldatmak mümkün olmaktadır. • HTML Form Manipulation Web uygulamalarında kullanıcılara sunulan formlar, browserlar tarafından sunucuya bir HTTP isteği olarak aktarılırlar, ki bazen bu formların içlerinde ekranda kullanıcıya gösterilmeyen fakat saklanan gizli alanlar (HIDDEN VALUE), bir alana girilecek veri tipi ve uzunluğunu sınırlayan kısıtlar konulabilir. Bu kontroller ve gizli veriler, Web sayfasını kaydetmek kaynak kodunu açarak ve bu alanları istenildiği gibi değiştirilmesi suretiyle atlatılabilir. Daha sonra bu değiştirilmiş sayfa sunucuya tekrar gönderilebilir ve sunucu bu şekilde normalde müsade etmediği komutları icra etmeye zorlanabilir. (7) Cookie – HTML protokolü stateless olduğundan web sunucusu bir browser ile bir önceki haberleşmesinde ne konuştuğunu hatırlamaz, bu nedenle arka arkaya ne konuşulduğunun önemli olduğu haberleşmelerde, örneğin alışveriş çantasının içinde bazı şeyler varken ya da kullanıcıya özel bir sayfaya ulaşırken her sayfada tekrar şifre sorma zorunluluğunu kaldırmak için, kullanıcın makinesinde Cookie denilen text dosyalar saklanır. • URL Manipulation Browserdan sunucuya bilgileri aktarırken kullanılan metodlardan birisi bilgileri URL kısmına koymaktır. Buradaki değerler değiştirilerek kontroller atlatılabilir, başkası gibi davranılabilir. • Comments in HTML HTML sayfalarının kaynak kodlarına yazılan yorumlar(8) bazen çok zengin bilgi kaynakları teşkil edebilirler. Yorumlar, genellikle geliştirme sırasında hem dökümantasyon, hem program okunulurluğunu artırmak, hem de farklı geliştiricilerin bilgi paylaşımını kolaylaştırmak için çokca kullanılmakta olup, uygulama üretim sunucusuna geçirilirken ya bu yorumlar unutulmakta ya da önemsenmeyip kaynak kodun içerisinde bırakılmaktadırlar. Bu yorumları kullanan saldırganlar programlar hakkında birçok bilgiye sahip olabilmekte, bazı değişiklikler yapabilmekte ve sunucuları istedikleri işlemleri yapmaya zorlayabilmektedirler. • Old, Backup and Unreferenced Files Birçok Web sistem yöneticisi, ya uygulamalarla gelen örnek programları, ya da eskiden kullanılan ve halihazırda kullanılmayan sayfa/programları kaldırmadan bırakmaktadırlar (sadece bu sayfalara olan linkler kaldırılmakta). Bu örnekler/say-falar genellikle birçok zayıf nokta ile doludurlar ve sunucunun saldırganların eline geçmesine imkan sağlamaktadırlar. • Debug Commands URL ya da HTML koduna gömülmüş ve uygulamayı debug(9) moduna geçirmeyi sağlayan switch şeklindeki değişkenler, uygulama hakkında birçok şey öğrenmek için saldırganlar tarafından kullanılabilir. (8) Comment - Yorum, kaynak koda bilgi, dökümantasyon için yazılan satırlar ki bu yorumlar programın çalışması esnasında uygulanmazlar. • File/Application Enumeration Standard kurulumlarda var olan dosyaların varlığını aramak, uygulamada hangi program/dosyaların var olduğunu tespit etmek ve bunların bilinen zayıflıklarından faydalanmak saldırganlar tarafından sıkça kullanılan bir metoddur. Saldırganlar, URL kısmına var olabileceklerini düşündükleri dosyaların adreslerini deniyerek sunucunun döndüreceği standart cevaplara bakarlar (HTTP 200 cevabı dosya var, demek iken HTTP 404 dosya yok anlamına gelmektedir), dönen cevaba göre uygulamanın bir haritasini çıkarırlar ve bildikleri dosyalar için –varsa- zayıf noktalardan faydalanırlar. • Default Accounts, Misconfiguration, Vulnerabilities Kurulan uygulamalarda bırakılan standart kullanıcılar ve şifreleri, ilk kurulum halinde bulunan gevşek ayarlar, uygulamalardan kaynaklanan hatalar, saldırganların rahatlıkla sunuculara ve onlara bağlı diğer sistemlere ulaşmalarına olanak sağlarlar. • Protocol Piggybacking Müsade edilmeyen protokolleri HTTP içine gömmek ya da var olan yapılarını değiştirerek sunmak yolu ile saldırı gerçekleştirilebilir. • Application Buffer Overflow Sunucunun beklediği yanıtı, olması gerekenden çok daha uzun tutarak, uygulamada bu girdi için ayrılan ön bellek alanını taşırmak suretiyle işletim sistemi alanında zararlı kod çalıştırmak sağlanabilir. Evet, görüldüğü gibi saldırganların elinde bu kadar farklı saldırı methodu var, bizler ise tüm bu saldırılara karşı uygun önlemleri almalıyız. Unutmayınız ki, bir zincir en zayıf halkası kadar güçlüdür. kaynak: IT Security Magazine Sept02 __________________________ (1 vote)
|
Benzer yazılarEtiketlerŞifre
Ağ
Antivirüs
botnet
Cisco
Cross Site Scripting
DDoS
Denetim
DoS
Ebeveyn Kontrolü
Exploit
Firefox
Firewall
Güvenlik
Güvenlik Açıkları
Güvenlik Duvarı
Google
GP
Hack
Hacker
hacking
Hafıza Taşması
IP
Kablosuz Ağ
Kimlik Doğrulama
Kriptografi
Kurtçuk
Kurulum
Linux
Microsoft
Olta Saldırısı
Phishing
Rootkit
Saldırı
Servis Kullanımı Engelleme
Spam
SQL Injection
Sunucu
Trojan
Veritabanı
Virüs
Vista
VPN
web filtreleme
Web Güvenliği
Windows
worm
XSS
En son forum mesajlarıYaklaşan Aktiviteler |
Son yorumlar
17 saat 40 dk önce
17 saat 39 dk önce
2 gün 20 saat önce
6 gün 1 saat önce
6 gün 10 saat önce
6 gün 10 saat önce
1 hafta 21 saat önce
1 hafta 1 gün önce
1 hafta 1 gün önce
1 hafta 2 gün önce