OWASP Top 10 (2020)

Alperen Çorak
7 min readJun 29, 2021

--

OWASP Top 10

OWASP (Open Web Application Security Project), web uygulama güvenliği alanına kendini adamış kâr amacı gütmeyen uluslararası bir kuruluştur. Temel ilkelerinden biri de herkesin kendini web uygulama güvenliği alanında geliştirebilmesi için ürettiği makalelere, metodolojilere, dokümantasyonlara, araçlara ve teknolojilere ücretsiz ulaşmasını sağlamaktır. OWASP’ın bu alanda en çok popüler olan projelerinden biri de OWASP Top 10’dir.

Nedir bu OWASP Top 10?

OWASP Top 10 en yaygın 10 uygulama güvenlik açığının bir listesidir. Bu listede aynı zamanda açıkların riskleri, etkileri ve bu açıklara karşı önlemler de bulunur. Her üç veya dört yılda bir düzenli olarak güncellenir.

OWASP Top 10 Güvenlik Açıkları (2020 yılı için)

1. Injection

2. Broken Authentication

3. Sensitive Data Exposure

4. XML External Entities (XXE)

5. Broken Access Control

6. Security Misconfigurations

7. Cross Site Scripting (XSS)

8. Insecure Deserialization

9. Using Components With Known Vulnerabilities

10. Insufficent Logging and Monitoring

1.Injection (Enjeksiyon)

Injection zafiyetleri genellikle kullanıcıdan alınan verilerin, kontrol edilmemesinden veya(*) herhangi bir filtreleme olmadan komut olarak çalıştırılmasıyla ya da sorguya dahil edilmesiyle ortaya çıkar.

Injection zafiyeti sayesinde saldırgan zararlı bir veri göndererek sistemde komut çalıştırabilir hatta erişmemesi gereken verilere bile erişebilir hale gelebilir. Saldırgan sistemde komut çalıştırabilir hale geldiğinde hak yükseltme zafiyetlerini kullanarak sistem üzerindeki etkinliğini daha da arttırabilir. Böyle bir durum söz konusu olduğunda ise organizasyon içinde çok büyük sorunlara yol açabilir. Böylesine bir zafiyet çok riskli olduğundan listenin bir numarasında yer alır.

En yaygın Injection türleri SQL Injection ve Command Injection’dır. İki injection türü de yukarıda da bahsettiğimiz gibi gelen verilerin kontrol edilmemesinden veya (*) filterelenmeden alınmasından kaynaklanmaktadır.

· SQL Injection

Bu injection türü kullanıcıdan alınan verinin direkt olarak sql sorgusuna dahil edilmesinden kaynaklanmaktadır.

Örnek :

http://ornek.com/haberler.php?read=185

Örnek web sayfası read parametresindeki değeri sql sorgusu ile veritabanında kayıtlı olan haberler arasından bulup kullanıcıya gösterilmesini sağlıyor. Bu sayfayı ziyaret ettiğimizde aşağıdaki gibi bir sql sorgusu çalışıyor.

“ SELECT*FROM haberler WHERE id=185 ”

Bu sql sorgusunda şu ana kadar hiçbir sıkıntı yok fakat bir saldırgan beklenilmeyen bir parametre girerse sistem açısından risk oluşturacaktır. Saldırganın şu şekilde bir parametre girdiğini düşünelim.

http://ornek.com/haberler.php?read=**185; DROP ALL TABLES; — ”

Bu sayfa çalıştığında arkaplanda şu şekilde bir sql sorgusu çalışacaktır.

SELECT*FROM haberler WHERE id=185; DROP ALL TABLES; — ”

Bu sql sorgusu çalıştığında veritabanındaki tüm tablolar silinecektir. Tabii ki SQL Injection’un tek işe yaradığı şey tablo silmek değildir. Veritabanındaki tüm tablolardaki verileri görebilir hatta komut çalıştırabilirsiniz. Saldırganın SQL Injection yöntemiyle bütün yönetici hesap bilgileri ve şifrelerine eriştiğini düşünün. Bu sistem için gerçekten çok sıkıntılı bir durum yaratacaktır.

