CyberFlow Logo CyberFlow BLOG
Advanced Web Exploitation

WebSocket Exploitation: Temel Kavramları ve Uygulama Senaryoları

✍️ Ahmet BİRKAN 📂 Advanced Web Exploitation

WebSocket exploitation konusunu derinlemesine araştırın ve güvenlik açığı yönetimi hakkında bilgi edinin.

WebSocket Exploitation: Temel Kavramları ve Uygulama Senaryoları

WebSocket exploitation, siber güvenlikte önemli bir alan. Bu yazıda, WebSocket bağlantılarında karşılaşılabilecek zayıflıkları ve bunların nasıl istismar edileceğine dair temel adımları öğreneceksiniz.

Giriş ve Konumlandırma

WebSocket, modern web uygulamalarında sıkça kullanılan bir iletişim protokolüdür. Temel anlamda, istemci ve sunucu arasında kalıcı ve çift yönlü bir bağlantı kurarak, veri alışverişine olanak tanır. Bu özellik, kullanıcı deneyimini geliştirmek için önemlidir; ancak aynı zamanda potansiyel güvenlik açıkları da barındırır. Bu yazıda, WebSocket exploitasyonunun temellerine, potansiyel tehlikelerine ve uygulama senaryolarına derinlemesine bir bakış sunulacaktır.

WebSocket'in Önemi

Günümüz web uygulamaları, sürekli olarak veri güncellemeleri gerektiren dinamik yapılar üzerine inşa edilmiştir. WebSocket protokolü, bu tür uygulamalarda, özellikle gerçek zamanlı veri akışında, kritik bir rol oynar. Örneğin, canlı sohbet uygulamaları, borsa uygulamaları ve oyunlar, WebSocket teknolojisi sayesinde daha az gecikme ile veri alışverişi yapabilir. Ancak, bu avantajlarla birlikte gelen güvenlik risklerini anlamak ve yönetmek de son derece önemlidir.

WebSocket ile gerçekleştirilen iletişim HTTPS üzerinden yapılsa bile, güvenli bir bağlantı sağlamak yalnızca ilk aşamadır. Bağlantı kurulduktan sonra gönderilen mesajların güvenliği, genellikle ihmal edilir. İşte tam bu noktada, saldırganlar devreye girerek; yetkisiz erişim, mesaj manipülasyonu ve veri sızıntıları gibi eylemler gerçekleştirebilir. Dolayısıyla, WebSocket uygulamalarının güvenliği, sadece bağlantının güvenliğine değil, aynı zamanda mesaj düzeyindeki yetkilendirmelere de dayanır.

Siber Güvenlik Bağlamı

Siber güvenlik alanında, WebSocket exploitasyonu, özellikle pentest (sızma testi) süreçlerinde kritik bir odak noktasını oluşturur. Pentester’lar, WebSocket bağlantılarındaki zayıflıkları tespit ederek, güvenlik açığı bulunan uygulamaların daha sağlam bir güvenlik altyapısına kavuşmasına yardımcı olurlar. Saldırganlar için cazip olan bu kanallar, genellikle kimlik doğrulama süreçleri zayıf olan uygulamalarda daha fazla risk taşır.

Pentest süreçlerinde, WebSocket zafiyetlerini bulmak için iki temel aşama üzerinde yoğunlaşılır: ilk olarak, istemci ve sunucu arasındaki geçirgenliği test etmek; ikinci olarak ise, mesajların işlenmesi aşamasında yetki kontrolü yaparak, hangi kullanıcıların hangi verilere erişim iznine sahip olduğunu belirlemektir. Bu aşamalar, “Cross-User Event Leakage” gibi tehditlerin ortaya çıkmasını engellemek için kritik öneme sahiptir.

Teknik İçeriğe Hazırlık

WebSocket exploitasyonuna yönelik bilgi sahibi olmak, yalnızca saldırı senaryolarını anlamakla kalmaz, aynı zamanda bu tehditleri önleyebilmek için gerekli savunma mekanizmalarını geliştirmeye de olanak tanır. Yazının ilerleyen bölümlerinde, WebSocket bağlantılarının nasıl kurulduğu, el sıkışma sürecinin adımları, mesaj düzeyinde yetki kontrolü ve olası zafiyetlerin nasıl istismar edilebileceği gibi konulara odaklanacağız.

