OWASP Nedir ?



 OWASP açılımı Open Web Application Security Project olarak tanımlanmaktadır. Web uygulamalarındaki güvenlik açıklarının kapatılması ve bu uygulamaların güvenli bir şekilde korunmasını sağlamak için çalışmalar yapan özgür bir topluluktur. OWASP’ye ait dokümanlar ve araçlar tüm dünyadaki herkesin kullanımına açık ve ücretsizdir. OWASP’ ın hiçbir özel şirket ve kuruluşla herhangi bir bağı yoktur. Çalışmalarını tamamen insanların ihtiyaçlarını gidermek üzere yürütmektedir. OWASP’ ın web sitesinde, web uygulamalarındaki zafiyetleri, bu zafiyetlerin nasıl oluştuğunu, hangi açıklıklardan kaynaklandığını, bu zafiyetlerin nasıl exploit edilebileceğini ve bu zafiyetlerin nasıl önlenebileceği ile ilgili ayrıntılı dokümanlar da mevcuttur. OWASP, birçok firma ve web uygulama sızma testleri ile ilgili çalışmalar yapan kişilerden bilgiler toplayarak ve bu bilgileri analiz ederek o yıla ait en riskli 10 güvenlik zafiyetinin istatistiğini çıkartmakta ve ücretsiz olarak sunmaktadır. OWASP topluluğunun her üç ya da dört senede bir yenilediği OWASP Top 10 ismiyle o yıla ait en riskli güvenlik zafiyetlerini listeledikleri Top 10 listesi hazırlamaktadır. OWASP İlk 10, en yaygın 10 uygulama güvenlik açığının listesidir. Ayrıca risklerini, etkilerini ve karşı önlemlerini de gösterir. Her üç ila dört yılda bir güncellenen en son OWASP güvenlik açıkları listesi 2018'de yayınlandı.

OWASP TOP 10 - 2017

OWASP topluluğu bilinen tüm web açıklıklarını belirli kriterlere göre bir puanlama sistemi yaparak sıralar. Daha sonrasında da bu listeyi en popüler liste olarak yayınlar.

1) INJECTION

Injection zafiyetleri olarak bilinen zafiyetler genel olarak kullanıcıdan alınan ve kontrol edilmeyen verilerden kaynaklıdır. Önlem alınmayan verilerde komut olarak çalıştırılıp ya da sorguya dahil edilmesi yöntemiyle oluşur. Saldırganlar sistemlerin beklediğinden daha farklı veriler göndererek sistemlerde komutları çalıştırabilir ve erişme yetkisi olmayan verilere izinsiz erişebilirler. Saldırganlar bu işlemden sonra yetki yükseltme zafiyetlerini kullanarak sistemdeki yetkilerini daha fazla arttırabilirler. Bu şekilde tüm organizasyonların içine sızabilir. Injection zafiyetleri bu yüzden risk tablosu sıralamasında en üstte yer alıyor. Injection saldırılarının en yaygın olarak kullanılan iki çeşidi vardır. SQL Injection ve Command Injection olarak ikiye ayrılır. Bu iki saldırı türü de kullanıcıdan gelen verilerin kontrol edilememesi, filtrelenmemesi veya sterilize edilmemesinden dolayı oluşuyor. OWASP topluluğu bu tür zafiyetleri tespit ederken en iyi yöntem olarak kullandıkları kaynak kod analizi olduğunu belirtiyorlar.

A) SQL Injection

SQL Injection saldırıları, kullanıcılardan gelen verilerin direk SQL sorgularına dahil edilerek web sitesine sızma işlemidir. Örnek vermek gerekirse:

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

Bu web site adresindeki read parametresindeki değeri bir SQL sorgusu ile veri tabanındaki kayıtlı haberler listesinin arasından bularak kullanıcılara gösteriyor. Bu zafiyete önlem alınmazsa yukarıdaki web sitesini ziyaret ettiğimizde aşağıdaki gibi bir SQL sorgusu çalışır.

