10 Maddeyle Web Uygulamalarınızı Güvenli Hale Getirin : OWASP Top 10

Yiğit Tanyel
8 min readAug 2, 2023

OWASP(Open Web Application Security Project), web uygulamalarını daha güvenli bir hale getirmek ve hatalar için bir farkındalık oluşturmak amacı taşıyan bir topluluktur. OWASP, web uygulamalarındaki yaygın güvenlik zafiyetlerini belirlemek ve bunlara karşı savunma stratejileri geliştirmek için bir rehberdir.

Top 10 List ana sayfasında da yer alan yazıyla açıklamak gerekirse :

EN: Globally recognized by developers as the first step towards more secure coding.

TR: Geliştiriciler tarafından global çapta daha güvenli kodlama yapmak için ilk adım olarak kabul edilir.

OWASP TOP 10 LIST

Bu listeyle birlikte çalıştığınız kurumdaki yazılım geliştirme kültürünü daha güvenli kod üreten bir kültüre evriltmek adına da almanız gereken ilk önlemlerden biridir.

Şimdi daha fazla uzatmadan sırayla listedeki adımları inceleyelim:

A01:2021-Broken Access Control

İhlaller incelenirken kullanılan veri setlerinde 318 binden fazla kez görülen bu hata erişim ihlalleri arasında güncel olarak en yaygın görülen risktir.

Erişim kontrolü, kullanıcıların yetkisiz şekilde belirlenen izinlerin dışına çıkmasını engeller. Burada görülen başarısızlıklar sonuç olarak yetkisiz bilgi ifşasına, değişikliğine veya tüm verilerin yok edilmesine yol açar. URL değiştirme, veri manipülasyonuna maruz kalma ve eksik API erişim kontrolleri de yaygın hatalar arasındadır.

Nasıl önlenir?

  • Erişim kontrolü güvenilir sunucu tarafında uygulanmalıdır.
  • Erişim kontrolü mekanizmaları bir kez uygulanmalı ve uygulamanın her yerinde tekrar kullanılmalıdır, bunun içine Cross-Origin Resource Sharing (CORS) kullanımını minimize etmek de dahildir.
  • Erişim kontrolü başarısızlıkları kaydedilmeli, uygun durumlarda yöneticilere bildirim yapılmalıdır (örneğin, tekrarlayan başarısızlıklar durumunda).
  • Token süreleri mümkün olduğunda kısa ömürlü olmalıdır ve expire süresi dolanlar sunucuda geçersiz kılınmalıdır. Böylece saldırganın fırsat penceresi en aza indirilir.

Örnek Senaryo:

Diyelim ki bir e-ticaret uygulaması düşünelim ve kullanıcıların sipariş geçirirken kullandığı bir sayfa olsun. Bu sayfa, kullanıcının sipariş numarasını girmesini gerektiren bir form içeriyor.Normalde bu form, sadece kullanıcının kendi siparişlerine erişim sağlamak için kullanılması gereken bir özelliktir. Ancak, geliştiriciler tarafından yeterince güvenlik önlemi alınmadığında, saldırganlar bu formu manipüle edebilir.

Saldırgan, sipariş numarası girdisi yerine, bir başka kullanıcının sipariş numarasını girerek (örneğin “12345”) formu gönderebilir. Eğer uygulama bu sipariş numarasını doğrulama yapmadan kullanıyorsa, saldırgan hedef kullanıcının sipariş bilgilerini görüntüleyebilir veya değiştirebilir.

Örneğin, saldırgan aşağıdaki gibi bir URL’yi kullanarak kötü niyetli amaçlı tasarımı gerçekleştirebilir:

https://example.com/app/orderInfo?order=12345

A02:2021-Cryptographic Failures

Kriptografik hatalar, web uygulamalarının hassas verilerini güvenli bir şekilde şifrelememesi nedeniyle ortaya çıkar. Bu, saldırganların hassas verileri okuyabilir ve değiştirebilir. Kriptografik hatalar, web uygulamalarında çeşitli şekillerde ortaya çıkabilir. Örneğin, bir web uygulamasının eski ve savunmasız bir şifreleme algoritması kullanması, bir web uygulamasının şifreleme anahtarlarını güvenli bir şekilde depolamaması veya bir web uygulamasının şifreleme kodunda hata yapması gibi.

