作者:Tsahi Levent-Levi (原文链接)
翻译:刘通
原标题:Is WebRTC Safe?
相关文章:WebRTC安全性的研究
当然安全。
最近几年,我们看到了很多关于WebRTC的质疑。主要是说使用WebRTC不安全。甚至还有教程教如何从每个能想得到的浏览器中禁用WebRTC。这让我想到了之前也有对在浏览器中运行JavaScript代码的质疑,那个时候也有人教如何禁用JavaScript、
为什么WebRTC会被认为是危险的呢?
WebRTC是内嵌于浏览器的实时通信技术。它可以获取你摄像头和麦克风的权限并且与其他人共享你的屏幕内容。同样,它也使浏览器在终端用户的设备上可以获得更多的资源。
这导致了两大风险:
1. 你的数据可能被不法分子窃取
2. 通过获取设备更多的信息,你的隐私有可能被泄露
1. 你的数据可能被不法分子窃取
下面是一些听起来挺吓人的想法:
#如果我能获取你麦克风的权限,我就能把你整个对话给录下来
#如果我能接入你的摄像头,我就能偷窥你,把你私密的时刻给录下来
#如果我能够远程连入你的屏幕,我就能对你在做什么进行录屏。甚至有可能远程操控你的鼠标和键盘
虽然WebRTC能给我们带来众多好处,但是谁又想被自己的设备监视呢?
现在,我们需要了解两件事:
1. 浏览器并不是唯一可以获取你数据和动作权限的东西
2. 存在措施来限制管理上述行为
2. 通过获取设备更多的信息,你的隐私有可能被泄露
我想有可能是因为担心会在互联网上跟踪你的痕迹才会担心这点。这恰好也是广告网络无时无刻不在做的事情。
WebRTC给了设备很多权限,使得设备的指纹变得精确的多。
主要的顾虑是暴露了网页服务器的私有IP地址。有很多人和组织都将这种IP泄露视为很严重的威胁。
WebRTC有很多使用指纹更细致的其他方法,比如枚举设备列表作为你设备唯一的标识。除非你可以根本不使用WebRTC就检查指纹的准确性,那么这就是你需要担心的事情。
在这方面,苹果与他们Safari中全新的WebRTC支持是维护隐私的领军人物。你可以通过阅读这篇文章来详细理解,注意他的标签有“ICE候选限制”和“指纹”。
为什么说WebRTC是最安全的一个选择?
如果你是一个开发人员并且在找可以在你应用中使用的实时通信技术,或者你是一个IT从事者正在决定在你的公司内部署什么沟通工具,那么WebRTC应该是你的第一选择。
下面是原因。
1. 浏览器提供商很严肃地对待安全问题
现在有4个主要的浏览器提供商:苹果,Google,微软,和Mozilla。
所有这些提供商都很在乎安全性问题并且始终在修缮他们的浏览器。在某些情况下,他们甚至会在6-8周就发布更新版本,并且会在版本更替之间不断有安全补丁推出。
即使确定了存在安全威胁,那么也会得到及时的修缮。
尽管很多其他提供商也说他们正在快速修复安全性威胁—但是他们能够快速的进行配置吗?他们这么做有意义吗?
因为浏览器会经常的进行更新,并且要面对上百万的用户,所以将安全更新推出部署到用户手上通常会更快。Philipp Hancke去年去年解释了一些浏览器更新数据。我向他要了最近的图表,下面是Chrome两个大版本周期的数据:
每个Chrome版本从不到30%一跃升至80%只有几天的时间。注意最多只有两个版本达到95%以上的占比。因为Google经常这么做,所以修补和部署安全性问题比较简单。
2. 你不需要重新配置客户端软件
一个事实是大部分用户都不会关闭浏览器的自动更新功能。即使你对安全性完全不关心,你也不应该关掉任何东西的自动更新功能。
人工进行更新会带来很多麻烦:
[a] 什么时候进行更新?
你怎么知道什么时候该更新了?你在你公司的软件威胁警报名单上吗?当威胁公布并且补丁已经可用时你会马上进行更新吗?
当我们认为决定这些事情的时候,我们很有可能会错过警报,或者无法更新,或者决定过两天再说。
如果你的浏览器可以替你进行这些工作,为什么不用呢?
[b] 如果更新失败了又如何?
你遇到过软件更新失败的时候吗?
那么对于一个有着100多名员工的公司来说呢?
如果一个软件的更新失败率是1%,就以为着每次你更新某些东西—有人就会抱怨无法进行更新,让你只能退一步进行人工处理。
有非常多的原因都可能造成更新失败,最常见的原因是我们用的是不同的固件,软件,以及设备驱动器。我之前遇到过太多次这种情况了。
任何不是使用WebRTC而且是通过软件安装部署的人都会给你找麻烦。如果只是在雇员之间,可能还好说。但是经常也会发生在终端用户上—这是你所不想惹的。
浏览器更新失败会小概率发生,所以最好还是使用自动更新并且使用WebRTC而不是运行你自己的解决方案。
[c] 极端例子
你无法控制你的雇员以及他们如何进行更新。
有人在家工作。有人出国。有人使用的是自带设备,而且在自己家里的电脑上不会严格遵守企业的政策。
如果你不想这么头疼,那么还是—使用WebRTC会给你在更新安全补丁的时候带来很多的便捷。
为什么?
这么看来,当你依赖浏览器及浏览器更新时,WebRTC引擎会永远保持安全状态。
你对后端有着控制。后端需要经常打安全补丁。只要浏览器可以自动进行更新,那么你就可以不必要在此方面如此费神了。
使用自己的软件或者老旧的VoIP提供商的软件,你既需要给后端打补丁也需要给客户端软件打补丁。这件事情相比自动更新而言更难做和保持—而且更容易忘记。
3. WebRTC具有内置的安全措施
这可能是WebRTC为什么安全的首要原因。
你可能经常会听到的抱怨是为什么WebRTC总是被加密。不知道为什么,开发人员觉得明文发送媒体是一件好事情。尽管这么做可能有些原因,但是绝大部分原因都与WebRTC没有关系。
WebRTC具备内置的安全措施。这意味着:
1. 不可能明文发送媒体。所有东西都会被加密。在其他VoIP解决方案中,你可以配置是加密还是不加密(如果有加密功能的话)。
2. 不可能在不是HTTPS的网站上使用WebRTC。这意味着WebRTC强制开发者使用安全连接进行信令。
3. 用户会被问到是否给他们的媒体输入授予权限。每个浏览器之间做这事都有少许差别,而且这种模式也会发生改变,但是为了在用户的隐私和服务的使用性之间找到平衡,这是必须的。
是的,这些并不够。WebRTC是用来搭建应用的砖。服务很大一部分的安全性依赖于开发应用的开发者—但是至少他们可以从使用WebRTC开始。
广告与WebRTC
这个角度不经常会与WebRTC一并讨论。WebRTC在广告页中也有使用。
坏事
我看到过的两大场景:
1. 指纹。你有更好的理由来知道浏览器背后的用户是谁。
2. 提供广告本身。理论上说,你可能会通过WebRTC来提供广告,而这可能会绕开广告屏蔽软件。
好事
在今天提供广告的时候,为这些广告付钱的公司想要获得他们的投资回报率。换句话说,也有想让扔在广告里的钱打水漂的人。所以他们使用机器人来点击广告。
这与“我不是机器人”的验证理念很相似。WebRTC给了人们关于用户和他们行为的另一级别的理解—并且让我们可以知道他在浏览器中是个人还是个机器人。当然我们也可以在广告服务以外的领域应用这项技术。
然后呢?
有两个主要过程来确保安全:
1. 隐晦的安全性—指着人们不知道安全协议。如果你是一个不出名的人,那么没有人会在意你的信息。但是如果你变成了个名人的话,那么信息安全就有问题了。
2. Kerchoff原则—即使我们知道系统的各种细节,系统也需要确保安全。当很多人都在分析检查系统的时候是最好的,会使这个系统会越来越好越来越安全。
WebRTC属于第二种。第一种安全过程通常被认为根本不会提供任何安全。
有那么多的资源都投入给了WebRTC,安全性问题一直被照顾到不会被拉下。
WebRTC对于开发者来说是一个安全选项。IT和网络安全从事者不应该害羞以至于不去确保你选择的服务提供商在安全实施问题上没有做的很好。