SELECT * FROM news WHERE id = 145

Buraya kadar her şey normal işleyişinde ilerlemektedir. Ama saldırganlar read parametresine beklenmedik bir veri girince zafiyet başlıyor. Örnek olarak aşağıdaki gibi bir parametre:

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

Bu URL çalıştığı zaman sistemin arka tarafında;

SELECT * FROM news WHERE id = 145; DROP ALL TABLES,

Şeklinde bir SQL sorgusu çalışır ve veri tabanındaki tüm tablolar silinir. Tabiki SQL Injection saldırısı ile sadece bu tür saldırma işlemleri yapılmaz, aynı zamanda tablolardaki tüm verileri de görebilir ve herhangi bir komut çalıştırılabilir. SQL Injection saldırısıyla kullanıcıların tablosunun tutulduğu bir veri tabanına saldıran kişi yönetici hesabını ele geçirebilir ve bu şekilde de saldırılan sistemi komple ele geçirmiş olur.

B) Command Injection

Bir web sitesi üzerinden örnek verilirse, aldığı parametrelerin isminde sistemde dosya oluşturur.

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

Bu sitede command ismindeki parametreye verilen değer isminde bir dosyayı sistemde oluşturuyor. Kaynak kodları aşağıdaki gibidir;

<?php

...

$file=$_GET['command'];

system ("touch $file");

...

?>

Normal kullanıcılar dosya.txt adında yeni bir dosya oluşturmak istedikleri zaman “touch dosya.txt” komutu çalışıyor. Buraya kadar her şey normal bir şekilde ilerliyor. Ama saldırganlar burada devreye giriyor ve aşağıdaki gibi bir değer veriyorlar;

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

Bu şekilde sistemde “touch dosya.txt; reboot” komutu çalışıyor. Dosya oluşturma işlemi başarılı şekilde gerçekleşiyor ama ardından sistem yeniden başlatılıyor. Bu zafiyet ile saldırganlar her türlü komutu çalıştırabilir. Bundan sonra hangi komutu çalıştıracağı saldırganın hayal gücüne kalıyor.

2) BROKEN AUTHENTICATION

Bu zafiyette genel olarak kimlik doğrulama gibi oturum yönetimi gibi bununla ilgili olan fonksiyonların yanlış kullanılıp uygulanması sonucu ortaya çıkıyor. Kötü niyetli olan saldırganlar parolaları, session tokenları ele geçiriyorlar. Bu saldırganlar genellikle Brute Force (kaba kuvvet saldırısı) yaparak sistemdeki kayıtlı kullanıcıların kullanıcı adı, parolalarını çalabilir. Bazı kullanıcılar kullanıcı adı ve parolalarını ilk oluşturdukları şekilde default parolaları kullanabiliyor. Saldırganlar bu şekilde olan kullanıcılara çok daha kolay sızabiliyor.

Önlem olarak bu saldırılardan korunmak için tahmin edilmesi kolay olmayan parolalar, güçlü parolalar oluşturmalı ve kullanılmalıdır. Default parolalarını kesinlikle kullanmamalı, web servisi kurarken de sistemin otomatik verdiği parolaları değiştirilmelidir. Brute Force (kaba kuvvet saldırıları) bu saldırılardan korunmak için yanlış parola giriş denemelerine sınır koyulmalıdır. Yanlış parola denemelerinin kayıt altında tutulması yani log kaydı alınması gereklidir. İmkân varsa girişlerde robot kontrolü yapılmalıdır.

3) SENSITIVE DATA EXPOSURE

