Web Uygulama Güvenliği Nedir? Popüler Açıkları Nelerdir?
Web Uygulama Güvenliği Nedir? Popüler Açıkları Nelerdir?
Herkese merhaba. Bu yazımda İngilizce Web Application
Security olarak bilinen Web Uygulama Güvenliği’nden bahsedeceğim. Bu başlık
altında aynı zamanda bu uygulamalara yönelik olan popüler açıklardan söz edip,
nasıl önlem alınabilir? güvenliği nasıl sağlanır? gibi başlıklara da değinmeye
çalışacağım.
Web Uygulama Güvenliği Nedir?
Öncelikle “web uygulamaları”nın neler olduğundan söz edelim.
Web uygulamaları, internet ağı ile ulaşılan programlara genel olarak verilen
isimdir. Geleneksel programlara göre daha pratik olan web uygulamaları yaygın
şekilde kullanılmaktadır. Kurumlar açısından düşündüğümüz zaman web
uygulamaları, kurumların dışarıya bakan yüzü olarak görülmelidir. Web uygulama
güvenliği kavramı da, özellikle web siteleri, web uygulamalrı ve API*’ler gibi
web hizmetlerini çevreleyen güvenlik ile ilgilenir.
*API: Uygulama programlama ara yüzüdür. Bir uygulamanın
işlevlerine dışarıdan veya uzaktan erişilip bu işlevlerin kullanılmasını
sağlayan ara yüzdür.
İnternetin yaygınlaşmasıyla beraber masaüstü uygulamaları
yerine web uygulamaları kullanılmaya başlanmıştır. Web uygulamaları günlük
hayatımızda önemli bir yer tutmakta, etkileşimli bir yapı ile resimler,
videolar, sesli materyaller gibi zengin özellikler sunmaktadır.
Web uygulamalarında oluşan zafiyetlerin büyük bir nedeni,
geliştirilen uygulamanın güvenlik bilgisinden yoksun kişilerin web uygulaması
geliştirmesi gelmektedir. Geliştiricilerin, güvenliği bir kenara bırakıp ya da
düşünmeden yazdıkları kodlamalar web uygulamalardaki açıkların büyük bir
kısmını tetiklemektedir.
CENZIC’in “Uygulama Güvenlik Açıklığı Eğilimleri Raporu
2014” te, uygulamaların %96’sında bir ya da birden fazla ciddi açıklı
bulunduğunu bildirmiştir.
Neden Web Uygulamalarına Yönelik Saldırılar Yapılıyor?
Bir önceki kısımda, kurumlar için web uygulamalarının
dışarıya bakan yüzü olduğunu belirtmiştik. Saldırganlar, web uygulamalarına
saldırarak kurumların iç ağlarına sızmayı, zarar vermeyi ya da para kazanma
gibi birçok etkene umut bağlayarak saldırılar düzenlemektedir. Bir başka
nedenleri ise;
Kurumsal uygulamaların, güvenlik ürünlerinin yönetimi web
ara yüzleri ile yapılmaktadır. Bu da web uygulamalarına saldırıyı cazip
kılmaktadır.
Eskiye göre daha sıklıkla kullanıldığı için atak yüzeyi daha
da genişlemiştir.
Web uygulamaları artık gömülü yani statik değil daha
kompleks bir yapıya sahiptir.
En önemli nedenlerden biri de kurumların çoğu genel olarak
web uygulamalarına yönelik güvenlik testi yaptırmamaktadır. Burada oluşabilecek
zafiyetleri bilemediklerinden dolayı web uygulama tarafı daha savunmasızdır.
En Çok Bilinen Web Uygulama Zafiyetleri
Genel olarak saldırılar web uygulamalarından gelmektedir.
Web uygulama açıkları uygulama kodu açıkları, sunucu kaynaklı açıklar, iletişim
altyapısı açıkları olarak ele alınabilir. İletişim altyapı açıkları olarak OSI
modelinin iletişim katmanlarında (HTTP gibi) ortaya çıkan zafiyetlerdir. Bu
başlıklar daha da arttırılabilir. Web uygulama zafiyeti olarak bilinen bazı
zafiyetlerin neler olduğuna bakalım.
XSS
Cross Site Scripting olarak da bilinen açık tehlikeli bir
güvenlik açığıdır. Farklı programlama dilleri ile geliştirilen birçok web
uygulamasında bulunabilmektedir. Birazdan değineceğim OWASP 10 listesinde de
bulunmaktadır. Bu açık, kullanıcıdan alınan verilerin kontrol edilmeden,
filtrelenmeden html response olarak gönderilmesi sonucu oluşur. XSS zafiyeti
sayesinde saldırganlar, kullanıcı tarayıcısında javascript çalıştırarak
kullanıcı oturumunu çalabilirler.
XSS in 2-3 farklı türü bulunmaktadır. Sıklıkla kullanılan
bir zafiyettir. Kontrol edilmeyen bir input, bütün uygulamanın ele
geçirilmesine neden olabilir.
Injection Açıkları
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. Enjeksiyon saldırılarına örnek olarak, SQL, Command
Injection, OS ve LDAP gösterilebilir.
Injection ataklarından SQL’e baktığımız zaman, hedef web
sitesinin kullandığı veri tabanında yetki olmadan sql sorguları
çalıştırılabilir. Örnek verecek olursak web sitelerinin admin login sayfasında
herhangi bir sql açığı bulunuyorsa kısa bir betik ile “Admin’ ‘or’1=’1” login
bypass edilebilmektedir. Bu betiğin anlamı sırasıyla yaptığı şey ise,
kullanıcılar tablosuna gidip kullanıcı adı “Admin” olan kullanıcıyı bulur. Eğer
öyle bir kullanıcı yok ise 1=1 in doğruluğuna bakıp login i bypass etmektedir.
Saldırgan bu şekilde web sitenize sızdıktan sonra olacaklar hayal gücünüze
kalmaktadır.
IDOR (Insecure Direct Object References)
Uygulamayı geliştiren kişinin uygulama içerisinde kullanılan
dahili uygulama nesnelerine, uygun erişim kontrolü yapılmaması sonucu meydana
gelmektedir. Saldırganlar yine verilere yetkisiz erişerek bu nesneleri
değiştirebilmektedir.
Broken Authentication
Bu zafiyet genellikle, kimlik doğrulama ya da oturum yönetimi ile ilgili fonksiyonların yanlış uygulanması sonucunda ortaya çıkmaktadır. Saldırganlar, bu saldırı sonucunda session tokenları ele geçirebilir.
Insufficient Logging And Monitoring
Yeterli loglama ve monitoring işleminin yapılmaması büyük
bir risk oluşturmaktadır. 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.
Diyelim ki web uygulamasına bir brute force saldırısı
düzenlenmiştir. Eğer ki giriş denemeleri loglanır ve izlenirse, bu tür
işlemlere ait loglar oluşacak ve alertler sistem adminleri tarafınca
gözlemlenecektir. Bu şekilde planlanan saldırıların önüne geçilebilir.
Bu açıklar, Web Uygulama açıklarının sadece birkaçına
örnektir. Her dönem bu açıklar güncellenmektedir. Bu güncellemeler OWASP
kuruluşu tarafından yayınlanmaktadır.
OWASP 10 Nedir?
Owasp, web uygulama güvenliği ile ilgilenen, bu konuda
makaleler, uygulamalar yazan kar amacı gütmeyen bir kuruluştur.
http://owasp.org sitesinde, web uygulamalarındaki zafiyetleri, zafiyetlerin
nasıl oluştuğunu, nasıl exploit edilebileceğini ve nasıl önlenebileceği ile
ilgili çok güzel yazılar bulunmaktadır.
Owasp’ın bir başka güzel özelliği ise, 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 çıkarmaktadır. Bu istatistiğe de
OWASP TOP 10 adı verilmektedir. Kurumlar, bu araştırmaya sonuçlarına bakarak
nerelerden saldırı gelebileceğine, sızma testleri ekiplerine ise hangi
zafiyetlerin üzerinde durmaları gerektiğine anlam katabilir. OWASP Top 10’in
2019 sonuçlarına baktığımız zaman;
Injection,
Broken Authentication,
Sensitive Data Exposure,
XML External Entities,
Broken Access Control,
Security Misconfiguration,
Cross-Site Scripting XSS,
Insecure Deserizalitaion,
Known Vulnerabilities,
Insufficient Logging & Monitoring
yer almaktadır. Daha detaylı incelemek isterseniz
https://owasp.org/www-project-top-ten/ linkini ziyaret edebilirsiniz.
Web Uygulama Güvenliği Nasıl Sağlanmalıdır?
Web uygulama açıkları olsun, DDoS saldırıları olsun genel
olarak bakıldığı zaman yüzde yüz güvenlikten kesinlikle söz edemeyiz. Güvenliği
yüzde yüz sağlayamayız fakat önlemleri maksimum seviyeye çıkartabiliriz.
Bütünsel bir güvenlik stratejisi izlenerek, önlemler alınmalıdır.
Web uygulama açıklarında örnek verdiğimiz zafiyetlere
baktığımız zaman, çoğunun kullanıcıdan gelen verinin kontrol edilmemesinden
dolayı ortaya çıktığını görmekteyiz. Bu nedenle her zaman kullanıcıdan gelen
veriye güvenmemek gerekmektedir. Bir başka alınabilecek önlemleri şöyle
sıralayabiliriz;
Kullanıcılara şifre ve kullanıcı adı sorarken, kesinlikle
https protokolü kullanılmalıdır. Şifreler düz metin olarak saklanmamalıdır.
Oturum yönetimi açıkları için, cookieler “secure” olarak
işaretlenmelidir. Protokol https dahi olsa cookie secure olmadığında cookie
hırsızlığıyla oturum çalınabilir.
Şifre uzunluğu ve karmaşıklığı kuvvetli tutulmalıdır.
Web uygulaması geliştirilirken, uygulama kodunun güvenliği
sağlanmalıdır. Diglossia, SWAP, PHAN gibi birçok metot kullanarak, kodun
güvenliği sağlanabilir.
Saldırı tespit sistemleri IDS,IPS, SIEM gibi sistemler
mutlaka kullanılmalıdır.
Aynı zamanda ESAPI (Enterprise Security API) kullanılarak,
web uygulamaları için güvenlik kontrol kütüphanesi oluşturulmalıdır. Ücretsiz
ve açık kaynak kodludur.
Pentest yapılırken mutlaka web uygulama testleri de
yaptırılmalı, es geçilmemelidir. Bulunan zafiyetler de hızlıca kapatılmalıdır.
Her zaman güvenliği sonradan sağlamak yerine, güvenli kod
geliştirilmesi daha iyi bir seçenektir.
Sonuç olarak bu yazımda, web uygulama açıklarının neden
oluştuğuna, popüler güvenlik açıklarına ve güvenlik çözümlerine değinmeye
çalıştım. Bir sonraki yazımda görüşmek üzere.