Apakah benar-benar diperlukan saat mengirim dari klien Websocket

10

RFC Websocket saat ini mengharuskan klien websocket menutupi semua data dalam bingkai saat mengirim (tetapi server tidak diharuskan untuk). Alasan protokol dirancang dengan cara ini adalah untuk mencegah data bingkai dari diubah oleh layanan jahat antara klien dan server (proxy, dll). Namun, kunci masking masih diketahui oleh layanan tersebut (dikirim pada basis per frame pada awal setiap frame)

Apakah saya salah berasumsi bahwa layanan seperti itu masih dapat menggunakan kunci untuk membuka kedok, mengubah, dan daripada menutupi kembali konten sebelum meneruskan frame ke titik berikutnya? Jika saya tidak salah, bagaimana cara memperbaiki kerentanan yang seharusnya?

JSON
sumber

Jawaban:

13

Bagian 10.3 dari RFC menjelaskan mengapa masking diperlukan. Ini respons yang sangat spesifik terhadap teknik peretasan tertentu. Masalah yang coba diatasi dijelaskan dalam makalah 2010 berjudul Talking to Yourself for Fun and Profit oleh beberapa petugas keamanan transportasi internet yang paling tajam.

Penyembunyian klien-ke-Server digunakan oleh protokol Websocket untuk mencegah proxy tanpa disadari memperlakukan data WebSockets sebagai permintaan HTTP yang dapat di-cache. Anda dapat berdebat apakah itu menjadi perantara bagi proksi bodoh (dan saya pikir memang begitu), tapi itulah alasannya.

Ross Patterson
sumber
Ya, namun setelah bekerja dengan tangan penuh layanan Websocket (baik sisi klien dan sisi server) saya merasa saya memiliki pemahaman yang baik tentang protokol, dan saya tidak melihat bagaimana itu akan menjadi tantangan bagi proxy untuk membuka kedok dan memodifikasi bingkai dengan cepat. a) Kunci masking tidak berdasarkan data [seperti hash], b) kunci masking tidak dapat diprediksi sehingga seorang pria di tengah dapat mengubah data dan kunci itu sendiri, c) (saya percaya) proxy dapat kemungkinan lulus sama sekali baru, frame yang tidak diminta [tertutup dengan benar dan semua], sebagai klien yang valid setelah sesi klien yang valid dibuat / diizinkan / diselipkan melalui itu
JSON
Dengan mengatakan itu, saya juga mengerti bahwa saya mungkin tidak memiliki pengetahuan dan pengalaman dari banyak pengaturan di dewan mereka ketika keputusan ini dibuat.
JSON
3
Sepertinya Anda tidak membaca bagian itu atau makalah yang dirujuknya. Masking bukan untuk mencegah proksi membaca data, itu untuk mencegah mereka dari tanpa disadari memperlakukan data WebSockets sebagai permintaan HTTP yang dapat di-cache. Anda dapat berdebat apakah itu menjadi perantara bagi proksi bodoh (dan saya pikir memang begitu), tapi itulah alasannya.
Ross Patterson
+1 untuk penjelasannya. Sepertinya itu akan membuat jawaban yang lebih baik. Jika Anda dapat memindahkan edit jawaban asli Anda, itu akan bagus.
JSON
2

Masking tidak berguna dengan wss://WebSockets alias lebih dari SSL / TLS. Karena disarankan untuk menggunakan SSL / TLS bila memungkinkan, Anda dapat menyimpulkan bahwa masking mencakup kasus penggunaan marjinal.

Laurent Caillette
sumber
1
Ini benar-benar harus menjadi komentar, tetapi Anda belum memiliki reputasi yang cukup ....
Adam Zuckerman