Owasp Top 10

Owasp(Open Web Application Security Project), web uygulama güvenliği ile ilgilenen, bu konuda makaleler/uygulamalar yazan kâr amacı gütmeyen bir kuruluştur.

Owasp’ın web sitesinde, web uygulamalarındaki zafiyetleri, zafiyetlerin nasıl oluştuğunu, zafiyetlerin nasıl exploit edilebileceğini ve bu zafiyetlerin nasıl önlenebileceği ile ilgili çok güzel yazılar bulunuyor. Owasp’ın sayfasında bulabileceğimiz en güzel çalışmalardan birisi de Owasp Top 10 listesi.

Owasp, birçok firma ve web uygulama sızma testleri ile ilgilenen kişilerden bilgi toplayarak o yıla ait en riskli 10 güvenlik zafiyetinin istatistiğini çıkartıyor. Kuruluşların bu zafiyetlerden mağdur olmamalarını ve sızma testi ile ilgilenen kişilerin ise hangi zafiyetlerin üzerinde daha çok duracaklarını gösteriyor.

Belli aralıklarla güncellediği Top 10 listesini yayınlayan OWASP, web uygulama güvenliğinde yaşanabilecek mağduriyetlerin önüne geçmeyi amaçlamaktadır. Listeyi güncel olarak yayınlayan kuruluş, bize saldırı tekniklerinin zaman içerisindeki değişimlerini de göstermektedir.

Aşağıdaki tabloda 2017 ve 2021 yılları arasındaki Top 10 değişimini görebiliriz:

Owasp 2017 yılında yayınlanan Top 10 listesi üzerinden, 2021 yılında da yaşanan değişimlere göre yeniden listesini güncelledi. Tablo incelendiğinde listenin kısa bir sürede ne kadar çok değiştiğini görebilirsiniz. Örneğin listenin aşağılarında yer alan Kullanıcı Yetkilendirme saldırılarının, kısa bir sürede liste başı olduğunu görüyoruz. Sistem yöneticileri tarafından dikkatsiz şekilde verilen yetkilerin, sistem erişimlerinde ciddi açıklık yarattığının da bir ispatı bu durum.

Bununla birlikte Kimlik Doğrulama yöntemlerindeki (Captcha, OTP vs.) gelişim, zaman içerisinde bu yöntemlerle sistemlerin ele geçirilmesini zorlaştırmıştır. Buradan yapacakları saldırıları kısıtlanan siyah şapkalı hackerler, farklı yöntemlere yönelmiş durumdalar.

Owasp’ın güncel listesini birlikte inceleyelim.

Broken Access Control

Genel anlamda yetkilendirme eksikliklerinden kaynaklanan bu açıklıklar hangi kullanıcıların neleri yapabileceğinin düzgün uygulanmaması sonucu oluşur. Saldırganlar bu zafiyetleri kullanarak izni olmayan dosyalara erişebilir, yetkisi olmayan fonksiyonları kullanabilir, diğer kullanıcıların verilerine erişebilir ya da yetkileri değiştirebilir. Gereksiz veya fazladan tanımlanan, ya da unutulan her yetki siyah şapkalı hackerlar için bir fırsat oluşturmaktadır.

Son dönemde bu konuyla ilgili 34 farklı CWE (Common Weakness Enumerations), diğer zafiyetlerden daha çok karşılaşılmıştır.

Örnek saldırı senaryosu:

http://ornekwebsite.com/kullanici.php?**user=ahmet**

Web sitesine giriş yapıldığında yukarıdakine benzer bir sayfaya gidip kullanıcı bilgilerinin görüntülendiği bir sayfa olsun. Normal bir kullanıcı olması gerektiği gibi kendi bilgilerini görecektir. Fakat saldırgan “user” parametresini değiştirdiğini varsayalım.

http://ornekwebsite.com/kullanici.php?**user=mehmet**

