Web güvenliği, hem basit hem de karmaşık bir konu. Ama öğrenmeye başlarken, karmaşık teknik detaylar yerine, konunun özünü anlamaya odaklanmalıyız. O yüzden önce şu soruya cevap bulmamız lazım:
“Bir web uygulamasını nasıl koruruz?”
Bu sorunun cevabını anlamak için önce saldırganların nasıl düşündüğünü bilmeliyiz. Çünkü saldırganlar yaratıcıdır; güvenlikteki zayıf noktaları keşfetmekte ustadırlar. Peki, saldırganlar bir uygulamayı nasıl hedef alır?
Bir web uygulamasını düşündüğümüzde, aslında üç temel bileşenden oluşur:
- Frontend (Kullanıcı arayüzü): HTML, CSS, JavaScript – kullanıcının gördüğü ve etkileşimde bulunduğu kısım.
- Backend (Sunucu tarafı): Kullanıcının isteğini işleyen, veri tabanıyla konuşan ve sonuç döndüren kısım.
- Veri Tabanı: Uygulamanın tüm verilerini depolayan, oldukça kritik bir bileşen.
Bu üçlü arasındaki iletişim, genelde HTTP(S) protokolüyle sağlanır. İşte saldırganların hedeflediği zayıf noktalar genelde bu iletişimde veya bileşenlerde ortaya çıkar.
Bir saldırganın nasıl düşündüğünü anlamak istiyorsak şu soruları kendimize sorabiliriz:
-
"Ne tür veriler çalınabilir veya manipüle edilebilir?"
Kullanıcı bilgileri, kredi kartı detayları, API anahtarları… -
"Uygulamanın neresi hata verebilir?"
Saldırganlar, input alanlarına zararlı kod yazarak (XSS, SQL Injection gibi) sistemleri kırmayı dener. -
"Yetkilendirme açıkları var mı?"
Admin gibi yüksek yetkili hesaplara erişim sağlamaya çalışırlar.
Bir web uygulamasını korumaya çalışırken, bir "Red Team" üyesi gibi düşünüp zayıflıkları tahmin etmek zorundayız. İşte bu yüzden, ilk öğreneceğimiz şey: OWASP Top 10.
OWASP (Open Web Application Security Project), web uygulamalarındaki en yaygın güvenlik açıklarını listeleyen ve bunlara karşı savunma yöntemlerini paylaşan bir topluluk projesidir. Web güvenliğine yeni başlıyorsanız, OWASP Top 10 sizin rehberiniz olacak.
2024 itibariyle popüler birkaç OWASP açığını inceleyelim:
-
Injection: Kullanıcının girdiği zararlı verilerle (örneğin SQL kodu) sistemin kontrolünü ele geçirme.
- Örnek: Login ekranına
' OR '1'='1
yazmak ve admin hesabına erişmek.
- Örnek: Login ekranına
-
Broken Authentication: Kimlik doğrulama mekanizmalarının eksik veya yanlış uygulanması.
- Örnek: Parola sıfırlama linkinin süresiz olarak geçerli olması.
-
Cross-Site Scripting (XSS): Zararlı JavaScript kodlarının tarayıcıda çalıştırılması.
- Örnek: Bir yorum kutusuna
<script>alert('Hacked!');</script>
yazıldığında diğer kullanıcıların bu kodu görmesi.
- Örnek: Bir yorum kutusuna
Bu listeyi öğrenmek bir zorunluluk. Ama hemen korkma! Çoğu açık, basit önlemlerle engellenebilir. Bunun üzerine derinleşmek için, OWASP Cheat Sheet'lerini kullanabiliriz.
Bir saldırgan veya bir bug bounty avcısı gibi düşünmek için en önemli şeylerden biri: her zaman sorular sormak.
- "Bu input doğru şekilde filtreleniyor mu?"
- "Session ID, tahmin edilebilir mi?"
- "Bu API hangi veri türlerini döndürüyor?"
Web uygulamaları genelde güvenli bir şekilde inşa edilmek istenir, ancak insanoğlu hata yapar. Hatalar genellikle şu iki alanda olur:
- Kodlama hataları: Input validation, output escaping gibi temel konuların göz ardı edilmesi.
- Yapılandırma hataları: Varsayılan şifrelerin değiştirilmemesi, SSL'in yanlış yapılandırılması gibi sorunlar.
Saldırganlar bu hataları bulup sömürmek için sistematik olarak her detayı test eder. Sen de bu şekilde düşünmelisin.
Şimdi biraz pratiğe geçelim. Web güvenliğini öğrenmenin en iyi yollarından biri, güvenli bir ortamda saldırgan gibi davranmayı öğrenmektir. İşte ilk görev:
-
DVWA (Damn Vulnerable Web Application) kur.
Bu, güvenlik açıklarıyla dolu, eğitim amaçlı bir web uygulamasıdır. -
SQL Injection, XSS ve diğer açıkları dene.
Hedef: Sistematik olarak açıkları anlamak ve sömürmek. -
Kendine şu soruyu sor:
- "Bu açık nasıl engellenirdi?"
Örneğin, SQL Injection için parametrik sorgular (prepared statements) nasıl kullanılmalı?
- "Bu açık nasıl engellenirdi?"
Web güvenliği karmaşık olabilir, ama işin temeline indiğinizde her şey “hata bulmak ve düzeltmek” ile ilgilidir. İlk adım olarak OWASP Top 10’u ve temel saldırı yöntemlerini öğrenmek, sonra bunları uygulamalı olarak denemek sana çok şey kazandıracak.
Bir sonraki adımda, belirli bir güvenlik açığı (örneğin SQL Injection) üzerine derinlemesine girebiliriz. Hazır olduğunda haber ver, birlikte dalış yapalım! 😊