· Command Injection

Command Injection da SQL Injeciton da olduğu gibi alınan verinin kontrol edilmemesinden kaynaklanan zafiyettir.

Örnek :

http://ornek.com/admin/command.php?*command*=**deneme.txt**

Örnek web sayfası aldığı command parametresine verdiğimiz değer isminde sistem üzerinde bir dosya oluşturuyor. Bu sayfanın kaynak kodları ise aşağıdaki gibi olsun.

Kullanıcı bir dosya oluşturmak istediğinde sistemde “ touch deneme.txt ” komudu çalışacaktır. Komutumuz düzgün bir şekilde çalışıyor.

Saldırgan şu şekilde bir değer veriyor olsun.

http://ornek.com/admin/command.php?command=**deneme.txt; reboot**

Böyle bir durumda sistemde “ touch deneme.txt; reboot ” komutu çalışıyor. Böylesi bir komutta dosya oluşturulur ardından ise sistem yeniden başlatılır. Yani buradan anlaşıldığı üzere Command Injection zafiyetiyle sistem üzerinde istediğiniz komudu çalıştırabilir hale gelebilirsiniz.

2.Broken Authentication (Yanlış Kimlik Doğrulama)

Broken Authentication zafiyeti genellikle kimlik doğrulama ve oturum yöntemiyle ilgili mekanizmalar yanlış uygulandığında veya ayarlandığında ortaya çıkar. Saldırganlar bu zafiyetten yararlanarak parolaları, session tokenları ele geçirebilir. Böylece sistemi istismar etmesi kolaylaşır.

Saldırganlar genellikle brute force (kaba kuvvet) saldırıları yaparak kullanıcıların kimliklerini açığa çıkarabilirler. Bu yüzden sıradan parolaların (admin, admin123, 123456 gibi parolalar) kullanımı saldırganların işini kolaylaştırarak kolayca sisteme sızmalarına neden olur.

3.Sensitive Data Exposure (Veri İfşası)

Web uygulamalarının hassas verileri (kredi kartı bilgileri, parolalar, kişisel kayıtlar vb.) gerektiği gibi korumamasından kaynaklanan zafiyettir. Örnek verecek olursak; verilerin şifrelenmemesi, şifrelenen verilerin eski, açığa çıkmış şifreleme algoritmasıyla saklanması gibi nedenlerden bahsedebiliriz. Aynı zamanda bilgiler clienttan sunucuya aktarılıyorken şifrelenmeden veya açığa çıkmış şifreleme algoritmaları kullanılarak aktarılırsa yine bu zafiyetten bahsedebiliriz. Güçlü şifreleme algoritmalarının kullanılması sayesinde bu gibi durumların önüne geçilebilir. Saldırgan sql injection zafiyetini kullansa dahi algoritmalar çözülemediği için saldırganın verilere ulaşmasını engelleyecektir.

4.XML External Entities (XXE)

Bu zafiyet verilerin Parsing(ayrıştırma) işlemi sırasında meydana gelir. Saldırgan verilerin işlenmesi esnasında müdahale ederek sunucudan dosya okuyabilir ve kod çalıştırabilir hale gelir.

Örnek :

Örnek kodumuzda kullanıcıdan dosya alıp ekrana yazdırma işlemini sağlıyoruz.

Normalde bu şekilde xml dosyamızı sunucuya göndeririz.

Fakat saldırgan bu şekilde bir xml dosyası göndererek sunucuda dosya okuyabilir hale gelebiliyor. Bu dosya sisteme aktarıldığında sunucuda bulunan kullanıcıların olduğu dosya saldırgan tarafından okunabilir hale gelir.

5.Broken Access Control (Yanlış Giriş Kontrolü)