Mevcut WebSocket uygulamalarının güvenliğini artırmak için, aşağıda bazı temel kavramları gözden geçirmek önemlidir:

  • Handshake: HTTP bağlantısının WebSocket'e yükseltildiği başlangıç görüşmesi.
  • Persistent Channel: Bağlantı kurulduktan sonra istemci ve sunucu arasında açık kalan çift yönlü iletişim hattı.
  • Message-Level Authorization: Bağlantı kurulmuş olsa bile her mesaj türü için ayrı yetki kontrolü uygulanması gerekliliği.
  • Unauthorized Subscription: Kullanıcının ait olmadığı oda, kanal veya event akışına abone olabilmesi durumu.
  • Action Message Abuse: Normal kullanıcıların göndermemesi gereken işlem mesajlarının sunucu tarafından kabul edilmesi.
  • Cross-User Event Leakage: Bir kullanıcıya ait olay veya veri akışının başka bağlı istemcilere sızması durumu.

WebSocket exploitasyonu, hem saldırganların hem de savunucuların üzerinde durması gereken karmaşık bir alandır. Protokol ile ilgili temel bilgileri ve uygulama senaryolarını anlamak, siber güvenlik uzmanlarının bu alandaki zayıflıklara karşı daha etkili bir şekilde mücadele edebilmesi açısından oldukça önemlidir.

Bu bağlamda, WebSocket içindeki zafiyetleri anlamak, onlardan korunmak ve olası tehditleri etkili bir şekilde yönetmek için gerekli temel bilgi ve teknikleri geliştireceğiz. WebSocket exploitasyon senaryolarında, güvenlik açıklarını keşfetmek ve bu zayıflıkları gidermek için izlenmesi gereken stratejilere dair daha fazla bilgiye sahip olmak kritik bir hedef olacaktır.

Teknik Analiz ve Uygulama

WebSocket'ten HTTP'ye Geçiş Akışını Doğrulamak

WebSocket exploitation senaryolarında ilk adım, uygulamanın gerçekten upgrade akışı başlatıp başlatmadığını doğrulamaktır. Çünkü bu aşama, zafiyet analizi sürecinin en kritik noktalarından birisidir. Bağlantı kurulu olduğunda, hem istemci hem de sunucu arasında kalıcı ve çift yönlü bir iletişim meydana gelir. Bu nedenle, ilk olarak HTTP'den WebSocket'e geçiş akışını gözlemlemek gerekmektedir.

Aşağıdaki curl komutuyla WebSocket upgrade isteği oluşturulabilir:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: dGVzdGtleTEyMzQ1Ng==" http://target.local/ws

Bu komutun çıktısında HTTP isteğinin başarıyla WebSocket'e dönüşüp dönüşmediği kontrol edilmelidir. Eğer bu doğrulama sağlanmazsa, zafiyet analizi başlayamaz.

WebSocket El Sıkışmasının Temel Adımını Tanımlamak

WebSocket bağlantısı, istemci ile sunucu arasındaki ilk görüşmenin önemli bir kısmını oluşturur; bu görüşme "handshake" olarak adlandırılır. Handshake sırasında yapılan HTTP isteği, istemci ile sunucu arasında kalıcı bir bağlantı kurar. Burada dikkat edilmesi gereken, sunucunun "Origin" başlığını doğru bir şekilde kontrol edip etmediğidir. Eğer sunucu yalnızca cookie varlığına bakıyorsa, bu durum çeşitli güvenlik açıklarına yol açabilir.

Bağlantı Kurmak ile Yetkili Mesaj İşleyebilmenin Ayrı Olduğunu Ayırmak

WebSocket güvenliği sadece bağlantının kurulmasıyla ilgili değildir. Asıl risk, bağlantı kurulduktan sonra hangi mesajların hangi yetkiyle işlendiğidir. Eğer mesajlar için yetki kontrolü yapılmıyorsa, saldırgan başka kullanıcı akışlarına veya verilere erişebilir. Bu nedenle, kanal, mesaj ve yetki ilişkisini ayrı ayrı düşünmek gerekir.