Sensitive data exposure zafiyet türünde verilerin şifrelenmemesi veya şifrelenen verilerin eski, default ya da önceden bilinen şifreleme algoritmaları ile kullanılmasından dolayı ortaya çıkar. Kredi kartı bilgileri, parolalar gibi bankacılık işlemlerinin kesinlikle şifrelenmesi gerekiyor. Saldırganlar, SQL Injection zafiyetini kullanarak veri tabanına sızar ve bu verilere erişebilirse bile şifrelenmiş verileri anlamlandıramaz ise bu sızma girişimi hiçbir işe yaramaz. Bu yüzden de kullandığımız şifreleme algoritmalarının güçlü olması çok önemlidir. Saldırganlar bu güçlü şifreleme algoritmalarını çözmek için uzun zaman harcayabilir ve çoğu zaman da bu algoritmaları çözemezler. İstemci tarafındaki zafiyetler bu şekildeydi. İstemci kadar sunucu tarafındaki bilgiler kayıt altına alınırken şifreleme algoritmaları kullanılmamışsa yine saldırganlar çok kolay sızabilir.

Sunucu tarafındaki bilgiler kayıt altına alınırken şifrelense bile bu bilgileri istemciden sunucuya aktarırken bu kısımda şifrelenmeden aktarılıyorsa bu da bir afiyet oluşturuyor. Saldırganlar istemci ile sunucu arasındaki veri aktarım trafiğini izleyerek önemli bilgilere ulaşabilirler. Sunucu tarafında şifreleme yapılsa bile sunucudan istemciye bilgiler aktarılırken de mutlaka şifreleme algoritmaları kullanılmalıdır. Bu aktarılan bilgiler clear text bir şekilde transfer ediliyorsa, default şifreleme algoritması kullanılıyorsa, önceden bilinmiş, açığa çıkmış şifreleme algoritmaları kullanılıyorsa kullanıcılar bu zafiyetten etkilenirler. Ayrıca yine veriler yedeklenirken clear text olarak yedekleniyorsa bu zafiyet türünden etkilenir. Bu zafiyet türüne önlem olarak http, ftp, smtp gibi güvensiz protokoller yerine şifreli transfer yapan https, ftps, smtps protokolleri tercih edilmelidir. Default olarak gelen şifreleme algoritmaları mutlaka değiştirilmeli. Eskiden tercih edilen şifreleme algoritmaları yerine yeni, güncel ve güçlü şifreleme algoritmaları kullanılmalıdır. Verileri kaydederken ve transfer ederken mutlaka şifreleme algoritması kullanılmalıdır.

4) XML EXTERNAL ENTITIES

Bu zafiyet türü OWASP’ın daha önce yayınladığı zafiyet türleri listesinde örnek olarak 2013 yılında yayınlanan listede yoktu ama en son yayınladıkları 2017 listesinde Owasp Top 10 listesinde 4.sıradadır. Bu zafiyet türü eski ya da yanlış, hatalı, eksik configure edilmiş xml dosyalarından kaynaklanıyor. Saldırganlar bu zafiyet türünü kullanarak sunuculara zararlı xml dosyası göndererek sunuculardan dosyaları okuyabilir, değiştirebilir, kod çalıştırabilir. Bu zafiyet açıklığından faydalanarak DOS (hizmet engelleme atağı) yapabilirler. Örnek olarak saldırgan kullanıcıdan xml dosyası alıp içeriğini ekrana bastırsın.

<?php

