Действительно ли маскировка необходима при отправке из клиента Websocket?

10

В соответствии с действующим RFC для Websocket, клиенты Websocket при отправке маскируют все данные внутри фреймов (но сервер не обязан). Причина, по которой протокол был разработан таким образом, заключается в том, чтобы предотвратить изменение данных фрейма вредоносными службами между клиентом и сервером (прокси и т. Д.). Однако маскирующий ключ все еще известен таким службам (он отправляется для каждого кадра в начале каждого кадра).

Неправильно ли я предположить, что такие сервисы все еще могут использовать ключ для снятия маскировки, изменения и затем перемаскирования содержимого перед передачей кадра в следующую точку? Если я не ошибаюсь, как это исправить предполагаемую уязвимость?

JSON
источник

Ответы:

13

Раздел 10.3 RFC объясняет, почему требуется маскировка. Это очень специфический ответ на конкретную технику взлома. Проблема он пытается адрес описан в статье под названием 2010 Talking к себе для развлечения и прибыли некоторые из острейших людей интернет - безопасности транспорта.

Маскирование между клиентом и сервером используется протоколом Websocket, чтобы прокси-серверы невольно рассматривали данные WebSockets как кешируемый HTTP-запрос. Вы можете поспорить, потворствует ли это глупым прокси (и я думаю, что это так), но это причина.

Росс Паттерсон
источник
Да, но после работы с полными сервисами Websocket (как на стороне клиента, так и на стороне сервера) я чувствую, что хорошо понимаю протокол и не понимаю, как прокси-серверу будет сложно разоблачить и изменить кадры на лету. а) ключ маскирования не основан на данных [таких как хэш], б) ключ маскировки не предсказуем, поэтому человек, занимающий промежуточное звено, может изменить данные и сам ключ, в) (я полагаю) прокси-сервер может вероятно, передаст совершенно новые, незапрошенные кадры [правильно замаскированные и все], как действительный клиент после того, как через него будет создан / разрешен / прокрался действительный клиентский сеанс
JSON
С учетом сказанного я также понимаю, что, скорее всего, у меня не было знаний и опыта многих членов совета директоров, когда это решение было принято.
JSON
3
Похоже, вы не читали этот раздел или статью, на которую он ссылается. Маскировка не препятствует тому, чтобы прокси считывали данные, она препятствует тому, чтобы они невольно рассматривали данные WebSockets как кешируемый HTTP-запрос. Вы можете поспорить, потворствует ли это глупым прокси (и я думаю, что это так), но это причина.
Росс Паттерсон
+1 за объяснение. Похоже, это сделало бы лучший ответ. Если вы можете отредактировать свой первоначальный ответ, было бы здорово.
JSON
2

Маскировка бесполезна с wss://WebSockets через SSL / TLS. Поскольку рекомендуется использовать SSL / TLS всякий раз, когда это возможно, вы можете сделать разумный вывод о том, что маскирование охватывает случай предельного использования.

Лоран Кайетт
источник
1
Это действительно должен был быть комментарий, но у вас пока недостаточно репутации ...
Адам Цукерман