WebSocket Güvenliği: Gerçek Zamanlı Bağlantı Saldırıları ve Korunma
WebSocket sürekli açık bağlantısı klasik HTTP güvenlik modelini bozar. WebSocket'e özgü açıklar tablosu, çapraz site WebSocket kaçırma, her mesajda yetki neden gerekli, kaynak doğrulama savunması ve KAOS ile kanıt temelli tarama.
Hızlı cevap: WebSocket güvenliği, tarayıcı ile sunucu arasında sürekli açık kalan çift yönlü bağlantıyı yetkilendirme, kaynak doğrulama ve girdi denetimi açısından korumaktır. WebSocket, klasik HTTP isteklerinden farklıdır: bağlantı bir kez kurulur ve açık kalır, bu yüzden her istekte yeniden çalışan bazı güvenlik kontrolleri burada geçerli olmaz. En sık açıklar şunlardır: bağlantı kurulurken kaynağın doğrulanmaması sonucu çapraz site WebSocket kaçırma, mesajlarda yetki kontrolünün eksik olması, gelen mesajların denetimsiz işlenmesiyle enjeksiyon ve bağlantı başına sınır olmaması sonucu kaynak tüketimi. Kök çözüm, bağlantı kurulurken kaynağı ve oturumu sunucuda doğrulamak, her mesajda yetkiyi zorlamak, gelen veriyi denetlemek ve bağlantı ile mesaj hızına sınır koymaktır.
Gerçek zamanlı sohbet, canlı bildirim, işbirliği araçları ve oyunlar WebSocket kullanır çünkü sürekli açık bir bağlantı düşük gecikme sağlar. Ama bu sürekli bağlantı, klasik HTTP güvenlik modelinin bazı varsayımlarını bozar. Bu yazı, WebSocket'e özgü açıkları ve doğru savunmayı anlatır.
WebSocket neden farklı
Klasik HTTP'de her istek ayrıdır ve her istekte kimlik ve yetki yeniden değerlendirilir. WebSocket'te ise bağlantı bir kez kurulur ve uzun süre açık kalır. Bağlantı kurulduktan sonra gelen mesajlar, ilk el sıkışmadaki kontrole güvenerek işlenirse, mesaj düzeyinde yetki boşlukları oluşur. Ayrıca WebSocket el sıkışması, tarayıcının bazı çapraz kaynak korumalarını klasik istekteki gibi uygulamadığı bir noktadır.
WebSocket'e özgü açıklar
| Açık | Ne yapıyor | Sonuç |
|---|---|---|
| Çapraz site WebSocket kaçırma | Kaynağı doğrulanmayan bağlantı | Kurbanın oturumuyla veri okuma |
| Mesaj düzeyi yetki eksiği | Her mesajda yetki denetlenmez | Yetkisiz işlem, veri ifşası |
| Girdi denetimsizliği | Gelen mesaj denetimsiz işlenir | Enjeksiyon, XSS |
| Sınırsız bağlantı ve mesaj | Hız ve bağlantı sınırı yok | Kaynak tüketimi, hizmet dışı bırakma |
Çapraz site WebSocket kaçırma, mantık olarak CORS yanlış yapılandırması ve CSRF ile akrabadır: saldırgan sitesi, kurbanın oturumu üzerinden WebSocket bağlantısı açar.
Doğru savunma
1. Bağlantıda kaynak ve oturum doğrulama
WebSocket el sıkışmasında, isteği gönderen kaynak sunucuda doğrulanmalı ve oturum kimliği el sıkışma çerezine değil, bilinçli bir doğrulama mekanizmasına dayanmalıdır. Kaynağı bilinmeyen bağlantılar reddedilmelidir.
2. Her mesajda yetki
Yetki, yalnızca bağlantı kurulurken değil, her mesajda zorlanmalıdır. Kullanıcı, bağlantı boyunca yalnızca yetkili olduğu işlemleri yapabilmelidir. Bu, API güvenliğinin WebSocket karşılığıdır.
3. Girdi denetimi
Gelen her mesaj, klasik bir istek gibi denetlenmeli ve doğrulanmalıdır. Denetimsiz işlenen mesaj, enjeksiyon ve çapraz site betik çalıştırma riski taşır.
4. Hız ve bağlantı sınırı
Bağlantı başına mesaj hızı ve kaynak başına bağlantı sayısı sınırlanmalıdır. Sınırsız bağlantı, kaynak tüketimiyle hizmet dışı bırakmaya açık kapı bırakır.
KAOS ile WebSocket taraması
DSET'in yerel yapay zekâ güvenlik motoru KAOS, WebSocket uçlarını kanıt temelli test eder. El sıkışmada kaynak doğrulamasının yapılıp yapılmadığını dener, mesaj düzeyinde yetki boşluklarını ölçer ve gelen mesajların denetimsiz işlenip işlenmediğini kontrollü biçimde doğrular. Yalnızca gerçekten istismar edilebilir bulguyu, yanlış pozitif gürültüsü olmadan raporlar. Böylece gerçek zamanlı uygulamanızın, klasik HTTP taramasının kaçırdığı WebSocket katmanını görünür kılarsınız.
Sık sorulan sorular
WebSocket, HTTPS kullanıyorsa güvenli midir? Şifreli WebSocket (wss) veriyi taşıma sırasında korur ama yetki, kaynak doğrulama ve girdi denetimi sorunlarını çözmez. Şifreleme gerekli ama yeterli değildir; uygulama düzeyi kontroller ayrıca gereklidir.
Çapraz site WebSocket kaçırma nedir? Saldırgan sitesinin, kurbanın tarayıcısı üzerinden hedef WebSocket'e bağlantı açıp kurbanın oturumuyla veri okumasıdır. El sıkışmada kaynak doğrulanmadığında oluşur. Çözüm, kaynağı sunucuda doğrulamaktır.
Her mesajda yetki kontrolü gerçekten gerekli mi? Evet. Bağlantı uzun süre açık kaldığı için, yalnızca ilk el sıkışmadaki kontrole güvenmek yetki boşluğu bırakır. Kullanıcının rolü ya da yetkisi bağlantı sırasında değişebilir; bu yüzden her mesaj yetkiyle değerlendirilmelidir.
Kaynaklar
- OWASP, WebSocket güvenlik rehberi: https://owasp.org
- DSET Siber Güvenlik ve Pentest: https://dset.com.tr/hizmetler
Gerçek zamanlı uygulamanızın WebSocket katmanını yetki, kaynak doğrulama ve enjeksiyon açısından çalışan bir kanıtla test ettirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan sızma testi ve güvenli kod denetimi sağlıyoruz.
Kimliğinizi doğrulayın
Yetkilendirilmiş erişim alanı. Tüm giriş denemeleri kayıt altına alınır.