关于javascript:WebSocket-API安全风险解读

32次阅读

共计 4232 个字符,预计需要花费 11 分钟才能阅读完成。

  1. WebSocket 协定
    1.1 简介
    WebSocket 协定是基于 TCP 的一种新的网络协议。它实现了客户端与服务器全双工(full-duplex)通信,即容许服务器被动发送信息给客户端。因而,在 WebSocket 中,客户端和服务器只须要实现一次握手,两者之间就间接能够创立持久性的连贯,并进行双向数据传输,这样也使得客户端和服务器之间的数据交换变得更加简略。

 
1.2 特点
WebSocket 特点如下:

较少的管制开销。在连贯建设后,服务器和客户端之间替换数据时,用于协定管制的数据包头部绝对较小。在不蕴含扩大的状况下,对于服务器到客户端的内容,此头部大小只有 2 至 10 字节(和数据包长度无关);对于客户端到服务器的内容,此头部还须要加上额定的 4 字节的掩码。

更强的实时性。因为协定是全双工的,所以服务器能够随时被动给客户端下发数据。

放弃连贯状态。与 HTTP 不同的是,Websocket 须要先建设连贯,这就使得其成为一种有状态的协定,之后通信时能够省略局部状态信息。而 HTTP 申请可能须要在每个申请都携带状态信息(如身份认证等)。

更好的二进制反对。Websocket 定义了二进制帧,绝对 HTTP,能够更轻松地解决二进制内容。

能够反对扩大。Websocket 定义了扩大,用户能够扩大协定、实现局部自定义的子协定。

更好的压缩成果。绝对于 HTTP 压缩,Websocket 在适当的扩大反对下,能够沿用之前内容的上下文,在传递相似的数据时,能够显著地进步压缩率。

1.3 WebSocket 和 HTTP 的区别

 

HTTP 是一个无状态的协定,使客户端向服务器申请资源,并从服务器接管响应。客户端应用 HTTP 申请 / 响应语法,即申请发送到服务器之后,服务器向客户端返回 HTML 文件、图像和其余媒体内容。

WebSocket 通信协议尝试在较大范畴内改良 Web 实时通信和插件技术,并提供全双工、基于事件的通信而无需采纳低效的轮询形式。开发人员能够从 Web 浏览器的 JS 端轻松地创立 WebSocket 连贯并发送数据,进而实现应用程序的实时数据传输的实现。

因为 WebSocket 是面向音讯的,因而它更加实用于实时通信,而 HTTP 更实用于申请和服务器 - 客户端通信的响应。

  1. WebSocket API
    Websocket 应用 ws 或 wss 的对立资源标志符(URI),其中 wss 示意应用了 TLS 的 Websocket,相似于 HTTP 协定的 http 和 https。wss 协定通过 TLS 连贯建设一个 WebSocket,即加密传输;ws 协定即明文传输。
     
    ws://echo.websocket.org
    wss://echo.websocket.org
    WebSocket API 与传统 API 一样都是由通信协议、域名、版本号、门路、申请参数等因素组成,只是因为 WebSocket API 在实现握手流程之后,客户端和服务端之间就创立了持久性的连贯,并且能够间接用文本音讯或者二进制音讯进行通信的数据交互,这样咱们在 WebSocket API 流量报文中看到的个别都是 JSON 格局文本音讯。
    从开发的角度,WebSocket API 还包含了:

构造函数,构造函数的语法示例为:const myWebSocket = new WebSocket(url [, protocols]),其中 url 示意连贯的 URL;protocols 示意为一个协定字符串或者一个蕴含协定字符串的数组,为可选。

属性:属性分为很多次要有 bufferedAmount,示意未发送至服务器的字节数;onopen,示意用于指定连贯胜利后的回调函数,等等。

办法:办法次要分为 close 和 send,别离示意 WebSocket 敞开连贯和数据传入服务器。

事件:事件次要有 close、error、message、open。

  1. WebSocket API 业务场景
    WebSocket API 作为一种重要客户端 - 服务器通信接口,到底在哪些业务场景下可能用到 WebSocket API 呢?次要分为三大类:

实时数据更新的应用程序:对于一些须要服务端一直发送数据在客户端实时显示的利用,应用 WebSocket API 作为数据传输接口无疑是最好的抉择。

游戏应用程序:在游戏利用中,个别的场景是服务器须要一直接收数据,无需刷新 UI,传输的数据就会在屏幕上失效,UI 也会主动刷新,不须要建设新的连贯。

聊天应用程序:聊天应用程序个别会有较长的连贯状态,以不便用户与用户之间的实时交换,采纳 WebSocket API 只需建设一次连贯便能够实现一对一的音讯传输,并且放弃长时间的通信连贯。

具体业务场景列举:

 

  1. WebSocket API 平安危险
    WebSocket API 的平安危险次要分为两大类:惯例攻打危险和特有攻打危险。以下是这两大类危险的具体解读。
    4.1 WebSocket API 惯例攻打危险
    (1)音讯体输出破绽
    和 HTTP 协定一样,WebSocket API 在传输音讯的时候个别采纳 json 格局传输文本,所以对于音讯体中参数仍然能够能够进行 SQL 注入、XSS、命令执行、文件读取、SSFR、任意文件上传 …… 等惯例输出性破绽攻打。

 
破绽案例:
在线聊天利用中应用 WebSocket API 在客户端和服务端之间传输音讯。当一个用户输出聊天音讯时,如下的一个 WebSocket 音讯被发送到服务端:


服务端会将这个音讯内容通过 WebSocket API 转发给另外一个用户,而后在另一个用户的浏览器中被 JS 渲染为一段 HTML 代码。

​当服务器没有对转发的内容做平安进攻或过滤时,通过批改 WebSocket API 音讯体施行 xss 攻打。


(2)身份认证绕过
WebSocket API 没有规定服务器在握手阶段应该如何认证客户端身份。服务器能够采纳任何 HTTP 服务器的客户端身份认证机制,如 cookie 认证,HTTP 根底认证,TLS 身份认证等,在 WebSocket API 在身份认证面临的攻打危险和传统的 API 面临的危险是一样的,因而 WebSocket API 同样面临着 OWASP API 2023 十大平安危险中的 API2:身份认证生效危险。

 
(3)受权生效
同身份认证一样,WebSocket API 没有明确指定任何受权形式,API 中用户资源拜访等的受权策略由服务端或开发者实现。WebSocket API 也会存在和传统 Web 利用雷同的平安危险,如:垂直越权、程度越权、未受权拜访等等平安危险。所以 WebSocket API 同样面临 OWASP API 2023 十大平安危险中 API1: 对象级别受权生效、API3: 对象属性级别受权生效、API5: 性能级别受权生效的平安危险。

 
(4)拒绝服务
WebSocket API 同样易蒙受拒绝服务攻打,其面临危险分为客户端拒绝服务危险和服务端拒绝服务危险。

客户端拒绝服务:WebSocket 连贯限度不同于 HTTP 连贯限度,WebSocket 有一个更高的连贯限度,不同的浏览器的最大连接数也存在差别,通过发送歹意内容,占用所有 Websocket,导致浏览器资源耗尽,引起拒绝服务。

服务端拒绝服务:WebSocket 建设的是长久连贯,只有客户端或服务端其中一方发动敞开连贯的申请,连贯才会敞开。攻击者能够通过发动申请并建设大量的连贯,导致服务器资源耗尽,引发拒绝服务攻打。

4.2 WebSocket API 特有攻击面
(1)跨站 WebSockets 劫持
在 WebSocket API 发动 WebSocket 握手申请时,浏览器会在申请中增加一个名为 Origin 的 HTTP 头,Oringin 字段示意发动申请的源,以此来避免未经受权的跨站点拜访申请。WebSocket 标准中没有强制规定握手阶段的 Origin 头是必须的,且 WebSocket 不受浏览器同源策略的限度。如果服务端没有针对 Origin 头部进行验证可能会导致跨站点 WebSocket 劫持攻打,当 WebSocket 握手申请仅依附 HTTP cookie 进行会话解决并且不蕴含任何 CSRF token 或其余不可预测的值时,也有可能会造成这种破绽。这攻打危险相似于 JSONP 劫持,是属于 CSRF 攻打的一种。
破绽示例:
通过实时聊天发送聊天音讯:

 
在 WebSocket 握手申请中发现仅仅是靠 cookie 进行会话解决,并没有 CSRF 的防护伎俩。


查看 WebSocket 历史音讯记录。


在浏览器中找到破绽利用服务器。

 
同时咱们在 burp 设置一个 burp client,这里模仿的是攻击者。
 

 
在破绽利用服务器中贴入利用 JS 代码。

 
破绽利用服务器并将破绽利用程序传递给受害者,而后在攻击者也就是咱们创立的 burp client 中返回了受害者相干敏感信息。

 
解码发现用户登陆凭证。


(2)中间人攻打
同样是呈现在操控 WebSocket 握手流程时的攻打危险,能够通过获取并篡改 WebSocket 握手申请,施行以下攻打:
通过伪造客户端信息与服务器建设 WebSocket 连贯;无条件信赖 HTTP 头,导致某些安全策略能够被绕过。例如:X-Forwarded-For 头,XSS 绕过 WAF;应用程序自定义的 HTTP 标头引入的攻击面。
破绽案例:
在线聊天中应用了 XSS 攻打之后,攻打已被阻止,并且 WebSocket 连贯已终止。

 
拦挡 WebSocket 握手申请并应用 X -Forwarded-For 头来绕过黑名单。

 
始终采纳这种形式进行绕过后,等到聊天框从新呈现就阐明绕过了黑名单的检测,并且能够施行 xss 攻打,后续步骤能够参考上述音讯体输出破绽攻打中的案例。

 
4.3 平安危险总结
实际上,简直所有的 Web 破绽都有可能呈现在 WebSocket 中。因为,WebSocket 实质上就是一个通过 HTTP 建设连贯的双向全双工的通信协议而已,但因为其相比 HTTP 多了一“工”的个性,可能会呈现一些 WebSocket API 特有的攻打场景。所以,WebSocket API 除了面临着传统 API 的平安危险之外,还有容易蒙受因为本人特殊性而产生的攻打,这些攻打来自于 WebSocket API 的握手申请流程。
 
对于 Portal Lab
星阑科技 Portal Lab 致力于前沿平安技术钻研及能力工具化。次要钻研方向为 API 平安、利用平安、攻防反抗等畛域。实验室成员研究成果曾发表于 BlackHat、HITB、BlueHat、KCon、XCon 等国内外出名平安会议,并屡次公布开源平安工具。将来,Portal Lab 将持续以凋谢翻新的态度踊跃投入各类平安技术钻研,继续为平安社区及企业级客户提供高质量技术输入。

正文完
 0