WebSocket新特性及其安全研究

2015-01-01 03:05
网络安全技术与应用 2015年11期
关键词:代理服务器掩码服务器端

0 引言

传统的浏览器只允许HTTP接收或者发送消息,大量消耗了服务器带宽和资源,且无法满足实时性强的Web应用。基于此,HTML5中WebSocket协议通过建立一个持续的、全双工的信道,来传输不带元数据的信息,可以满足某些Web应用的实时要求。但WebSocket技术的发展的前提是必须有力的保障其安全性。

1 WebSocket协议

服务器推送的实现方式主要基于Ajax轮询方式、基于Ajax的长轮询方式、基于iframe的流方式。然而这些方式都存在浪费资源、占用带宽等问题。Websocket协议是HTML5实现的浏览器与服务器双向通信的新协议之一,能更好地节省服务器资源和带宽,并达到实时通信。浏览器和服务器只需一个“握手”动作就能建立一条快速通道,进行数据的相互传送。

握手动作的请求端主要代码:

握手动作接收端主要代码:

当WebSocket连接建立之后,客户端和服务器端通过“帧”来相互发送消息。下图表示数据传输的WebSocket帧格式:

其中参数具体意义如下表:

位名称 所占位数 具体意义FIN 1 表示此帧是不是消息的最后帧RSV1,RSV2,RSV3 1 自定义协议位,必须是0 Opcode 4 定义载荷数据类型MASK 1 是否有掩码位,值为1 Payload length如果值为0-125,则是有效载荷长度;如果值为126,接下来2字节的16位无符号整数为有效载荷长度;如果值为127,接下来8字节的64位无符号整数为有效载荷长度Masking-key 0或4 掩码位7或者7+16或者7+64

2 WebSocket安全特性研究

WebSocket可能会遇到很多攻击,比如说不法分子试图复制、删除和修改用户数据,在Web通信过程中,恶意窃取或拦截信息等。而WebSocket的安全特性可以缓解某些特性的攻击。

2.1 Origin特性

在客户端发起的WebSocket握手中,一般会有Origin字段,它主要用来标识这个请求最初发起在哪里。如果浏览器不能确定源的位置,那么初始握手中Origin字段的值为空。Origin字段允许接收方拒绝不想处理或恶意的连接,并发送一个适当的HTTP错误码。用于保护WebSocket服务器不被未授权的脚本跨源使用WebSocket API,比如说源可以有效的缓解拒绝服务(DoS)攻击。

2.2 WebSocket握手安全

在服务器发起的握手连接初始化期间,WebSocket服务器用Sec-WebSocket-Key,Sec-WebSocket-Accept两个头字段生成应答信息,消除跨协议攻击的可能性。WebSocket协议中包含了一个用于识别协议的全局唯一标识符(Globally Unique Identifier,GUID),是258EAFA5-E914-47DA-95CA-C5AB0DC85B11。服务器首先读取Sec-WebSocket-Key首标值,基于以下的算法生成正确的应答信息:

(1)服务器添加GUID值拼接字符串;

(2)服务器用SHA1散列转换结果;

(3)服务器用Base64编码转换结果;

(4)服务器将结果做为Sec-WebSocket-Accept首标的值返回。

基于以上算法,服务器端将生成的安全密钥作为应答信息发回给客户端,由此建立双方的WebSocket连接通道,进行数据传输。

2.3 代理服务器和mask

除了客户端和服务器端是WebSocket的攻击对象之外,Web基础设施的其他部分也可能是攻击的对象,比如说代理服务器。代理服务器是介于客户端和Web服务器之间的服务器。“攻击者”如果建立一个到WebSocket服务器的连接,模拟客户端发送HTTP的UPGRADE请求,然后再发送数据,服务器端返回一个响应信息,若有代理服务器,响应信息会首先存放在缓存中,以致缓存中毒。基于此类攻击,WebSocket协议添加屏蔽及掩码位,客户端发送的每一帧都有新的掩码,以保护数据在传输中的安全性。

WebSocket帧的第二个字节的第一位表示该帧是否进行了屏蔽,WebSocket协议默认所有帧都要进行屏蔽再发送。如上节所示,掩码位在扩展载荷数据的后四位字节。WebSocket服务器在处理接收到的载荷数据之前都要先用掩码对屏蔽进行解除。可用以下函数解除屏蔽:

var unmask function(mask_bytes.buffer){var payload = new Buffer(buffer.length);for(var i=0;i

解除屏蔽之后,服务器可以得到原始的帧数据:二进制消息可以直接交付;文本消息将进行UTF-8解码,并通过服务器API输出字符串。

2.4 连接的保密性和完整性

通信安全的中心内容就是保证信息在信道内的保密性、消息完整性和可认证性。SSL/TLS用于在客户端和服务器端之间建立安全通道,以保护在不安全的公众网络上交换的数据。与WebSo-cket从一个HTTP握手开始升级到WebSocket协议一样,WebSo-cket安全握手从HTTPS握手开始。HTTPS和WSS协议非常类似,都是通过TCP连接的TLS基础上运行的。与HTTP相同,WebSock et也通过使用证书来配置TLS加密。对于HTTPS,客户端和服务器端在使用HTTP协议之前要先建立一个安全连接。类似的,对于WSS,客户端和服务器端首先建立一个安全连接,然后进行HT TP握手,最后升级WebSocket协议。

3 结语

实时通信技术是Web通信的重要应用领域,正是WebSocket等相关技术的发展与应用,使得Web浏览器的实时通信水平有了长足的发展进步。同时,安全性对于WebSocket能够广泛推广有举足轻重的地位。本文介绍了WebSocket协议的新规范,并详细阐述了通信中可能遇到的安全威胁及其相关的安全特征。

猜你喜欢
代理服务器掩码服务器端
基于RISC-V的防御侧信道攻击AES软件实现方案
Linux环境下基于Socket的数据传输软件设计
低面积复杂度AES低熵掩码方案的研究
地铁信号系统中代理服务器的设计与实现
基于布尔异或掩码转算术加法掩码的安全设计*
IP地址隐藏器
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
基于掩码的区域增长相位解缠方法