Ist beim Senden vom Websocket-Client wirklich eine Maskierung erforderlich?

10

Der aktuelle Websocket-RFC erfordert, dass Websocket- Clients beim Senden alle Daten innerhalb von Frames maskieren (der Server muss dies jedoch nicht). Der Grund, warum das Protokoll auf diese Weise entwickelt wurde, besteht darin, zu verhindern, dass Rahmendaten durch böswillige Dienste zwischen Client und Server (Proxys usw.) geändert werden. Der Maskierungsschlüssel ist solchen Diensten jedoch weiterhin bekannt (er wird zu Beginn jedes Frames pro Frame gesendet).

Bin ich falsch anzunehmen, dass solche Dienste den Schlüssel weiterhin zum Entlarven, Ändern und erneuten Maskieren des Inhalts verwenden können, bevor der Frame an den nächsten Punkt übergeben wird? Wenn ich mich nicht irre, wie behebt dies die vermeintliche Sicherheitslücke?

JSON
quelle

Antworten:

13

In Abschnitt 10.3 des RFC wird genau erläutert, warum eine Maskierung erforderlich ist. Es ist eine sehr spezifische Antwort auf eine bestimmte Hacking-Technik. Das Problem, das es zu lösen versucht, wird in einem Artikel aus dem Jahr 2010 mit dem Titel " Talking to Yourself for Fun and Profit" von einigen der schärfsten Sicherheitsleute für den Internet-Transport beschrieben.

Die Client-zu-Server-Maskierung wird vom Websocket-Protokoll verwendet, um zu verhindern, dass Proxys WebSockets-Daten unabsichtlich als zwischenspeicherbare HTTP-Anforderung behandeln. Sie können sich darüber streiten, ob das für dumme Proxies von Belang ist (und ich denke, das ist es), aber das ist der Grund.

Ross Patterson
quelle
Ja, aber nachdem ich mit einer Hand voll Websocket-Dienste (sowohl auf Client- als auch auf Serverseite) gearbeitet habe, habe ich das Gefühl, dass ich das Protokoll gut verstehe, und ich sehe keine Herausforderung für einen Proxy, es zu demaskieren und zu ändern Frames on the fly. a) Der Maskierungsschlüssel basiert nicht auf den Daten [wie einem Hash], b) der Maskierungsschlüssel ist nicht vorhersehbar, so dass ein Mann in der Mitte die Daten und den Schlüssel selbst ändern kann, c) (glaube ich) ein Proxy kann Übergeben Sie wahrscheinlich völlig neue, nicht angeforderte Frames [ordnungsgemäß maskiert und alle] als gültigen Client, sobald eine gültige Client-Sitzung erstellt / zugelassen / durchgeschlichen wurde
JSON
Vor diesem Hintergrund verstehe ich auch, dass ich wahrscheinlich nicht über das Wissen und die Erfahrung vieler Mitarbeiter in ihrem Vorstand verfüge, als diese Entscheidung getroffen wurde.
JSON
3
Klingt so, als hätten Sie diesen Abschnitt oder das darin enthaltene Papier nicht gelesen. Die Maskierung soll nicht verhindern, dass Proxys die Daten lesen, sondern dass sie WebSockets-Daten unabsichtlich als zwischenspeicherbare HTTP-Anforderung behandeln. Sie können sich darüber streiten, ob das für dumme Proxies von Belang ist (und ich denke, das ist es), aber das ist der Grund.
Ross Patterson
+1 für die Erklärung. Das sieht so aus, als hätte es eine bessere Antwort gegeben. Wenn Sie Ihre ursprüngliche Antwort bearbeiten können, wäre das großartig.
JSON
2

Das Maskieren ist bei wss://WebSockets über SSL / TLS nutzlos . Da empfohlen wird, wann immer möglich SSL / TLS zu verwenden, können Sie vernünftigerweise den Schluss ziehen, dass die Maskierung einen geringfügigen Anwendungsfall abdeckt.

Laurent Caillette
quelle
1
Dies hätte wirklich ein Kommentar sein sollen, aber Sie haben noch keinen ausreichenden Ruf ...
Adam Zuckerman