Bu zafiyet türünde sistemdeki kullanıcıların neler yapabileceğinin düzgün bir şekilde ayarlanmamasından kaynaklanır. Saldırganlar bu zafiyetleri kullanarak izni olmayan dosyalara erişebilir, yetkisi dışındaki fonksiyonları veya özellikleri kullanabilir, diğer kullanıcıların verilerine erişebilir.

Örnek :

http://ornek.com/kullanici.php?**kullanici=sedat**

Bu websitesine giriş yapıldığında sedat isimli kullanıcı kendi bilgilerine erişebiliyor olsun.

http://ornek.com/kullanici.php?**kullanici=ahmet**

Saldırgan “kullanici” parametresini yukarıdaki gibi değiştirdiğinde artık ahmet isimli kullanıcının bilgilerine erişebilir hale gelir. Hatta parametreyi istediği gibi değiştirerek başka kullanıcıların bilgilerini de görebilir.

6.Security Misconfiguration (Yanlış Güvenlik Yapılandırması)

Bu zafiyet türünün ortaya çıkması servis ayarlarının yanlış ya da eksik yapılmasından kaynaklanır. Örnek verecek olursak; gereksiz servis ve eklentilerin yüklenmesi, servislerin veya eklentilerin varsayılan yapılandırmalarının değiştirilmemesi ya da kaldırılamaması, servislerin güncel tutulmaması gibi örnekler verebiliriz.

7.Cross Site Scripting (XSS)

Bu zafiyet genellikle kullanıcıdan alınan verilerin, kontrol edilmemesinden veya(*) herhangi bir filtreleme olmadan html response olarak gönderilmesi sonucu oluşur. Bu zafiyet sayesinde saldırganlar kullanıcı tarayıcısında zararlı kod çalıştırarak kullanıcı oturumunu ele geçirebilirler.

· Reflected XSS

Reflected XSS, anlık olarak kullanıcıdan (?) alınan verinin html response’a eklenip kullanıcının tarayıcısında kod çalıştırılabilinmesidir. Bu zafiyet genelde linklere tıklanmasıyla oluşur.

Örnek :

http://ornek.com/index.php?ad=<&script>alert(“Reflected XSS Zafiyeti”);</&script>

· Stored XSS

Stored XSS‘i Reflected XSS’ten ayıran özellik Stored XSS’in sunucu tarafında çalışıyor olmasıdır. Fakat Reflected XSS’ten daha fazla zarar verme potansiyeline sahiptir. Çünkü Reflected XSS’te etkilenen sadece linke tıklayan kişidir. Stored XSS’te ise o sayfayı görüntüleyen bütün kullanıcılar etkilenir.

· DOM XSS

DOM XSS zafiyeti html üzerinde değil de DOM objeleri üzerinde etki ediyor. Diğer XSS türlerinde olduğu gibi bu türde de kullanıcının tarayıcısı üzerinde kod çalıştırılmasına neden oluyor.

8.Insecure Deserialization

Serialization : Bir objenin disk üzerine yazabileceğimiz bir yapıya çevirme işlemidir.

Deserialization : Serialize edilmiş bilginin tekrar objeye çevrilmesine denir.

Bu zafiyet zararlı girdinin deserialization işlemi sonucunda ortaya çıkıyor. Bu zararlı girdi deserialization işlemi sonunda çalışabilir hale geldiğinden uzaktan kod yürütülebilmesine neden olmaktadır. Bu yüzden gelen verilerin kontrol edilmesi gerekir.

9.Using Components With Known Vulnerabilities (Bilinen Güvenlik Açıklarına Sahip Bileşenleri Kullanma)

Bu zafiyet türü sistemde kullanılan bileşenlerin yani servislerin, uygulamaların, kütüphanlerin, eklentilerin eski ve bilinen açıkları olan sürümlerinin kullanılması sonucu oluşur. Saldırganlar bu bileşenlerin sürümlerini bulduğu zaman bilinen açıklarından yararlanıp sistemleri ele geçirebilirler.

