Penyulitan terowong WSS berhenti di terminator TLS, bukan di aplikasi
URL wss:// membuktikan TLS pada satu hop. Sama ada muatan mempunyai penyulitan sendiri bergantung pada apa yang klien letakkan di dalam dan siapa yang menamatkan TLS itu.
Terowong yang dibawa di dalam WebSocket selamat mempunyai penyulitan yang sama banyak dengan apa yang klien letakkan di dalamnya, tidak lebih. Skema wss:// menyatakan bahawa TLS melindungi satu sambungan pada satu hop. Ia tidak menyatakan apa-apa tentang sama ada bait di dalam mesej WebSocket dilindungi secara berasingan, dan perbezaan itulah yang menentukan siapa boleh membaca trafik anda apabila sesuatu di tengah menamatkan TLS.
Dua lapisan yang kelihatan seperti satu
WebSocket selamat ialah TLS dengan jabat tangan WebSocket dilakukan di atasnya, seperti yang diterangkan RFC 6455 dalam bahagian sambungan dan keselamatannya. Lapisan TLS mengesahkan pelayan dan menyulitkan aliran, kemudian lapisan WebSocket membingkai apa sahaja yang aplikasi putuskan untuk dihantar.
Itu dua keputusan bebas, dan rajah yang melukis satu mangga di seluruh laluan menyembunyikan yang kedua. Tanya siapa yang menamatkan sambungan TLS. Kemudian tanya apa yang klien letakkan di dalam setiap mesej. Segala-galanya tentang penggunaan mengikut daripada dua jawapan itu.
Reka bentuk A: pengangkutan ialah satu-satunya penyulitan
Dalam reka bentuk yang lebih mudah, klien mengambil paket IP mentah dan membungkusnya dalam mesej WebSocket. Tiada apa di dalamnya disulitkan, jadi komponen yang memegang sesi TLS membaca muatan teks biasa. Apabila komponen itu ialah pelayan terowong anda sendiri, ini ialah titik akhir yang dimaksudkan dan reka bentuknya koheren, kerana pelayan memang akan melihat trafik itu.
Ia menjadi susunan berbeza apabila proksi pemeriksaan duduk di laluan dan menamatkan TLS dengan sijil yang dipercayai klien. Proksi itu kini memegang teks biasa yang sama yang akan dipegang pelayan, dan tiada jumlah pembingkaian WebSocket mengubahnya. Storan kepercayaan klien memutuskan hasil ini jauh sebelum terowong dibuka, kerana ia memilih untuk menerima sijil itu bagi nama itu. Proksi juga melihat hos yang diminta dan saiz setiap mesej, yang cukup untuk mengambil cap jari banyak aktiviti tanpa menyahsulit apa-apa lagi.
Reka bentuk B: muatan membawa kuncinya sendiri
Dalam reka bentuk kedua, klien menyulitkan dan mengesahkan paketnya dengan protokol VPN yang mempunyai identiti rakan dan pertukaran kunci sendiri, kemudian membawa hasilnya di dalam mesej WebSocket. Menamatkan TLS luar di sini mendedahkan teks sifer, bukan trafik. Proksi boleh melihat saiz dan masa mesej, dan tiada apa lagi di dalam muatan. Itu pendedahan yang jauh lebih kecil, dan ia masih metadata yang wajar dinamakan dalam semakan dan bukannya diketepikan.
Titik akhir protokol dalaman sendiri masih melihat teks biasa, itulah inti susunan ini dan juga hadnya. Jika komponen di titik akhir diberi kuasa membaca data sebelum penyulitan atau selepas penyahsulitan, lapisan tambahan tidak mengekangnya. Kunci, dan perisian yang mengendalikannya, kekal sebagai sempadan yang penting.
Label VPN, ikon klien yang biasa atau halaman pemasaran bukan bukti bahawa reka bentuk ini wujud. Membaca format muatan adalah buktinya.
Jejaki di mana teks biasa benar-benar muncul
Skema URL memberi anda satu fakta, jadi dapatkan selebihnya daripada antara muka. Jalankan pemeriksaan di bawah mengikut urutan, kerana setiap satu menyempitkan yang berikutnya:
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
Mulakan dengan sambungan luar. Satu sesi TCP tahan lama ke port TLS ialah rupa pembawa WebSocket, dan sesi kedua ke hos tidak berkaitan wajar dijelaskan sebelum anda melihat lebih mendalam. Kemudian cari antara muka terowong pada klien, kerana peranti tun atau tap memberitahu anda bahawa klien mengendalikan paket IP dan bukannya memproksi satu aliran aplikasi.
Tangkapan pada antara muka terowong biasanya menyelesaikan persoalan muatan. Pengepala yang boleh dibaca di situ bermakna paket dalaman tidak pernah disulitkan secara berasingan, manakala muatan entropi tinggi bermakna ia telah disulitkan. Ulang tangkapan pada antara muka luar dan bandingkan kedua-duanya: jika kedua-duanya kelihatan rawak, lapisan dalaman melakukan kerja yang lapisan luaran tidak boleh batalkan.
Semak kepercayaan yang benar-benar anda berikan
Sijil akar korporat yang dipasang ialah fakta tentang storan kepercayaan klien, bukan pernyataan tentang apa yang mana-mana proksi log atau periksa. Tetapkan dasar yang dilaksanakan dan laluan sambungan sebenar dan bukannya menyimpulkan tingkah laku daripada kehadiran CA.
Pada peralatan terurus, tanya pentadbir komponen mana yang menamatkan TLS, sama ada klien mengesahkan sijil yang disematkan atau sijil awam, dan apakah format muatannya. Ketiga-tiga jawapan itu menghasilkan penemuan yang boleh anda pertahankan kemudian.
Tulis hasilnya sebagai sempadan dan bukannya keputusan. "TLS tamat di proksi pemeriksaan, dan muatan dalaman disulitkan secara berasingan dengan kunci yang hanya dipegang titik akhir" ialah pernyataan yang boleh disemak dan bertahan apabila vendor bertukar. "WebSockets selamat" tidak.