$xml = ornekxml_load_string(file_get_contents(“php://input”));

Echo $xml;

?>

Kullanıcı bu sayfaya aşağıdaki gibi xml dosyası göndersin.

<?xml version=”1.0″?>

Some legit writing

Sayfaya normal olarak “Some legit writing” bastıracaktır. Ama saldırgan aşağıdaki gibi bir xml dosyası göndererek sunucuda dosyaları okuyabilir.

<?xml version=”1.0″?>

<!DOCTYPE tag [<!ENTITY ups SYSTEM “file:///etc/passwd”>]>

&ups;

Owasp topluluğunun bu zafiyetten zarar görmemek için bazı önerileri var. Eğer mümkünse daha az karmaşık olan Json formatı kullanılmalı. Xml ile ilgili olan kütüphaneleri her zaman güncel tutmalı. Xml External Entity özelliği kapatılmalıdır. Son olarak da sunucu tarafında “White listing” kontrolü her zaman yapılmalıdır.

5) BROKEN ACCESS CONTROLL

Yetkilendirme, belirli bir kaynağa erişim taleplerinin verilmesi veya reddedilmesi gereken süreçtir. Bu terimler ve tanımları sıklıkla karıştırıldığı için yetkilendirmenin kimlik doğrulamaya eşdeğer olmadığı unutulmamalıdır.  Kimliği doğrulanmış kullanıcıların sistemde yapabileceği olaylar ve yapamayacağı olaylar genellikle gerektiği gibi doğru ayarlanmaz. Saldırganlar, diğer kullanıcıların hesaplarına erişmek, hassas dosyaları görüntülemek, diğer kullanıcıların verilerini değiştirmek, erişim haklarını değiştirmek vb. gibi yetkisiz işlevlere veya verilere erişmek için bu kusurları kullanabilir. Bazen yetkilendirme olarak adlandırılan erişim kontrolü, bir web uygulamasının içeriğe ve işlevlere bazı kullanıcılara erişim izni verirken diğerlerine nasıl izin vermediğidir. Bu kontroller, kimlik doğrulamadan sonra gerçekleştirilir ve “yetkili” kullanıcıların ne yapmasına izin verildiğini yönetir. Erişim kontrolü basit bir sorun gibi görünse de sinsi bir şekilde uygulanması zordur. Bir web uygulamasının erişim kontrol modeli, sitenin sağladığı içerik ve işlevlerle yakından bağlantılıdır. Ek olarak, kullanıcılar farklı yeteneklere veya ayrıcalıklara sahip bir dizi gruba veya role girebilir.

Örnek olarak;

Uygulama doğrulanmamış veriler kullanıyor. Uygulama, hesap bilgilerine erişen bir

SQL çağrısında doğrulanmamış verileri kullanır:

pstmt. setString (1, request.getParameter ("acct"));

ResultSet sonuçları = pstmt.executeQuery ();

Bir saldırgan, istediği hesap numarasını göndermek için tarayıcıdaki parametreyi değiştirir. Doğru şekilde doğrulanmazsa, saldırgan herhangi bir kullanıcının hesabına erişebilir.

http://example.com/app/accountInfo?acct= notmyacct

Bu zafiyet türüne önlem olarak genel veriler hariç diğer verilerin kesinlikle default olarak engellenmesi gerekir. İzin kontrol mekanizmalarının düzgün bir şekilde yapılıp diğer bölümlerde de kullanılmalıdır. Server directory listing ’in disable edilmesi gereklidir. Yanlış erişimlerin log kaydı tutulması ve yöneticilere bu log kayıtları devamlı raporlanmalıdır.

6) SECURITY MISCONFIGURATION

Bu zafiyet genel olarak servis ayarlarının yanlış ya da eksik yapılandırmasından dolayı ortaya çıkar. Saldırganlar sistemler hakkında yetkisiz erişim, yetki yükseltme, bilgi sağlamak için genellikle sistemlerdeki düzeltilmemiş açıklıklardan yararlanıyorlar. Bu açıklıklardan sızarak sistemin içine, korumasız dosyalara ve dizinlere erişmeye çalışırlar. Owasp topluluğuna göre dünyada en çok bulunan zafiyet security misconfiguration’dır. Bir şirketin güvenli bir ortam olarak düşündükleri aslında şirketi risklere açık bırakan tehlikeli açıklıklara ve hatalara sahiptir.

 
 Coders Conquer Security: Share & Learn Series - Security Misconfigurations


Owasp Top 10 sıralamasında bu zafiyet 6.sırada yer alıyor. Bu tür açıklıklar genellikle saldırganlara bazı sistem verilerine veya işlevlerine yetkisiz erişim hakkı sağlar. Bu zafiyet türü nadir de olsa tam bir sistem ele geçirilmesiyle sonuçlanabilir. Otomatik tarayıcılar yanlış yapılandırmaları, varsayılan olarak oluşturulmuş hesapları veya yapılandırmaların kullanımını, gereksiz hizmetleri, gereksiz servisleri ve eskiden kullanılmış seçenekleri algılamak için kullanışlıdır.

Örnek olarak bir bulut hizmeti sağlayıcı firmasının, diğer CSP kullanıcıları tarafından internete açık varsayılan paylaşım izinleri vardır. Bu, bulut depolamada depolanan hassas verilere de erişilmesine izin hakkı verebilir. Başka bir örnek olarak da dizin listesi sunucuda devre dışı bırakılmadı. Bir saldırgan da bu dizinleri kolayca listeleyebileceğini keşfeder. Saldırgan, kodu görüntülemek için derlediği ve tersine mühendislik ile uyguladıkları derlenmiş Java sınıflarını bulur ve sonra indirir. Saldırgan daha sonra uygulamada ciddi bir erişim kontrolü hatası bulur. Bu zafiyeti önlemek için yapılması gereken bazı işlemler vardır. Gereksiz özellikler, kullanılmayan bileşenler ve özellikler kaldırılabilir. Yeni güncellemelerle gelen yama notlarını inceleyip yeni yapılandırmalar yapılabilir. Sistem her zaman güncel tutulmalıdır.

7) CROSS SİTE SCRİPTİNG

