【技术分享】WebSocket漏洞与防护详解

栏目: 后端 · 发布时间: 6年前

内容简介:【技术分享】WebSocket漏洞与防护详解
2017-05-02 14:15:48 阅读:237次 作者:Legendervi

【技术分享】WebSocket漏洞与防护详解

翻译: Legendervi

预估稿费:120RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

socket简介

一个socket是一次网络通信中的一个端点。socket总是分为两部分:一个IP地址和一个端口。

例如:当您访问www.securelayer7.net时,你的计算机和网站的服务器正在使用socket(端点)进行通信。网站的端点将是:www.securelayer7.net:80,你的计算机的端点将是你的IP地址,后跟任何随机端口号,如192.168.0.111:6574

关于WebSocket

传统上,HTTP活动是由客户端请求资源而服务器来提供服务。 服务器不能自己与客户端通话。但 这个限制已经被新技术WebSocket消除了。

WebSockets提供持久连接,也称为客户端和服务器之间的全双工连接,双方可以随时使用该连接开始发送数据。

它是如何工作的?

客户端 ,如 浏览器,加载具有WebSocket功能的网页。

【技术分享】WebSocket漏洞与防护详解

页面的源代码负责创建WebSocket连接。

【技术分享】WebSocket漏洞与防护详解

该脚本通过WebSocket握手建立WebSocket连接。此过程从客户端向服务器发送常规HTTP请求开始。此请求中包含upgrade请求头,通知服务器客户端希望建立WebSocket连接。

请求如下所示:

【技术分享】WebSocket漏洞与防护详解

值得注意的是,WebSocket使用ws作为访问方案而不是http。所以,上面的请求访问了:ws://127.0.0.1:9000 / websocket

如果服务器支持WebSocket(针对上述请求),则它将在其响应中使用upgrade请求头进行回复。

响应如下所示:

【技术分享】WebSocket漏洞与防护详解

在这个阶段,协议将从HTTP切换到WS。并且在浏览器和服务器之间建立全双工连接。

在这个例子中,我们有一个WebSocket功能,它回传客户端发送的所有单词。例如:如果用户键入单词“Hiii”,那么服务器也会用“Hiii”来回复。

请求:

【技术分享】WebSocket漏洞与防护详解

响应:

【技术分享】WebSocket漏洞与防护详解

用户界面:

【技术分享】WebSocket漏洞与防护详解

WebSockets的安全隐患

A.跨站WebSocket劫持

注意下面的请求。Origin头有不同的来源127.0.0.1:5555。该请求是使用受害者的cookie发送到WebSocket服务器。这意味着可以使用WebSocket发送类似于CSRF的攻击。

【技术分享】WebSocket漏洞与防护详解

但是,这种攻击不止像CSRF将POST数据发送到WebSocket服务器,它还会读取服务器响应。这是因为默认情况下WebSocket服务器不检查“Origin”头,它只是使用cookies检查经过身份验证的用户会话,并将响应发送回请求的“Origin”。

因此,在上述情况下,攻击者也可以读取响应,从而代表受害者控制双向通信。

防护:

检查请求的“Origin”头。既然,这个标题是为了防止跨源攻击。如果“Origin”不被信任,那么只需拒绝该请求。例如:如果您的网站的域名为www.example.com,请检查请求是否源自该来源,如果是,则处理该请求。如果否,则拒绝。

另一个解决方案是使用基于会话的个人随机令牌(就像CSRF-Tokens)。生成服务器端,并将它们放在客户端的隐藏字段中。并要求验证。

B.网络敏感信息泄露

就像HTTP是纯文本协议一样,WebSockets协议也称为纯文本。这导致攻击者捕获和修改网络上的流量。

防护:

建议使用加密(TLS)WebSockets连接。它的URI方案是wss://。默认端口为443。

如下演示,请求访问ws://127.0.0.1:900/websocket/。如果它是一个安全连接,那么请求将访问wss://127.0.0.1:900/websocket/。

C.拒绝服务

默认情况下,WebSockets允许无限制的连接导致DOS。以下是无限次连接到WebSocket服务器的小脚本。

【技术分享】WebSocket漏洞与防护详解

执行此脚本后,让我们看看WebSocket服务器的日志:

【技术分享】WebSocket漏洞与防护详解

我们可以看到,几秒钟内就已经完成了475个连接。这将耗尽服务器资源,最终导致DOS攻击。

防护:

使用基于IP的速率限制将有助于解决这个问题。

速率限制应允许5-10连接自由,即不进行任何安全检查。但在10个连接之后,如果同一个IP尝试连接,那么应该向用户显示验证码,以确保自动化 工具 不会产生恶意请求,同时合法用户不会被拒绝服务。

结论

WebSockets非常适合全双工通信,有许多聊天应用程序和社交网站使用。实现WebSockets使应用程序更具可用性和吸引力。但就像任何其他技术一样,也需要在考虑安全性的情况下使用。

参考文献

演示代码取自: https://github.com/ghedipunk/PHP-Websockets

【技术分享】WebSocket漏洞与防护详解 【技术分享】WebSocket漏洞与防护详解

本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。

原文链接:http://blog.securelayer7.net/owasp-top-10-penetration-testing-soap-application-mitigation/

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Haskell

Haskell

Simon Thompson / Addison-Wesley / 1999-3-16 / GBP 40.99

The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on th......一起来看看 《Haskell》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具