WebRTC潜在安全风险分析

Andreas Reiter, Alexander Marsalek IAIK TU Graz, SAC'17

Web-based Real-Time Communication实现了浏览器到浏览器的通讯。这篇文章提出了4种针对WebRTC协议本身的攻击,不可信的sigal server、探测内网、Fingerprint和拒绝服务攻击。对于每种攻击,都提出了相应的解决方法。

Introduction & Background

经典的web应用是server-client模型,client之间不能互相访问。WebRTC作为一个实时音视频通讯技术,使得两个应用,例如两个浏览器,在不需要中间服务器的情况下,可以直接互相通讯。这使得浏览器本身也要起到部分服务器的功能,这些功能带来了潜在的安全问题。

webrtc的整体架构和流程 
1
1. 发起请求的节点(offerer)创建一个offer,包含自己的连接信息 
2. offer通过signal channel发送到 另一方节点 
3. 另一方节点(answerer)基于offer创建一个answer,发送回offerer 
4. offerer和answerer可能需要用ICE协议来联系STUN server 或者 TURN server,获得自己的外网地址 
5. 双方节点都获知了对方的连接信息,建立点对点的通信

Session Description Protocol(SDP)用来描述offer/answer,Interactive Connectivity Establishment (ICE)用来实现NAT穿越。signal channel是双方在连接建立前唯一的通道,需要实现安全通信。问题的关键在于webrtc标准里并没有明确指定signal channel如何实现

Security Analysis

分析WebRTC中已有的安全机制

WebRTC规范中不允许明文发送数据,目前的实现默认使用DTLS-SRTP进行媒体传输,DTLS进行数据传输。 DTLS-SRTP中,双方为每次连接生成一个新的自签名的证书,signal channel作为一个可信信道来传输证书指纹,从而实现认证。 
2
3
ice字段用来发现remote candidate,避免其他节点参与本次连接;fingerprint字段就是之后DTLS会使用的自签名证书的哈希。最后点对点通信时通过验证证书指纹是否和signal channel中传输的相符,来防止中间人攻击。

在这个场景中,signal server起到了Identity Provider的作用。Rescorla提出了图3的安全架构,浏览器直接和IdP交流获得身份信息,signal信道传输身份信息

在这种方法下,signal server不需要被完全信任,需要和不同的IdP建立信任。

WebRTC引入了新的需要保护的资源: 
1. 外网IP:泄漏用户的位置信息。server-client模型中server获得所有client的ip,WebRTC中任何client都能获得另外一个client的ip 
2. 私有IP和内部网络:连接建立的过程中client的私有IP被暴露 
3. 带宽:防止DoS (音视频流量大) 
4. 节点身份:server-client模型通常只验证服务器身份,WebRTC需要验证双方身份

Attacks & Mitigation

作者提出了针对协议本身,不针对具体实现的4种攻击(需要特定的环境)

不可信的signal server

在没有其他IdP的情况下,节点只能相信signal server 
4
解决方法是增加一个可信第三方,或者让用户自行选择是否相信证书

探测内网

JavaScript可以使用WebRTC的接口。为了找到最高效的通讯路径,如在同一个内网中使用私有IP地址,在NAT之后需要NAT穿越,因此所有网络接口的IP是暴露给JavaScript的。 
利用这个接口,可以获得VPN后的用户的实际IP地址,也可以用javascript port scanner来探测内网。

inter-protocol attack:让一种协议的内容按照另一种协议来解析。 有些协议忽略错误的输入,直到接收到有效的输入 
(HTTPS vs FTPS)

解决方法:更细粒度的权限控制

WebRTC指纹

利用WebRTC获得浏览器的各个IP地址,从而对每个浏览器建立唯一的标识,可以跟踪用户 
内网ip,WiFi ip,虚拟机adapter ip,virtual adapter ip to communicate with plugged-in or host devices

Flooding the Web

offer发送后,可以任意数量的IceCandidate,接受方会去测试可否连接。 
STUN 测试连接时会发送 bind request,其中用户名最多255个字节,STUN+IP包最大368字节 
还有其他参数: 
1. 连接请求(offer)的数量 
2. 每个offer中candidate的数量 
3. 每个连接的等待时间

在等待时间1s的条件下,测试另外两个参数的变化对流量的影响 
5 
作者最大的流量打到0.8Mbit/s,如果有上千个节点也能带来一定的压力。victim只需要访问attacker设置的网页就被利用了。

解决方法: 
限制candidate数量 
连接数过大时提醒用户

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值