Nasıl önlenir?

  • Uygulama tarafından işlenen, depolanan veya iletilen verileri gizlilik yasalarına, düzenleme gerekliliklerine veya iş gereksinimlerine göre sınıflandırın. Hangi verilerin hassas olduğunu belirlemek gerekir.
  • Hassas verileri gereksiz ise saklamayın ve mümkün olduğu en kısa süre içinde discard edin.
  • Hassas verileri cache’de tutmayın.
  • MD5, SHA1, PKCS sayı 1 v1.5 gibi kullanımdan kaldırılmış şifreleme işlevlerinden ve dolgu şemalarından kaçının.

Örnek Senaryo :

Uygulama, otomatik veritabanı şifrelemesi kullanarak kredi kartı numaralarını bir veritabanında şifreler. Ancak bu veriler otomatik olarak alındığında çözümlenir, bu da bir SQL enjeksiyon açığına yol açar ve kredi kartı numaralarını düz metinde almak mümkün olur.

A03:2021-Injection

Enjeksiyon saldırıları, web uygulamalarının kullanıcı girişlerini doğru bir şekilde filtrelememesi nedeniyle ortaya çıkar. Bu, saldırganların uygulamaya zararlı kod göndermesine ve uygulamayı ele geçirmesine izin verebilir.

Uygulamaların enjeksiyona karşı savunmasız olup olmadığını tespit etmenin en iyi yolu kaynak kod incelemesidir. Tüm parametrelerin, başlıkların, URL’lerin, çerezlerin, JSON, SOAP ve XML veri girdilerinin otomatik olarak test edilmesi kesinlikle önerilir.

Nasıl önlenir?

  • Güvenli API Kullanımı: İdeal çözüm, yorumlayıcıyı tamamen kullanmayan güvenli bir arayüz kullanmaktır. Ayrıca, parametreli bir yapı sağlar veya Nesne-Tabanlı İlişkilendirme Araçlarına (ORM’lar) geçiş yapabilirsiniz. Böylece, kullanıcı girdileri doğrudan yorumlayıcıya gitmez.
  • Sunucu Tarafı Giriş Doğrulaması: Kullanıcı girdilerini alırken, bu girdileri güvenli bir şekilde doğrulayın. Ancak unutmayın ki bazı durumlar özel karakterler gerektirebilir, örneğin metin alanları veya mobil uygulamalar için.
  • Dinamik Sorgular İçin Kaçırma Kullanımı: Eğer dinamik sorgular kullanmanız gerekiyorsa, kullanıcı girdilerinin içerdiği özel karakterleri uygun bir şekilde kaçırarak zararlı etkilerini engelleyebilirsiniz. Farklı yorumlayıcılar için farklı kaçırma yöntemlerini kullanmanız gerekebilir.
  • Sorgularda Kontroller Kullanma: SQL sorgularınızda LIMIT gibi SQL kontrollerini kullanarak, bir enjeksiyon saldırısı durumunda büyük miktarda kaydın ifşa edilmesini önleyebilirsiniz. Bu şekilde, saldırganın elde edebileceği veri miktarını sınırlamış olursunuz.

Örnek Senaryo:

Hesap bilgilerini ID sağlayarak görüntüleyebildiği bir web sitesi hayal edin.Site, veritabanından hesap verilerini almak için özel bir tür talimat (SQL sorgusu) oluşturuyor. Ancak site, kullanıcıların sağladığı bilgileri yeterince kontrol etmiyor ve bu, kötü niyetli kişilerin siteyi kandırabileceği bir yol açıyor.

Bu durumda, kötü niyetli kişi ID alanına kötücül kod ekleyebilir. Bu kod, sanki gizli bir istek gibi. Veritabanı bu numarayı anlamaz ve istenmeyen bir şey yapar. Örneğin, kötü niyetli kişi ' UNION SLEEP(10);-- gibi bir şey gönderirse, veritabanı 10 saniye durur. Site, ID için planladığı şey bu değildi, ancak kötü niyetli kişinin numarası bunu gerçekleştiriyor.

A04:2021-Insecure Design

Güvensiz tasarım, bir web uygulamasının güvenlik ilkeleri göz önünde bulundurulmadan tasarlanmasıdır. Bu, saldırganların uygulamayı daha kolay ele geçirmesine ve verileri çalmasına izin verebilir.