Saldırgan bu noktada daha yetkili veya erişim kısıtlamaları daha az olan bir kullanıcı ile sistemde çalışmaya devam edebilir. Sistem üzerinde erişim kısıtlamalarına takılmayacağı için, zararlı uygulamaları çalıştırabilir ve kendisine erişim altyapısı oluşturabilir.

 

Önlemler:

  • Genel verilerin harici diğer verilerin default olarak engellenmesi
  • İzin kontrol mekanizmasının düzgün olarak yapılıp diğer yerlerde de kullanılması
  • Yetkisiz hesap ve kullanıcıların sürekli kontrol edilmesi, gereksiz hesapların kapatılması
  • Server directory listing’in disable edilmesi
  • Yanlış erişimlerin loglanması ve adminlere bildirilmesi

Cryptographic Failures

Bu zafiyet türü verilerin şifrelenmemesi veya şifrelenen verilerin eski, varsayılan, açığa çıkmış şifreleme algoritmaları kullanılmasından ortaya çıkıyor. Geçerliliğini yitirmiş algoritmalar veya şifrelenmeden iletilen datalar zafiyet oluşmasına sebep olmaktadır.

Kredi kartı bilgileri, parolalar, kişisel kayıtlar, firma belgeleri ve daha birçok önemli bilgilerin şifrelenmesi gerekmektedir.

Saldırgan, sql injection zafiyetini kullanarak veritabanındaki verilere erişebilse bile şifrelenmiş verileri anlamlandıramaz ise bir işine yaramayacaktır. Kullanılmakta olan şifreleme algoritmalarının güçlü olması burada işimize yarayacaktır.

Ayrıca sunucu tarafında bilgiler kayıt altına alınırken şifrelense bile, bilgiler kullanıcıdan sunucuya aktarılırken şifrelenmeden gidiyor ise buda bir zafiyet oluşturmaktadır. Saldırgan kullanıcı ile sunucu arasındaki trafiği izleyip önemli bilgilere erişebilir. Bu yüzden sunucu tarafında şifrelemenin yanı sıra transfer esnasında da şifreli data akışı (https, ssl vpn vb.) kullanılmalıdır.

Bilgiler clear text transfer ediliyorsa, varsayılan şifreleme anahtarı kullanılıyorsa, eski/açığa çıkmış şifreleme algoritmaları kullanılıyorsa, veriler yedeklenirken cleartext olarak yedekleniyorsa bu zafiyetten etkilenilir. Önlem olarak:

  1. Http, ftp, smtp gibi güvensiz cleartext olarak çalışan protokoller yerine, şifreli bir şekilde transfer yapan https, ftps, smtps gibi protokoller kullanılmalıdır.
  2. Varsayılan olarak gelen şifreleme anahtarları değiştirilmelidir. Sistemler kesinlikle mevcut şifleriyle bırakılmamalıdır.
  3. Eski şifreleme algoritmalarının yerine güçlü şifreleme algoritmaları kullanılmalıdır.
  4. Güçlü şifre yapıları kullanılmalıdır.
  5. Verileri kaydederken şifreli bir şekilde kaydedilmelidir.

Injection

Injection zafiyetleri genellikle kullanıcıdan alınan, kontrol edilmeyen ya da önlem alınmayan verilerin komut olarak çalıştırılması ya da sorguya dahil edilmesi yüzünden oluşur.

Saldırgan beklenilenden farklı bir veri göndererek sistemde komut çalıştırabilir, erişmemesi gereken verilere erişebilir. Saldırgan sistemde yetkisi olmayan komut veya komutları çalıştırarak sistem üzerinde yetkisiz erişim ve haklara sahip olabilir. Saldırgan bundan sonra hak yükseltme zafiyetlerini kullanarak sistemdeki etkinliğini daha da arttırabilir, bütün organizasyonun içine sızabilir. Bu sebeple Injection zafiyeti 2021 yılı itibariyle üst sıradaki yerini kaybetmiş olsa da, hala risk sıralamasında en önemli zafiyetlerden birisidir.

