Herkese merhabalar, bugünkü yazımda web uygulamalarında karşımıza çıkan ve uygulama geliştirirken dikkat edilmesi gereken zafiyetlerden bahsedeceğim.

Web uygulamaları, günümüzde gelişmiş özellikler ve zengin içerikleriyle artık daha karmaşık bir yapıdadır. Her yeni versiyonda yeni özelliklerle karşımıza çıkan uygulamalar geliştirilirken web güvenliğini sağlamak zorlaşıyor. Dolayısıyla uygulamalardaki zafiyet ihtimalleri de karmaşık yapılarda artmış oluyor.

OWASP (Open Web Security Project), web uygulamalarının güvenliği için çalışma yapan bağımsız bir topluluktur. Hiçbir şirket ve kuruluş ile bağları olmayan ve kar amacı gütmeyen bir kuruluştur. Web uygulamalarındaki zafiyetlerin nasıl oluştuğunu ve zafiyetlerin nasıl ortadan kaldırılacağını anlattıkları yazıları websitelerinde mevcut. Ayrıca güvenlik firmalarından ve sızma testleri yapan kişilerden topladıkları bilgilerle o yıla ait en riskli 10 güvenlik zafiyetini puanlandırıyorlar. Bu raporlar hangi zafiyetlere dikkat edilmesi gerektiği konusunda bizim için önemlidir. En son 2017 yılında yayınladıkları Top 10 üzerinden ifade edilen zafiyetlerden sizlere bahsedeceğim. İlerleyen haftalarda her bir maddeyi ayrı ayrı incelemeyi düşünüyorum.

OWASP’ın yayınladığı son 2 raporunda saldırganların geliştirdiği yeni tekniklere göre kritik riskler değişiklik gösterebiliyor.

1-Injection

Injection zafiyetleri, kullanıcıdan beklenen verilerin kontrol edilmemesi sonucu oluşabilir. Kullanıcı input olarak komut ya da veri tabanı sorgusu girmesiyle oluşur. Kullanıcıdan gelen girdilerin yeterli filtreden geçmemesinden kaynaklı bu zafiyet sayesinde saldırgan, sistem içerisinde istediği komutları ve sorguları çalıştırıp veri tabanındaki bilgilere erişebilir, değişiklik yapabilir. Girilen komut veya sorguların çeşitlerine göre SQL, NoSQL, OS, LDAP injection olarak ayırabiliriz.

2- Broken Authentication

Web uygulamalarındaki kullanıcı yetkilendirmesiyle görevli fonksiyonların veya oturum yönetimi sağlayan sistemin yanlış kurgulanması sebebiyle ortaya çıkabilir. Giriş esnasında yapılan şifre kontrolü, oturum açıldığında kullanıcıya verilen yetkinin (token) güvenli bir yapıda kontrolü sağlanmadığında saldırgan kullanıcıların yetkilerine sahip olabilir ve sisteme rahatça girebilir. Örneğin yanlış parola giriş denemesine sınırlama koyulmadığında saldırganlar günlerce tüm kombinasyonları brute force (kaba kuvvet saldırısı) deneyip girme şansına sahipler.

3- Sensitive Data Exposure

Injection zafiyeti kullanarak saldırganların veri tabanına erişebildiğinden bahsetmiştik. Veri tabanlarında şifreler belli şifreleme algoritmaları kullanılarak saklandığı için saldırgan için bir anlam ifade etmiyor gibi düşünebilirsiniz. Fakat bazı açığa çıkmış şifreleme algoritmaları halen kullanılıyor olabilir veya şifrelenmeden veri tabanına koyulmuş da olabilir. Aynı zamanda şifrelenerek saklandığında bile sunucu kullanıcı arasındaki trafikte eğer şifrelenmiş değilse saldırgan buradan da önemli bilgilere erişebilir.

4- XML External Entities

Listeye yeni eklenen bu zafiyet, eski ve dikkatsizce düzenlenmiş XML dosyalardan kaynaklanıyor. XML External Entity özelliği dosya okuma, script çalıştırma imkanı sunan bir özelliktir. Saldırgan bu yapıda bir XML dosyası göndererek sunucudaki dosyaları okuyabilir, sayfa üzerinde değişiklikler yapabilir.