Nasıl önlenir?

  • Tenant bazlı kullanıcıları için uygulamanın tüm seviyelerinde güçlü bir şekilde ayırın.
  • Kullanıcı veya hizmet başına kaynak tüketimini sınırlayın.
  • Güvenli bir yazılım gekiştirme yaşam döngüsü planlayın.(Bunun için SAMM kullanılabilir.)

Örnek Senaryo:

Bir perakende zincirinin e-ticaret sitesi, yüksek kaliteli video kartlarını yeniden satmak için botlar tarafından çalıştırılan saldırılara karşı koruma sağlamıyor. Bu, video kartı üreticileri ve perakende zincir sahipleri için kötü bir itibar yaratır ve bu kartlara hiçbir fiyata ulaşamayan meraklılar arasında olumsuz bir izlenim bırakır. Dikkatli bir anti-bot tasarımı ve birkaç saniye içinde yapılan satın almalar gibi alan mantığı kuralları, sahte alımları tespit edebilir ve böyle işlemleri reddedebilir.

A05:2021-Security Misconfiguration

Güvenlik yapılandırması hataları, web uygulamalarının güvenlik açığı oluşturacak şekilde yanlış yapılandırmasıdır. Bu, saldırganların uygulamayı daha kolay ele geçirmesine ve verileri çalmasına izin verebilir.

Şöyle düşünelim: bir ev var ve kapılar, pencereler ve kilitler var, ancak bazıları tam olarak çalışmıyor veya doğru şekilde ayarlanmamış. İşte bu durum, güvenlik açıkları oluşturur.

Nasıl önlenir?

  • Güvenlik açıkları bulunan bileşenleri kullanmayın.
  • Kullanıcıları güvenlik farkındalığı eğitimleri alın.
  • Güvenlik ilkeleri göz önünde bulundurularak web uygulamaları yapılandırın.

Örnek Senaryo:

Düşünün ki bir uygulama, şifreleri unutan insanların hesaplarına geri dönebilmeleri için “sorular ve cevaplar” yöntemini kullanıyor. Ama maalesef bu yöntem güvenli değil. Çünkü birçok insan aynı cevaplara sahip olabilir. İşte bu nedenle bu yöntem yasaklanmış. Ancak uygulama bu hatalı yöntemi kullanmaya devam ediyor. Bu da saldırganların kolayca giriş yapabileceği bir açık oluşturuyor.

A06:2021-Vulnerable and Outdated Components

Eski ve savunmasız bileşenler, web uygulamalarının güvenliğini tehlikeye atan bir faktördür. Bu bileşenler, saldırganların uygulamayı ele geçirmesine ve verileri çalmasına izin veren güvenlik açıkları içerebilir.

Eski ve savunmasız bileşenlerin bazı yaygın örnekleri şunlardır:

  • Eski web tarayıcıları: Eski web tarayıcıları, güvenlik açıkları içerebilir. Saldırganlar, bu güvenlik açıklarını kullanarak kullanıcıların oturumlarını ele geçirebilir ve verileri çalabilir.
  • Eski web sunucuları: Eski web sunucuları, güvenlik açıkları içerebilir. Saldırganlar, bu güvenlik açıklarını kullanarak web uygulamasını ele geçirebilir ve verileri çalabilir.
  • Eski web uygulamaları: Eski web uygulamaları, güvenlik açıkları içerebilir. Saldırganlar, bu güvenlik açıklarını kullanarak web uygulamasını ele geçirebilir ve verileri çalabilir.

Nasıl Önlenir?

  • Kullanılmayan bağımlılıkları, gereksiz özellikleri, bileşenleri, dosyaları ve belgeleri kaldırın.
  • Web uygulamalarını düzenli olarak güncelleyin.
  • · Güvenlik açıkları bulunan bileşenleri kullanmayın.
  • · Kullanıcıları güvenlik farkındalığı eğitimleri alın.

Örnek Senaryo:

