APP下载

WebSocket安全漏洞及其修复

2016-11-09曾德愚

数字技术与应用 2016年9期
关键词:修复漏洞

曾德愚

摘要: WebSocket使浏览器提供对Socket的支持,在客户端和服务器之间提供基于单TCP连接的双向通道,常用于实时性要求较高的场合,例如证券行情、在线互动游戏及设备同步等方面。但由于架构设计原因,WebSocket也存在不少安全问题,有些漏洞将导致极大的破坏,本文就危害较大的跨站WebSocket劫持漏洞进行原理分析,提出检测及修复方法。

关键词:WebSocket 漏洞 修复

中图分类号:TP309 文献标识码:A 文章编号:1007-9416(2016)09-0198-01

1 序言

在WebSocket高效解决信息实时同步问题之前,一般采用轮询Polling和 Comet技术,不光造成设计复杂,同时带来系统额外负载。WebSocket较好地解决了此类问题。虽然WebSocket协议在最初设计的时候就充分考虑了安全保障,但任何软件产品都不可能十全十美,随着其被广泛使用,诸如Wireshark漏洞、Asterisk WebSocket Server DoS漏洞、特别是OpenStack Nova console WebSocket漏洞等安全问题出现,引起了业界对危害较大的跨站WebSocket劫持漏洞的关注。

WebSocket是持久化协议,提供全双工连接,基于TCP实现消息流,基于HTTP协议进行握手协议连接。在浏览器向服务器端申请切换到WebSocket协议之后,如果服务器端返回101响应,则服务器端基于相同端口完成协议切换,浏览器和服务器端之间可使用WebSocket API传输文本和二进制消息。

2 漏洞原理

在创建全双工通信的过程中,客户端基于HTTP握手切换到WebSocket协议,在握手Get请求中,Cookie头部把域名下的Cookie全部发送到服务器端,由于WebSocket协议没有规定服务器在握手阶段认证客户端身份的手段,所以服务器可采用任何身份认证机制,因此给黑客伪造握手请求绕过身份认证提供了极大可能,从而实现跨站请求伪造攻击。

例如,某用户被引导访问到在某元素中植入了WebSocket握手请求申请跟目标应用建立WebSocket连接的恶意网页,则自动发起连接请求,如果服务器端没有增加Origin检查机制,则该请求将切换到WebSocket协议,恶意网页不通过身份认证即连接至WebSocket服务器,实现窃取或修改服务器端信息。

3 漏洞检测

可以通过重发WebSocket协议转换请求来检测服务器端是否存在相关漏洞,原理在于使用能拦截WebSocket握手请求的软件,首先修改请求中的Origin头信息,然后重新发送请求,如果服务器返回101响应,则说明服务器端没有执行相关检查,如果没有返回101响应,则说明服务器端拒绝来自不同源的连接请求,则可认为是安全的。

本文采用开源OWASP ZAP软件拦截WebSocket握手请求及WebSocket消息通信,修改Origin后重发请求,如果连接成功后,则重发WebSocket客户端消息确认漏洞。

具体过程为在浏览器中配置ZAP代理后访问WebSocket应用,请求头部如有HTTP Basic Authorization信息则表示登录成功;重发WebSocket协议升级请求,将Origin修改为任意网址并发送;在响应标签中如服务器端返回101信息则说明协议握手成功;再重发WebSocket消息进一步确认漏洞,如ZAP收到两条服务器返回消息则可确定应用站点存在跨站WebSocket劫持漏洞。

4 漏洞修复

跨站WebSocket劫持漏洞危害较大,它既可以修改服务器数据,还可以控制读取及修改双向通道,比通过恶意网页发起数据修改请求,但不会导致信息泄漏的跨站请求伪造攻击CSRF危害更大。

本文提出在服务器端代码中增加Origin检查机制修复漏洞,如果浏览器发送的Origin信息来源不同,则服务器端拒绝请求并发回拒绝连接403错误。

可以使用Java EE提供的允许开发人员重写配置用来拦截检查协议握手过程的配置器,继承并重写checkOrigin方法,参考代码如下。

单纯的Origin检查不够全面,如果WebSocket客户端是非浏览器,则客户端请求无Origin,在此情形下可以借鉴CSRF的令牌机制进一步增强安全性,因篇幅原因,本文不予深入讨论。

参考文献

[1]何健.深入理解跨站点WebSocket劫持漏洞的原理及防范.2016(05):10.

猜你喜欢

修复漏洞
漏洞
侦探推理游戏(二)
青铜器鉴定与修复初探
三明:“两票制”堵住加价漏洞
自体骨游离移植修复下颌骨缺损的临床研究
营口市典型区土壤现状调查与污染土壤的修复
高铁急救应补齐三漏洞
细数监管漏洞