|
||
|
| root > Web Uygulamaları Güvenliği |
|
|
| Web Uygulamalarına Yönelik Saldırı Analizleri - 3 |
|
Bilgi Açığa Çıkarma Sisteme özel bilgilerin açığa çıkarılmasına yönelik saldırıları içerir. Sisteme özel bilgiler, yazılım dağıtımı, versiyon numaraları ve yama seviyelerini içerir. Veya bu bilgi yedek ve geçici dosyaların yeri de olabilir. Çoğu durumda, kullanıcı gereklerini karşılamak için bu bilgiyi açığa çıkarmak gerekli değildir. Birçok web sitesi bir kısım veriyi gösterecektir, fakat mümkün olduğu durumlarda, gösterilen bu verinin boyutunu azaltmak en iyisi olacaktır. Saldırgan web sitesi hakkında ne kadar çok bilgi sahibi olursa, siteyi ele geçirmesi de o kadar kolay olur. Dizin Endeksleme Bir web sitesinin, talep edilen dizinin içerisindeki bütün dosyaları listelemesi şeklindeki gerçekleşen bir fonksiyonudur. “ls” (Unix) veya “dir” (Windows) komutunun bu dizinde çalıştırılmasıyla eşdeğerdir ve sonuçları HTML biçiminde gösterir. Saldırı ve karşı tedbir gözüyle bakarsak, istenmeyen dizin listelemelerinin yazılım açıkları ile birleşen özel bir web talebi sonucunda ortaya çıkabileceğini anlamak önemlidir. Takip eden bilgiler dizin indeksleme sayesinde elde edilebilir: • Yedek Dosyalar - .bak, .old veya .orig uzantılı dosyalar. • Geçici Dosyalar – bu dosyaların normalde sunucu tarafından yok edilmesi gerekir fakat bazı sebeplerden dolayı hala erişilebilir durumdalar. • Gizli Dosyalar – “.” İle başlayan dosya isimleri • İsimlendirme kabulleri – saldırgan, web sitesinin kullandığı dizin veya dosya isimleri kompozisyonunu tanımlayabilir. Örnek: Admin vs. Admin, backup vs. back-up, vb. • Kullanıcı Hesaplarını Tarama – bir web sunucusundaki kişisel kullanıcı hesabının sahip olduğu dizin, çoğu zaman kullanıcının adı ile adlandırılır. • Konfigürasyon Dosyası İçeriği – bu dosyalar giriş kontrolu verilerini içerebilir ve uzantıları genellikle .conf, .cfg veya .config’dir. • Betik İçeriği – Birçok web sunucusu betiklerin bir yer belirtilerek(örn. /cgi-bin) veya sunucuyu konfigüre ederek dosya izinlerine bağlı olarak çalıştırılmasına izin verir (örn. *nix sistemlerdeki execute biti ve Apache’nin XbitHack direktifini kullanması). Bu seçeneklere göre, eğer cgi-bin klasöründe dizin indekslemesine izin veriliyorsa, izin olmadığı halde bu klasördeki betik kodları indirilebilir, izlenebilir. Bir saldırganın istenmeyen bir dizinin listesini elde edebilmesi için 3 değişik senaryo vardır: 1. Web sunucusu hatalı bir şekilde dizin indkslenmesine izin verir şekilde konfigüre edilmiştir. Karışıklık, web yöneticisinin konfigürasyon dosyasındaki indeksleme direktiflerini ayarlarken ortaya çıkabilir. Bu kadar karmaşık bir sistemin ayarlarının yapılması sırasında istenmeyen sonuçların ortaya çıkması mümkündür, mesela özel bir alt dizine indeksleme hakkı verilirken sunucunun kalan kısmında bu hak kaldırılabilir. Saldırgan gözüyle HTTP isteği az önce yukarıda belirtilen (sadece etki alanı ile) şekilde yapılır. Bir dizin istenir ve istenen sonucun alınıp alınmadığına bakılır. Saldırganlar web sunucusunun “neden” bu şekilde konfiüre edildiği ile ilgilenmezler. 2. Web sunucusunun bazı parçaları kapalı olduğu halde ve indeks dosyası bulunduğu halde dizin indekslemeye izin verir. Bu, dizin indeksleme için geçerli olan tek sömürü örneği senaryosudur. Birçok web sunucusunda tanımlanan sayısız açıklık bulunmaktadır ve eğer özel HTTP talepleri gönderilirse dizin indeksi ile sonuçlanabilir. 3. Google’ın önbellek veritabanı bir web sitesinin eski taranmasından kalma, dizin indeksi de içerebilen tarihi veriler bulundurabilir. Bilgi Sızdırma Bir web sitesine ait hassas veriler için, geliştirici yorumları veya hata mesajları gibi, bu veriler bir saldırganın sistemi sömürmesine yardımcı olabilir. Hassas veri, HTML yorumlarında, hata mesajlarında, kaynak HTML kodunda veya basitçe açık bir düzyazı alanında bulunabilir. Bir web sitesini bu türlü verileri ifşa ettirmeye yarayan birçok yol bulunur. Bu türlü sızıntılar, her zaman doğrudan bir güvenlik açığı olmadığı halde, saldırgana ileriki saldırılarında yararlı bir rehber olabilir. Hassas veri sızıntısı değişik seviyerlerde risk taşıdığından mümkün olduğu kadar önlenmelidir. Bilgi kaçağının ilk durumunda (HTML kodunda bırakılan yorumlar, hata mesajlarının açık edilmesi), açık; saldırgana dizin yapısı, SQL sorgu yapısı ve web sitesinin kullandığı anahtar işlemler hakkında yapısal bilgi verir. Çoğu zaman geliştirici HTML içerisine yorum veya hata ayıklama ve entegrasyon amaçlı betik kodu bırakır. Bu bilgi betiğin nasıl çalıştığını belirten yorumdan, en kötü durumda, geliştirmenin test aşmasında kullanılan kullanıcı adları ve parolalar olabilir. Bilgi sızıntısı, gizli zannedilen veriler için de, web sitesi tarafından düzgün bir biçimde korunmadığında geçerlidir. Bu veri, hesap numaraları, kullanıcı tanımlayıcıları (ehliyet numarası, pasaport numarası, kimlik numarası, vb.) ve kullanıcıya özel veri (hesap bakiyesi, adres ve işlem geçmişi, vb.) içerebilir. Yetersiz kimlik doğrulama, yetersiz yetkilendirme ve güvenli iletim şifrelenmesi de veriyi koruyan ve veriye erişimde düzgün kontrolü sağlayan mekanizmalardır. Birçok saldırı, müşteri saldırıları, sıradan gözlemciler, gibi, web sitesinin korunması kapsamının dışında kalır. Bilgi sızıntısı, bu bağlamda, açık bir şekilde kullanıcıya bile gösterilmemesi gereken, gizli ve anahtar kullanıcı verilerinin ifşa edilmesiyle ilgilenir. Kredi kartı numaraları, düzgün şifreleme ve giriş kontrolü yapılsa bile bu tür ifşalardan korunması gereken kullanıcı verilerinde önemli bir örnektir. Örnek Bilgi sızıntısı 3 ana kategoride incelenebilir: HTML kodunda bırakılan yorumlar, hata mesajlarının ifşası, açık bir şekilde görünebilen gizli veriler. HTML kodunda bırakılan yorumlar: <TABLE border="0" cellPadding="0" cellSpacing="0" height="59" width="591"> <TBODY> <TR> <!--If the image files are missing, restart VADER --> <TD bgColor="#ffffff" colSpan="5" height="17" width="587"> </TD> </TR> Burada gördüğümüz gibi, geliştirici/kalite kontrol personelinden birisi resim dosyalarının görüntülenememesi halinde neler yapılması gerektiğini belirten yorum bırakmıştır. Güvenlik açığı ise, yorumun içerisinde açık bir şekilde geçen sunucu ismidir, “VADER”. Hata mesajlarının açık edilmesine örnek, geçersiz sorgulara verilen cevaplar olabilir. Çok bilinen bir örnek, SQL sorgularıyla ilişkilendirilmiş hata mesajlarıdır. SQL enjeksiyonu saldırıları, saldırganın, sitedeki SQL sorgularının oluşturulmasının yapısı ve biçimi hakkında ön-bilgi sahibi olmasını gerektirir. Açık edilen hata mesajlarındaki bilgi, saldırgana, arkadaki veritabanında geçerli SQL sorgularının nasıl oluşturulduğu hakkında önemli bilgi sağlar. Takip eden bilgi bir giriş formundaki kullanıcı adı kısmına tek tırnak işareti konduğunda sunucu tarafından döndürülmüştür. Açık hata mesajı: An Error Has Occurred. Error Message: System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression "username = """ and password = "g"". At System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at… İlk hata cümlesinde sözdizimi hatası rapor edilmiş. Hata mesajı SQL sorgusunda kullanılan sorgu parametrelerini açık etmektedir: username ve password. Bu ifşa edilen bilgi saldırganın siteye yapacağı SQL enjeksiyonu saldırılarına başlaması için gereken tek eksik parçadır. Yol Takibi Web dökümanları kök dizininin dışında kalan dosyalara, dizinlere veya komutlara erişimi sağlar. Bir saldırgan URL’i öyle bir şekilde düzenleyebilir ki, web sitesi web sunucusu üzerindeki rastgele dosyaları çalıştırır veya görüntüler. HTTP-tabanlı arayüze sahip her makina potansiyel olarak “Yol Takibi”’ne açıktır. En genel “Yol Takibi” saldırısı, URL’de istenen kaynağın yerini değiştirmek için “../” özel karakterlerini kullanır. Birçok popüler web sunucusu web dökümanı kök dizininden çıkışı engellese de, “../” karakterlerinin değişik kodlanması, güvenlik filtrelerini aşabilir. Bu metot şekilleri arasında, eğik çizgi karakterinin geçerli veya geçersiz Unicode kodlanması (“..%u2216” veya “..%c0%af”), Windows tabanlı sistemlerdeki ters eğik çizgi karakterinin kullanılması (“..\”), URL kodlanmış karakterler (“%2e%2e%2f”), ve ters eğik çizgi karakterinin iki kez URL kodlanması (“..%255c”) bulunur. Web sunucusu, URL üzerinden, “Yol Takibi”’ni düzgün bir şekilde kısıtlasa da, web uygulmasının kendi kullanıcı girdisini düzgün bir şekilde denetlemezse, bu saldırıya açık olabilir. Bu, şablon mekanizması kullanan veya dosyadan durağan bir yazı yükleyen web uygulamalarında ortak görülen bir sorundur. Saldırının çeşitli şekillerinde, orjinal URL parametresi, web uygulamasının dinamik bir betiğinin dosya ismiyle değiştirilir. Sonuç olarak, dönen sayfa kaynak kodu gösterir, çünkü dosya yürütülebilir bir betik şeklinde değil de yazı dosyası olarak okunmuştur. Bu teknik çoğu zaman özel karakterlerden de faydalanır, örneğin (“.”) nokta karakteri şu anda çalışmakta olan dizinin listesini göstermeye, “%00” NULL karakteri de temel dosya uzantısı kontrollerini geçmeye yarar. Örnek Bir web sunucusuna karşı “Yol Takibi” saldırıları: Saldırı: http://örnek/../../../../../bir/dosya Saldırı: http://örnek/..%255c..%255c..%255cbir/dosya Saldırı: http://örnek/..%u2216..%u2216bir/dosya Bir web uygulamasına karşı “Yol Takibi” saldırıları: Orjinal: http://example/foo.cgi?home=index.htm Saldırı: http://example/foo.cgi?home=foo.cgi Yukarıdaki örnekte, web uygulaması foo.cgi dosyasındaki kaynak kodu gösterir, çünkü “home” değişkeninin değeri içerik olarak kullanılmıştır. Dikkatinizi çektiyse, bu durumda saldırgan, başarılı olmak için “Yol Takibi”’ne yarayan veya herhangi bir geçersiz karakter kullanmak zorunda kalmamıştır. Saldırgan aynı dizindeki başka bir dosyayı hedef almıştır. Bir web uygulamasına karşı özel karakter dizileri kullanılarak yapılan saldırılar: Saldırı: http://example/scripts/foo.cgi?page=../scripts/foo.cgi%00txt Yukarıdaki örnekte, web uygulaması foo.cgi dosyasının kaynak kodunu özel karakter dizileri kullanarak yapılan saldırı sonucu görüntülemiştir. “../” dizisi bir üst dizine çıkmaya oradan da /scripts dizinine girmeye yaramıştır. “%00” dizisi hem dosya uzantısı kontrölünü geçmek için hem de dosya okunduğunda uzantısının atılması için kullanılır. Tahmin Edilir Kaynak Konumu Web sitesinin gizli içeriğini veya işlevini açığa çıkarmak için kullanılan bir saldırı tekniğidir. Mantıklı tahminler yaparak, saldırı kamusal izlenime kapalı olan içeriği birer birer deneyerek arar. Geçici dosyalar, yedek dosyaları, konfigürasyon dosyaları, ve örnek dosyalar potansiyel olarak ortada bırakılmış dosyalara örnek olabilir. Bu birer birer deneyerek arama işlemi kolaydır çünkü gizli dosyalar genelde aynı şekilde isimlendirilir ve benzer yerlerde bulunur. Bu dosyalar web uygulamasının içeriği, veritabanı bilgisi, parolalar, makina isimleri, diğer hassas bölgelere olan dosya yolları hakkında hassas bilgileri içerebilir veya açıklıkları içerisinde bulundurabilir. Bu bilgilerin açığa çıkarılması saldırgan için çok değerlidir. Tahmin edilebilir kaynak konumu saldırısı Güçlü Tarama, Dosya Sıralama, Dizin Sıralama vb. olarak da bilinir. Örnek Herhangi bir saldırgan kamuya açık bir web sunucusuna rastgele dosya veya dizin talebinde bulunabilir. Kaynağın bulunup bulunmadığı web sunucusunun döndüğü HTTP dönüş kodları incelenerek bulunabilir. Birçok Yeri Tahmin Edilebilir Kaynak saldırı çeşidi bulunur. Ortak dosya ve dizinlerin kör aranması: /admin/ /backup/ /logs/ /açık_dosya.cgi Bulnunan dosyalara uzantı ekleme: (/test.asp) /test.asp.bak /test.bak /test
Mantıksal Saldırılar Fonksiyonelliğin Kötüye Kullanımı Fonksiyonelliğin kötüye kullanımı, web uygulama saldırıları kategorileri ile iç içedir. Fonksiyonelliğin kötüye kullanılma saldırıları aynı zamanda güç arttırmak amacı ile yaygın olarak kullanılır. Mesela, saldırgan bir web söyleşi sitesine XSS parçasını enjekte ederek ve sitenin "herkese gönder" fonksiyonunu kullanarak kötü amaçlı kod ile bütün siteye etki edebilir. Örnek Fonksiyonelliğin kötüye kullanılma örnekleri: a) bir web sitesindeki sorgulama fonksiyonunun web dizini dışındaki kısıtlanmış dosyalara ulaşılmasında kullanılması, b) bir dosya yükleme altsisteminin dahili kritik konfigürasyon dosyalarının değiştirilmesinde kullanılması, ve c) Bir web-kullancı giriş sayfasının tanımlı kullanıcı isimleri ve tanımsız parolalar ile bombardıman edilerek tanımlı kullanıcıların, belirli bir tekrar deneme limiti aşıldığı için, hesapları kilitlenerek uygulamanın servis dışı bırakma saldırısına uğratılması gibi saldırıları içerir. Genel bir kaç uygulama saldırıları şöyledir: 1. Matt Wright FormMail PERL tabanlı "FormMail" web uygulaması, normal olarak kullanıcı tarafından sağlanan form verilerinin önceden programlanmış bir e-mail adresine gönderilmesi için kullanılıyordu. Betik, web sitelerine geri beslemeyi sağlayacak, kullanılması kolay bir çözüm sağlıyordu. Bu nedenle, FormMail betiği çevrimiçi olarak en çok kullanılan CGI programlarından biriydi. Ne yazık ki, programın bu yüksek derecedeki kolaylığı ve kullanılabilirliği saldırganlar tarafından uzaktaki herhangi bir alıcıya e-mail yollanması suretiyle kötüye kullanılmıştı. Kısacası, bu web uygulaması tarayıcıdan tek bir web isteğiyle bir spam-rölesi motoruna (spam-relay) dönüştürülmüştü. Saldırganın istenilen e-mail parametrelerini içeren bir URL oluşturup, CGI programına HTTP GET yollaması yeterliydi. Mesela; http://example/cgi-bin/FormMail.pl?recipient=email@victim.example&message=you&got&spam Web sunucunun yollayıcı olarak davranması ve web uygulamasının saldırgana tamamen vekalet etmesi ile bir e-mail üretilir. Betiğin bu versiyonunda hiç bir güvenlik mekanizması bulunmadığından, uygulanabilecek tek savunma önlemi, kullanılacak özel e-mail adresinin betiğin içine gömülmesiydi. Bu çözümün engellenmesi durumunda ise, site operatörleri web uygulamasını ya tam olarak kaldırmak ya da tamamen değiştirmek zorunda kalıyorlardı. 2. Macromedia"nın Cold Fusion"u Bazen web uygulamalarının içine istenmeyen amaçlar için kolaylıkla kullanılabilen temel yönetimsel araçlar gömülürler. Örnek olarak, Macromedia"nın Cold Fusion"u kurulum ile birlikte gelen ve herkes tarafından erişilebilen bir kaynak kod görüntüleme modülüne sahiptir. Bu modülün suistimali web uygulamasında ciddi bir bilgi sızmasına yol açabilir. Çogunlukla bu tür modüller, örnek dosyalar veya kurulum dışı fonksiyonlar değil, kritik sistem bileşenleridirler. Bu durum web uygulamaları sistemlerine derinden bağlandıkları nedeniyle bu tür modüllerin kapatılmalarını problemli kılar. 3. Smartwin CyberOffice Alışveriş Sepeti Fiyat Değişikliği Fonksiyonelliğin suistimali bir saldırganın web uygulamasının davranışını değiştirmek için verileri umulmadık bir şekilde bozmasıyla gerçekleşir. Mesela, CyberOffice alışveriş sepeti, web formunun içindeki gizli fiyat alanının değiştirilmesi ile suistimal edilebilir. Web sayfası normal olarak indirilir, değiştirilir ve sonra fiyat alanı istenilen herhangi bir fiyata eşitlenerek geri yollanılır. Denial of Services (DoS) - Servis Dışı Bırakma Bir web sitesini normal kullanıcı aktivitelerinden alıkoymak amacıyla gerçekleştirilen saldırı tekniğidir. Bir çok zaman DoS saldırıları bir web sitesinin varolan bütün sistem kaynaklarını bitirmeye çalışırlar, bu kaynaklara örnek olarak; CPU, hafıza, disk yeri, v.b. verilebilir. Bu kritik kaynaklardan herhangi biri tam güç kullanıldığında, web sitesi normal olarak erişilemez olacaktır. Bugünün web uygulamaları bir web sunucusu, veritabanı sunucusu ve bir yetkilendirme sunucusu içerdiğinden, uygulama tabakasındaki bir DoS, bu birbirinden bağımsız bileşenlerden herhangi birini hedef alabilir. Çok büyük miktarda bağlantı teşebbüsü gerektiren network tabakasındaki DoS"dan farklı olarak, uygulama tabakasındaki DoS çok daha kolay uygulanabilir bir iştir. Basit bir uygulama tabakası DoS saldırısı, medikal geçmiş raporu üretilmesi için 10 isteğin aynı anda gönderilmesi olacaktır. Bu istekler, veritabanı sunucusunun CPU"sunu %100 yoğunluğa ulaştıracağından web sitesini büyük bir ihtimalle hizmet dışı durumuna sokacaktır. Bu noktada sistem normal kullanıcı aktivitesine servis veremez hale gelecektir. 1. Belli Bir Kullanıcıyı Hedef Alan DoS Saldırgan belli bir kullanıcı adı ve bilinçli olarak üretilmiş yanlış bir parola ile bir web sitesine girmek isteyecektir. Bu işlem en sonunda kullanıcı adı kullanılan kişinin hesabını kitleyecektir. 2. Veritabanını Hedef Alan DoS Saldırgan veritabanını değiştirip sistemi kullanılmaz hale getirmek (Bütün veriyi, kullanıcı adlarını silerek, v.b.) için SQL Enjeksiyonu tekniklerini kullanacaktır. 3. Web Sunucusunu Hedef Alan DoS Saldırgan, web sunucusu işini (proses) sonlandıran özel olarak hazırlanmış bir istek göndermek için arabellek taşması tekniklerini kullanacak ve sistemi normal kullanıcı aktivitelerine erişilmez hale getirecektir. Yetersiz Anti-otomasyon Bir web sitesinin saldırgana normalde manual olarak (elle) yapması gereken bir işi otomatik olarak yapabilmesine izin verdiği durumdur. Bazı web sitesi fkonsiyonları otomatikleştirilmiş saldırılara karşı korunmalıdır. Göz önünde bulundurulmamış otomatik robotlar (programlar) veya saldırganlar, web sitesinin fonksiyonlarını sistemi sömürmek veya dolandırmak için tekrar tekrar kullanabilirler. Otomatik bir robot bir dakika içinde binlerce istek çalıştırıp potansiyel iş ve servis kaybına neden olur. Mesela, otomatik bir robot bir kaç dakika içinde onbinlerce yeni hesap açamamalıdır. Benzer olarak, otomatik robotlar diğer kullanıcıları mesaj tahtalarına tekrar tekrar mesaj yollayarak taciz edememelidirler. Bu operasyonlar sadece insanların kullanabileceği operasyonlar olarak kısıtlanmalıdırlar. Yetersiz İş Denetimi Bir web sitesinin saldırgana uygulamanın istenilen kontrol akışını baypas edebilmesine veya atlamasına izin verdiği durumdur. Eğer kullanıcı durumu bir iş süresince denetlenmiyor ve uygulanmıyorsa, web sitesi sömürülmeye veya dolandırılıcılığa açık olabilir. Eğer kullanıcı bazı adımları yanlış veya hatalı bir şekilde gerçeklerse, bir veri bütünlüğü hatası oluşur. Bir kaç adımlı işler para transferi, parola kurtarılması, satın alma, hesap açma v.b. örneklerini kapsar. Web siteleri kullanıcı durumlarını izlemek için normal olarak çerezler veya gizli HTML alanlarını kullanırlar. Ancak, izleme bilgisi istemci tarafında tarayıcıda (browser) tutulursa verinin bütünlüğü denetlenmelidir. Eğer denetlenmezse, saldırgan güncel durumunu değiştirerek umulan trafik akışını atlatabilir. Örneğin; Online bir alış veriş sepeti sistemi, müşterilerine bir A ürünü satın alındığında belli bir indirim sağlayabilir. Kullanıcı, A ürününü yerine bir B ürününü almak isteyebilir. Kullanıcı, sepetini ürün A ve B ile doldurarak ve hesap kesim işlemini gerçekleyerek indirimden faydalanabilir. Daha sonra kullanıcı hesap kesim işleminden geri çıkıp, A ürününü sepetten siler veya bir sonraki adımı yollamadan değerleri değiştirir. Kullanıcı daha sonra tekrar hesap kesim işleminden geçer ve daha önce sepetindeki A ürününden dolayı indirimden faydalanmış bir şekilde dolandırılmış bir alım fiyatı elde etmiş olur.
|
|
| Bağlantılar Bg.org.tr |
| CS - Security Expert Network | AUP&TOS |