SQL Injection, Command Injection ve XSS (Cross-Site-Scripting) en yaygın injection türleridir ve üçü de kullanıcıdan gelen verinin kontrol edilmemesi, filtrelenmemesi ya da “sterilize” edilmemesinden kaynaklanıyor. Bu sebeple kod geliştiricilerin kullanıcıdan gelebilecek bu tarz zararlı isteklere karşı önlem alması, filtrelemeler uygulaması çok önemli. Owasp bu zafiyetlerin tespit edilmesinin en iyi yönteminin kaynak kod analizi olduğunu belirtiyor.

SQL Injection

Sql injection, kullanıcıdan gelen verinin direk olarak sql sorgusuna dahil edilmesinden kaynaklanıyor. Örneğin bir websitesi düşünün:

http://ornekwebsite.com/news.php?read=113

Bu websayfası read parametresindeki değeri sql sorgusu ile veritabanındaki kayıtlı olan haberler arasından bulup kullanıcıya gösteriyor. Hiçbir önlem alınmadığını varsayalım. Yukarıdaki sayfayı ziyaret ettiğimizde şu şekilde bir sql sorgusu çalışıyor.

SELECT * FROM news WHERE id = 113

Şu ana kadar her şey normal. Fakat kötü amaçlı birisi read parametresine beklenilmeyen bir veri girerse ne olacak? Saldırganın şu şekilde bir parametre girdiğini düşünelim.

http://ornekwebsite.com/news.php?read=**113; DROP ALL TABLES; –**

Bu sayfa çalıştığı zaman arka tarafta

SELECT * FROM news WHERE id = 113; DROP ALL TABLES; —

sql sorgusu çalışacak ve veritabanındaki tüm tablolar silinecek. Tabii ki sql injection ile sadece tablo silme işlemi yapmıyorsunuz, aynı zamanda tüm tablolardaki verileri de görebiliyorsunuz. Ayrıca komutta çalıştırabiliyorsunuz. Bu da saldırganın sistemde istediği veriye erişmesini, hatta yetkili bir kullanıcı gibi sisteme bağlanmasına imkan veriyor.

SQL injection ile saldırganın yönetici parolalarını çaldığını düşünün. Bu durumda zaten sistem tamamıyla ele geçirilmiş demektir.

Command Injection

Bir web sayfası kurgulayalım, aldığı parametre isminde sistemde dosya oluşturuyor.

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

Bu sayfada command parametresine verdiğimiz değer isminde sistemde dosya oluşuyor diyelim. Bu sayfanın kaynak kodları şu şekilde olsun.

<?php…$file=$_GET[‘command’];system(“touch $file”);…?>

Normal bir kullanıcı dosya.txt adında bir dosya oluşturmak istediğinde sistemde “touch dosya.txt” komutu çalışıyor. Şu ana kadar her şey normal.

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

http://ornekwebsite.com/admin/command.php?command=**dosya.txt; reboot**

Bu sefer sistemde “touch dosya.txt; reboot” komutu çalışıyor. Dosya oluşuyor fakat ardından sistem yeniden başlatılıyor. Tabi bu örnekte sadece sistemi yeniden başlatıyor. Bu zafiyet ile sistemde her türlü komutu çalıştırabiliyorsunuz. Bu kadar yetki ve komut çalıştırma imkanı bulan saldırgan, sistemi de ele geçirecektir.

Cross-Site-Scripting (XSS)

Son olarak, Cross-Site-Scripting (XSS) de bu kategorinin bir parçası olarak görülmektedir. Artan XSS atakları sonrası Owasp, bu saldırı yöntemini de listesine eklemiştir. XSS, script kodları kullanarak web sayfalarına saldırma yöntemidir. Özellikle tarayıcılar üzerinde saklı tutulan cookie ler bu saldırı yönetiminde araç olarak kullanılmaktadır.

