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

阅读量499800

|

发布时间 : 2017-05-02 14:15:48

x
译文声明

本文是翻译文章,文章来源:securelayer7.net

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

译文仅供参考,具体内容表达以及含义原文为准。

http://p2.qhimg.com/t011d6d4e6999e6f6a7.jpg

翻译: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功能的网页。

t012767509c231fcd68.png

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

t014611d97b9118a1df.png

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

请求如下所示:

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

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

响应如下所示:

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

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

请求:

t01f1cc484ed1b1838a.png

响应:

t01edf0c968cd75c3f3.png

用户界面:

t01720fcf1e6f710072.png


WebSockets的安全隐患

A.跨站WebSocket劫持

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

t010f678d40356ae08d.png

但是,这种攻击不止像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服务器的小脚本。

t01ce33828431014fdf.png

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

t01120c7d15d4c6d438.png

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

防护:

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

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


结论

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


参考文献

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

关于WebSockets:https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications

安全隐患:https://www.owasp.org/index.php/Testing_WebSockets_(OTG-CLIENT-010)

本文翻译自securelayer7.net 原文链接。如若转载请注明出处。
分享到:微信
+13赞
收藏
Legendervi
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66