Cross Site Scripting (XSS), Owasp Top 10’daki en yaygın zafiyetler arasında ikinci sıradadır. Tüm uygulamaların yaklaşık %60’ında bulunur. Özellikle bulunduğu Php, Jsp, Asp.Net gibi sistemlerde XSS sorunlarını otomatik bulunabilir. XSS kullanıcıdan alınan verilerin tam kontrol edilmeden ya da belirli bir filtreden geçirmeden response olarak gönderilmesiyle oluşur. XSS zafiyetini kullanarak saldırganlar kullanıcın browserında da javascript çalıştırarak kullanıcının oturumunu çalabilir. Kontrol edilmeyen, filtrelenmeyen bir input bütün sistemi saldırganın ele geçirmesine neden olabilir. Bu zafiyetin 3 türü bulunur;

A) Reflected XSS

Uygulama veya API’lerin bir html çıktısı olarak doğrulanmamış ve yetkilendirilmemiş bir kullanıcı girişi içerir. Saldırgan, kullanıcının tarayıcısında rastgele html ve javascript çalıştırmasına izin verir. Kullanıcıyı kötü niyetli web sitelerine, reklamlara ve bu gibi saldırganın kontrol ettiği benzeri sayfalara yönlendirir. Örnek olarak aşağıda zararlı bir link vardır.

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

B) Stored XSS

Uygulama veya API, daha sonradan saldırgan ya da başka bir kullanıcı tarafından görüntülenebilen silinmemiş kullanıcı oturumlarını depolar. Bu depolanan XSS riski oldukça yüksektir. Çünkü sunucu tarafında kayıt altında olduğu için o sayfaya ne zaman girilse kullanıcı tarafında bir javascript kodu çalışır. Bu zafiyette o sayfayı görüntüleyen tüm kullanıcılar etkilenir.

C) DOM XSS

Bu zafiyet türünde diğerlerinden farklı olarak html üzerinde değil de DOM nesneleri üzerinde çalışıyor. Ama diğerleri gibi kullanıcının tarayıcısında javascript kodları çalıştırıyor.

Bu XSS zafiyetlerine karşı alınabilecek önler vardır. İstemci tarafında tarayıcı belgelerini değiştirirken içeriğe duyarlı programlama yapmak. Kullanıcıdan alınan verileri kontrol ederek, belirli bir filtreden geçirerek temizlenmesi. Kullanıcılara bu zafiyetler ile ilgili eğitimlerin verilmesi.