XSS ataklarından korunmak için yapılacak en basit önlem açık olan kısımda filtreleme uygulamaktır.

Insecure Design 

Owasp’ın güncel listesine girmeyi başaran, yeni bir zafiyettir. Özellikle tasarım ve mimari aşamasında yapılan açıklıklardan ve eksikliklerden faydalanan bir zafiyet türüdür. Mimari yapıdaki eksikliler, sisteme kolay ve yetkisiz erişimi sağlayabilmekte, yetkisiz data erişimine sebep olabilmektedir.

Mutlaka güvenli tasarım mimarilerine ve referans modellerine uyulmalı, katmanlar arası geçişler de her katman erişiminde mutlaka zafiyetler kapatılmalıdır.

Security Misconfiguration

Servis ayarlarının yanlış ya da eksik yapılması bu zafiyet türünün ortaya çıkmasına neden olur. Owasp’ a göre en çok bulunan güvenlik zafiyeti security misconfiguration dır. Mevcut servis içerisinde yapılması gereken güvenlik uygulamaları ve versiyon yükseltmelerinin yapılmaması da bu açıklığa sebep olacaktır.

Gereksiz servis ve eklentilerin yüklenmesi, default kullanıcıların değiştirilmemesi/kaldırılmaması, sistemde bulunan servislerin güncel olmaması bu zafiyeti ortaya çıkartır.

Örneğin http erişim özelliği birçok sistem ile varsayılan olarak gelmektedir. Bu özellik kullanılmıyor fakat açıksa zafiyetin ortaya çıkmasına neden olur. Saldırgan buradaki cleartext akan trafikten ve erişimden faydalanabilir.

Önlemler:

  • Sistemin ve servislerin güncel tutulması, güvenlik uygulamalarının atlanılmaması
  • Gereksiz servis ve uygulamaların kaldırılması
  • Default parolaların değiştirilmesi
  • Hardening yapılması

 

Vulnurable and Outdated Components

Bu zafiyet türü kullanılan servislerin, uygulamaların, eklentilerin eski ve bilindik exploitleri olan sürümlerinin kullanılması sonucu oluşuyor. Saldırganlar bu servislerin sürümlerini bulduktan sonra bilindik exploitleri kullanıp uygulamayı/sunucuyu ele geçirebilirler. Saldırgan sistemde tespit her versiyon bilgisini, exploit veri tabanında hızlıca kontrol edip, mevcut açıklıklardan faydalanıyor. Buda büyük bir risk oluşturuyor.

Kullanılan verisyonların mutlaka exploit kontrolleri yapılmalı, güncel versiyon yükseltmeleri yapılması ve güvenlik yamaları aksatılmamalı.

Önlemler:

  • İşletim sistemini, servisleri, uygulamaları güncel tutmak
  • Kullanılmayan servisleri kaldırmak
  • Düzenli olarak yeni çıkan zafiyetleri kontrol edip uygun güncellemenin yapılması

Identification and Authentication Failure

Broken Authentication zafiyeti genellikle kimlik doğrulama ya da oturum yönetimi ile ilgili fonksiyonların yanlış uygulanması sonucunda ortaya çıkar. Saldırganlar parolaları, session token ları ile ele geçirebilir.

Saldırganlar genellikle brute force(kaba kuvvet saldırıları) yaparak kullanıcıların kimliklerini açığa çıkartabilirler.

Saldırganın sistem üzerindeki bu deneme ve saldırıları engellemek, ilk aşamada işini zorlaştırmak için mutlaka captha, otp gibi güvenlik uygulamaları tercih edilmeli. Şifre oluşturma yapıları zorlaştırılmalı, saldırgan için fırsat oluşturulmamalıdır.

Aynı şekilde default parolaların kullanımı saldırganların uygulamaya sızmalarına neden olur. Örneğin: admin, admin123, password, 123456, tomcat…

