WebSocket协议分析

Posted kat-sec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebSocket协议分析相关的知识,希望对你有一定的参考价值。

WebSocket协议分析

1.什么是WebSocket协议

WebScoket协议是基于TCP协议建立的全双工通信,所谓的全双工通信就是双向同时通信。

2.WebSocket协议优点

WebSocket协议使客户端和服务器之间的数据交换更加简单,允许服务器主动向客户端推送数据。
在WebSoket协议中客户端只需要和服务器建立一次握手,俩者之间就可以直接建立持久性的连接。

3.与HTTP协议对比

  • HTTP协议:半双工协议(同一时刻流量只能单向流动)
  • Socket协议:全双工

  • HTTP协议:如果需要进行轮询只能客户端不断的进行请求服务端信息,消耗了系统大量的带宽资源
  • Socket协议:服务端可以主动推送,进行轮询

4.WebSoket协议握手

WebSoket协议握手只需要进行一次,即可进行数据传输。
基于HTTP/1.1进行请求,成功后服务端返回101。
技术图片

5.WebSoket协议特性

WebSocket定义了两种URI格式
ws://“和“wss://”,类似于HTTP和HTTPS, “ws://“使用明文传输,默认端口为80,”wss://“使用TLS加密传输,默认端口为443

ws-URI : "ws://host[:port]path[?query]"  
wss-URI : "wss://host[:port]path[?query]"

6.WebSoket协议安全性问题

6.1 认证问题

WebSocket协议没有规定服务器在握手阶段应该如何认证客户端身份。
也就是说无论是哪个客户端都可以尝试与之进行握手,尝试建立WebSocket连接。

6.2 授权问题

WebSocket协议没有指定任何授权方式,应用程序中用户资源访问授权问题取决于服务端和系统开发者。
WebSocket应用也会存在和传统Web应用相同的安全风险,如:垂直权限提升和水平权限提升。

6.3 跨域请求

在发起WebSocket握手请求时,浏览器会在请求中添加一个名为Origin的HTTP头,Oringin字段表示发起请求的源,以此来防止未经授权的跨站点访问请求。

WebSocket 的客户端不仅仅局限于浏览器,因此 WebSocket 规范没有强制规定握手阶段的 Origin 头是必需的,并且WebSocket不受浏览器同源策略的限制。如果服务端没有针对Origin头部进行验证可能会导致跨站点WebSocket劫持攻击。

什么是WebSocket劫持攻击?

1、用户A正常登陆一个需要建立WebSocket的应用B 。
2、攻击者诱导用户A访问网页(该网页上存在JS代码,当用户A访问时会系统建立WebSoket连接,同时由于用户A已经成功登陆B,当建立连接时浏览器会自动的带上存储的Cookie信息,这样攻击者即可绕过身份认证从而建立WebSocket连接。)
3、由于WebSocket是全双工通信,服务端会主动发送数据给客户端。从而攻击者可被动获取数据和主动发起请求。

技术图片

如何防范?

1、在服务器端的代码中增加 对Origin头的检查,如果客户端发来的 Origin 信息来自不同域,服务器端可以拒绝该请求。
2、仅仅是检查是不够的,因为Origin头可以进行伪造,绕过对Origin头的检查。
3、可以参考CSRF加Token机制。

6.4 拒绝服务

客户端拒绝服务攻击

客户端发起超多的WebSocket连接(不同浏览器的限制数不同)

服务端拒绝服务攻击

WebSocket建立的是持久连接,只有客户端或服务端其中一发提出关闭连接的请求,WebSocket连接才关闭,因此攻击者可以向服务器发起大量的申请建立WebSocket连接的请求,建立持久连接,耗尽服务器资源,引发拒绝服务。

7. 总结

在即时通讯等应用中,WebSocket具有很大的性能优势, 并且非常适合全双工通信,但是,和任何其他技术一样,开发WebSocket应用也需要考虑潜在的安全风险。

以上是关于WebSocket协议分析的主要内容,如果未能解决你的问题,请参考以下文章

CPNtools协议建模安全分析---实例变迁标记

websocket协议详解与抓包分析

websocket协议详解与抓包分析

使用Websocket实现消息推送(下)

golang websocket

WebSocket协议探究:MQTT子协议