Bir gün, Alice adlı bir kullanıcı, bir web sitesine giriş yapmaya çalıştı. Kullanıcı adını ve şifresini girdi, ancak web sitesi, kullanıcı adı veya şifrenin yanlış olduğunu bildirdi. Alice, kullanıcı adını ve şifresini tekrar girdi, ancak web sitesi yine kullanıcı adı veya şifrenin yanlış olduğunu bildirdi. Alice, web sitesi ile iletişime geçti ve yardım istedi. Web sitesi, kullanıcının hesabını kilitleyip kilidini açtı. Alice, artık web sitesine giriş yapabildi.

Alice, bu deneyimin ardından kimlik doğrulama başarısızlıkları hakkında daha fazla bilgi edinmeye karar verdi. Kimlik doğrulama başarısızlıkları, kullanıcı adının veya şifrenin yanlış girilmesinden, kullanıcı adının veya şifrenin değiştirilmesinden veya kullanıcı hesabının kilitlenmesinden kaynaklanabilir. Alice, kimlik doğrulama başarısızlıklarını önlemek için kullanıcı adının ve şifrenin güçlü olmasını ve bunları asla başkalarıyla paylaşmamasını öğrendi.

Alice, bu deneyimden sonra kimlik doğrulama başarısızlıkları hakkında daha bilinçli bir kullanıcı oldu ve diğer kullanıcıları da bu konuda uyardı.

A07:2021-Identification and Authentication Failures

Kullanıcının kimliğini doğrulama, kimlik doğrulama ve oturum yönetimi gibi işlemler kimlik ve kimlik doğrulama hataları ile ilgili saldırılara karşı korunmak için kritiktir.

Nasıl Önlenir?

  • Varsayılan, zayıf veya yaygın olarak bilinen parolalar, örneğin “Password1” veya “admin/admin” gibi parolalara izin vermeyin. Zayıf parola kontrolleri uygulanmalıdır, yeni veya değiştirilen parolaların en kötü 10,000 parola listesiyle karşılaştırılması gibi işlemleri uygulayabilirsiniz.
  • Parolaların düz metin, şifrelenmiş veya zayıf karmalanmış depolarda saklandığı durumlardan kaçının (A02’deki maddede belirtilen güvenlik açığı).
  • Eksik veya etkisiz çok faktörlü kimlik doğrulamaya izin vermeyin.
  • Varsayılan kimlik bilgileri özellikle yönetici kullanıcıları için asla gönderilmemeli veya kullanılmamalıdır.
  • Parola uzunluğu, karmaşıklığı ve değişim politikaları, National Institute of Standards and Technology (NIST) 800–63b’nin “5.1.1 Memorized Secrets” bölümünde belirtilen yönergelerle uyumlu olmalıdır.

Örnek Senaryo:

Bir kullanıcıyı düşünün. Kamuya açık bir bilgisayar kullanarak bir uygulamaya erişiyor. Oturumu kapat seçeneğini seçmek yerine kullanıcı, tarayıcı sekmesini kapatıyor ve bilgisayardan uzaklaşıyor. Bir saat sonra bir saldırgan aynı tarayıcıyı kullanıyor ve kullanıcı hâlâ oturum açık olarak bulunuyor. Bu durum, uygulama oturum zaman aşımı ayarlarının doğru yapılmadığını ve güvenli olmayan bir oturum durumunu ortaya çıkarıyor.

A08:2021-Software and Data Integrity Failures

Yazılım ve veri bütünlüğü hataları, bütünlük ihlallerine karşı koruma sağlamayan kod ve altyapıyla ilgilidir. . Bu tür bir hata örneği, bir uygulamanın güvenilmeyen kaynaklardan, depolardan ve içerik dağıtım ağlarından (CDN) eklentiler, kütüphaneler veya modüller kullanmasında ortaya çıkar.

Nasıl Önlenir?

  • Güvenilir depolardan kütüphane ve bağımlılıkları, örneğin npm veya Maven, kullanmak önemlidir. Daha yüksek risk profiline sahipseniz, denetlenmiş iç kaynaklı bir depo oluşturmayı düşünebilirsiniz.
  • Kod ve yapılandırma değişiklikleri için bir inceleme süreci sağlayın, böylece kötü amaçlı kod veya yapılandırmanın yazılım sürecinize dahil edilme ihtimalini en aza indirgeyebilirsiniz.
  • Yazılım veya verinin beklenen kaynaktan geldiğini ve değiştirilmediğini doğrulamak için dijital imzalar veya benzer mekanizmalar kullanın.