Önlem olarak:

  1. Kolay tahmin edilemeyen, güçlü parolaların kullanılması
  2. Default parolaların kullanılmaması, web servisi kurarken servisin sağladığı ilk parolaların değiştirilmesi
  3. Yanlış giriş denemelerine sınır koyulması
  4. Yanlış giriş denemelerinin log altına alınması ve incelenmesi
  5. Mümkünse girişlerde robot kontrolü yapılması
  6. Olabildiğince random session token üretilmesi ve session token larının düzgün uygulanması

Software and Data Integrity Failures 

2021 listesine yeni giren diğer bir zafiyette ise Yazılım ve Veri Bütünlüğü zafiyeti. Veri bütünlüğü sağlanmadan, temel yazılım güvenlik ilkeleri ihlal edilerek geliştirilen yazılımlar sistem üzerinde ciddi zafiyetler oluşturmaktadır. Bu kategoride karşımıza çıkan 10 CWE (Common Weakness Enumerations), Common Vulnerability and Exposures/Common Vulnerability Scoring System (CVE/CVSS) sıralamalarında en ağırlıklı etkilenen unsurlardan birisi. 2017 de çok rastlamadığımız bu zafiyet artık en güncel ve problemli zafiyetlerden birisi olarak karışımızda.

Insufficient Logging and Monitoring

Yeterli log lama ve monitoring işleminin yapılmaması büyük bir risk oluşturuyor. Girişler, başarısız giriş denemeleri, transferler ve önemli olan faaliyetler loglanmalı ve sürekli kontrol edilip gerektiği yerde yöneticiler uyarılmalıdır.

Saldırganın brute force (kaba kuvvet) saldırı yaptığını düşünelim. Eğer giriş denemeleri loglanır ve izlenirse belli bir denemeden sonra sistem yöneticilerinin dikkatini çekecek ve saldırının önüne geçme imkânı sağlayacaktır.

Server-Side Request Forgery

Server tarafından üretilen, kontrol edilmemiş veya eksik konfigüre edilmiş sistemlerden kaynaklanan istekler sistem üzerinde zafiyetlere yol açabilmektedir. Sistem üzerinde herhangi bir işlevi olsun veya olmasın, güvenlik önlemi olmadan çalıştırılan process ler, saldırganlar için açık kapılar oluşturabilmektedir. Güvenlik prosedürlerinden geçmemiş veya aktif bir görevi olmayan tüm işlemleri kapatmak en sağlıklı çözüm olacaktır. Sistem yöneticileri görevi biten veya boşta ola işlemleri, gereksiz talep (Request) oluşturan tüm işlemleri durdurmalıdır. Saldırgan tarafından bulunan bu açıklıklar, Reverse-Shell vb. yöntemlerle saldırgana erişim hakkı verebilmektedir.

Güncel datalar henüz bu zafiyet için yeterli risk oranı öngörmese de, güvenlik üzerinde çalışan topluluklardan bu zafiyet için ciddi anlamda geri bildirimler gelmektedir. Güvenlik uzmanları ilerleyen süreçte bu açıklıkların, daha da önemli olacağını öngörmektedir.

 

İlk 10 zafiyete bakarak çoğunluğunun kullanıcıdan gelen verinin kontrol edilmemesinden dolayı olduğunu görüyoruz. Her zaman kullanıcıdan gelen veriye güvenmeyip, sistemi ve servisleri güncel tutup ve olayları kayıt altına alıp izlenirse saldırıların bir nebze önüne geçmiş olunur. Bununla birlikte sadece kullanıcı tarafına odaklanmadan, sunucu tarafındaki eksiklikler de sürekli kontrol edilmesi, saldırgan için fırsat oluşturacak durumlar ortadan kaldırılmalıdır. Güvenlik çalışmalarındaki gelişmeler bize göstermektedir ki, artık sadece kullanıcı tarafı değil, hizmeti sunan sistem tarafındaki eksiklikler ve hatta fazlalıklar (gereksiz çalışan prosesler vb) güvenlik açıklıklarına sebep olmaktadır.