Bir örnekle açıklamak gerekirse, aşağıdaki curl komutuyla yetkisiz bir kanala abone olma denemesi yapılabilir:

curl -X POST http://target.local/api/ws/send -H "Content-Type: application/json" -d '{"action":"subscribe","channel":"admin.notifications"}'

Eğer sunucu, bu tür bir isteği onaylarsa, bu durum "Unauthorized Subscription" zafiyetine işaret eder.

Origin Kontrolünün Gerçekten Uygulanıp Uygulanmadığını Test Etmek

WebSocket uygulamalarında sık görülen bir diğer zayıflık da handshake sırasında "Origin" doğrulamasının eksik olmasıdır. Eğer sunucu bağlanma isteğini yalnızca cookie varlığıyla kabul ediyor ve kaynağı doğrulamıyorsa, bu durumda "Cross-Site WebSocket Attack" senaryoları mümkün hale gelir. Farklı bir "Origin" değeri ile bağlantı kurmak için şu komutu kullanabilirsiniz:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Origin: http://evil.local" -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: ZXZpbGtleTEyMzQ1Njc=" http://target.local/ws

Eğer sunucu bu isteği kabul ederse, ciddi bir güvenlik açığı mevcut demektir.

Asıl Kontrol Noktasının Kanal Değil Mesajlar Olduğunu Kavramak

WebSocket zafiyetleri genellikle bağlantı kurulduktan sonra her işlemin güvenli olduğu varsayımına dayanır. Ancak, asıl savunma mekanizması, bağlantı seviyesinde değil, her mesaj türü için yetki ve bağlam kontrolü uygulamakta yatar. WebSocket mesajlarının güvenliği, yalnızca bağlantının varlığıyla değil, her bir mesajın işlenme şekliyle de ilgilidir.

Bağlantı Sonrası Hangi Yetki Kusurunun Veri veya İşlem Sızıntısına Dönüştüğünü Sınıflandırmak

WebSocket exploitation çeşitleri bazen kullanıcıların başka bir odaya veya kanal kimliğine abone olması, bazen de admin işlemlerini tetikleyen mesajların sunucu tarafından kabul edilmesi şeklinde ortaya çıkabilir. Analistler için önemli olan, bağlantı açıldıktan sonra hangi mesajların bağlam dışı işlenebildiğini belirlemektir.

Yetkisiz Kanal Aboneliği ile Daha Yüksek Ayrıcalıklı Olay Akışını Hedeflemek

WebSocket mesajlarını doğrudan curl ile göndermek her zaman mümkün değildir; ancak birçok uygulama debug, bridge veya test amaçlı HTTP üzerinden WebSocket mesajı tetikleyen yardımcı endpointler barındırmaktadır. Kritik olan, yalnızca bağlantı kurmak değil, daha yüksek ayrıcalıklı event akışını talep etmektir. Yetkisiz abonelik durumlarının nasıl işleneceğini ve bu tür saldırıların nasıl önleneceğini kavramak, güvenlik analistlerinin en önemli becerilerinden biridir.

Bu teknik bilgiler doğrultusunda WebSocket tabanlı uygulamalarda güvenlik açıklarını analiz etmek ve test etmek daha sistematik bir şekilde gerçekleştirilebilir.

Risk, Yorumlama ve Savunma

Risk Değerlendirmesi ve Yorumlama

WebSocket uygulamaları, çift yönlü iletişim sağlaması sayesinde birçok gelişmiş-web uygulamasında yaygın olarak kullanılmaktadır. Ancak bu durum, doğru yapılandırılmadıklarında pek çok güvenlik zafiyetine de kapı aralamaktadır. Risk değerlendirmesi, uygulama güvenliğinin temellerinden biridir ve bu bağlamda WebSocket bağlantılarının analizi son derece önemlidir.

Yanlış Yapılandırma ve Zafiyet Etkileri