8) INSECURE DESERIALIZATION

Insecure Deserialization zafiyeti diğer zafiyetler kadar abartılı zararlara neden olamaz. Bu zafiyetin en ciddi açık olarak kullanılabileceği saldırı türü uzaktan kod çalıştırmadır. Bu zafiyet türünü önlemek için de kullanıcıdan gelen verileri bir filtreleme yaparak kontrol etmek gerekir. Örnek olarak aşağıda bir java deserialization vardır.

Set root = new HashSet ();

Set s1 = root;

Set s2 = new HashSet ();

for (int i = 0; i < 100; i++) {

Set t1 = new HashSet ();

Set t2 = new HashSet ();

t1.add("foo"); // make it not equal to t2

s1.add(t1);

s1.add(t2);

s2.add(t1);

s2.add(t2);

s1 = t1;

s2 = t2;

}

Buradaki “root” nesnesi deserialization sonucunda sürekli kendini tekrar eder ve DOS (denial of service) atağına dönüşür.

9) USING COMPONENTS WITH KNOWN VULNERABILITIES

Bu zafiyette kullanılan servisler, kütüphaneleri uygulamalar ve çeşitli eklentilerin eski veya exploitleri olduğu bilinen sürümlerin kullanılmasıyla oluşur. Saldırganlar bu sistemlerin sürümlerini bulduktan sonra var olan exploitleri kullanarak sistemleri ele geçirirler. Ama saldırganlar bilinen birçok zafiyet için önceden yapılmış exploit kolay bulunsa da diğer zafiyetlere özel exploit geliştirmek zorundalar. Bu exploitleri geliştirmek de çok yoğun zaman ve çaba gerektirir. Bu zafiyeti önlemek için de kullanılmayan, gereksiz özellikleri, bileşenleri ve dosyaları kaldırmak gerekir. İstemci ve sunucu tarafındaki bileşenlerin sürümlerinin devamlı güncel olup olmadığı kontrol edilmelidir. Düzenli olarak Zero Day denilen yeni çıkan zafiyetleri kontrol edip sistemi güncel tutmak gerekir.

10) INSUFFICIENT LOGGING AND MONITORING

Yeterli loglama yapılmadığı için eksik veya etkisiz yapılandırmalar ile birlikte, saldırganların sisteme daha fazla saldırmasına, sistemdeki kalma süresini arttırma, sistemdeki verileri kurcalayıp istediği gibi değiştirmesine veya yok etmesine imkân verir.

Saldırganlar hedeflerine tespit edilmeden sızabilmek için loglama eksikliğinden ve zamanında cevap verilmemesinden yararlanırlar. Bu tür zafiyeti önlemek için tüm oturum açma işlemlerini, sistemden alınan tüm hataları düzenli olarak log kaydı tutarak engellenebilir. Örnek olarak bir saldırgan bruteforce (kaba kuvvet) saldırısı yapıyor. Bu oturum giriş denemelerinin log kaydı alınıp izlenirse sistemin belli bir oturum açma deneme sayısından sonra log kaydı alıp sistem yöneticilerine alarm vererek önlenebilir.

Owasp Top 10 listesine bakıldığında genel olarak zafiyetlerin çoğunun kullanıcı kaynaklı yani insan etkeninden dolayı olduğu fark ediliyor. Siber güvenlikte insan etkeni her zaman en savunmasız taraftır. Kurumların bu gibi durumlarla karşılaşmaması için personellerine ve kullanıcılarına farkındalık eğitimleri vermesi gerekir. Bunun yanında sistemleri devamlı güncel tutup, log kayıtlarını düzenli alarak ve bu log kayıtlarını her zaman kontrol ederek bu saldırıların etkisi azaltılabilir.

Yorumlar