Örnek Senaryo:

Ulus devletlerinin, güncelleme mekanizmalarını hedef aldığı bilinmektedir ve son dikkate değer saldırılardan biri SolarWinds Orion saldırısıdır. Bu yazılımı geliştiren şirket, güvenli bir yapı ve güncelleme bütünlüğü süreçlerine sahipti. Ancak, bu süreçler alt üst edildi ve birkaç ay boyunca firma, hedefe yönelik kötü amaçlı güncellemeleri 18,000'den fazla kuruluşa dağıttı. Bu kuruluşların yaklaşık 100'ü etkilendi. Bu tür tarihte yaşanmış en geniş kapsamlı ve önemli güvenlik ihlallerinden biridir.

A09:2021-Security Logging and Monitoring Failures

Bu kategori, etkin ihlalleri tespit etmeye, artırmaya ve yanıtlamaya yardımcı olmak amacıyla tasarlanmıştır. Kayıt ve izleme olmadan ihlaller tespit edilemez.

Yetersiz kayıt, tespit, izleme ve etkin yanıt her zaman şu durumda meydana gelir:

· Oturum açma, başarısız oturum açma ve yüksek değerli işlemler gibi denetlenebilir, olaylar kaydedilmez.

· Uygulama, etkin saldırıları gerçek zamanlı veya neredeyse gerçek zamanlı olarak tespit edemez, artıramaz veya uyarı veremez.

· Uyarılar ve hatalar yetersiz veya açık olmayan kayıt mesajları üretir.

Nasıl Önlenir?

· Web uygulamaları için güvenlik günlükleri ve izleme sistemleri kurun.

· Güvenlik günlüklerini doğru şekilde depolayın.

· Güvenlik günlüklerini doğru şekilde analiz edin.

· Güvenlik günlüklerini doğru şekilde izleyin.

· Kullanıcıları güvenlik farkındalığı eğitimleri alın.

Örnek Senaryo:

Çocuk Sağlık Planı Sağlayıcısının Veri İhlali — Bir çocuk sağlık planı sağlayıcısının web sitesi işletmecisi, yetersiz izleme ve kayıt tutma nedeniyle bir ihlali tespit edemedi. Bir dış taraf, saldırganın 3.5 milyondan fazla çocuğun hassas sağlık kayıtlarına eriştiğini ve bunları değiştirdiğini sağlık planı sağlayıcısına bildirdi. Olay sonrası bir inceleme, web site geliştiricilerinin ciddi güvenlik açıklarını ele almadığını ortaya koydu. Sistemde kayıt veya izleme yapılmadığı için, veri ihlali 2013'ten bu yana, yani yedi yıldan uzun bir süredir devam ediyordu.

A10:2021-Server-Side Request Forgery

SSRF hataları, bir web uygulamasının kullanıcı tarafından sağlanan URL’yi doğrulamadan uzak bir kaynağı almak istediğinde meydana gelir. Bu, saldırganın uygulamayı, bir güvenlik duvarı, VPN veya diğer ağ erişim denetim listesi (ACL) ile korunsa bile beklenmeyen bir hedefe yönlendirilmiş bir istek göndermeye zorlamasına olanak tanır.

Nasıl Önlenir?

· Web uygulamalarında parametreleri doğru şekilde doğrulayın.

· Web uygulamalarında kullanıcılara yalnızca izinleri doğrultusunda erişim verin.

· Web uygulamalarında verileri şifreleyin.

Örnek Senaryo:

Saldırganlar, SSRF kullanarak web uygulama güvenlik duvarları, güvenlik duvarları veya ağ erişim denetim listeleri (ACL) tarafından korunan sistemlere saldırabilir. Örneğin, ağ yapısı bölünmemişse, saldırganlar dahili ağları haritalayabilir ve dahili sunucularda portların açık veya kapalı olup olmadığını bağlantı sonuçları veya bağlantıyı reddetme süresi üzerinden belirleyebilirler.

Kaynakça:

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

Bu konuda bahsedeceklerim bu kadar. Bana ulaşmak ve open-source projelerimi incelemek için :

LinkedIn : https://www.linkedin.com/in/yigittanyel/

GitHub: https://github.com/yigittanyel

No responses yet

Write a response