5- Broken Access Control

Yetkileri sınırlı kullanıcıların yetkilerinin olmadığı fonksiyonlara ve bilgilere ulaşabilmesi diye kısaca özetleyebiliriz. Saldırgan bu şekilde izni olmayan kaynaklara erişip değişiklik yapabilir ya da yetkilerini değiştirebilir.

6- Security Misconfiguration

Örnekle açıklayacak olursak yukarıda bahsettiğim XML External Entity özelliği kullanılmıyorsa ve bu özellik kapatılmadıysa servis ayarlarımızı eksik yapmışız demektir. Güvenlik ayarlarının default’ta kalması bu zafiyetin ortaya çıkmasına sebep olabilir. Ayrıca eklenti olarak yüklediğimiz yapılarda bu servislerin de güvenlik ayarlarının gözden geçirilmemesi durumunda başka zafiyetlere davetiye çıkarır. Dolayısıyla, servis güvenlik ayarlarının güncel tutulması ve gereksiz izinler verilmesinden kaçınılması gerekmektedir.

7- Cross Site Scripting (XSS)

Web uygulamalarında kullanıcı girdisine göre oluşturulan response web sayfasında kullanıcı girdisi kontrol edilmemişse oluşabilecek zafiyetlerdir. Örneğin saldırgan kendi yazmış olduğu scripti kurbanın tarayıcısında çalıştırabilir, oturum bilgilerini çalabilir veya zararlı sitelere yönlendirebilir. Reflected XSS dediğimiz çeşidinde ise websitesindeki zafiyet sonucu tüm kullanıcılar etkilenebilir.

8- Insecure Deserialization

Serialization, yazdığımız kodda oluşturduğumuz bir objenin saklanabilecek bir yapıya çevrilmesidir. Objeleri binary yapıda, XML veya JSON formatında saklayabiliriz. Deserialization da bu yapıların tekrardan objelere dönüştürülmesi işlemidir. Aynı şekilde serialize edilen kod blokları da deserialize edilip tekrardan çalışacak hale gelebilir. Mesela YML dosyaları içerisinde JSON kod blokları eklenilip deserialize edildiğinde çalıştırılabiliyor. Güvenilir kaynaklardan deserialization yapılmadığında istenilmeyen scriptle saldırgan tarafından uzaktan çalıştırılabilir. Sistemde kalıcı zararlara neden olabilir.

9- Using Components with Known Vulnerabilities

Web uygulamalarının yapısında birçok kütüphane, framework ve modüller farklı yetkilerle ve izinlerle aynı anda çalışmaktadır. Zafiyeti olduğu bilinen bileşenlerin kullanılması sistemin güvenilirliği için tehdit oluşturabilir. Servislerde ciddi zararlara sebep olabilecek ciddi bir açıktır.

10- Insufficient Logging & Monitoring

Web uygulamanızın yeterince güvenli olduğunu düşünseniz bile kullanıcıların giriş çıkışlarını yaptığı işlemleri detaylı bir şekilde loglamanız gerekmektedir. Yani faaliyetlerin hepsi kayıt altına alınmalıdır. Veri transferleri ve başarısız giriş denemeleri sistem yöneticilerine anlık raporlanmalıdır. Böylece istenmeyen durumlar kolaylıkla fark edilebilir. Gerekli önlemlerin alınması sağlanabilir veya saldırılara karşı önlem alınabilir.

Zafiyetleri genel olarak incelediğimizde, kullanıcıya verilen izinlerin ve girdi yapma şansları olan kısımların yeterince güvenli dizayn edilmediğinden kaynaklandığını gördük. Dolayısıyla uygulama geliştirirken kontrollerin detaylı bir şekilde yapılması gerekiyor. Uygulamanın geliştirme aşamasında zafiyet analizlerinin, test aşamasında ise mutlaka sızma testlerinin yapılmasının gerektiğini düşünüyorum. Bunun için OWASP güzel bir kaynak; nelere dikkat edilmesi gerektiği ve nasıl önlem alınacağı konusunda detaylı çalışmalarını incelemenizi tavsiye ediyorum. Bir sonraki yazımda görüşmek üzere…

Kaynakça:

Görüntülenme Sayısı:
50 görüntülenmeler