Websocketクライアントから送信する場合、マスキングは本当に必要ですか


10

現在のWebsocket RFCでは、Websocket クライアントが送信時にフレーム内のすべてのデータをマスクする必要があります(ただし、サーバーは必須ではありません)。プロトコルがこのように設計された理由は、フレームデータがクライアントとサーバーの間の悪意のあるサービス(プロキシなど)によって変更されるのを防ぐためです。ただし、マスキングキーはまだそのようなサービスで認識されています(各フレームの先頭でフレームごとに送信されます)。

フレームを次のポイントに渡す前に、そのようなサービスがキーを使用してコンテンツのマスクを解除、変更、および再マスクできると仮定するのは間違っていますか?私が間違っていない場合、これはどのようにして想定される脆弱性を修正しますか?

回答:


13

RFCのセクション10.3は、マスキングが必要な理由を正確に説明しています。これは、特定のハッキング手法に対する非常に具体的な対応です。それが対処しようとしている問題は、最も鋭いインターネットトランスポートセキュリティ関係者の一部が2010年の「Talking to Yourself for Fun and Profit for Fun and Profit」と呼ばれる論文で説明しています。

クライアントからサーバーへのマスキングは、プロキシがWebSocketsデータをキャッシュ可能なHTTPリクエストとして意図せずに処理するのを防ぐために、Websocketプロトコルによって使用されます。あなたがそれが愚かなプロキシにうろついているかどうかを議論することができます(そして私はそうだと思います)が、それが理由です。


はい、まだWebsocketサービス(クライアント側とサーバー側の両方)の完全なハンドを操作した後、プロトコルを十分に理解しているように感じます。プロキシがマスクを解除して変更することがどのように難しいのかわかりません。その場でフレーム。a)マスキングキーがデータ(ハッシュなど)に基づいていない、b)マスキングキーが予測できないため、中間の人がデータキー自体を変更できる、c)(私は)プロキシができる有効なクライアントセッションが作成/許可/スニークされると、有効なクライアントとして、完全に新しい非請求フレーム[適切にマスクされ、すべて]を通過する可能性があります
JSON

そうは言っても、私はこの決定がなされたとき、私はおそらく彼らの取締役会に多くの設定の知識と経験を持っていないことも理解しています。
JSON

3
そのセクションやそれが参照する論文を読んでいないようですね。マスキングは、プロキシがデータを読み取るのを防ぐためではなく、WebSocketsデータをキャッシュ可能なHTTPリクエストとして意図せずに処理するのを防ぐためです。あなたがそれが愚かなプロキシにうろついているかどうかを議論することができます(そして私はそうだと思います)が、それが理由です。
ロスパターソン

説明は+1。それはより良い答えをしただろうように見えます。移動して元の回答を編集できる場合は、すばらしいでしょう。
JSON

2

wss://SSL / TLSを介したWebSocket とも呼ばれるマスキングは役に立ちません。可能な限りSSL / TLSを使用することをお勧めしますので、マスキングは限界的なユースケースをカバーすると合理的に結論付けることができます。


1
これは実際にコメントされている必要がありますが、十分な評判を持っていません....
アダム・ズッカーマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.