WebSocket protokollerinin yanlış yapılandırılması, çok çeşitli güvenlik açıklarına neden olabilir. Özellikle, handshake (el sıkışma) aşamasında eksik veya hatalı origin kontrolü, Cross-Site WebSocket Hijacking (CSWSH) saldırılarına olanak tanır. Örneğin, bir saldırgan kötü niyetli bir origin değeri ile WebSocket bağlantısı kurabilir ve bu durum, yetkisiz veri erişimine yol açabilir.

Aşağıdaki örnek, böyle bir zafiyetin nasıl istismar edilebileceğini göstermektedir:

curl -i -N -H "Connection: Upgrade" \
-H "Upgrade: websocket" \
-H "Origin: http://evil.local" \
-H "Sec-WebSocket-Version: 13" \
-H "Sec-WebSocket-Key: ZXZpbGtleTEyMzQ1Njc=" \
http://target.local/ws

Bu komut, bir WebSocket el sıkışması başlatmakta ve evil.local origin'i kullanarak bir saldırının temelini atmaktadır. Eğer hedef sunucu, origin kontrolü yapmıyorsa, bu bağlantı başarılı olacaktır ve saldırgan, yetkisiz verilere erişim sağlayabilecektir.

Sızan Veri ve Topoloji Analizi

WebSocket zafiyetlerinde en sık görülen sorunlardan biri, mesaj seviyesinde yeterli yetkilendirme kontrollerinin olmamasıdır. Bağlantı kurulduktan sonra, sunucunun tüm mesaj tiplerini kontrol etmesi gerekir. Aksi takdirde, kullanıcılar arası veri sızıntısı meydana gelebilir. Örneğin, kullanıcıların yalnızca özelleşmiş bir kanalın mesajlarını görmesi gerekirken, yetkisiz kanallara erişim sağlanması, Cross-User Event Leakage durumunu doğurur.

Aşağıda böyle bir durumu gerçekleştiren örnek bir mesaj gönderme işlemi bulunmaktadır:

curl -X POST http://target.local/api/ws/send \
-H "Content-Type: application/json" \
-d "{\"action\":\"subscribe\",\"channel\":\"admin.notifications\"}"

Bu tür yetkisiz abonelikler, kullanıcı verilerinin ele geçirilmesine, hassas verilere erişim sağlanmasına ve sistemin genel güvenliği açısından ciddi zararlara yol açabilir.

Profesyonel Önlemler ve Hardening Önerileri

WebSocket uygulamalarının güvenliğini artırmak için alınması gereken önlemler şu şekildedir:

  1. Doğru Configuration: El sıkışma (handshake) aşamasında Origin doğrulaması ve güvenli bağlantı yöntemleri (örneğin, TLS) zorunlu hale getirilmelidir.

  2. Mesaj Seviyesi Yetkilendirme: Her mesaj türü için ayrı yetki kontrolü uygulanmalıdır. Kullanıcıların yalnızca abonelikleriyle uyumlu olan mesajlara erişmesini sağlamak kritik öneme sahiptir.

  3. Kapsülleme ve Enjeksiyon Kontrolleri: Mesaj içeriği üzerinde düzenli validasyon yapılmalı, istemci tarafında gönderilen verilerin içeriği kötü niyetli unsurlara karşı denetlenmelidir.

  4. Loglama ve İzleme: Tüm WebSocket bağlantılarını sürekli olarak izlemek ve loglamak önemlidir. Potansiyel anormal aktiviteler tespit edildiğinde hızlıca önlem alınabilmelidir.

Sonuç

WebSocket uygulamaları, doğru yapılandırılmadıklarında ciddi güvenlik zafiyetlerine yol açabilir. Yanlış yapılandırmalar, yetkisiz veri erişimlerine ve kullanıcılar arası veri sızıntılarına neden olabilir. Dolayısıyla, profesyonel güvenlik önlemleri ve sistemin sürekli izlenmesi, WebSocket uygulamalarının güvenliğini artırmak için kritik öneme sahiptir. Her mesaj ve kanal için ayrı yetki kontrolleri uygulamak da, güvenli bir WebSocket ortamı oluşturmak adına gereklidir.