10.Insufficient Logging and Monitoring (Yetersiz Kayıt ve İzleme)

Sistemlerde loglama(kayıt girdisi) ve monitoring(izleme) işlemlerinin yapılamamasından veya gerektiği kadar yapılmamasından kaynaklı olarak saldırganların sistemlere daha fazla saldırmasına, sistemde fark edilmemesine, sistemde kalıcılığını sürdürmesine, verileri kurcalamasına olanak tanır. Bu nedenle Giriş çıkışlar, başarısız giriş denemeleri, transferler ve önemli faaliyetler loglanmalı ve monitoring işlemi yani sistemin sürekli olarak kontrol edilip gerektiği yerde yöneticilerin uyarılması gerekmektedir. Örnek olarak saldırgan bruteforce yaparken ki giriş denemeleri loglanır ve izlenirse belli sayıda başarısız giriş denemelerinden sonra sistem yöneticilerinin dikkatini çekecek ve saldırının engellenmesine olanak sağlayacaktır.

CSRF ve IDOR OWASP TOP 10 2020 listesinde olmasa da bu yazımda bahsetmek istedim.

CSRF (Cross-Site Request Forgery) (Siteler Arası İstek Sahteciliği)

CSRF kısaca bir websitesinin açığından yararlanarak website kullanıcılarının isteği dışında sanki o kullanıcıymış gibi erişerek işlem yapılmasına verilen addır.

Bu saldırıda daha önce kimliği doğrulanmış bir web sitesi aracılığıyla bir web uygulamasına istek gönderen bir bağlantı bulunur. Bu bağlantıya daha önceden sisteme girmiş olan kullanıcı tıkladığında websitesine istek kullanıcı tarafından gönderilir. Bu işlem kullanıcı tarafından yani kimliği doğrulanmış bir hesap tarafından yapıldığı için web sitesi isteği doğrular ve bu isteğe yanıt verir. Böylece saldırgan istediği işlemi yapmış olur.

Örneğin bir saldırgan bir banka hesabından para çekme talebinde bulunacak bir link hazırladı. Bu linki hesabı tarayıcısında açık olan birilerine gönderdi. Linke tıklandığı zaman websitesi para çekme talebine yanıt verecek ve böylece para saldırgana transfer edilmiş olacaktır. Yine bu yöntemle kullanıcının bilgilerine dahi erişilebilir.

IDOR (Insecure Direct Object References) (Güvenli Olmayan Doğrudan Nesne Referansı)

IDOR kısaca kullanıcıdan istenen bir bilginin bir dosya ile doğrudan iletişim kurması ile ortaya çıkan zafiyettir. Bu zafiyet yöneticinin izni olmadan dosyaya ve içeriğine ulaşmamızı sağlar. Bu zafiyet komutların kontrol edilmemesinden kaynaklanır.

Örnek verecek olursak; bir websitesinden alışveriş yapıyorsunuz. Sepet tutarınız 1250 TL olsun. Bu zafiyet bu websitesinde bulunuyorsa siz sepet tutarını istediğiniz gibi değiştirebilir hale gelebilirsiniz.

Kaynakça

[1]https://umuttosun.com/owasp-top-10/

[2]https://fthcyber.com/2020/09/25/owasp-top-10-guvenlik-riskleri-ve-aciklari/

[3]https://gelecegiyazanlar.turkcell.com.tr/blog/xml-external-entity-injection-xxe-zafiyeti

[4]https://hasscript.com/1791/insecure-deserialization-nedir

[5]https://www.cloudflare.com/learning/security/threats/owasp-top-10/

[6]https://www.beyaz.net/tr/guvenlik/makaleler/siteler_arasi_istek_sahteciligi_csrf_cross_site_request_forgery_nedir.html

--

--

Alperen Çorak

Computer Engineering Student at Izmir Bakircay University