Güvenli bir WebSocket içinde taşınan tünel, istemcinin içine koyduğu kadar şifrelemeye sahiptir, fazlasına değil. wss:// şeması TLS'in tek atlamada tek bir bağlantıyı koruduğunu söyler. WebSocket mesajlarının içindeki baytların ayrıca korunup korunmadığı hakkında hiçbir şey söylemez ve ortadaki bir şey TLS'i sonlandırdığında trafiğinizi kimin okuyabileceğini belirleyen tam da bu farktır.

Tek gibi görünen iki katman

Güvenli WebSocket, üzerinde WebSocket el sıkışması yapılan TLS'tir; RFC 6455 bunu bağlantı ve güvenlik bölümlerinde açıklar. TLS katmanı sunucuyu kimlik doğrular ve akışı şifreler, ardından WebSocket katmanı uygulamanın göndermeye karar verdiğini çerçeveler.

Bunlar iki bağımsız karardır ve tüm yol boyunca tek bir asma kilit çizen bir diyagram ikincisini gizler. TLS bağlantısını kimin sonlandırdığını sorun. Sonra istemcinin her mesajın içine ne koyduğunu sorun. Dağıtımla ilgili diğer her şey bu iki yanıttan çıkar.

Tasarım A: tek şifreleme taşıma katmanıdır

Daha basit tasarımda istemci ham IP paketlerini alır ve WebSocket mesajlarına sarar. İçeride hiçbir şey şifrelenmez, bu yüzden TLS oturumunu tutan bileşen düz metin yükleri okur. Bu bileşen kendi tünel sunucunuz olduğunda burası amaçlanan uç noktadır ve tasarım tutarlıdır, çünkü sunucu trafiği zaten görecekti.

Yolda bir inceleme vekil sunucusu oturup TLS'i istemcinin güvendiği bir sertifikayla sonlandırdığında bu başka bir düzenlemeye dönüşür. O vekil sunucu artık sunucunun tutacağı aynı düz metni tutar ve hiçbir WebSocket çerçeveleme miktarı bunu değiştirmez. İstemcinin güven deposu bu sonucu tünel açılmadan çok önce belirledi, çünkü o ad için o sertifikayı kabul etmeyi seçti. Vekil sunucu ayrıca istenen ana bilgisayarı ve her mesajın boyutunu görür; bu da daha fazla hiçbir şeyi çözmeden birçok etkinliğin parmak izini almaya yeter.

Tasarım B: yük kendi anahtarlarını taşır

İkinci tasarımda istemci paketlerini kendi eş kimliği ve anahtar değişimi olan bir VPN protokolüyle şifreler ve kimlik doğrular, sonra sonucu WebSocket mesajlarının içinde taşır. Dış TLS'i burada sonlandırmak trafiği değil şifreli metni açığa çıkarır. Vekil sunucu mesaj boyutlarını ve zamanlamasını görebilir, yükte başka hiçbir şeyi göremez. Bu çok daha küçük bir maruziyettir ve yine de bir incelemede adlandırılmaya değer üst veridir, bir kenara atılacak bir şey değil.

İç protokolün kendi uç noktaları hâlâ düz metin görür; bu, düzenlemenin amacı ve aynı zamanda sınırıdır. Uç noktadaki bir bileşen şifrelemeden önce veya şifre çözmeden sonra veri okumaya yetkiliyse ek katman onu kısıtlamaz. Anahtarlar ve onları yöneten yazılım önem taşıyan sınır olarak kalır.

Bir VPN etiketi, tanıdık bir istemci simgesi veya pazarlama sayfası bu tasarımın var olduğunun kanıtı değildir. Yük biçimini okumak kanıttır.

Düz metnin gerçekte nerede göründüğünü izleyin

URL şeması size tek bir olgu verir, gerisini arayüzlerden alın. Aşağıdaki kontrolleri sırayla çalıştırın, çünkü her biri bir sonrakini daraltır:

ss -tnp | grep -E ':(443|8443)\b'
ip -br link show type tun
openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief
tcpdump -ni tun0 -c 5 -X

Dış bağlantıyla başlayın. TLS bağlantı noktasına tek bir uzun ömürlü TCP oturumu, bir WebSocket taşıyıcısının görünümüdür ve ilgisiz bir ana bilgisayara ikinci bir oturum daha derine bakmadan önce açıklamayı hak eder. Ardından istemcideki tünel arayüzünü bulun, çünkü bir tun veya tap aygıtı istemcinin tek bir uygulama akışını vekil yapmak yerine IP paketleriyle uğraştığını söyler.

Tünel arayüzündeki yakalama genellikle yük sorusunu çözer. Orada okunabilir başlıklar iç paketlerin hiçbir zaman ayrıca şifrelenmediğini gösterir; yüksek entropili yükler ise şifrelendiğini gösterir. Yakalamayı dış arayüzde yineleyin ve ikisini karşılaştırın: ikisi de rastgele görünüyorsa iç katman dış katmanın geri alamayacağı bir iş yapıyordur.

Gerçekte verdiğiniz güveni gözden geçirin

Kurulu bir kurumsal kök sertifikası, istemcinin güven deposu hakkında bir olgudur; herhangi bir vekil sunucunun neyi günlüğe kaydettiği veya incelediği hakkında bir ifade değildir. Davranışı bir CA'nın varlığından çıkarmak yerine uygulanan politikayı ve gerçek bağlantı yolunu belirleyin.

Yönetilen donanımda, yöneticiye hangi bileşenin TLS'i sonlandırdığını, istemcinin sabitlenmiş bir sertifikayı mı yoksa genel bir sertifikayı mı doğruladığını ve yük biçiminin ne olduğunu sorun. Bu üç yanıt daha sonra savunabileceğiniz bir bulgu üretir.

Sonucu bir yargı değil, bir sınır olarak yazın. "TLS inceleme vekil sunucusunda biter ve iç yük yalnızca uç noktaların sahip olduğu anahtarlarla ayrıca şifrelenir" ifadesi, tedarikçi değişse bile ayakta kalan doğrulanabilir bir ifadedir. "WebSockets güvenlidir" ise öyle değildir.

İlgili makaleler